@@ -63,6 +63,83 @@ void runFwdKinTest(tesseract_kinematics::ForwardKinematics& kin)
6363 // /////////////////////////
6464 // Test forward kinematics
6565 // /////////////////////////
66+ {
67+ pose.setIdentity ();
68+ EXPECT_TRUE (kin.calcFwdKin (pose, jvals, " link_1" ));
69+ Eigen::Isometry3d result;
70+ result.setIdentity ();
71+ result.translation ()[0 ] = 0 ;
72+ result.translation ()[1 ] = 0 ;
73+ result.translation ()[2 ] = 0 ;
74+ EXPECT_TRUE (pose.isApprox (result));
75+ }
76+
77+ {
78+ pose.setIdentity ();
79+ EXPECT_TRUE (kin.calcFwdKin (pose, jvals, " link_2" ));
80+ Eigen::Isometry3d result;
81+ result.setIdentity ();
82+ result.translation ()[0 ] = -0.00043624 ;
83+ result.translation ()[1 ] = 0 ;
84+ result.translation ()[2 ] = 0.36 ;
85+ EXPECT_TRUE (pose.isApprox (result));
86+ }
87+
88+ {
89+ pose.setIdentity ();
90+ EXPECT_TRUE (kin.calcFwdKin (pose, jvals, " link_3" ));
91+ Eigen::Isometry3d result;
92+ result.setIdentity ();
93+ result.translation ()[0 ] = -0.00043624 ;
94+ result.translation ()[1 ] = 0 ;
95+ result.translation ()[2 ] = 0.36 ;
96+ EXPECT_TRUE (pose.isApprox (result));
97+ }
98+
99+ {
100+ pose.setIdentity ();
101+ EXPECT_TRUE (kin.calcFwdKin (pose, jvals, " link_4" ));
102+ Eigen::Isometry3d result;
103+ result.setIdentity ();
104+ result.translation ()[0 ] = 0 ;
105+ result.translation ()[1 ] = 0 ;
106+ result.translation ()[2 ] = 0.36 + 0.42 ;
107+ EXPECT_TRUE (pose.isApprox (result));
108+ }
109+
110+ {
111+ pose.setIdentity ();
112+ EXPECT_TRUE (kin.calcFwdKin (pose, jvals, " link_5" ));
113+ Eigen::Isometry3d result;
114+ result.setIdentity ();
115+ result.translation ()[0 ] = 0 ;
116+ result.translation ()[1 ] = 0 ;
117+ result.translation ()[2 ] = 0.36 + 0.42 ;
118+ EXPECT_TRUE (pose.isApprox (result));
119+ }
120+
121+ {
122+ pose.setIdentity ();
123+ EXPECT_TRUE (kin.calcFwdKin (pose, jvals, " link_6" ));
124+ Eigen::Isometry3d result;
125+ result.setIdentity ();
126+ result.translation ()[0 ] = 0 ;
127+ result.translation ()[1 ] = 0 ;
128+ result.translation ()[2 ] = 0.36 + 0.42 + 0.4 ;
129+ EXPECT_TRUE (pose.isApprox (result));
130+ }
131+
132+ {
133+ pose.setIdentity ();
134+ EXPECT_TRUE (kin.calcFwdKin (pose, jvals, " link_7" ));
135+ Eigen::Isometry3d result;
136+ result.setIdentity ();
137+ result.translation ()[0 ] = 0 ;
138+ result.translation ()[1 ] = 0 ;
139+ result.translation ()[2 ] = 0.36 + 0.42 + 0.4 ;
140+ EXPECT_TRUE (pose.isApprox (result));
141+ }
142+
66143 pose.setIdentity ();
67144 EXPECT_TRUE (kin.calcFwdKin (pose, jvals, " tool0" ));
68145 Eigen::Isometry3d result;
@@ -73,6 +150,29 @@ void runFwdKinTest(tesseract_kinematics::ForwardKinematics& kin)
73150 EXPECT_TRUE (pose.isApprox (result));
74151}
75152
153+ void runJacobianTestHelper (tesseract_kinematics::ForwardKinematics& kin,
154+ const Eigen::VectorXd& jvals,
155+ const std::string& link_name,
156+ const Eigen::Vector3d& link_point,
157+ const Eigen::Isometry3d& change_base)
158+ {
159+ Eigen::MatrixXd jacobian, numerical_jacobian;
160+ Eigen::Isometry3d pose;
161+ kin.calcFwdKin (pose, jvals, link_name);
162+
163+ jacobian.resize (6 , 7 );
164+ EXPECT_TRUE (kin.calcJacobian (jacobian, jvals, link_name));
165+ tesseract_kinematics::jacobianChangeBase (jacobian, change_base);
166+ tesseract_kinematics::jacobianChangeRefPoint (jacobian, (change_base * pose).linear () * link_point);
167+
168+ numerical_jacobian.resize (6 , 7 );
169+ tesseract_kinematics::numericalJacobian (numerical_jacobian, change_base, kin, jvals, link_name, link_point);
170+
171+ for (int i = 0 ; i < 6 ; ++i)
172+ for (int j = 0 ; j < 7 ; ++j)
173+ EXPECT_NEAR (numerical_jacobian (i, j), jacobian (i, j), 1e-3 );
174+ }
175+
76176void runJacobianTest (tesseract_kinematics::ForwardKinematics& kin)
77177{
78178 // ////////////////////////////////////////////////////////////////
@@ -93,17 +193,16 @@ void runJacobianTest(tesseract_kinematics::ForwardKinematics& kin)
93193 // /////////////////////////
94194 // Test Jacobian
95195 // /////////////////////////
96- jacobian.resize (6 , 7 );
97- EXPECT_TRUE (kin.calcJacobian (jacobian, jvals, " tool0" ));
98-
99196 Eigen::Vector3d link_point (0 , 0 , 0 );
100- numerical_jacobian.resize (6 , 7 );
101- tesseract_kinematics::numericalJacobian (
102- numerical_jacobian, Eigen::Isometry3d::Identity (), kin, jvals, " tool0" , link_point);
103-
104- for (int i = 0 ; i < 6 ; ++i)
105- for (int j = 0 ; j < 7 ; ++j)
106- EXPECT_NEAR (numerical_jacobian (i, j), jacobian (i, j), 1e-3 );
197+ runJacobianTestHelper (kin, jvals, " base_link" , link_point, Eigen::Isometry3d::Identity ());
198+ runJacobianTestHelper (kin, jvals, " link_1" , link_point, Eigen::Isometry3d::Identity ());
199+ runJacobianTestHelper (kin, jvals, " link_2" , link_point, Eigen::Isometry3d::Identity ());
200+ runJacobianTestHelper (kin, jvals, " link_3" , link_point, Eigen::Isometry3d::Identity ());
201+ runJacobianTestHelper (kin, jvals, " link_4" , link_point, Eigen::Isometry3d::Identity ());
202+ runJacobianTestHelper (kin, jvals, " link_5" , link_point, Eigen::Isometry3d::Identity ());
203+ runJacobianTestHelper (kin, jvals, " link_6" , link_point, Eigen::Isometry3d::Identity ());
204+ runJacobianTestHelper (kin, jvals, " link_7" , link_point, Eigen::Isometry3d::Identity ());
205+ runJacobianTestHelper (kin, jvals, " tool0" , link_point, Eigen::Isometry3d::Identity ());
107206
108207 // /////////////////////////
109208 // Test Jacobian at Point
@@ -115,17 +214,15 @@ void runJacobianTest(tesseract_kinematics::ForwardKinematics& kin)
115214 Eigen::Vector3d link_point (0 , 0 , 0 );
116215 link_point[k] = 1 ;
117216
118- // calcJacobian requires the link point to be in the base frame for which the jacobian is calculated.
119- EXPECT_TRUE (kin.calcJacobian (jacobian, jvals, " tool0" ));
120- tesseract_kinematics::jacobianChangeRefPoint (jacobian, pose.linear () * link_point);
121-
122- numerical_jacobian.resize (6 , 7 );
123- tesseract_kinematics::numericalJacobian (
124- numerical_jacobian, Eigen::Isometry3d::Identity (), kin, jvals, " tool0" , link_point);
125-
126- for (int i = 0 ; i < 6 ; ++i)
127- for (int j = 0 ; j < 7 ; ++j)
128- EXPECT_NEAR (numerical_jacobian (i, j), jacobian (i, j), 1e-3 );
217+ runJacobianTestHelper (kin, jvals, " base_link" , link_point, Eigen::Isometry3d::Identity ());
218+ runJacobianTestHelper (kin, jvals, " link_1" , link_point, Eigen::Isometry3d::Identity ());
219+ runJacobianTestHelper (kin, jvals, " link_2" , link_point, Eigen::Isometry3d::Identity ());
220+ runJacobianTestHelper (kin, jvals, " link_3" , link_point, Eigen::Isometry3d::Identity ());
221+ runJacobianTestHelper (kin, jvals, " link_4" , link_point, Eigen::Isometry3d::Identity ());
222+ runJacobianTestHelper (kin, jvals, " link_5" , link_point, Eigen::Isometry3d::Identity ());
223+ runJacobianTestHelper (kin, jvals, " link_6" , link_point, Eigen::Isometry3d::Identity ());
224+ runJacobianTestHelper (kin, jvals, " link_7" , link_point, Eigen::Isometry3d::Identity ());
225+ runJacobianTestHelper (kin, jvals, " tool0" , link_point, Eigen::Isometry3d::Identity ());
129226 }
130227
131228 // /////////////////////////////////////////
@@ -143,15 +240,15 @@ void runJacobianTest(tesseract_kinematics::ForwardKinematics& kin)
143240 change_base.translation () = Eigen::Vector3d (0 , 0 , 0 );
144241 change_base.translation ()[k] = 1 ;
145242
146- EXPECT_TRUE (kin. calcJacobian (jacobian , jvals, " tool0 " ) );
147- tesseract_kinematics::jacobianChangeBase (jacobian , change_base);
148-
149- numerical_jacobian. resize ( 6 , 7 );
150- tesseract_kinematics::numericalJacobian (numerical_jacobian, change_base, kin, jvals, " tool0 " , link_point);
151-
152- for ( int i = 0 ; i < 6 ; ++i)
153- for ( int j = 0 ; j < 7 ; ++j)
154- EXPECT_NEAR ( numerical_jacobian (i, j), jacobian (i, j), 1e-3 );
243+ runJacobianTestHelper (kin, jvals, " base_link " , link_point, change_base );
244+ runJacobianTestHelper (kin, jvals, " link_1 " , link_point , change_base);
245+ runJacobianTestHelper (kin, jvals, " link_2 " , link_point, change_base);
246+ runJacobianTestHelper (kin, jvals, " link_3 " , link_point, change_base );
247+ runJacobianTestHelper ( kin, jvals, " link_4 " , link_point, change_base );
248+ runJacobianTestHelper (kin, jvals, " link_5 " , link_point, change_base);
249+ runJacobianTestHelper (kin, jvals, " link_6 " , link_point, change_base);
250+ runJacobianTestHelper (kin, jvals, " link_7 " , link_point, change_base);
251+ runJacobianTestHelper (kin, jvals, " tool0 " , link_point, change_base );
155252 }
156253
157254 // /////////////////////////////////////////
@@ -170,18 +267,15 @@ void runJacobianTest(tesseract_kinematics::ForwardKinematics& kin)
170267 change_base (1 , 1 ) = 0 ;
171268 change_base.translation () = link_point;
172269
173- kin.calcFwdKin (pose, jvals, " tool0" );
174- // calcJacobian requires the link point to be in the base frame for which the jacobian is calculated.
175- EXPECT_TRUE (kin.calcJacobian (jacobian, jvals, " tool0" ));
176- tesseract_kinematics::jacobianChangeBase (jacobian, change_base);
177- tesseract_kinematics::jacobianChangeRefPoint (jacobian, (change_base * pose).linear () * link_point);
178-
179- numerical_jacobian.resize (6 , 7 );
180- tesseract_kinematics::numericalJacobian (numerical_jacobian, change_base, kin, jvals, " tool0" , link_point);
181-
182- for (int i = 0 ; i < 6 ; ++i)
183- for (int j = 0 ; j < 7 ; ++j)
184- EXPECT_NEAR (numerical_jacobian (i, j), jacobian (i, j), 1e-3 );
270+ runJacobianTestHelper (kin, jvals, " base_link" , link_point, change_base);
271+ runJacobianTestHelper (kin, jvals, " link_1" , link_point, change_base);
272+ runJacobianTestHelper (kin, jvals, " link_2" , link_point, change_base);
273+ runJacobianTestHelper (kin, jvals, " link_3" , link_point, change_base);
274+ runJacobianTestHelper (kin, jvals, " link_4" , link_point, change_base);
275+ runJacobianTestHelper (kin, jvals, " link_5" , link_point, change_base);
276+ runJacobianTestHelper (kin, jvals, " link_6" , link_point, change_base);
277+ runJacobianTestHelper (kin, jvals, " link_7" , link_point, change_base);
278+ runJacobianTestHelper (kin, jvals, " tool0" , link_point, change_base);
185279 }
186280}
187281
0 commit comments