RaySensor.hh
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef RAYSENSOR_HH
00028 #define RAYSENSOR_HH
00029
00030 #include <vector>
00031
00032 #include "Sensor.hh"
00033 #include "Body.hh"
00034
00035 namespace gazebo
00036 {
00037
00038 class XMLConfigNode;
00039 class RayGeom;
00045
00046
00052 class RaySensor: public Sensor
00053 {
00057 public: RaySensor(Body *body);
00058
00060 public: virtual ~RaySensor();
00061
00064 protected: virtual void LoadChild(XMLConfigNode *node);
00065
00067 protected: virtual void InitChild();
00068
00070 protected: virtual void UpdateChild(UpdateParams ¶ms);
00071
00073 protected: virtual void FiniChild();
00074
00077 public: double GetMinAngle() const;
00078
00081 public: double GetMaxAngle() const;
00082
00085 public: double GetMinRange() const;
00086
00089 public: double GetMaxRange() const;
00090
00093 public: int GetRayCount() const;
00094
00097 public: int GetRangeCount() const;
00098
00103 public: void SetRay(int index, const Vector3 &a, const Vector3 &b);
00104
00108 public: void GetRay(int index, Vector3 &pos, Vector3 &dir);
00109
00112 public: double GetRange(int index);
00113
00115 public: double GetRetro(int index);
00116
00118 public: int GetFiducial(int index);
00119
00121 private: static void UpdateCallback( void *data, dGeomID o1, dGeomID o2 );
00122
00124 private: dSpaceID superSpaceId;
00125 private: dSpaceID raySpaceId;
00126
00128 private: std::vector<RayGeom*> rays;
00129
00130 private: double minAngle, maxAngle;
00131 private: double minRange, maxRange;
00132 private: Vector3 origin;
00133
00134 private: Pose3d prevPose;
00135 private: int rayCount;
00136 private: int rangeCount;
00137
00139 private: bool displayRays;
00140
00141 };
00144 }
00145
00146 #endif