3 #include <gtest/gtest.h>
4 #include <Eigen/Geometry>
15 Eigen::Quaterniond
fromRPY(
double roll,
double pitch,
double yaw)
17 double phi = roll / 2.0;
18 double the = pitch / 2.0;
19 double psi = yaw / 2.0;
21 double x{ 0 }, y{ 0 }, z{ 0 }, w{ 0 };
22 x = std::sin(phi) * std::cos(the) * std::cos(psi) - std::cos(phi) * std::sin(the) * std::sin(psi);
23 y = std::cos(phi) * std::sin(the) * std::cos(psi) + std::sin(phi) * std::cos(the) * std::sin(psi);
24 z = std::cos(phi) * std::cos(the) * std::sin(psi) - std::sin(phi) * std::sin(the) * std::cos(psi);
25 w = std::cos(phi) * std::cos(the) * std::cos(psi) + std::sin(phi) * std::sin(the) * std::sin(psi);
27 return Eigen::Quaterniond{ w, x, y, z };
30 TEST(TesseractURDFUnit, parse_origin)
33 std::string str = R
"(<origin xyz="0 0 0" rpy="0 0 0"/>)";
34 Eigen::Isometry3d origin;
37 EXPECT_TRUE(origin.isApprox(Eigen::Isometry3d::Identity(), 1e-8));
41 std::string str = R"(<origin xyz="0 0 0" wxyz="1 0 0 0"/>)";
42 Eigen::Isometry3d origin;
45 EXPECT_TRUE(origin.isApprox(Eigen::Isometry3d::Identity(), 1e-8));
49 std::string str = R"(<origin xyz="0 0 0" wxyz="0.8719632 0.247934 0.177848 0.3828563"/>)";
50 Eigen::Isometry3d origin;
51 Eigen::Isometry3d check = Eigen::Isometry3d::Identity();
52 check.linear() << 0.6435823, -0.5794841, 0.5000000, 0.7558624, 0.5838996, -0.2961981, -0.1203077, 0.5685591,
60 std::string str = R"(<origin xyz="0 0 0" rpy="0.3490659 0.5235988 0.7330383"/>)";
61 Eigen::Isometry3d origin;
62 Eigen::Isometry3d check = Eigen::Isometry3d::Identity();
63 check.linear() = fromRPY(0.3490659, 0.5235988, 0.7330383).toRotationMatrix();
70 std::string str = R"(<origin xyz="0 2.5 0" rpy="3.14159265359 0 0"/>)";
71 Eigen::Isometry3d origin;
74 EXPECT_TRUE(origin.translation().isApprox(Eigen::Vector3d(0, 2.5, 0), 1e-8));
75 EXPECT_TRUE(origin.matrix().col(0).head(3).isApprox(Eigen::Vector3d(1, 0, 0), 1e-8));
76 EXPECT_TRUE(origin.matrix().col(1).head(3).isApprox(Eigen::Vector3d(0, -1, 0), 1e-8));
77 EXPECT_TRUE(origin.matrix().col(2).head(3).isApprox(Eigen::Vector3d(0, 0, -1), 1e-8));
79 Eigen::Quaterniond check_q = fromRPY(3.14159265359, 0, 0);
80 Eigen::Quaterniond orig_q(origin.rotation());
82 EXPECT_TRUE(check_q.matrix().isApprox(orig_q.matrix(), 1e-8));
86 std::string str = R"(<origin xyz="0 2.5 0" rpy="3.14 0 0" wxyz="1 0 0 0"/>)";
87 Eigen::Isometry3d origin;
90 EXPECT_TRUE(origin.translation().isApprox(Eigen::Vector3d(0, 2.5, 0), 1e-8));
91 EXPECT_TRUE(origin.rotation().isApprox(Eigen::Matrix3d::Identity(), 1e-8));
95 std::string str = R"(<origin xyz="0 0 0"/>)";
96 Eigen::Isometry3d origin;
99 EXPECT_TRUE(origin.isApprox(Eigen::Isometry3d::Identity(), 1e-8));
103 std::string str = R"(<origin rpy="0 0 0"/>)";
104 Eigen::Isometry3d origin;
107 EXPECT_TRUE(origin.isApprox(Eigen::Isometry3d::Identity(), 1e-8));
111 std::string str = R"(<origin xyz="0 0 a"/>)";
112 Eigen::Isometry3d origin;
118 std::string str = R"(<origin rpy="0 0 a"/>)";
119 Eigen::Isometry3d origin;
125 std::string str = R"(<origin wxyz="1 0 0 a"/>)";
126 Eigen::Isometry3d origin;
132 std::string str = R"(<origin />)";
133 Eigen::Isometry3d origin;
139 TEST(TesseractURDFUnit, write_origin)
142 Eigen::Isometry3d origin = Eigen::Isometry3d::Identity();
149 Eigen::Isometry3d origin = Eigen::Isometry3d::Identity();
150 origin.translation() = Eigen::Vector3d(1, 2, 3);
151 origin.linear() = Eigen::Quaterniond(1, 0, 0, 0).toRotationMatrix();
154 EXPECT_EQ(text, R"(<origin xyz="1 2 3"/>)");
158 Eigen::Isometry3d origin = Eigen::Isometry3d::Identity();
159 origin.translation() = Eigen::Vector3d(1, 2, 3);
160 origin.linear() = Eigen::Quaterniond(0, 0.577, 0.577, 0.577).toRotationMatrix();
163 EXPECT_EQ(text, R"(<origin xyz="1 2 3" rpy="2.0359 -0.730089 2.03299"/>)");