00001 //---------------------------------------------------------------------- 00002 // The Motion Strategy Library (MSL) 00003 //---------------------------------------------------------------------- 00004 // 00005 // Copyright (c) University of Illinois and Steven M. LaValle. 00006 // All Rights Reserved. 00007 // 00008 // Permission to use, copy, and distribute this software and its 00009 // documentation is hereby granted free of charge, provided that 00010 // (1) it is not a component of a commercial product, and 00011 // (2) this notice appears in all copies of the software and 00012 // related documentation. 00013 // 00014 // The University of Illinois and the author make no representations 00015 // about the suitability or fitness of this software for any purpose. 00016 // It is provided "as is" without express or implied warranty. 00017 //---------------------------------------------------------------------- 00018 00019 #ifndef MSL_MODEL2D_H 00020 #define MSL_MODEL2D_H 00021 00022 #include "model.h" 00023 00025 class Model2D: public Model { 00026 public: 00027 Model2D(string path); 00028 virtual ~Model2D() {}; 00029 virtual MSLVector StateToConfiguration(const MSLVector &x); 00030 }; 00031 00032 00034 class Model2DPoint: public Model2D { 00035 public: 00036 Model2DPoint(string path); 00037 virtual ~Model2DPoint() {}; 00038 virtual MSLVector Integrate(const MSLVector &x, const MSLVector &u, const double &h); 00039 virtual MSLVector StateTransitionEquation(const MSLVector &x, const MSLVector &u); 00040 virtual double Metric(const MSLVector &x1, const MSLVector &x2); 00041 }; 00042 00043 00045 class Model2DPointCar: public Model2DPoint { 00046 public: 00047 double MaxSteeringAngle; 00048 double CarLength; 00049 Model2DPointCar(string path); 00050 virtual ~Model2DPointCar() {}; 00051 virtual MSLVector Integrate(const MSLVector &x, const MSLVector &u, const double &h); 00052 virtual MSLVector StateTransitionEquation(const MSLVector &x, const MSLVector &u); 00053 virtual double Metric(const MSLVector &x1, const MSLVector &x2); 00054 }; 00055 00056 00058 class Model2DRigid: public Model2D { 00059 public: 00060 Model2DRigid(string path); 00061 virtual ~Model2DRigid() {}; 00062 virtual MSLVector Integrate(const MSLVector &x, const MSLVector &u, const double &h); 00063 virtual MSLVector StateTransitionEquation(const MSLVector &x, const MSLVector &u); 00064 MSLVector LinearInterpolate(const MSLVector &x1, const MSLVector &x2, 00065 const double &a); 00066 virtual double Metric(const MSLVector &x1, const MSLVector &x2); 00067 virtual MSLVector StateToConfiguration(const MSLVector &x); 00068 }; 00069 00070 00072 class Model2DRigidCar: public Model2DRigid { 00073 public: 00074 double MaxSteeringAngle; 00075 double CarLength; 00076 Model2DRigidCar(string path); 00077 virtual ~Model2DRigidCar() {}; 00078 virtual MSLVector StateTransitionEquation(const MSLVector &x, const MSLVector &u); 00079 }; 00080 00081 00083 class Model2DRigidCarForward: public Model2DRigidCar { 00084 public: 00085 Model2DRigidCarForward(string path); 00086 virtual ~Model2DRigidCarForward() {}; 00087 }; 00088 00089 00092 class Model2DRigidCarSmooth: public Model2DRigidCar { 00093 public: 00094 double SteeringSpeed; 00095 Model2DRigidCarSmooth(string path); 00096 virtual ~Model2DRigidCarSmooth() {}; 00097 virtual MSLVector StateTransitionEquation(const MSLVector &x, const MSLVector &u); 00098 MSLVector Integrate(const MSLVector &x, const MSLVector &u, const double &h); 00099 virtual double Metric(const MSLVector &x1, const MSLVector &x2); 00100 virtual MSLVector StateToConfiguration(const MSLVector &x); 00101 virtual bool Satisfied(const MSLVector &x); 00102 }; 00103 00107 class Model2DRigidCarSmoothTrailer: public Model2DRigidCarSmooth { 00108 public: 00109 double HitchLength; 00110 double HitchMaxAngle; 00111 Model2DRigidCarSmoothTrailer(string path); 00112 virtual ~Model2DRigidCarSmoothTrailer() {}; 00113 virtual MSLVector StateTransitionEquation(const MSLVector &x, const MSLVector &u); 00114 virtual double Metric(const MSLVector &x1, const MSLVector &x2); 00115 virtual MSLVector StateToConfiguration(const MSLVector &x); 00116 virtual bool Satisfied(const MSLVector &x); 00117 }; 00118 00119 00121 class Model2DRigidCarSmooth2Trailers: public Model2DRigidCarSmoothTrailer { 00122 public: 00123 double Hitch2Length; 00124 double Hitch2MaxAngle; 00125 Model2DRigidCarSmooth2Trailers(string path); 00126 virtual ~Model2DRigidCarSmooth2Trailers() {}; 00127 virtual MSLVector StateTransitionEquation(const MSLVector &x, const MSLVector &u); 00128 virtual double Metric(const MSLVector &x1, const MSLVector &x2); 00129 virtual MSLVector StateToConfiguration(const MSLVector &x); 00130 virtual bool Satisfied(const MSLVector &x); 00131 }; 00132 00133 00135 class Model2DRigidCarSmooth3Trailers: public Model2DRigidCarSmooth2Trailers { 00136 public: 00137 double Hitch3Length; 00138 double Hitch3MaxAngle; 00139 Model2DRigidCarSmooth3Trailers(string path); 00140 virtual ~Model2DRigidCarSmooth3Trailers() {}; 00141 virtual MSLVector StateTransitionEquation(const MSLVector &x, const MSLVector &u); 00142 virtual double Metric(const MSLVector &x1, const MSLVector &x2); 00143 virtual MSLVector StateToConfiguration(const MSLVector &x); 00144 virtual bool Satisfied(const MSLVector &x); 00145 }; 00146 00147 00148 00152 class Model2DRigidDyncar: public Model2DRigid { 00153 public: 00155 double Mass; 00156 00158 double CAF; 00159 00161 double CAR; 00162 00164 double Adist; 00165 00167 double Bdist; 00168 00170 double Izz; 00171 00173 double WorldScale; 00174 00176 double MaxSteeringAngle; 00177 00179 double Speed; 00180 00181 Model2DRigidDyncar(string path); 00182 virtual ~Model2DRigidDyncar() {}; 00183 MSLVector Integrate(const MSLVector &x, const MSLVector &u, const double &h); 00184 virtual MSLVector StateToConfiguration(const MSLVector &x); 00185 virtual MSLVector StateTransitionEquation(const MSLVector &x, const MSLVector &u); 00186 virtual double Metric(const MSLVector &x1, const MSLVector &x2); 00187 virtual MSLVector LinearInterpolate(const MSLVector &x1, const MSLVector &x2, 00188 const double &a); 00189 }; 00190 00191 00194 class Model2DRigidDyncarNtire: public Model2DRigidDyncar { 00195 public: 00196 00198 double Mu; 00199 00201 double Nf; 00202 00204 double Nr; 00205 00206 Model2DRigidDyncarNtire(string path); 00207 virtual ~Model2DRigidDyncarNtire() {}; 00208 virtual MSLVector StateTransitionEquation(const MSLVector &x, const MSLVector &u); 00209 }; 00210 00211 00215 class Model2DRigidLander: public Model2DRigid { 00216 public: 00218 double Mass; 00219 00221 double G; 00222 00224 double Fs; 00225 00227 double Fu; 00228 00229 Model2DRigidLander(string path); 00230 virtual ~Model2DRigidLander() {}; 00231 MSLVector Integrate(const MSLVector &x, const MSLVector &u, const double &h); 00232 virtual MSLVector StateToConfiguration(const MSLVector &x); 00233 virtual MSLVector StateTransitionEquation(const MSLVector &x, const MSLVector &u); 00234 virtual double Metric(const MSLVector &x1, const MSLVector &x2); 00235 }; 00236 00237 00238 00240 class Model2DRigidMulti: public Model2DRigid { 00241 public: 00243 int NumBodies; 00244 00245 Model2DRigidMulti(string path); 00246 virtual ~Model2DRigidMulti() {} 00247 virtual double Metric(const MSLVector &x1, const MSLVector &x2); 00248 virtual MSLVector StateToConfiguration(const MSLVector &x); 00249 virtual MSLVector LinearInterpolate(const MSLVector &x1, const MSLVector &x2, 00250 const double &a); // Depends on topology 00251 }; 00252 00253 00255 class Model2DRigidChain: public Model2DRigid { 00256 public: 00258 int NumBodies; 00259 00261 MSLVector A; 00262 00264 double StopAngle; 00265 00266 Model2DRigidChain(string path); 00267 virtual ~Model2DRigidChain() {}; 00268 virtual MSLVector StateToConfiguration(const MSLVector &x); 00269 virtual MSLVector StateTransitionEquation(const MSLVector &x, const MSLVector &u); 00270 virtual MSLVector LinearInterpolate(const MSLVector &x1, const MSLVector &x2, 00271 const double &a); 00272 virtual double Metric(const MSLVector &x1, const MSLVector &x2); 00273 virtual bool Satisfied(const MSLVector &x); 00274 }; 00275 00276 00277 #endif 00278 00279