9 #include <gtest/gtest.h>
11 #include <Eigen/Dense>
16 #include <mrpt/config.h>
17 #if MRPT_HAS_OPENCV && MRPT_OPENCV_VERSION_NUM < 0x240
18 #undef MRPT_HAS_OPENCV
19 #define MRPT_HAS_OPENCV 0
24 class CPnPTest :
public ::testing::Test
29 Eigen::MatrixXd obj_pts, img_pts, pose_est;
30 Eigen::Matrix3d
R, I3, R_est;
31 Eigen::Vector3d
t, t_est;
38 obj_pts = Eigen::MatrixXd::Zero(3,
n);
39 img_pts = Eigen::MatrixXd::Zero(3,
n);
40 obj_pts << 0, 20, 10, 15, 14, 16, 0, 0, -10, -5, -2, -5, 0, 40, 0, 24,
43 R << -0.3536, 0.3536, -0.8660, 0.9330, 0.0670, -0.3536, -0.0670,
48 for (
int i = 0; i <
n; i++)
50 img_pts.col(i) = (
R * obj_pts.col(i) +
t);
51 img_pts.col(i) /= img_pts(2, i);
54 I3 = Eigen::MatrixXd::Identity(3, 3);
56 pose_est = Eigen::MatrixXd::Zero(6, 1);
58 virtual void TearDown() {}
63 cpnp.
p3p(obj_pts, img_pts,
n, I3, pose_est);
65 t_est << pose_est(0), pose_est(1), pose_est(2);
67 double err_t = (
t - t_est).
norm();
72 TEST_F(CPnPTest, rpnp_TEST)
74 cpnp.
rpnp(obj_pts, img_pts,
n, I3, pose_est);
76 t_est << pose_est(0), pose_est(1), pose_est(2);
78 double err_t = (
t - t_est).
norm();
83 TEST_F(CPnPTest, ppnp_TEST)
85 cpnp.
ppnp(obj_pts, img_pts,
n, I3, pose_est);
87 t_est << pose_est(0), pose_est(1), pose_est(2);
89 double err_t = (
t - t_est).
norm();
94 TEST_F(CPnPTest, posit_TEST)
96 cpnp.
posit(obj_pts, img_pts,
n, I3, pose_est);
98 t_est << pose_est(0), pose_est(1), pose_est(2);
100 double err_t = (
t - t_est).
norm();
105 TEST_F(CPnPTest, lhm_TEST)
107 cpnp.
lhm(obj_pts, img_pts,
n, I3, pose_est);
109 t_est << pose_est(0), pose_est(1), pose_est(2);
111 double err_t = (
t - t_est).
norm();
116 TEST_F(CPnPTest, dls_TEST)
118 cpnp.
dls(obj_pts, img_pts,
n, I3, pose_est);
120 t_est << pose_est(0), pose_est(1), pose_est(2);
122 double err_t = (
t - t_est).
norm();
127 TEST_F(CPnPTest, epnp_TEST)
129 cpnp.
epnp(obj_pts, img_pts,
n, I3, pose_est);
131 t_est << pose_est(0), pose_est(1), pose_est(2);
133 double err_t = (
t - t_est).
norm();
138 TEST_F(CPnPTest, DISABLED_upnp_TEST)
140 cpnp.
upnp(obj_pts, img_pts,
n, I3, pose_est);
142 t_est << pose_est(0), pose_est(1), pose_est(2);
144 double err_t = (
t - t_est).
norm();