Robotsystem of the Robot Group Leipzig: raysensor.h Source File

- Main Page
- Namespaces
- Classes
- Files
- Directories
- Examples

- Search for |

- File List
- File Members

# raysensor.h

Go to the documentation of this file.

    00001 /***************************************************************************
    00002  *   Copyright (C) 2005 by Robot Group Leipzig                             *
    00003  *    martius@informatik.uni-leipzig.de                                    *
    00004  *    fhesse@informatik.uni-leipzig.de                                     *
    00005  *    der@informatik.uni-leipzig.de                                        *
    00006  *                                                                         *
    00007  *   This program is free software; you can redistribute it and/or modify  *
    00008  *   it under the terms of the GNU General Public License as published by  *
    00009  *   the Free Software Foundation; either version 2 of the License, or     *
    00010  *   (at your option) any later version.                                   *
    00011  *                                                                         *
    00012  *   This program is distributed in the hope that it will be useful,       *
    00013  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
    00014  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
    00015  *   GNU General Public License for more details.                          *
    00016  *                                                                         *
    00017  *   You should have received a copy of the GNU General Public License     *
    00018  *   along with this program; if not, write to the                         *
    00019  *   Free Software Foundation, Inc.,                                       *
    00020  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
    00021  *                                                                         *
    00022  *   $Log: raysensor.h,v $
    00023  *   Revision 1.4  2006/07/14 12:23:43  martius
    00024  *   selforg becomes HEAD
    00025  *
    00026  *   Revision 1.3.4.3  2006/01/31 15:46:16  martius
    00027  *   virtual destructor
    00028  *
    00029  *   Revision 1.3.4.2  2005/12/13 18:11:53  martius
    00030  *   sensors ported, but not yet finished
    00031  *
    00032  *   Revision 1.3.4.1  2005/11/14 17:37:21  martius
    00033  *   moved to selforg
    00034  *
    00035  *   Revision 1.3  2005/09/27 13:59:26  martius
    00036  *   ir sensors are working now
    00037  *
    00038  *   Revision 1.2  2005/09/27 11:03:34  fhesse
    00039  *   sensorbank added
    00040  *
    00041  *   Revision 1.1  2005/09/22 12:56:47  martius
    00042  *   ray based sensors
    00043  *
    00044  *                                                                         *
    00045  ***************************************************************************/
    00046 #ifndef __RAYSENSOR_H
    00047 #define __RAYSENSOR_H
    00048
    00049 #include <ode/common.h>
    00050 #include "osgforwarddecl.h"
    00051 #include "odehandle.h"
    00052 #include "osghandle.h"
    00053
    00054
    00055 namespace lpzrobots {
    00056   class Primitive;
    00057
    00058 /** Abstract class for Ray-based sensors.
    00059     This are sensors which are based on distance measurements using the ODE geom class Ray.
    00060     The sensor value is obtained by collisions.
    00061     However of no collision is detected the sensor needs to ajust its output as well.
    00062     Therefore a reset function is provided.
    00063  */
    00064 class RaySensor {
    00065 public:
    00066   enum rayDrawMode { drawNothing, drawRay, drawSensor, drawAll};
    00067
    00068   RaySensor() {}
    00069   virtual ~RaySensor(){}
    00070
    00071   /** providing essential information
    00072    */
    00073   virtual void init(const OdeHandle& odeHandle,
    00074                     const OsgHandle& osgHandle, Primitive* body,
    00075                     const osg::Matrix pose, double range,
    00076                     rayDrawMode drawMode = drawSensor) = 0;
    00077
    00078   /** used for reseting the sensor value to a value of maximal distance.
    00079    */
    00080   virtual void reset() = 0;
    00081
    00082   /** performs sense action by checking collision with the given object
    00083       @return true for collision handled (sensed) and false for no interaction
    00084    */
    00085   virtual bool sense(dGeomID object) = 0;
    00086
    00087   /** returns the sensor value (usually in the range [-1,1] )
    00088    */
    00089   virtual double get() = 0;
    00090
    00091   /** updates the position of the osg nodes
    00092    */
    00093   virtual void update() = 0;
    00094
    00095   /** returns the geomID of the ray geom (used for optimisation)
    00096    */
    00097   virtual dGeomID getGeomID() =0;
    00098
    00099 };
    00100
    00101 }
    00102
    00103 #endif