1#include "../include/euler_rotations.h"
14 m << 1.0f, 0.0f, 0.0f,
15 0.0f, cos(x), -sin(x),
31 m << cos(x), 0.0f, sin(x),
33 -sin(x), 0.0f, cos(x);
48 m << cos(x), -sin(x), 0.0f,
77 m = rotz * roty * rotx;
87 return rotation(euler_angles(0), euler_angles(1), euler_angles(2));
95 return rotation(euler_angles[0], euler_angles[1], euler_angles[2]);
118 double theta,
double psi)
122 double cy = cos(psi * 0.5);
double sy = sin(psi * 0.5);
123 double cp = cos(theta * 0.5);
double sp = sin(theta * 0.5);
124 double cr = cos(phi * 0.5);
double sr = sin(phi * 0.5);
126 quatern.
w = cr * cp * cy + sr * sp * sy;
127 quatern.
x = sr * cp * cy - cr * sp * sy;
128 quatern.
y = cr * sp * cy + sr * cp * sy;
129 quatern.
z = cr * cp * sy - sr * sp * cy;
154 double sinr_cosp = 2.0 * (w * x + y * z);
155 double cosr_cosp = 1.0 - 2.0 * (x * x + y * y);
156 euler_angles.
phi = std::atan2(sinr_cosp, cosr_cosp);
159 double sinp = 2.0 * (w * y - z * x);
160 if (std::abs(sinp) >= 1.0)
162 euler_angles.
theta = std::copysign(M_PI / 2.0, sinp);
166 euler_angles.
theta = std::asin(sinp);
170 double siny_cosp = 2.0 * (w * z + x * y);
171 double cosy_cosp = 1.0 - 2.0 * (y * y + z * z);
172 euler_angles.
psi = std::atan2(siny_cosp, cosy_cosp);
static Euler quaternions_to_euler(double w, double x, double y, double z)
Convert quaternions to Euler angles.
static Eigen::Matrix3d rotation(double phi, double theta, double psi)
Euler rotation matrix z-y'-x''.
static Eigen::Matrix3d basic_rotation_y(double x)
Basic rotation matrix wrt y axis.
static Quaternions euler_to_quaternions(double phi, double theta, double psi)
Convert Euler angles to quaternions.
static Eigen::Matrix3d basic_rotation_x(double x)
Basic rotation matrix wrt x axis.
static Eigen::Matrix3d basic_rotation_z(double x)
Basic rotation matrix wrt z axis.
Custom Euler angles struct.
Custom quaternions struct: .