3 #include <gtest/gtest.h>
5 #include <tesseract_urdf/urdf_parser.h>
23 opw_params.
a1 = (0.100);
24 opw_params.
a2 = (-0.135);
25 opw_params.
b = (0.000);
26 opw_params.
c1 = (0.615);
27 opw_params.
c2 = (0.705);
28 opw_params.
c3 = (0.755);
29 opw_params.
c4 = (0.085);
31 opw_params.
offsets[2] = -M_PI / 2.0;
38 return std::make_unique<KDLFwdKinChain>(scene_graph,
"base_link",
"tool0");
43 return std::make_unique<KDLFwdKinChain>(scene_graph,
"positioner_base_link",
"tool0");
48 return std::make_unique<KDLFwdKinChain>(scene_graph,
"positioner_base_link",
"positioner_tool0");
60 auto opw_kin = std::make_unique<OPWInvKin>(opw_params,
61 robot_fwd_kin->getBaseLinkName(),
62 robot_fwd_kin->getTipLinkNames()[0],
63 robot_fwd_kin->getJointNames());
66 Eigen::VectorXd positioner_resolution = Eigen::VectorXd::Constant(1, 1, 0.1);
67 auto rop_inv_kin = std::make_unique<ROPInvKin>(
68 scene_graph, scene_state, opw_kin->clone(), 2.5, positioner_kin->clone(), positioner_resolution);
73 EXPECT_ANY_THROW(std::make_unique<ROPInvKin>(
74 scene_graph_empty, scene_state, opw_kin->clone(), 2.5, positioner_kin->clone(), positioner_resolution));
77 EXPECT_ANY_THROW(std::make_unique<ROPInvKin>(
78 scene_graph, scene_state,
nullptr, 2.5, positioner_kin->clone(), positioner_resolution));
81 EXPECT_ANY_THROW(std::make_unique<ROPInvKin>(
82 scene_graph, scene_state, opw_kin->clone(), -2.5, positioner_kin->clone(), positioner_resolution));
86 std::make_unique<ROPInvKin>(scene_graph, scene_state, opw_kin->clone(), 2.5,
nullptr, positioner_resolution));
88 positioner_resolution = Eigen::VectorXd();
90 EXPECT_ANY_THROW(std::make_unique<ROPInvKin>(
91 scene_graph, scene_state, opw_kin->clone(), 2.5, positioner_kin->clone(), positioner_resolution));
93 positioner_resolution = Eigen::VectorXd::Constant(1, -0.1);
95 EXPECT_ANY_THROW(std::make_unique<ROPInvKin>(
96 scene_graph, scene_state, opw_kin->clone(), 2.5, positioner_kin->clone(), positioner_resolution));
102 TEST(TesseractKinematicsUnit, RobotOnPositionerInverseKinematicUnit)
110 std::string manip_name =
"robot_on_positioner";
111 std::string base_link_name =
"positioner_base_link";
112 std::string tip_link_name =
"tool0";
113 std::vector<std::string> joint_names{
114 "positioner_joint_1",
"joint_1",
"joint_2",
"joint_3",
"joint_4",
"joint_5",
"joint_6"
120 auto inv_kin2 = inv_kin->clone();
122 std::vector<std::string> fwd_joint_names = fwd_kin->getJointNames();
123 std::vector<std::string> inv_joint_names = inv_kin->getJointNames();
127 Eigen::Isometry3d pose;
129 pose.translation()[0] = 1;
130 pose.translation()[1] = 0;
131 pose.translation()[2] = 1.306;
133 Eigen::VectorXd seed = Eigen::VectorXd::Zero(fwd_kin->numJoints());
135 EXPECT_TRUE(inv_kin !=
nullptr);
137 EXPECT_EQ(inv_kin->numJoints(), 7);
138 EXPECT_EQ(inv_kin->getBaseLinkName(), base_link_name);
139 EXPECT_EQ(inv_kin->getWorkingFrame(), base_link_name);
140 EXPECT_EQ(inv_kin->getTipLinkNames().size(), 1);
141 EXPECT_EQ(inv_kin->getTipLinkNames()[0], tip_link_name);
142 EXPECT_EQ(inv_kin->getJointNames(), joint_names);
144 runInvKinTest(*inv_kin, *fwd_kin, pose, tip_link_name, seed);
146 KinematicGroup kin_group(manip_name, joint_names, std::move(inv_kin), *scene_graph, scene_state);
151 runInvKinTest(kin_group, pose, base_link_name, tip_link_name, seed);
156 EXPECT_EQ(kin_group.
getName(), manip_name);
160 EXPECT_GE(all_tip_link_names.size(), 1);
161 EXPECT_NE(std::find(all_tip_link_names.begin(), all_tip_link_names.end(), tip_link_name), all_tip_link_names.end());
164 EXPECT_GE(all_working_frames.size(), 1);
165 EXPECT_NE(std::find(all_working_frames.begin(), all_working_frames.end(), base_link_name),
166 all_working_frames.end());
172 runInvKinTest(kin_group_copy, pose, base_link_name, tip_link_name, seed);
177 EXPECT_EQ(kin_group_copy.
getName(), manip_name);
181 EXPECT_GE(all_tip_link_names.size(), 1);
182 EXPECT_NE(std::find(all_tip_link_names.begin(), all_tip_link_names.end(), tip_link_name), all_tip_link_names.end());
185 EXPECT_GE(all_working_frames.size(), 1);
186 EXPECT_NE(std::find(all_working_frames.begin(), all_working_frames.end(), base_link_name),
187 all_working_frames.end());
191 EXPECT_TRUE(inv_kin2 !=
nullptr);
193 EXPECT_EQ(inv_kin2->numJoints(), 7);
194 EXPECT_EQ(inv_kin2->getBaseLinkName(), base_link_name);
195 EXPECT_EQ(inv_kin2->getWorkingFrame(), base_link_name);
196 EXPECT_EQ(inv_kin2->getTipLinkNames().size(), 1);
197 EXPECT_EQ(inv_kin2->getTipLinkNames()[0], tip_link_name);
198 EXPECT_EQ(inv_kin2->getJointNames(), joint_names);
200 runInvKinTest(*inv_kin2, *fwd_kin, pose, tip_link_name, seed);
202 KinematicGroup kin_group2(manip_name, joint_names, std::move(inv_kin2), *scene_graph, scene_state);
204 runInvKinTest(kin_group2, pose, base_link_name, tip_link_name, seed);
211 int main(
int argc,
char** argv)
213 testing::InitGoogleTest(&argc, argv);
215 return RUN_ALL_TESTS();