Biorbd
Rotation.h
1 #ifndef BIORBD_UTILS_ROTATION_H
2 #define BIORBD_UTILS_ROTATION_H
3 
4 #include <vector>
5 #include <memory>
6 #include "rbdl_math.h"
7 #include "Utils/Scalar.h"
8 
9 namespace RigidBodyDynamics { namespace Math {
10 struct SpatialTransform;
11 }}
12 
13 #include "biorbdConfig.h"
14 
15 namespace biorbd {
16 namespace rigidbody {
17 class NodeSegment;
18 }
19 
20 namespace utils {
21 class String;
22 class Vector;
23 class Vector3d;
24 class Matrix;
25 
29 #ifdef SWIG
30 class BIORBD_API Rotation
31 #else
32 class BIORBD_API Rotation : public RigidBodyDynamics::Math::Matrix3d
33 #endif
34 {
35 public:
40  Rotation(
41  const RigidBodyDynamics::Math::Matrix3d& matrix = RigidBodyDynamics::Math::Matrix3d::Identity());
42 
43 #ifdef BIORBD_USE_EIGEN3_MATH
44  template<typename OtherDerived> Rotation(
49  const Eigen::MatrixBase<OtherDerived>& other) :
50  RigidBodyDynamics::Math::Matrix3d(other){
51  checkUnitary();
52  }
53 #endif
54 #ifdef BIORBD_USE_CASADI_MATH
55  Rotation(
60  const RigidBodyDynamics::Math::MatrixNd& m);
61 #endif
62 
75  Rotation(const biorbd::utils::Scalar& v00, const biorbd::utils::Scalar& v01, const biorbd::utils::Scalar& v02,
76  const biorbd::utils::Scalar& v10, const biorbd::utils::Scalar& v11, const biorbd::utils::Scalar& v12,
77  const biorbd::utils::Scalar& v20, const biorbd::utils::Scalar& v21, const biorbd::utils::Scalar& v22);
78 
87  Rotation(
88  const biorbd::utils::Vector& rotation,
89  const biorbd::utils::String& rotationSequence);
90 
95  Rotation(
96  const RigidBodyDynamics::Math::SpatialTransform& st);
97 
104  unsigned int idx) const;
105 
111  static biorbd::utils::Rotation fromSpatialTransform(
112  const RigidBodyDynamics::Math::SpatialTransform& st);
113 
122  static biorbd::utils::Rotation fromEulerAngles(
123  const biorbd::utils::Vector& rot,
124  const biorbd::utils::String& seq);
125 
134  static biorbd::utils::Matrix fromMarkersNonNormalized(
135  const std::pair<biorbd::rigidbody::NodeSegment, biorbd::rigidbody::NodeSegment>& axis1markers,
136  const std::pair<biorbd::rigidbody::NodeSegment, biorbd::rigidbody::NodeSegment>& axis2markers,
137  const std::pair<biorbd::utils::String, biorbd::utils::String> &axesNames,
138  const biorbd::utils::String& axisToRecalculate);
139 
148  static biorbd::utils::Rotation fromMarkers(
149  const std::pair<biorbd::rigidbody::NodeSegment, biorbd::rigidbody::NodeSegment>& axis1markers,
150  const std::pair<biorbd::rigidbody::NodeSegment, biorbd::rigidbody::NodeSegment>& axis2markers,
151  const std::pair<biorbd::utils::String, biorbd::utils::String> &axesNames,
152  const biorbd::utils::String& axisToRecalculate);
153 
162  static biorbd::utils::Vector toEulerAngles(
163  const biorbd::utils::Rotation& r,
164  const biorbd::utils::String& seq);
165 
166 #ifndef BIORBD_USE_CASADI_MATH
167  static biorbd::utils::Rotation mean(
173  const std::vector<biorbd::utils::Rotation>& mToMean);
174 #endif
175 
176 #ifndef SWIG
177 #ifdef BIORBD_USE_EIGEN3_MATH
178  template<typename OtherDerived>
183  biorbd::utils::Rotation& operator=(
184  const Eigen::MatrixBase <OtherDerived>& other){
185  Eigen::Matrix3d::operator=(other);
186  return *this;
187  }
188 #endif
189 #endif
190 
191 protected:
197  void checkUnitary();
198 };
199 
200 }}
201 
202 #ifndef SWIG
203 std::ostream& operator<<(std::ostream& os, const biorbd::utils::Rotation &rt);
209 #endif
210 
211 #endif // BIORBD_UTILS_ROTO_TRANS_H
biorbd::utils::Vector
Wrapper of the Eigen VectorXd.
Definition: Vector.h:20
biorbd::utils::Vector3d
Wrapper around Eigen Vector3d and attach it to a parent.
Definition: Vector3d.h:24
biorbd::utils::Matrix
A wrapper for the Eigen::MatrixXd.
Definition: Matrix.h:21
biorbd::utils::Rotation
Rotation matrix.
Definition: Rotation.h:34
biorbd::utils::String
Wrapper around the std::string class with augmented functionality.
Definition: String.h:17