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 WHEELCHAIR_HH
00028 #define WHEELCHAIR_HH
00029
00030 #include "Model.hh"
00031
00032
00033 class Body;
00034 class Hinge2Joint;
00035 class Geom;
00036 class SphereGeom;
00037 class GeomData;
00038
00039
00040 class WheelChair : public Model
00041 {
00042
00043 public: WheelChair( World *world );
00044 public: virtual ~WheelChair();
00045
00046
00047 public: virtual int Load( WorldFile *file, WorldFileNode *node );
00048
00049
00050 public: virtual int Init( WorldFile *file, WorldFileNode *node );
00051
00052
00053 public: virtual int Fini();
00054
00055
00056 public: virtual void Update( double step );
00057
00058
00059 private: void UpdateOdometry( double step );
00060
00061
00062 private: int OdeLoad( WorldFile *file, WorldFileNode *node );
00063
00064
00065 private: int OdeInit( WorldFile *file, WorldFileNode *node );
00066
00067
00068 private: int OdeFini();
00069
00070
00071 private: int IfaceInit();
00072
00073
00074 private: int IfaceFini();
00075
00076
00077 private: void IfaceGetCmd();
00078
00079
00080 private: void IfacePutData();
00081
00082
00083 private: double wheelSep,wheelDiam;
00084
00085
00086 private: Body *body;
00087 private: Geom *bodyGeoms[8];
00088 private: Body *tires[4];
00089 private: Hinge2Joint *joints[4];
00090
00091
00092 private: gz_position_t *iface;
00093
00094
00095 private: double wheelSpeed[2];
00096
00097
00098 private: double odomPose[3];
00099 };
00100
00101 #endif