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_MODELCAR_H 00020 #define MSL_MODELCAR_H 00021 00022 #include <list> 00023 #include <string> 00024 00025 #include "model2d.h" 00026 #include "vector.h" 00027 #include "matrix.h" 00028 00029 00031 class ModelCar: public Model2DRigidCar { 00032 public: 00033 double Speed; 00034 00035 ModelCar(string path); 00036 virtual ~ModelCar() {}; 00037 virtual MSLVector StateToConfiguration(const MSLVector &x); 00038 virtual bool Satisfied(const MSLVector &state); 00039 }; 00040 00041 00043 class ModelCarSmooth: public Model2DRigidCarSmooth { 00044 public: 00045 ModelCarSmooth(string path); 00046 virtual ~ModelCarSmooth() {}; 00047 virtual MSLVector StateToConfiguration(const MSLVector &x); 00048 }; 00049 00050 00052 class ModelCarDyn: public Model2DRigidDyncar { 00053 public: 00054 ModelCarDyn(string path); 00055 virtual ~ModelCarDyn() {}; 00056 virtual MSLVector StateToConfiguration(const MSLVector &x); 00057 virtual double Metric(const MSLVector &x1, const MSLVector &x2); 00058 }; 00059 00061 class ModelCarDynNtire: public Model2DRigidDyncarNtire { 00062 public: 00063 ModelCarDynNtire(string path); 00064 virtual ~ModelCarDynNtire() {}; 00065 virtual MSLVector StateToConfiguration(const MSLVector &x); 00066 virtual double Metric(const MSLVector &x1, const MSLVector &x2); 00067 }; 00068 00069 00078 class ModelCarDynRollover: public ModelCarDynNtire{ 00079 public: 00080 double K, c, Ixx; 00081 double T; 00082 double H, H2; 00083 double Ms; 00084 double Wn; 00085 double Fai; 00086 double x; 00087 00088 bool IsRollOver; 00089 00090 ModelCarDynRollover(string path); 00091 virtual ~ModelCarDynRollover() {}; 00092 00093 int sgn(double x); 00094 00095 virtual MSLVector StateTransitionEquation(const MSLVector &x1, const MSLVector &u); 00096 00097 virtual MSLVector StateToConfiguration(const MSLVector &x); 00098 00099 virtual MSLVector Integrate(const MSLVector &x, const MSLVector &u, const double &h); 00100 00101 virtual double Metric(const MSLVector &x1, const MSLVector &x2); 00102 00103 bool RollOverFree(const MSLVector &x); 00104 00105 bool Satisfied(const MSLVector &x); 00106 }; 00107 00108 00111 class ModelCarDynSmoothRollover: public ModelCarDynRollover { 00112 public: 00113 00114 ModelCarDynSmoothRollover(string path); 00115 virtual ~ModelCarDynSmoothRollover() {}; 00116 00117 virtual MSLVector StateTransitionEquation(const MSLVector &x1, const MSLVector &u); 00118 00119 virtual MSLVector StateToConfiguration(const MSLVector &x); 00120 00121 virtual double Metric(const MSLVector &x1, const MSLVector &x2); 00122 00123 virtual MSLVector LinearInterpolate(const MSLVector &x1, 00124 const MSLVector &x2, 00125 const double &a); 00126 00127 }; 00128 00129 #endif 00130 00131 00132 00133 00134 00135 00136 00137