KrisLibrary  1.0.0
Simulate.h
1 #ifndef ROBOTICS_SIMULATE_H
2 #define ROBOTICS_SIMULATE_H
3 
4 #include "RobotDynamics3D.h"
5 #include "DynamicChain3D.h"
6 #include "DynamicChain.h"
8 
9 //second order differential equation
10 class DiffEq2Function : public DiffEqFunction
11 {
12 public:
13  //y=(x,dx),dy=(dx,ddx)
14  virtual void Eval(Real t, const Vector& y, Vector& fy)
15  {
16  YToX1X2(y,x,dx);
17  GetDDx(t,x,dx,ddx);
18  X1X2ToY(dx,ddx,fy);
19  }
20 
21  virtual void GetDDx(Real t,const Vector& x,const Vector& dx,Vector& ddx) =0;
22 
23  Vector x,dx,ddx;
24 
25 
26  static void X1X2ToY(const Vector& x1, const Vector& x2, Vector& y);
27  static void YToX1X2(const Vector& y, Vector& x1, Vector& x2);
28 };
29 
32 template <class Robot,class NVector>
34 {
35 public:
36  SimFunction();
37  //can be overwritten to include other external forces
38  virtual void GetDDx(Real t,const Vector& q,const Vector& dq,Vector& ddq);
39  virtual void GetTorques(Real t,const Vector&q,const Vector&dq,Vector& fext);
40  void SimulateEuler(Real dt,int nSteps);
41  void SimulateRK4(Real dt,int nSteps);
42 
43  Robot* robot;
44  NVector gravity;
45  Real viscousFriction;
46  //temp
47  Vector fext;
48 };
49 
53 
54 
55 
56 #endif
Definition: Simulate.h:33
Definition: Simulate.h:10
Various methods for solving ordinary differential equations.