SubSim.H
Go to the documentation of this file.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
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef SubSim_H_DEFINED
00039 #define SubSim_H_DEFINED
00040
00041 #include "Component/ModelComponent.H"
00042 #include "Component/ModelParam.H"
00043 #include "Image/Image.H"
00044 #include "Image/Pixels.H"
00045 #include "GUI/ViewPort.H"
00046 #include "GUI/XWinManaged.H"
00047 #include "Util/Types.H"
00048 #include <deque>
00049 #include <pthread.h>
00050 #include <stdarg.h>
00051 #include <ode/ode.h>
00052 #include <ode/collision.h>
00053
00054 class SubSim : public ModelComponent
00055 {
00056 public:
00057
00058 SubSim(OptionManager& mgr,
00059 const std::string& descrName = "SubSim",
00060 const std::string& tagName = "SubSim",
00061 bool showWorld=true);
00062 ~SubSim();
00063
00064
00065 void start2();
00066 void handleWinEvents(XEvent& event);
00067
00068 void simLoop();
00069 void startSim(void);
00070 void updateSensors(const dReal *pos, const dReal *R);
00071 Image<PixRGB<byte> > getFrame(int camera);
00072
00073 void getSensors(float &xPos, float &yPos, float &depth,
00074 float &roll, float &pitch, float &yaw);
00075
00076 void setTrusters(float panTruster, float tiltTruster, float forwardTruster, float upTruster);
00077
00078 dWorldID getWorld() { return world; }
00079 dJointGroupID getContactgroup() { return contactgroup; }
00080
00081
00082
00083
00084
00085 private:
00086
00087 void makeSub();
00088 void drawSub();
00089
00090
00091 void drawArena();
00092 void drawGate(const double *pos);
00093 void drawBuoy(const double *pos);
00094 void drawBin(const double ori, const double *pos);
00095 void drawPipeline(const double ori, const double *pos);
00096 void drawPinger(const double *pos);
00097
00098 void applyHydrodynamicForces(dReal viscosity);
00099
00100 dWorldID world;
00101 dSpaceID space;
00102 dGeomID ground;
00103 dJointGroupID contactgroup;
00104
00105 dBodyID itsSubBody;
00106 dGeomID itsSubGeom;
00107
00108 double itsWaterLevel;
00109 double itsSubLength;
00110 double itsSubRadius;
00111 double itsSubWeight;
00112
00113 ViewPort *vp;
00114
00115 double itsPanTruster;
00116 double itsTiltTruster;
00117 double itsForwardTruster;
00118 double itsUpTruster;
00119
00120
00121 double itsXPos;
00122 double itsYPos;
00123 double itsDepth;
00124 double itsRoll;
00125 double itsPitch;
00126 double itsYaw;
00127
00128 bool itsWorldView;
00129 bool itsShowWorld;
00130 XWinManaged *itsWorldDisp;
00131
00132 pthread_mutex_t itsDispLock;
00133 };
00134
00135 #endif
00136
00137
00138
00139
00140
00141