opw_kinematics_unit.cpp
Go to the documentation of this file.
1 
28 #include <gtest/gtest.h>
29 #include <fstream>
31 
32 #include "kinematics_test_utils.h"
37 
38 using namespace tesseract_kinematics::test_suite;
39 using namespace tesseract_kinematics;
40 
42 {
44  opw_params.a1 = (0.100);
45  opw_params.a2 = (-0.135);
46  opw_params.b = (0.000);
47  opw_params.c1 = (0.615);
48  opw_params.c2 = (0.705);
49  opw_params.c3 = (0.755);
50  opw_params.c4 = (0.085);
51 
52  opw_params.offsets[2] = -M_PI / 2.0;
53 
54  return opw_params;
55 }
56 
57 TEST(TesseractKinematicsUnit, OPWInvKinUnit) // NOLINT
58 {
59  // Inverse target pose and seed
60  Eigen::Isometry3d pose;
61  pose.setIdentity();
62  pose.translation()[0] = 1;
63  pose.translation()[1] = 0;
64  pose.translation()[2] = 1.306;
65 
66  Eigen::VectorXd seed = Eigen::VectorXd::Zero(6);
67 
68  // Setup test
70  auto scene_graph = getSceneGraphABB(locator);
71  std::string manip_name = "manip";
72  std::string base_link_name = "base_link";
73  std::string tip_link_name = "tool0";
74  std::vector<std::string> joint_names{ "joint_1", "joint_2", "joint_3", "joint_4", "joint_5", "joint_6" };
75 
76  KDLFwdKinChain fwd_kin(*scene_graph, base_link_name, tip_link_name);
77 
79 
80  auto inv_kin = std::make_shared<OPWInvKin>(opw_params, base_link_name, tip_link_name, joint_names);
81 
82  EXPECT_EQ(inv_kin->getSolverName(), OPW_INV_KIN_CHAIN_SOLVER_NAME);
83  EXPECT_EQ(inv_kin->numJoints(), 6);
84  EXPECT_EQ(inv_kin->getBaseLinkName(), base_link_name);
85  EXPECT_EQ(inv_kin->getWorkingFrame(), base_link_name);
86  EXPECT_EQ(inv_kin->getTipLinkNames().size(), 1);
87  EXPECT_EQ(inv_kin->getTipLinkNames()[0], tip_link_name);
88  EXPECT_EQ(inv_kin->getJointNames(), joint_names);
89 
90  runInvKinTest(*inv_kin, fwd_kin, pose, tip_link_name, seed);
91 
92  // Check cloned
93  InverseKinematics::Ptr inv_kin2 = inv_kin->clone();
94  EXPECT_TRUE(inv_kin2 != nullptr);
95  EXPECT_EQ(inv_kin2->getSolverName(), OPW_INV_KIN_CHAIN_SOLVER_NAME);
96  EXPECT_EQ(inv_kin2->numJoints(), 6);
97  EXPECT_EQ(inv_kin2->getBaseLinkName(), base_link_name);
98  EXPECT_EQ(inv_kin2->getWorkingFrame(), base_link_name);
99  EXPECT_EQ(inv_kin2->getTipLinkNames().size(), 1);
100  EXPECT_EQ(inv_kin2->getTipLinkNames()[0], tip_link_name);
101  EXPECT_EQ(inv_kin2->getJointNames(), joint_names);
102 
103  runInvKinTest(*inv_kin2, fwd_kin, pose, tip_link_name, seed);
104 }
105 
106 TEST(TesseractKinematicsUnit, OPWInvKinGroupUnit) // NOLINT
107 {
108  // Inverse target pose and seed
109  Eigen::Isometry3d pose;
110  pose.setIdentity();
111  pose.translation()[0] = 1;
112  pose.translation()[1] = 0;
113  pose.translation()[2] = 1.306;
114 
115  Eigen::VectorXd seed = Eigen::VectorXd::Zero(6);
116 
117  // Setup test
119  auto scene_graph = getSceneGraphABB(locator);
120  std::string manip_name = "manip";
121  std::string base_link_name = "base_link";
122  std::string tip_link_name = "tool0";
123  std::vector<std::string> joint_names{ "joint_1", "joint_2", "joint_3", "joint_4", "joint_5", "joint_6" };
124 
126 
127  auto inv_kin = std::make_unique<OPWInvKin>(opw_params, base_link_name, tip_link_name, joint_names);
128 
129  tesseract_scene_graph::KDLStateSolver state_solver(*scene_graph);
130  tesseract_scene_graph::SceneState scene_state = state_solver.getState();
131 
132  KinematicGroup kin_group(manip_name, joint_names, std::move(inv_kin), *scene_graph, scene_state);
133 
134  runInvKinTest(kin_group, pose, base_link_name, tip_link_name, seed);
135 
136  auto abb_joint_2 = scene_graph->getJoint("joint_2");
137  abb_joint_2->limits->lower = -3.49065;
138  abb_joint_2->limits->upper = 1.57079;
139 
140  auto inv_kin2 = std::make_unique<OPWInvKin>(opw_params, base_link_name, tip_link_name, joint_names);
141  KinematicGroup kin_group2(manip_name, joint_names, std::move(inv_kin2), *scene_graph, scene_state);
142 
143  Eigen::Isometry3d pose2;
144  pose2.setIdentity();
145  pose2.translation()[0] = -0.268141;
146  pose2.translation()[1] = -0.023459;
147  pose2.translation()[2] = -0.753010;
148  pose2.linear() = Eigen::Quaterniond(0.0, 0.0, 1.0, 0.0).matrix();
149 
150  runInvKinTest(kin_group2, pose2, base_link_name, tip_link_name, seed);
151 }
152 
153 int main(int argc, char** argv)
154 {
155  testing::InitGoogleTest(&argc, argv);
156 
157  return RUN_ALL_TESTS();
158 }
tesseract_scene_graph::KDLStateSolver::getState
SceneState getState() const override final
kdl_fwd_kin_chain.h
Tesseract KDL forward kinematics chain implementation.
opw_kinematics::Parameters::a2
T a2
kinematics_test_utils.h
opw_kinematics::Parameters::c3
T c3
tesseract_kinematics::OPW_INV_KIN_CHAIN_SOLVER_NAME
static const std::string OPW_INV_KIN_CHAIN_SOLVER_NAME
Definition: opw_inv_kin.h:38
TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
#define TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
getOPWKinematicsParamABB
opw_kinematics::Parameters< double > getOPWKinematicsParamABB()
Definition: opw_kinematics_unit.cpp:41
tesseract_scene_graph::SceneState
opw_inv_kin.h
Tesseract OPW Inverse kinematics Wrapper.
opw_kinematics::Parameters::c1
T c1
opw_kinematics::Parameters::offsets
std::array< T, 6 > offsets
tesseract_scene_graph::KDLStateSolver
opw_kinematics::Parameters::b
T b
main
int main(int argc, char **argv)
Definition: opw_kinematics_unit.cpp:153
tesseract_kinematics::KDLFwdKinChain
KDL kinematic chain implementation.
Definition: kdl_fwd_kin_chain.h:49
tesseract_kinematics::test_suite
Definition: kinematics_test_utils.h:53
kinematic_group.h
A kinematic group with forward and inverse kinematics methods.
opw_kinematics::Parameters::a1
T a1
TESSERACT_COMMON_IGNORE_WARNINGS_POP
#define TESSERACT_COMMON_IGNORE_WARNINGS_POP
TEST
TEST(TesseractKinematicsUnit, OPWInvKinUnit)
Definition: opw_kinematics_unit.cpp:57
tesseract_kinematics::InverseKinematics::Ptr
std::shared_ptr< InverseKinematics > Ptr
Definition: inverse_kinematics.h:50
tesseract_kinematics
Definition: forward_kinematics.h:40
opw_parameters.h
tesseract_common::GeneralResourceLocator
opw_kinematics::Parameters< double >
macros.h
tesseract_kinematics::test_suite::runInvKinTest
void runInvKinTest(const tesseract_kinematics::InverseKinematics &inv_kin, const tesseract_kinematics::ForwardKinematics &fwd_kin, const Eigen::Isometry3d &target_pose, const std::string &tip_link_name, const Eigen::VectorXd &seed)
Run inverse kinematics test comparing the inverse solution to the forward solution.
Definition: kinematics_test_utils.h:458
tesseract_kinematics::KinematicGroup
Definition: kinematic_group.h:75
opw_kinematics::Parameters::c2
T c2
opw_kinematics::Parameters::c4
T c4
tesseract_kinematics::test_suite::getSceneGraphABB
tesseract_scene_graph::SceneGraph::UPtr getSceneGraphABB(const tesseract_common::ResourceLocator &locator)
Definition: kinematics_test_utils.h:77


tesseract_kinematics
Author(s): Levi Armstrong
autogenerated on Sun May 18 2025 03:02:14