36 double sinr = +2.0 * (
q->qw *
q->qx +
q->qy *
q->qz);
37 double cosr = +1.0 - 2.0 * (
q->qx *
q->qx +
q->qy *
q->qy);
38 double roll = atan2(sinr, cosr);
40 double sinp = +2.0 * (
q->qw *
q->qy -
q->qz *
q->qx);
44 pitch = copysign(
M_PI / 2, sinp);
51 double siny = +2.0 * (
q->qw *
q->qz +
q->qx *
q->qy);
52 double cosy = +1.0 - 2.0 * (
q->qy *
q->qy +
q->qz *
q->qz);
53 double yaw = atan2(siny, cosy);
54 return {roll, pitch, yaw};
62 double cy = cos(yaw * 0.5);
63 double sy = sin(yaw * 0.5);
64 double cr = cos(roll * 0.5);
65 double sr = sin(roll * 0.5);
66 double cp = cos(pitch * 0.5);
67 double sp = sin(pitch * 0.5);
68 q->qw = cy * cr * cp + sy * sr * sp;
69 q->qx = cy * sr * cp - sy * cr * sp;
70 q->qy = cy * cr * sp + sy * sr * cp;
71 q->qz = sy * cr * cp - cy * sr * sp;
75 Eigen::Quaternion<double>
78 return Eigen::Quaternion<double>(
q->qw,
q->qx,
q->qy,
q->qz);
The FramedOrientation class.
static std::vector< double > toEulerAngle(QuaternionBasePtr q)
static Eigen::Quaternion< double > toEigen(QuaternionBasePtr q)
static QuaternionBasePtr toArmarX(Eigen::Quaternion< double > q)
static QuaternionBasePtr toQuaternion(const double roll, const double pitch, const double yaw)
This file offers overloads of toIce() and fromIce() functions for STL container types.