3 #include <gtest/gtest.h>
5 #include <tesseract_urdf/urdf_parser.h>
24 opw_params.
a1 = (0.100);
25 opw_params.
a2 = (-0.135);
26 opw_params.
b = (0.000);
27 opw_params.
c1 = (0.615);
28 opw_params.
c2 = (0.705);
29 opw_params.
c3 = (0.755);
30 opw_params.
c4 = (0.085);
32 opw_params.
offsets[2] = -M_PI / 2.0;
39 return std::make_unique<KDLFwdKinChain>(scene_graph,
"base_link",
"tool0");
44 return std::make_unique<KDLFwdKinChain>(scene_graph,
"positioner_tool0",
"tool0");
49 return std::make_unique<KDLFwdKinChain>(scene_graph,
"positioner_base_link",
"positioner_tool0");
61 auto opw_kin = std::make_unique<OPWInvKin>(opw_params,
62 robot_fwd_kin->getBaseLinkName(),
63 robot_fwd_kin->getTipLinkNames()[0],
64 robot_fwd_kin->getJointNames());
67 Eigen::VectorXd positioner_resolution = Eigen::VectorXd::Constant(2, 1, 0.1);
68 auto rep_inv_kin = std::make_unique<REPInvKin>(
69 scene_graph, scene_state, opw_kin->clone(), 2.5, positioner_kin->clone(), positioner_resolution);
72 auto scene_graph_empty = std::make_shared<tesseract_scene_graph::SceneGraph>();
74 EXPECT_ANY_THROW(std::make_shared<REPInvKin>(
75 *scene_graph_empty, scene_state, opw_kin->clone(), 2.5, positioner_kin->clone(), positioner_resolution));
78 EXPECT_ANY_THROW(std::make_shared<REPInvKin>(
79 scene_graph, scene_state,
nullptr, 2.5, positioner_kin->clone(), positioner_resolution));
82 EXPECT_ANY_THROW(std::make_shared<REPInvKin>(
83 scene_graph, scene_state, opw_kin->clone(), -2.5, positioner_kin->clone(), positioner_resolution));
87 std::make_shared<REPInvKin>(scene_graph, scene_state, opw_kin->clone(), 2.5,
nullptr, positioner_resolution));
89 positioner_resolution = Eigen::VectorXd();
91 EXPECT_ANY_THROW(std::make_shared<REPInvKin>(
92 scene_graph, scene_state, opw_kin->clone(), 2.5, positioner_kin->clone(), positioner_resolution));
94 positioner_resolution = Eigen::VectorXd::Constant(2, -0.1);
96 EXPECT_ANY_THROW(std::make_shared<REPInvKin>(
97 scene_graph, scene_state, opw_kin->clone(), 2.5, positioner_kin->clone(), positioner_resolution));
103 TEST(TesseractKinematicsUnit, RobotWithExternalPositionerInverseKinematicUnit)
111 std::string manip_name =
"robot_external_positioner";
112 std::string base_link_name =
"base_link";
113 std::string working_frame =
"positioner_tool0";
114 std::string tip_link_name =
"tool0";
115 std::vector<std::string> joint_names{
116 "positioner_joint_1",
"positioner_joint_2",
"joint_1",
"joint_2",
"joint_3",
"joint_4",
"joint_5",
"joint_6"
122 auto inv_kin2 = inv_kin->clone();
124 std::vector<std::string> fwd_joint_names = fwd_kin->getJointNames();
125 std::vector<std::string> inv_joint_names = inv_kin->getJointNames();
129 Eigen::Isometry3d pose;
131 pose.translation()[0] = 0;
132 pose.translation()[1] = 0;
133 pose.translation()[2] = 0.1;
135 Eigen::VectorXd seed = Eigen::VectorXd::Zero(fwd_kin->numJoints());
137 EXPECT_TRUE(inv_kin !=
nullptr);
139 EXPECT_EQ(inv_kin->numJoints(), 8);
140 EXPECT_EQ(inv_kin->getBaseLinkName(), base_link_name);
141 EXPECT_EQ(inv_kin->getWorkingFrame(), working_frame);
142 EXPECT_EQ(inv_kin->getTipLinkNames().size(), 1);
143 EXPECT_EQ(inv_kin->getTipLinkNames()[0], tip_link_name);
144 EXPECT_EQ(inv_kin->getJointNames(), joint_names);
146 KinematicGroup kin_group(manip_name, joint_names, std::move(inv_kin), *scene_graph, scene_state);
151 runInvKinTest(kin_group, pose, working_frame, 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(), working_frame), all_working_frames.end());
171 runInvKinTest(kin_group_copy, pose, working_frame, tip_link_name, seed);
176 EXPECT_EQ(kin_group_copy.
getName(), manip_name);
180 EXPECT_GE(all_tip_link_names.size(), 1);
181 EXPECT_NE(std::find(all_tip_link_names.begin(), all_tip_link_names.end(), tip_link_name), all_tip_link_names.end());
184 EXPECT_GE(all_working_frames.size(), 1);
185 EXPECT_NE(std::find(all_working_frames.begin(), all_working_frames.end(), working_frame), all_working_frames.end());
189 EXPECT_TRUE(inv_kin2 !=
nullptr);
191 EXPECT_EQ(inv_kin2->numJoints(), 8);
192 EXPECT_EQ(inv_kin2->getBaseLinkName(), base_link_name);
193 EXPECT_EQ(inv_kin2->getWorkingFrame(), working_frame);
194 EXPECT_EQ(inv_kin2->getTipLinkNames().size(), 1);
195 EXPECT_EQ(inv_kin2->getTipLinkNames()[0], tip_link_name);
196 EXPECT_EQ(inv_kin2->getJointNames(), joint_names);
198 KinematicGroup kin_group2(manip_name, joint_names, std::move(inv_kin2), *scene_graph, scene_state);
200 runInvKinTest(kin_group2, pose, working_frame, tip_link_name, seed);
207 int main(
int argc,
char** argv)
209 testing::InitGoogleTest(&argc, argv);
211 return RUN_ALL_TESTS();