4#include <fhsim/simobject/SimObject.h>
9class EnvironmentProvider;
14typedef Eigen::Matrix<double, 6, 6> mat6;
15typedef Eigen::Matrix<double, 6, 1> vec6;
16typedef Eigen::Matrix<double, 3, 3> mat3;
17typedef Eigen::Matrix<double, 3, 1> vec3;
18typedef Eigen::Matrix<double, 13, 1> vec13;
19typedef Eigen::Matrix<double, 13, 13> mat13;
20typedef Eigen::Matrix<double, 3, 4> mat34;
21typedef Eigen::Matrix<double, 6, 4> mat64;
22typedef Eigen::Quaternion<double> quat;
33 virtual vec6 GetInternalForces(
const vec6& dX,
const vec3& r,
const quat& q, environment::EnvironmentProvider* environment,
double time,
const double* states) = 0;
42 virtual mat6 GetInertiaMatrix(
const vec3& r,
double time,
const double* states, environment::EnvironmentProvider* environment) = 0;
45 vec13 GetSecondDerivative(
const vec3& r,
const quat& q,
const vec3& v,
const vec3 w,
const vec6& externalForces, environment::EnvironmentProvider* environment,
double time,
const double* states);
55 mat13
GetSecondDerivativeJacobian(
const vec3& r,
const quat& q,
const vec3& v,
const vec3& w,
const vec6& externalForces, environment::EnvironmentProvider* environment,
double time,
const double* states);
60 void WriteStateJacobian(
const double* X,
int positionIndex,
int quaterIndex,
int velocityIndex,
int omegaIndex,
const vec6& externalForces, environment::EnvironmentProvider* environment,
double time,
double* J,
int nStates);
63 static vec6 GetCoriolisForce(
const vec6& dX,
const mat6& Inertia);
68#ifdef FH_VISUALIZATION
69 virtual void DrawBody(Ogre::SceneNode* renderNode, Ogre::SceneManager* sceneMgr) = 0;
73 static mat6 ReorientInertiaTranslateRotate(
const mat6& Inertia,
const vec6& orientation);
74 static mat3 MakeDyadic(
const vec3& vector);
75 static mat34 RotationDerivative(
const quat& q,
const vec3& x);
76 static mat34 ConjugateRotationDerivative(
const quat& q,
const vec3& x);
77 static mat3 GetRotation(
const vec3& angle);
78 static mat6 GetRotation6(
const vec3& angle);
82 vec6 GetBodyAcceleration(
const vec3& r,
const quat& q,
const vec6& dX,
const vec6& bodyExternalForces,
const mat6& Inertia, environment::EnvironmentProvider* environment,
double time,
const double* states);
83 static vec6 RotateToBody(
const quat& q,
const vec6& globalVector);
84 static mat6 GetCoriolisMatrix(
const vec6& dX);
Definition CRigidBody.h:25
static mat6 GetCoriolisForceDerivative(const vec6 &dX, const mat6 &Inertia)
d(GetCoriolisForce)/d(dX) at a fixed inertia matrix, bodylocal.
void WriteStateJacobian(const double *X, int positionIndex, int quaterIndex, int velocityIndex, int omegaIndex, const vec6 &externalForces, environment::EnvironmentProvider *environment, double time, double *J, int nStates)
mat13 GetSecondDerivativeJacobian(const vec3 &r, const quat &q, const vec3 &v, const vec3 &w, const vec6 &externalForces, environment::EnvironmentProvider *environment, double time, const double *states)
virtual mat64 GetGravityForceDerivative(const quat &q)=0