00001 //---------------------------------------------------------------------- 00002 // The Motion Strategy Library (MSL) 00003 //---------------------------------------------------------------------- 00004 // 00005 // Copyright (c) 1998-2000 Iowa State University and Steve 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 // Iowa State University 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 <LEDA/file.h> 00023 #include <LEDA/list.h> 00024 #include <LEDA/matrix.h> 00025 #include <LEDA/point.h> 00026 #include <LEDA/polygon.h> 00027 #include <LEDA/random.h> 00028 #include <LEDA/stream.h> 00029 #include <LEDA/string.h> 00030 #include <LEDA/vector.h> 00031 00032 #include "model.h" 00033 00034 #include <LEDA/REDEFINE_NAMES.h> 00035 00037 class Model2D: public Model { 00038 public: 00039 Model2D(string path); 00040 virtual ~Model2D() {}; 00041 virtual vector StateToConfiguration(const vector &x); 00042 }; 00043 00044 00046 class Model2DPoint: public Model2D { 00047 public: 00048 Model2DPoint(string path); 00049 virtual ~Model2DPoint() {}; 00050 virtual vector Integrate(const vector &x, const vector &u, const double &h); 00051 virtual vector StateTransitionEquation(const vector &x, const vector &u); 00052 virtual double Metric(const vector &x1, const vector &x2); 00053 }; 00054 00055 00057 class Model2DPointCar: public Model2DPoint { 00058 public: 00059 double MaxSteeringAngle; 00060 double CarLength; 00061 Model2DPointCar(string path); 00062 virtual ~Model2DPointCar() {}; 00063 virtual vector Integrate(const vector &x, const vector &u, const double &h); 00064 virtual vector StateTransitionEquation(const vector &x, const vector &u); 00065 virtual double Metric(const vector &x1, const vector &x2); 00066 }; 00067 00068 00070 class Model2DRigid: public Model2D { 00071 public: 00072 Model2DRigid(string path); 00073 virtual ~Model2DRigid() {}; 00074 virtual vector Integrate(const vector &x, const vector &u, const double &h); 00075 virtual vector StateTransitionEquation(const vector &x, const vector &u); 00076 vector LinearInterpolate(const vector &x1, const vector &x2, 00077 const double &a); 00078 virtual double Metric(const vector &x1, const vector &x2); 00079 virtual vector StateToConfiguration(const vector &x); 00080 }; 00081 00082 00084 class Model2DRigidCar: public Model2DRigid { 00085 public: 00086 double MaxSteeringAngle; 00087 double CarLength; 00088 Model2DRigidCar(string path); 00089 virtual ~Model2DRigidCar() {}; 00090 virtual vector StateTransitionEquation(const vector &x, const vector &u); 00091 }; 00092 00093 00095 class Model2DRigidCarForward: public Model2DRigidCar { 00096 public: 00097 Model2DRigidCarForward(string path); 00098 virtual ~Model2DRigidCarForward() {}; 00099 }; 00100 00101 00104 class Model2DRigidCarSmooth: public Model2DRigidCar { 00105 public: 00106 double SteeringSpeed; 00107 Model2DRigidCarSmooth(string path); 00108 virtual ~Model2DRigidCarSmooth() {}; 00109 virtual vector StateTransitionEquation(const vector &x, const vector &u); 00110 vector Integrate(const vector &x, const vector &u, const double &h); 00111 virtual double Metric(const vector &x1, const vector &x2); 00112 virtual vector StateToConfiguration(const vector &x); 00113 virtual bool Satisfied(const vector &x); 00114 }; 00115 00119 class Model2DRigidCarSmoothTrailer: public Model2DRigidCarSmooth { 00120 public: 00121 double HitchLength; 00122 double HitchMaxAngle; 00123 Model2DRigidCarSmoothTrailer(string path); 00124 virtual ~Model2DRigidCarSmoothTrailer() {}; 00125 virtual vector StateTransitionEquation(const vector &x, const vector &u); 00126 virtual double Metric(const vector &x1, const vector &x2); 00127 virtual vector StateToConfiguration(const vector &x); 00128 virtual bool Satisfied(const vector &x); 00129 }; 00130 00131 00133 class Model2DRigidCarSmooth2Trailers: public Model2DRigidCarSmoothTrailer { 00134 public: 00135 double Hitch2Length; 00136 double Hitch2MaxAngle; 00137 Model2DRigidCarSmooth2Trailers(string path); 00138 virtual ~Model2DRigidCarSmooth2Trailers() {}; 00139 virtual vector StateTransitionEquation(const vector &x, const vector &u); 00140 virtual double Metric(const vector &x1, const vector &x2); 00141 virtual vector StateToConfiguration(const vector &x); 00142 virtual bool Satisfied(const vector &x); 00143 }; 00144 00145 00147 class Model2DRigidCarSmooth3Trailers: public Model2DRigidCarSmooth2Trailers { 00148 public: 00149 double Hitch3Length; 00150 double Hitch3MaxAngle; 00151 Model2DRigidCarSmooth3Trailers(string path); 00152 virtual ~Model2DRigidCarSmooth3Trailers() {}; 00153 virtual vector StateTransitionEquation(const vector &x, const vector &u); 00154 virtual double Metric(const vector &x1, const vector &x2); 00155 virtual vector StateToConfiguration(const vector &x); 00156 virtual bool Satisfied(const vector &x); 00157 }; 00158 00159 00160 00164 class Model2DRigidDyncar: public Model2DRigid { 00165 public: 00167 double Mass; 00168 00170 double CAF; 00171 00173 double CAR; 00174 00176 double Adist; 00177 00179 double Bdist; 00180 00182 double Izz; 00183 00185 double WorldScale; 00186 00188 double MaxSteeringAngle; 00189 00191 double Speed; 00192 00193 Model2DRigidDyncar(string path); 00194 virtual ~Model2DRigidDyncar() {}; 00195 vector Integrate(const vector &x, const vector &u, const double &h); 00196 virtual point StateToLedaPoint(const vector &x); 00197 virtual vector StateToConfiguration(const vector &x); 00198 virtual vector StateTransitionEquation(const vector &x, const vector &u); 00199 virtual double Metric(const vector &x1, const vector &x2); 00200 virtual vector LinearInterpolate(const vector &x1, const vector &x2, 00201 const double &a); 00202 }; 00203 00204 00207 class Model2DRigidDyncarNtire: public Model2DRigidDyncar { 00208 public: 00209 00211 double Mu; 00212 00214 double Nf; 00215 00217 double Nr; 00218 00219 Model2DRigidDyncarNtire(string path); 00220 virtual ~Model2DRigidDyncarNtire() {}; 00221 virtual vector StateTransitionEquation(const vector &x, const vector &u); 00222 }; 00223 00224 00228 class Model2DRigidLander: public Model2DRigid { 00229 public: 00231 double Mass; 00232 00234 double G; 00235 00237 double Fs; 00238 00240 double Fu; 00241 00242 Model2DRigidLander(string path); 00243 virtual ~Model2DRigidLander() {}; 00244 vector Integrate(const vector &x, const vector &u, const double &h); 00245 virtual vector StateToConfiguration(const vector &x); 00246 virtual vector StateTransitionEquation(const vector &x, const vector &u); 00247 virtual double Metric(const vector &x1, const vector &x2); 00248 }; 00249 00250 00251 00253 class Model2DRigidMulti: public Model2DRigid { 00254 public: 00256 int NumBodies; 00257 00258 Model2DRigidMulti(string path); 00259 virtual ~Model2DRigidMulti() {} 00260 virtual double Metric(const vector &x1, const vector &x2); 00261 virtual vector StateToConfiguration(const vector &x); 00262 virtual vector LinearInterpolate(const vector &x1, const vector &x2, 00263 const double &a); // Depends on topology 00264 }; 00265 00266 00268 class Model2DRigidChain: public Model2DRigid { 00269 public: 00271 int NumBodies; 00272 00274 vector A; 00275 00277 double StopAngle; 00278 00279 Model2DRigidChain(string path); 00280 virtual ~Model2DRigidChain() {}; 00281 virtual vector StateToConfiguration(const vector &x); 00282 virtual vector StateTransitionEquation(const vector &x, const vector &u); 00283 virtual vector LinearInterpolate(const vector &x1, const vector &x2, 00284 const double &a); 00285 virtual double Metric(const vector &x1, const vector &x2); 00286 virtual bool Satisfied(const vector &x); 00287 }; 00288 00289 00290 #include <LEDA/UNDEFINE_NAMES.h> 00291 00292 #endif