/* * ===================================================================================== * * Filename: body.cpp * * Description: Method definitions for body class. * * Version: 1.0 * Created: 03/17/2017 08:07:35 PM * Revision: none * Compiler: gcc * * Author: Martin Miller (MHM), miller7@illinois.edu * Organization: Aerospace Robotics and Controls Lab (ARC) * * ===================================================================================== */ #include #include "body.h" void Body::motionModel ( Matrix &X, const Vector3d &acc, const Vector3d &ang, const Quaternion &q, const double dt) { Vector3d bias(X.segment(6,3)); Vector3d gravity_world(0.,0.,-9.80655); Matrix A; Matrix b; A = Matrix::Zero(); b = Matrix::Zero(); Matrix Rbw(q.toRotationMatrix()); A.block(0,0,3,3) = Rbw; Matrix W; skewSymmetric(ang,W); A.block(3,0,3,3) = -W; b.segment(3,3) = acc-bias+Rbw.transpose()*gravity_world; X.segment(0,6) += (A*X.segment(3,3)+b)*dt; return ; } /* ----- end of method Body::motionModel ----- */ void Body::skewSymmetric ( const Vector3d &x, Matrix &y ) { y << 0.,-x[2], x[1], x[2],0.,-x[0],-x[1],x[0],0.; return ; } /* ----- end of method Body::skewSymmetric ----- */