13#ifndef StATEOBSERVATIONRIGIDBODYKINEMATICS_H
14#define StATEOBSERVATIONRIGIDBODYKINEMATICS_H
18#include <state-observation/api.h>
318template<rotationType = rotationVector>
391 template<
typename t = Quaternion>
560 template<
typename t = Quaternion>
720 template<
typename t = Quaternion>
782#include <state-observation/tools/rigid-body-kinematics.hxx>
Definition rigid-body-kinematics.hpp:355
AngleAxis toAngleAxis() const
Orientation(bool initialize=true)
Orientation & operator=(const Vector3 &v)
Orientation(const Quaternion &q, const Matrix3 &m)
const Quaternion & matrixToQuaternion_() const
void setMatrix(bool b=true)
void reset()
resets the Orientation object.
Vector4 toVector4() const
bool isSet() const
checks that the orientation has been assigned a value.
Orientation & setRandom()
void setQuaternion(bool b=true)
Orientation(const Matrix3 &m)
CheckedQuaternion q_
Definition rigid-body-kinematics.hpp:496
CheckedMatrix3 & getMatrixRefUnsafe()
no checks are performed for these functions, use with caution
Orientation & setValue(const Quaternion &q, const Matrix3 &m)
Orientation(const AngleAxis &aa)
CheckedQuaternion & getQuaternionRefUnsafe()
get a reference to the quaternion representation of the orientation without calling the check functio...
const Matrix3 & toMatrix3() const
get a const reference on the matrix or the quaternion
Orientation inverse() const
Orientation & operator=(const Matrix3 &m)
Orientation(const Vector3 &v)
this is the rotation vector and NOT Euler angles
Vector3 operator*(const Vector3 &v) const
Rotate a vector.
void synchronize()
synchronizes the representations (quaternion and rotation matrix)
bool isMatrixSet() const
checks that the matrix representation of the orientation has been assigned a value.
Vector3 toRotationVector() const
const Orientation & integrate(Vector3 dt_x_omega)
Vector3 differentiateRightSide(Orientation R_k1) const
gives the log (rotation vector) of the "right-side" difference of orientation: log of (*this)....
const Matrix3 & quaternionToMatrix_() const
Vector3 differentiate(Orientation R_k1) const
gives the log (rotation vector) of the "left-side" difference of orientation: log of R_k1*(*this)....
static Orientation zeroRotation()
retruns a zero rotation
Orientation operator*(const Orientation &R2) const
Orientation(const double &roll, const double &pitch, const double &yaw)
Vector3 toRollPitchYaw() const
Orientation & operator=(const Quaternion &q)
Orientation & operator=(const AngleAxis &aa)
Orientation(const Orientation &multiplier1, const Orientation &multiplier2)
Orientation & fromVector4(const Vector4 &v)
static Orientation randomRotation()
Returns a uniformly distributed random rotation.
const Quaternion & toQuaternion() const
const Orientation & setToProductNoAlias(const Orientation &R1, const Orientation &R2)
Noalias versions of the operator*.
bool isQuaternionSet() const
checks that the quaternion representation of the orientation has been assigned a value.
Orientation(const Quaternion &q)
Orientation & setZeroRotation()
CheckedMatrix3 m_
Definition rigid-body-kinematics.hpp:497
const Orientation & integrateRightSide(Vector3 dt_x_omega)
Definition rigid-body-kinematics.hpp:505
KinematicsInternal()
Definition rigid-body-kinematics.hpp:507
KinematicsInternal(const CheckedVector3 &position, const CheckedVector3 &linVel, const CheckedVector3 &linAcc, const Orientation &orientation, const CheckedVector3 &angVel, const CheckedVector3 &angAcc)
constructor of a Kinematics object given each variable independently.
T & fromVector(const Vector &v, typename Flags::Byte=Flags::all)
static T zeroKinematics(typename Flags::Byte=Flags::all)
returns an object corresponding to zero kinematics on the desired variables.
T & setZero(typename Flags::Byte=Flags::all)
CheckedVector3 angVel
Definition rigid-body-kinematics.hpp:543
CheckedVector3 angAcc
Definition rigid-body-kinematics.hpp:546
CheckedVector3 linVel
Definition rigid-body-kinematics.hpp:542
Vector toVector(typename Flags::Byte) const
CheckedVector3 position
Definition rigid-body-kinematics.hpp:539
CheckedVector3 linAcc
Definition rigid-body-kinematics.hpp:545
Orientation orientation
Definition rigid-body-kinematics.hpp:540
Definitions of types and some structures.
Gathers many kinds of algorithms.
Vector regulateRotationVector(const Vector3 &v)
bool isRotationMatrix(const Matrix3 &, double precision=2 *cst::epsilon1)
Checks if it is a rotation matrix (right-hand orthonormal) or not.
Matrix4 invertHomoMatrix(const Matrix4 &m)
Matrix3 mergeRoll1Pitch1WithYaw2(const Matrix3 &R1, const Matrix3 &R2, const Vector3 &v=Vector3::UnitX())
Merge the roll and pitch with the yaw from a rotation matrix (minimizes the deviation of the v vector...
Quaternion rotationVectorToQuaternion(const Vector3 &v)
Transforms the rotation vector into quaternion.
Matrix3 mergeTiltWithYaw(const Vector3 &Rtez, const Matrix3 &R2, const Vector3 &v=Vector3::UnitX()) noexcept(false)
Merge the roll and pitch from the tilt (R^T e_z) with the yaw from a rotation matrix (minimizes the d...
Vector3 rotationMatrixToRollPitchYaw(const Matrix3 &R, Vector3 &v)
Matrix4 vector6ToHomogeneousMatrix(const Vector6 &v)
transforms a 6d vector (position theta mu) into a homogeneous matrix
Vector3 derivateRotationFD(const Quaternion &q1, const Quaternion &q2, double dt)
derivates a quaternion using finite difference to get a angular velocity vector
Matrix3 derivateRtvMultiplicative(const Matrix3 &R, const Vector3 &v)
void derivateRotationMultiplicative(const Vector3 &deltaR, Matrix3 &dRdR, Matrix3 &dRddeltaR)
Quaternion zeroRotationQuaternion()
Get the Identity Quaternion.
double rotationMatrixToAngle(const Matrix3 &rotation, const Vector3 &axis, const Vector3 &v)
take 3x3 matrix represeting a rotation and gives the angle that vector v turns around the axis with t...
Vector6 derivatePoseThetaUFD(const Vector6 &v1, const Vector6 &v2, double dt)
Matrix3 orthogonalizeRotationMatrix(const Matrix3 &M)
Projects the Matrix to so(3)
Vector6 homogeneousMatrixToVector6(const Matrix4 &M)
transforms a homogeneous matrix into 6d vector (position theta mu)
AngleAxis rotationVectorToAngleAxis(const Vector3 &v)
Transforms the rotation vector into angle axis.
Quaternion rollPitchYawToQuaternion(double roll, double pitch, double yaw)
Vector3 getInvariantHorizontalVector(const Matrix3 &R)
Gets a vector that remains horizontal with this rotation. This vector is NOT normalized.
void integrateKinematics(Vector3 &position, const Vector3 &velocity, double dt)
Vector6 derivateHomogeneousMatrixFD(const Matrix4 &m1, const Matrix4 &m2, double dt)
bool isPureYaw(const Matrix3 &R)
checks if this matrix is a pure yaw matrix or not
Vector3 vectorComponent(const Quaternion &q)
vector part of the quaternion
Vector3 rotationMatrixToRotationVector(const Matrix3 &R)
Transforms the rotation matrix into rotation vector.
double randomAngle()
get a randomAngle between -pi and pu
Matrix3 rotationVectorToRotationMatrix(const Vector3 &v)
Transforms the rotation vector into rotation matrix.
rotationType
Definition rigid-body-kinematics.hpp:311
@ matrix
Definition rigid-body-kinematics.hpp:312
@ rotationVector
Definition rigid-body-kinematics.hpp:313
@ quaternion
Definition rigid-body-kinematics.hpp:314
@ angleaxis
Definition rigid-body-kinematics.hpp:315
Matrix3 mergeRoll1Pitch1WithYaw2AxisAgnostic(const Matrix3 &R1, const Matrix3 &R2)
Merge the roll and pitch with the yaw from a rotation matrix with optimal reference vector.
Matrix3 rollPitchYawToRotationMatrix(double roll, double pitch, double yaw)
Vector invertState(const Vector &state)
double scalarComponent(const Quaternion &q)
scalar component of a quaternion
constexpr double quatNormTol
relative tolereance to the square of quaternion norm.
Definition rigid-body-kinematics.hpp:352
Matrix3 mergeTiltWithYawAxisAgnostic(const Vector3 &Rtez, const Matrix3 &R2)
Merge the roll and pitch from the tilt (R^T e_z) with the yaw from a rotation matrix (minimizes the d...
Matrix3 twoVectorsToRotationMatrix(const Vector3 &v1, const Vector3 Rv1)
Builds the smallest angle matrix allowing to get from a NORMALIZED vector v1 to its imahe Rv1 This is...
Quaternion randomRotationQuaternion()
Get a uniformly random Quaternion.
Vector3 quaternionToRotationVector(const Quaternion &q)
Tranbsform a quaternion into rotation vector.
void fixedPointRotationToTranslation(const Matrix3 &R, const Vector3 &rotationVelocity, const Vector3 &rotationAcceleration, const Vector3 &fixedPoint, Vector3 &outputTranslation, Vector3 &outputLinearVelocity, Vector3 &outputLinearAcceleration)
transforms a rotation into translation given a constraint of a fixed point
Matrix3 skewSymmetric2(const Vector3 &v, Matrix3 &R)
transform a 3d vector into a squared skew symmetric 3x3 matrix
IndexedVectorArray reconstructStateTrajectory(const IndexedVectorArray &positionOrientation, double dt)
Vector3 getInvariantOrthogonalVector(const Matrix3 &Rhat, const Vector3 &Rtez)
Gets a vector that is orthogonal to and such that is orthogonal to the tilt . This vector is NOT n...
double rotationMatrixToYawAxisAgnostic(const Matrix3 &rotation)
take 3x3 matrix represeting a rotation and gives a corresponding angle around upward vertical axis
Matrix3 skewSymmetric(const Vector3 &v, Matrix3 &R)
transform a 3d vector into a skew symmetric 3x3 matrix
double rotationMatrixToYaw(const Matrix3 &rotation, const Vector2 &v)
take 3x3 matrix represeting a rotation and gives the angle that vector v turns around the upward vert...
Definition bidim-elastic-inv-pendulum-dyn-sys.hpp:21
Eigen::Matrix4d Matrix4
4x4 Scalar Matrix
Definition definitions.hpp:115
Eigen::AngleAxis< double > AngleAxis
Euler Axis/Angle representation of orientation.
Definition definitions.hpp:133
Eigen::Quaterniond Quaternion
Quaternion.
Definition definitions.hpp:127
Eigen::Vector3d Vector3
3D vector
Definition definitions.hpp:85
Eigen::Vector4d Vector4
4D vector
Definition definitions.hpp:91
Eigen::Matrix3d Matrix3
3x3 Scalar Matrix
Definition definitions.hpp:109
Eigen::MatrixXd Matrix
Dynamic sized Matrix.
Definition definitions.hpp:100
Eigen::Matrix< double, 6, 1 > Vector6
6D vector
Definition definitions.hpp:97
Eigen::Index Index
Definition definitions.hpp:138
Eigen::Matrix< double, 2, 1 > Vector2
2d Vector
Definition definitions.hpp:82
Eigen::VectorXd Vector
Dynamic sized scalar vector.
Definition definitions.hpp:76
std::ostream & operator<<(std::ostream &os, const stateObservation::kine::Kinematics &k)
Class facilitating the manipulation of the kinematics of a frame within another and the associated op...
Definition rigid-body-kinematics.hpp:585
Kinematics(const Kinematics &multiplier1, const Kinematics &multiplier2)
constructor of a Kinematics object resulting from the composition of two others.
const Kinematics & update(const Kinematics &newValue, double dt, Flags::Byte=Flags::all)
updates the current kinematics (k) with the new ones (k+1).
Kinematics & setToDiffNoAlias(const Kinematics &multiplier1, const Kinematics &multiplier2)
Vector3 tempVec_
Definition rigid-body-kinematics.hpp:669
Kinematics & setToDiffNoAliasLinPart(const Kinematics &multiplier1, const Kinematics &multiplier2)
Linear part of the setToDiffNoAlias(const Kinematics &, const Kinematics &) function.
Kinematics()
Definition rigid-body-kinematics.hpp:587
const Kinematics & integrate(double dt)
integrates the current kinematics over the timestep dt.
Kinematics(const Vector &v, Flags::Byte=Flags::all)
Kinematics & operator=(const LocalKinematics &locK)
fills the Kinematics object given its equivalent in the local frame.
Kinematics(const LocalKinematics &locK)
constructor of a Kinematics object given its equivalent in the local frame.
Kinematics & setToDiffNoAliasAngPart(const Kinematics &multiplier1, const Kinematics &multiplier2)
Angular part of the setToDiffNoAlias(const Kinematics &, const Kinematics &) function.
Kinematics getInverse() const
returns the inverse of the current kinematics.
Kinematics & setToProductNoAlias(const Kinematics &operand1, const Kinematics &operand2)
computes the composition of two Kinematics object.
Kinematics(const CheckedVector3 &position, const CheckedVector3 &linVel, const CheckedVector3 &linAcc, const Orientation &orientation, const CheckedVector3 &angVel, const CheckedVector3 &angAcc)
constructor of a Kinematics object given each variable independently.
Kinematics operator*(const Kinematics &) const
composition of transformation
Class facilitating the manipulation of the local kinematics of a frame within another and the associa...
Definition rigid-body-kinematics.hpp:678
Vector3 tempVec_
Definition rigid-body-kinematics.hpp:768
LocalKinematics & setToProductNoAlias(const LocalKinematics &operand1, const LocalKinematics &operand2)
computes the composition of two LocalKinematics object.
Vector3 tempVec_5
Definition rigid-body-kinematics.hpp:772
LocalKinematics & setToDiffNoAliasLinPart(const LocalKinematics &multiplier1, const LocalKinematics &multiplier2)
Linear part of the setToDiffNoAlias(const LocalKinematics &, const LocalKinematics &) function.
LocalKinematics & operator=(const Kinematics &kine)
fills the LocalKinematics object given its equivalent in the global frame.
LocalKinematics getInverse() const
returns the inverse of the current local kinematics.
LocalKinematics operator*(const LocalKinematics &) const
composition of transformation
Vector3 tempVec_2
Definition rigid-body-kinematics.hpp:769
LocalKinematics()
Definition rigid-body-kinematics.hpp:679
LocalKinematics & setToDiffNoAliasAngPart(const LocalKinematics &multiplier1, const LocalKinematics &multiplier2)
Angular part of the setToDiffNoAlias(const LocalKinematics &, const LocalKinematics &) function.
LocalKinematics & setToDiffNoAlias(const LocalKinematics &multiplier1, const LocalKinematics &multiplier2)
LocalKinematics(const Vector &v, Flags::Byte flags)
Vector3 tempVec_4
Definition rigid-body-kinematics.hpp:771
Vector3 tempVec_3
Definition rigid-body-kinematics.hpp:770
const LocalKinematics & integrate(double dt)
integrates the current local kinematics over the timestep dt.
LocalKinematics(const CheckedVector3 &position, const CheckedVector3 &linVel, const CheckedVector3 &linAcc, const Orientation &orientation, const CheckedVector3 &angVel, const CheckedVector3 &angAcc)
constructor of a Kinematics object given each variable independently.
LocalKinematics(const Kinematics &kin)
constructor of a LocalKinematics object given its equivalent in the global frame.
LocalKinematics & setZero(Flags::Byte=Flags::all)
LocalKinematics(const LocalKinematics &multiplier1, const LocalKinematics &multiplier2)
constructor of a LocalKinematics object resulting from the composition of two others.
const LocalKinematics & update(const LocalKinematics &newValue, double dt, Flags::Byte=Flags::all)
updates the current local kinematics (k) with the new ones (k+1).
Definition rigid-body-kinematics.hpp:320
Definition rigid-body-kinematics.hpp:523
unsigned char Byte
Definition rigid-body-kinematics.hpp:524
static const Byte vel
Definition rigid-body-kinematics.hpp:534
static const Byte all
Definition rigid-body-kinematics.hpp:536
static const Byte pose
Definition rigid-body-kinematics.hpp:533
static const Byte orientation
Definition rigid-body-kinematics.hpp:527
static const Byte linVel
Definition rigid-body-kinematics.hpp:528
static const Byte linAcc
Definition rigid-body-kinematics.hpp:530
static const Byte angAcc
Definition rigid-body-kinematics.hpp:531
static const Byte position
Definition rigid-body-kinematics.hpp:526
static const Byte acc
Definition rigid-body-kinematics.hpp:535
static const Byte angVel
Definition rigid-body-kinematics.hpp:529