mc_rtc  2.16.0
rpy_utils.h
Go to the documentation of this file.
1 /*
2  * Copyright 2015-2019 CNRS-UM LIRMM, CNRS-AIST JRL
3  */
4 
5 #pragma once
6 
7 #include <mc_rtc/pragma.h>
8 
10 
11 namespace mc_rbdyn
12 {
13 
25 inline Eigen::Matrix3d rpyToMat(const double & r, const double & p, const double & y)
26 {
27  MC_RTC_diagnostic_push
28  MC_RTC_diagnostic_ignored(GCC, "-Wconversion")
29  return sva::RotX(r) * sva::RotY(p) * sva::RotZ(y);
30  MC_RTC_diagnostic_pop
31 }
32 
40 inline Eigen::Matrix3d rpyToMat(const Eigen::Vector3d & rpy)
41 { return rpyToMat(rpy(0), rpy(1), rpy(2)); }
42 
50 inline sva::PTransformd rpyToPT(const Eigen::Vector3d & rpy)
51 { return sva::PTransformd(rpyToMat(rpy(0), rpy(1), rpy(2))); }
52 
64 inline sva::PTransformd rpyToPT(const double & r, const double & p, const double & y)
65 { return sva::PTransformd(rpyToMat(r, p, y)); }
66 
77 inline Eigen::Vector3d rpyFromMat(const Eigen::Matrix3d & E)
78 {
79  double roll = atan2(E(1, 2), E(2, 2));
80  double pitch = -asin(E(0, 2));
81  double yaw = atan2(E(0, 1), E(0, 0));
82  return Eigen::Vector3d(roll, pitch, yaw);
83 }
84 
97 inline Eigen::Vector3d rpyFromQuat(const Eigen::Quaterniond & quat)
98 { return rpyFromMat(quat.toRotationMatrix()); }
99 
101 template<typename T>
102 Eigen::Vector3d rpyFromRotation(const T & value)
103 {
104  if constexpr(std::is_same_v<T, Eigen::Quaterniond>) { return rpyFromQuat(value); }
105  else
106  {
107  return rpyFromMat(value);
108  }
109 }
110 
111 } // namespace mc_rbdyn
std::optional< Eigen::VectorXd > value
Definition: generic_gripper.h:15
Eigen::Vector3d rpyFromQuat(const Eigen::Quaterniond &quat)
Definition: rpy_utils.h:97
Eigen::Vector3d rpyFromMat(const Eigen::Matrix3d &E)
Definition: rpy_utils.h:77
Eigen::Vector3d rpyFromRotation(const T &value)
Definition: rpy_utils.h:102
Eigen::Matrix3d rpyToMat(const double &r, const double &p, const double &y)
Definition: rpy_utils.h:25
sva::PTransformd rpyToPT(const Eigen::Vector3d &rpy)
Definition: rpy_utils.h:50
Eigen::Matrix3< T > RotX(T theta)
PTransform< double > PTransformd
Eigen::Matrix3< T > RotY(T theta)
Eigen::Matrix3< T > RotZ(T theta)
MC_RTC_diagnostic_push MC_RTC_diagnostic_ignored(GCC, "-Wsign-conversion") MC_RTC_diagnostic_pop namespace sch
Definition: surface_hull.h:11