KrisLibrary  1.0.0
DynamicChain.h
1 #ifndef ROBOTICS_DYNAMIC_CHAIN_H
2 #define ROBOTICS_DYNAMIC_CHAIN_H
3 
4 #include "KinematicChain.h"
5 #include <KrisLibrary/structs/array2d.h>
6 
8 {
9 public:
10  void GetWorldInertia(Real& inertiaWorld) const { inertiaWorld=inertia; }
11  void GetWorldCOM(Vector2& comWorld) const { T_World.mulPoint(com,comWorld); }
12 
13  //in local frame
14  Real mass;
15  Real inertia;
16  Vector2 com;
17 };
18 
19 class DynamicChain2D : public KinematicChain2DTemplate<DynamicLink2D>
20 {
21 public:
22  void Initialize(int numBodies);
23  void UpdateDynamics(); //this updates frames as well as jacobians and other temporary storage
24  //temp storage updates -- full Jacobian must be updated before using the computation methods
25  void Update_J();
26  void Update_dB_dq();
27 
28  bool GetJacobianDeriv(const Vector2& pi, int i, int j, int k, Real&ddtheta,Vector2& ddp) const;
29  Vector2 GetCenterOfMass() const;
30  Real GetKineticEnergy(int i) const;
31  Real GetKineticEnergy() const; void GetKineticEnergyMatrix(Matrix& B) const; //gets the derivative of the jacobian dpi/dqj wrt qk, i.e. ddpi/dqjdqk
32  //dBij/dqz
33  Real GetKineticEnergyDeriv(int i,int j,int z) const;
34  void GetKineticEnergyMatrixDeriv(int z,Matrix& dB) const;
35  //dB/dt
36  void GetKineticEnergyMatrixTimeDeriv(Matrix& dB) const;
37  void GetCoriolisForceMatrix(Matrix& C);
38  void GetCoriolisForces(Vector& Cdq);
39  //torque/force pair on body i (in world coordinates)
40  void GetForceVector(Real torque, const Vector2& force, int i, Vector& F) const;
41  void AddForceVector(Real torque, const Vector2& force, int i, Vector& F) const;
42  void GetGravityVector(const Vector2& g0, Vector& G) const;
43  Real GetGravityPotentialEnergy(const Vector2& g0);
44 
45  //B*ddq + C*dq = fext
46  void GetAcceleration(Vector& ddq, const Vector& fext);
47 
48  Vector dq;
49 
50  //temp storage
52  Array2D<Real> JO;
53  std::vector<Matrix> dB_dq;
54 };
55 
56 
57 #endif
Definition: DynamicChain.h:19
Definition: DynamicChain.h:7
Definition: KinematicChain.h:48
A 2D vector class.
Definition: math3d/primitives.h:41
Definition: KinematicChain.h:11