Klamp't  0.9.0
ODERobot.h
1 #ifndef ODE_INTERFACE_ROBOT_H
2 #define ODE_INTERFACE_ROBOT_H
3 
4 #include <Klampt/Modeling/Robot.h>
5 #include "ODEGeometry.h"
6 #include "ODESurface.h"
7 #include <ode/common.h>
8 #include <KrisLibrary/File.h>
9 
10 namespace Klampt {
11  using namespace Math;
12  using namespace std;
13 
30 class ODERobot
31 {
32  public:
33  static double defaultPadding;
34  static ODESurfaceProperties defaultSurface;
35 
36  ODERobot(RobotModel& robot);
37  ~ODERobot();
38  void Create(int index,dWorldID worldID,bool useBoundaryLayer=true);
39  void Clear();
40  void EnableSelfCollisions(bool enabled);
41  bool SelfCollisionsEnabled() const;
42  void SetConfig(const Config& q);
43  void GetConfig(Config& q) const;
44  void SetVelocities(const Config& dq);
45  void GetVelocities(Config& dq) const;
46  void AddTorques(const Vector& t);
47  Real GetJointAngle(int joint) const;
48  Real GetJointVelocity(int joint) const;
49  void AddJointTorque(int joint,Real t);
50  void SetJointDryFriction(int joint,Real coeff);
51  void SetJointFixedVelocity(int joint,Real vel,Real tmax);
52  Real GetLinkAngle(int link) const;
53  Real GetLinkVelocity(int link) const;
54  void AddLinkTorque(int link,Real t);
55  void SetLinkDryFriction(int link,Real coeff);
56  void SetLinkFixedVelocity(int link,Real vel,Real tmax);
57  Real GetDriverValue(int driver) const;
58  Real GetDriverVelocity(int driver) const;
59  void AddDriverTorques(const Vector& t);
60  void AddDriverTorque(int driver,Real t);
61  void SetDriverFixedVelocity(int driver,Real vel,Real tmax);
62 
63  void SetLinkTransform(int link,const RigidTransform& T);
64  void GetLinkTransform(int link,RigidTransform& T) const;
65  void SetLinkVelocity(int link,const Vector3& w,const Vector3& v);
66  void GetLinkVelocity(int link,Vector3& w,Vector3& v) const;
67  Real GetKineticEnergy() const;
68  Real GetKineticEnergy(int link) const;
69  bool ReadState(File& f);
70  bool WriteState(File& f) const;
71 
72  inline dSpaceID space() const { return spaceID; }
73  inline dBodyID body(int link) const { return bodyID[link]; }
74  inline dGeomID geom(int link) const { return geometry[link]->geom(); }
75  inline dJointID joint(int link) const { return jointID[link]; }
76  inline ODEGeometry* triMesh(int link) const { return geometry[link]; }
77  dBodyID baseBody(int link) const; //for attached links, returns the base body for the link
78  inline dJointFeedback feedback(int link) const { return jointFeedback[link]; }
79 
80  RobotModel& robot;
81 
82  private:
83  vector<RigidTransform> T_bodyToLink;
84  vector<dBodyID> bodyID;
85  vector<ODEGeometry*> geometry;
86  vector<dJointID> jointID;
87  vector<dJointFeedback> jointFeedback;
88  dJointGroupID jointGroupID;
89  dSpaceID spaceID;
90  vector<shared_ptr<RobotWithGeometry::CollisionGeometry> > tempGeometries;
91 };
92 
93 } //namespace Klampt
94 
95 #endif
A robot simulated in an ODE "world".
Definition: ODERobot.h:30
The main robot type used in RobotSim.
Definition: Robot.h:83
surface properties for any ODE rigid object, robot link, or fixed object.
Definition: ODESurface.h:10
Definition: ContactDistance.h:6
An ODE collision geometry.
Definition: ODEGeometry.h:19