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 CARCHASSIS_HH
00028 #define CARCHASSIS_HH
00029
00030 #include "Model.hh"
00031
00032
00033 class Body;
00034 class HingeJoint;
00035 class Hinge2Joint;
00036 class Geom;
00037 typedef struct gz_position gz_position_t;
00038
00039
00041 class CarChassis : public Model
00042 {
00044 public: CarChassis( World *world );
00045
00047 public: virtual ~CarChassis();
00048
00050 public: virtual int Load( WorldFile *file, WorldFileNode *node );
00051
00053 private: int OdeLoad( WorldFile *file, WorldFileNode *node );
00054
00056 public: virtual int Init( WorldFile *file, WorldFileNode *node );
00057
00059 public: virtual int Fini();
00060
00062 public: virtual void Update( double step );
00063
00064
00065 private: void PositionGetCmd();
00066
00067
00068 private: void PositionPutData();
00069
00070
00071 private: Body *chassis;
00072 private: Body *frontLeftWheel, *frontRightWheel;
00073 private: Body *rearLeftWheel, *rearRightWheel;
00074 private: HingeJoint *rearLeftJoint, *rearRightJoint;
00075 private: Hinge2Joint *frontLeftJoint, *frontRightJoint;
00076
00077
00078 private: double updateTime;
00079
00080
00081 private: gz_position_t *position;
00082
00083
00084 private: double cmdSpeed, cmdSteer;
00085
00086
00087 private: double steerMaxAngle;
00088
00089
00090 private: double steerKp, steerKd;
00091 };
00092
00093 #endif