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
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #ifndef OMPL_BASE_SPACES_SE2_STATE_SPACE_
00038 #define OMPL_BASE_SPACES_SE2_STATE_SPACE_
00039
00040 #include "ompl/base/StateSpace.h"
00041 #include "ompl/base/spaces/RealVectorStateSpace.h"
00042 #include "ompl/base/spaces/SO2StateSpace.h"
00043
00044 namespace ompl
00045 {
00046 namespace base
00047 {
00048
00050 class SE2StateSpace : public CompoundStateSpace
00051 {
00052 public:
00053
00055 class StateType : public CompoundStateSpace::StateType
00056 {
00057 public:
00058 StateType(void) : CompoundStateSpace::StateType()
00059 {
00060 }
00061
00063 double getX(void) const
00064 {
00065 return as<RealVectorStateSpace::StateType>(0)->values[0];
00066 }
00067
00069 double getY(void) const
00070 {
00071 return as<RealVectorStateSpace::StateType>(0)->values[1];
00072 }
00073
00077 double getYaw(void) const
00078 {
00079 return as<SO2StateSpace::StateType>(1)->value;
00080 }
00081
00083 void setX(double x)
00084 {
00085 as<RealVectorStateSpace::StateType>(0)->values[0] = x;
00086 }
00087
00089 void setY(double y)
00090 {
00091 as<RealVectorStateSpace::StateType>(0)->values[1] = y;
00092 }
00093
00095 void setXY(double x, double y)
00096 {
00097 setX(x);
00098 setY(y);
00099 }
00100
00104 void setYaw(double yaw)
00105 {
00106 as<SO2StateSpace::StateType>(1)->value = yaw;
00107 }
00108
00109 };
00110
00111
00112 SE2StateSpace(void) : CompoundStateSpace()
00113 {
00114 setName("SE2" + getName());
00115 type_ = STATE_SPACE_SE2;
00116 addSubSpace(StateSpacePtr(new RealVectorStateSpace(2)), 1.0);
00117 addSubSpace(StateSpacePtr(new SO2StateSpace()), 0.5);
00118 lock();
00119 }
00120
00121 virtual ~SE2StateSpace(void)
00122 {
00123 }
00124
00126 void setBounds(const RealVectorBounds &bounds)
00127 {
00128 as<RealVectorStateSpace>(0)->setBounds(bounds);
00129 }
00130
00132 const RealVectorBounds& getBounds(void) const
00133 {
00134 return as<RealVectorStateSpace>(0)->getBounds();
00135 }
00136
00137 virtual State* allocState(void) const;
00138 virtual void freeState(State *state) const;
00139
00140 virtual void registerProjections(void);
00141
00142 };
00143 }
00144 }
00145
00146 #endif