8 #include <mrpt/poses/CPosePDFGaussian.h> 9 #include <mrpt/poses/CPose3DPDFGaussian.h> 10 #include <mrpt/math/CQuaternion.h> 11 #include <mrpt/ros1bridge/pose.h> 12 #include <geometry_msgs/PoseWithCovariance.h> 13 #include <geometry_msgs/Pose.h> 14 #include <geometry_msgs/Quaternion.h> 16 #include <mrpt/ros1bridge/pose.h> 17 #include <gtest/gtest.h> 18 #include <Eigen/Dense> 24 const double roll,
const double pitch,
const double yaw)
29 rotation.
setRPY(roll, pitch, yaw);
34 mrpt::poses::CPose3D mrpt_original_pose;
35 mrpt_original_pose.setYawPitchRoll(yaw, pitch, roll);
36 mrpt::math::CMatrixDouble33 mrpt_basis =
37 mrpt_original_pose.getRotationMatrix();
39 for (
int i = 0; i < 3; i++)
40 for (
int j = 0; j < 3; j++)
55 TEST(PoseConversions, reference_frame_change_with_rotations)
57 geometry_msgs::PoseWithCovariance ros_msg_original_pose;
59 ros_msg_original_pose.pose.position.x = 1;
60 ros_msg_original_pose.pose.position.y = 0;
61 ros_msg_original_pose.pose.position.z = 0;
62 ros_msg_original_pose.pose.orientation.x = 0;
63 ros_msg_original_pose.pose.orientation.y = 0;
64 ros_msg_original_pose.pose.orientation.z = 0;
65 ros_msg_original_pose.pose.orientation.w = 1;
68 mrpt::poses::CPose3DPDFGaussian mrpt_original_pose =
69 mrpt::ros1bridge::fromROS(ros_msg_original_pose);
72 ros_msg_original_pose.pose.position.x, mrpt_original_pose.mean[0]);
79 mrpt::poses::CPose3D rotation_mrpt;
80 double yaw =
M_PI / 2.0;
81 rotation_mrpt.setFromValues(0, 0, 0, yaw, 0, 0);
82 mrpt::poses::CPose3D mrpt_result = rotation_mrpt + mrpt_original_pose.mean;
87 rotation_tf.
setRPY(0, 0, yaw);
91 tf::Pose tf_result = rotation_pose_tf * tf_original_pose;
95 mrpt::ros1bridge::toROS_Pose(mrpt_result);
103 double x,
double y,
double z,
double yaw,
double pitch,
double roll)
105 const mrpt::poses::CPose3D p3D(x, y, z, yaw, pitch, roll);
111 mrpt::math::CQuaternionDouble q;
112 p3D.getAsQuaternion(q);
114 EXPECT_NEAR(ros_p3D.position.x, p3D.x(), 1e-4) <<
"p: " << p3D << endl;
115 EXPECT_NEAR(ros_p3D.position.y, p3D.y(), 1e-4) <<
"p: " << p3D << endl;
116 EXPECT_NEAR(ros_p3D.position.z, p3D.z(), 1e-4) <<
"p: " << p3D << endl;
118 EXPECT_NEAR(ros_p3D.orientation.x, q.x(), 1e-4) <<
"p: " << p3D << endl;
119 EXPECT_NEAR(ros_p3D.orientation.y, q.y(), 1e-4) <<
"p: " << p3D << endl;
120 EXPECT_NEAR(ros_p3D.orientation.z, q.z(), 1e-4) <<
"p: " << p3D << endl;
121 EXPECT_NEAR(ros_p3D.orientation.w, q.r(), 1e-4) <<
"p: " << p3D << endl;
124 mrpt::poses::CPose3D p_bis = mrpt::ros1bridge::fromROS(ros_p3D);
128 (p_bis.asVectorVal() - p3D.asVectorVal()).array().abs().maxCoeff(), 0,
130 <<
"p_bis: " << p_bis << endl
131 <<
"p3D: " << p3D << endl;
151 TEST(PoseConversions, check_CPose2D_to_ROS)
153 const mrpt::poses::CPose2D p2D(1, 2, 0.56);
159 const mrpt::poses::CPose3D p3D = mrpt::poses::CPose3D(p2D);
160 mrpt::poses::CPose3D p3D_ros = mrpt::ros1bridge::fromROS(ros_p2D);
164 (p3D_ros.asVectorVal() - p3D.asVectorVal()).array().abs().maxCoeff(), 0,
166 <<
"p3D_ros: " << p3D_ros << endl
167 <<
"p3D: " << p3D << endl;
static void poseMsgToTF(const geometry_msgs::Pose &msg, Pose &bt)
void checkPoseMatrixFromRotationParameters(const double roll, const double pitch, const double yaw)
#define EXPECT_NEAR(a, b, prec)
TEST(PoseConversions, checkPoseMatrixFromRotationParameters)
void setRPY(const tfScalar &roll, const tfScalar &pitch, const tfScalar &yaw)
void check_CPose3D_tofrom_ROS(double x, double y, double z, double yaw, double pitch, double roll)