Skip to content

Class inertialsim::geometry::Rotation

ClassList > inertialsim > geometry > Rotation

3-dimensional rotations of rigid bodies, SO(3) .More...

  • #include <rotation.h>

Inherits the following classes: inertialsim::geometry::RotationBase

Public Types inherited from inertialsim::geometry::RotationBase

See inertialsim::geometry::RotationBase

Type Name
typedef MatrixLieGroup< Derived, 3, 3 > Base

Public Types inherited from inertialsim::geometry::MatrixLieGroup

See inertialsim::geometry::MatrixLieGroup

Type Name
typedef Eigen::Matrix< Scalar, AlgebraDimension, Eigen::Dynamic > AlgebraArray
Array of algebra elements.
typedef Eigen::Matrix< Scalar, AlgebraDimension, 1 > AlgebraElement
Algebra element type (vector).
typedef std::vector< GroupElement > GroupArray
Array of group elements.
typedef Eigen::Matrix< Scalar, GroupDimension, GroupDimension > GroupElement
Group element type (square matrix).
typedef Eigen::Matrix< Scalar, AlgebraDimension, AlgebraDimension > JacobianMatrix
Jacobian matrix (algebra to algebra).
typedef std::vector< JacobianMatrix > JacobianMatrixArray
Array of Jacobian matrices.

Public Functions inherited from inertialsim::geometry::RotationBase

See inertialsim::geometry::RotationBase

Type Name
AxisAngle AsAxisAngle () const
Return axis and angle representation.
EulerAngles AsEuler (const std::string & sequence) const
Return the Euler angle representation.
const RotationMatrixArray & AsMatrix () const
Return the rotation matrix representation.
Quaternion AsQuaternion () const
Return the quaternion representation.
RotationVector AsRotationVector () const
Return the rotation vector representation.
RotationVector Error (const RotationBase< OtherDerived > & reference) const
Calculate error compared to a reference rotation.
int num_rotations () const
Number of rotations stored.

Public Functions inherited from inertialsim::geometry::MatrixLieGroup

See inertialsim::geometry::MatrixLieGroup

Type Name
Vector3D Apply (const Vector3D & vectors) const
Apply the group action to an array of vectors.
Derived Interpolate (const Timestamps & interp_time, Interpolator method=Interpolator::LINEAR) const
Interpolate at given times.
Derived Inverse () const
Invert an instance.
Derived Slice (int start, int end) const
Get a slice of elements.
AlgebraArray TimeDerivative (int order=1, int accuracy=4, const std::string & side="right") const
Compute time derivative using finite differences.
int num_elements () const
Number of elements stored in the instance.
Derived operator* (const Derived & rhs) const
Compose elements of the group.
Derived operator[] (int index) const
Get a single element by index.
const std::optional< Timestamps > & time () const
Time array corresponding to each element.
virtual ~MatrixLieGroup () = default

Public Static Functions inherited from inertialsim::geometry::RotationBase

See inertialsim::geometry::RotationBase

Type Name
RotationMatrixArray DoubleIntegralFactor (const RotationVector & rotation_vectors)
Double integral factor.
Derived FromAxisAngle (const Vector3D & axis, const Scalar1D & angle, const std::optional< Timestamps > & time=std::nullopt)
Construct a Rotation from an axis and angle.
Derived FromEuler (const EulerAngles & euler, const std::string & sequence, const std::optional< Timestamps > & time=std::nullopt)
Construct a Rotation from a sequence of Euler angles.
Derived FromMatrix (const RotationMatrixArray & matrices, const std::optional< Timestamps > & time=std::nullopt, bool orthonormalize=false)
Construct a Rotation from rotation matrices.
Derived FromQuaternion (const Quaternion & quaternions, const std::optional< Timestamps > & time=std::nullopt, bool scalar_last=false)
Construct a Rotation from quaternions.
Derived FromRotationVector (const RotationVector & rotation_vectors, const std::optional< Timestamps > & time=std::nullopt)
Construct a Rotation from rotation vectors.
RotationMatrixArray IntegralFactor (const RotationVector & rotation_vectors)
First integral factor.

Public Static Functions inherited from inertialsim::geometry::MatrixLieGroup

See inertialsim::geometry::MatrixLieGroup

Type Name
Derived Compose (const std::vector< Derived > & instances)
Compose a sequence of instances (first to last).
Derived FromIdentity (int num_elements=1)
Create identity elements.
Derived FromRandom (int num_elements=1, std::optional< Eigen::numext::uint64_t > seed=std::nullopt)
Create random elements.

Protected Functions inherited from inertialsim::geometry::RotationBase

See inertialsim::geometry::RotationBase

Type Name
RotationBase ()
Default constructor.
RotationBase (const RotationMatrixArray & matrices, const std::optional< Timestamps > & time=std::nullopt)
Construct from rotation matrices.

Protected Functions inherited from inertialsim::geometry::MatrixLieGroup

See inertialsim::geometry::MatrixLieGroup

Type Name
AlgebraArray AsAlgebra () const
Get the algebra elements.
GroupArray AsGroup () const
Get the group elements.
MatrixLieGroup (const std::optional< Timestamps > & time=std::nullopt)
Constructor.
int num_times () const

Protected Static Functions inherited from inertialsim::geometry::MatrixLieGroup

See inertialsim::geometry::MatrixLieGroup

Type Name
GroupElement Exp (const AlgebraElement & vector)
Exponential map from algebra to group.
Derived FromAlgebra (const AlgebraArray & elements, const std::optional< Timestamps > & time)
Create instance from algebra elements.
Derived FromGroup (const GroupArray & elements, const std::optional< Timestamps > & time)
Create instance from group elements.
JacobianMatrixArray Jacobian (const AlgebraArray & algebra, const std::string & side="left", bool inverse=false)
Calculate the Jacobian of the exponential map.
AlgebraElement Log (const GroupElement & element)
Logarithm map from group to algebra.

Detailed Description

Rotations can be constructed from any of the following representations: rotation matrix, Euler angles, quaternion, rotation vector, and axis angle. Use the From* methods to construct an instance.

Current state can be returned in any of the representations listed above using the As* methods.

Internally rotations are stored in rotation matrix format.

Rotation conventions

There are a large variety of rotation conventions and they are a common source of errors. Because many of these conventions cannot be automatically validated, users must be aware of them and manage interfaces with other software accordingly. InertialSim conventions are documented in each method.

Active vs passive rotation convention

Rotations stored in this class represent an active transformation. In the active convention, rotations act to rotate an object relative to a fixed coordinate system. The active convention is the standard mathematical description of rotations.

The alternative passive convention is supported in the CoordinateRotation subclass. In the passive convention, rotations act to transform the components of physical vectors to different coordinate systems. The passive convention is the standard for describing orientation in inertial navigation and aerospace applications.

Some references use the terminology alibi (active) and alias (passive). Reference [02], Reference [05], and Reference [11] discuss active vs. passive transforms in greater detail.

See also: CoordinateRotation for passive rotations.

See also: RigidTransform for combined rotation and translation.


The documentation for this class was generated from the following file cpp/include/inertialsim/geometry/rotation.h