10 #include <CTraitsTest.h>    11 #include <gtest/gtest.h>    16 #include <Eigen/Dense>    23 template class mrpt::CTraitsTest<mrpt::poses::CPose3DQuat>;
    24 template class mrpt::CTraitsTest<mrpt::poses::CPose3D>;
    25 template class mrpt::CTraitsTest<mrpt::math::CQuaternionDouble>;
    35         CPose3D p1(0, 0, 0, YAW, PITCH, ROLL);
    41             std::abs((
CPose3D(q1, 0, 0, 0).asVectorVal() -
    42                       CPose3D(q1r, 0, 0, 0).asVectorVal())
    49         CPose3D p1(0, 0, 0, YAW, PITCH, ROLL);
    60             << 
"ypr->quat->ypr failed with:" << endl
    61             << 
"  p1:" << p1 << endl
    62             << 
"  q1:" << q1 << endl
    63             << 
"  p2:" << p2 << endl;
    73             << 
"pose constructor from quat failed with:" << endl
    74             << 
"  p1:" << p1 << endl
    75             << 
"  q1:" << q1 << endl
    76             << 
"  p3:" << p3 << endl;
    81         const CPose3D pp(0, 0, 0, yaw1, pitch1, roll1);
   115             << (q1_ln - v) << endl;
   124     CPose3D p1(0, 0, 0, 10.0_deg, 30.0_deg, -20.0_deg);
   127     CPose3D p2(0, 0, 0, 30.0_deg, -20.0_deg, 10.0_deg);
   139         << 
"q1 = " << q1 << endl
   140         << 
"q1 as CPose3D = " << 
CPose3D(q1, 0, 0, 0) << endl
   141         << 
"q2 = " << q2 << endl
   142         << 
"q2 as CPose3D = " << 
CPose3D(q2, 0, 0, 0) << endl
   143         << 
"q3 = q1 * q2 = " << q3 << endl
   144         << 
"q3 as CPose3D = " << 
CPose3D(q3, 0, 0, 0) << endl
   145         << 
"Should be equal to p3 = p1 (+) p2 = " << p3 << endl;
   151     test_gimbalLock(20.0_deg, 90.0_deg, 0.0_deg);
   152     test_gimbalLock(20.0_deg, -90.0_deg, 0.0_deg);
   157     test_toYPRAndBack(20.0_deg, 30.0_deg, 40.0_deg);
   158     test_toYPRAndBack(20.0_deg, 30.0_deg, 40.0_deg);
   159     test_toYPRAndBack(30.0_deg, 90.0_deg, 0.0_deg);
   160     test_toYPRAndBack(-30.0_deg, 90.0_deg, 0.0_deg);
   161     test_toYPRAndBack(-30.0_deg, 88.0_deg, 60.0_deg);
   162     test_toYPRAndBack(-30.0_deg, 10.0_deg, 60.0_deg);
   167     const double list_test_YPR_angles_degrees[][3] = {
   168         {0, 0, 0},   {-1, 0, 0},    {1, 0, 0},      {0, -1, 0},
   169         {0, 1, 0},   {0, 0, -1},    {0, 0, 1},      {40, 0, 0},
   170         {0, 40, 0},  {0, 0, 40},    {-40, 0, 0},    {0, -40, 0},
   171         {0, 0, -40}, {-30, 20, 50}, {-30, 20, -50}, {30, -20, -50}};
   173     for (
const auto& list_test_YPR_angles_degree : list_test_YPR_angles_degrees)
   174         test_lnAndExpMatches(
   175             DEG2RAD(list_test_YPR_angles_degree[0]),
   176             DEG2RAD(list_test_YPR_angles_degree[1]),
   177             DEG2RAD(list_test_YPR_angles_degree[2]));
   182     const double list_test_XYZ[][3] = {
   183         {0, 0, 0},          {-1, 0, 0},        {1, 0, 0},
   184         {0, -1, 0},         {0, 1, 0},         {0, 0, -1},
   185         {0, 0, 1},          {1e-3, 0, 0},     {0, 1e-3, 0},
   186         {0, 0, 1e-3},       {-1e-3, 0, 0},   {0, -1e-3, 0},
   187         {0, 0, -1e-3},      {-0.1, 0.2, 0.3},  {-0.1, -0.2, 0.3},
   188         {-0.1, -0.2, -0.3}, {-0.1, 0.2, -0.3}, {0.1, 0.2, -0.3},
   191     for (
const auto& i : list_test_XYZ) test_ExpAndLnMatches(i[0], i[1], i[2]);
 mrpt::math::CQuaternionDouble & quat()
Read/Write access to the quaternion representing the 3D rotation. 
 
A compile-time fixed-size numeric matrix container. 
 
void test_gimbalLock(double YAW, double PITCH, double ROLL)
 
void getAsQuaternion(mrpt::math::CQuaternionDouble &q, mrpt::optional_ref< mrpt::math::CMatrixDouble43 > out_dq_dr=std::nullopt) const
Returns the quaternion associated to the rotation of this object (NOTE: XYZ translation is ignored)  ...
 
This base provides a set of functions for maths stuff. 
 
void crossProduct(const CQuaternion &q1, const CQuaternion &q2)
Calculate the "cross" product (or "composed rotation") of two quaternion: this = q1 x q2 After the op...
 
constexpr double DEG2RAD(const double x)
Degrees to radians. 
 
CONTAINER::Scalar sum(const CONTAINER &v)
Computes the sum of all the elements. 
 
A class used to store a 3D pose as a translation (x,y,z) and a quaternion (qr,qx,qy,qz). 
 
void test_lnAndExpMatches(double yaw1, double pitch1, double roll1)
 
Classes for 2D/3D geometry representation, both of single values and probability density distribution...
 
void test_ExpAndLnMatches(double v0, double v1, double v2)
 
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries. 
 
void ln(ARRAYLIKE3 &out_ln) const
Logarithm of the 3x3 matrix defined by this pose, generating the corresponding vector in the SO(3) Li...
 
A class used to store a 3D pose (a 3D translation + a rotation in 3D). 
 
EXPECT_NEAR(out.cam_params.rightCameraPose.x, 0.1194, 0.005)
 
A quaternion, which can represent a 3D rotation as pair , with a real part "r" and a 3D vector ...
 
void getRotationMatrix(mrpt::math::CMatrixDouble33 &ROT) const
Get the 3x3 rotation matrix. 
 
void test_toYPRAndBack(double YAW, double PITCH, double ROLL)
 
TEST_F(QuaternionTests, crossProduct)
 
vector_t asVectorVal() const
Return the pose or point as a 1xN vector with all the components (see derived classes for each implem...