@@ -116,7 +116,7 @@ unittest(test_constructor)
116116
117117unittest (test_solve)
118118{
119- uint8_t success = 0 ;
119+ int success = 0 ;
120120 int lengths_3_joints[] = {200 , 200 };
121121 int lengths_4_joints[] = {200 , 200 , 200 };
122122
@@ -146,28 +146,46 @@ unittest(test_solve)
146146 assertEqualFloat (100 , fabrik2D_3_2DOF.getX (2 ), fabrik2D_3_2DOF.getTolerance ());
147147 assertEqualFloat (100 , fabrik2D_3_2DOF.getY (2 ), fabrik2D_3_2DOF.getTolerance ());
148148
149+ // Test Set Joints
150+ float angles[] = {a1, a2};
151+ fprintf (stderr, " Test Set Joints\n " );
152+ fabrik2D_3_2DOF.setJoints (angles, lengths_3_joints);
153+ assertEqualFloat (100 , fabrik2D_3_2DOF.getX (2 ), 1e-3 );
154+ assertEqualFloat (100 , fabrik2D_3_2DOF.getY (2 ), 1e-3 );
155+
156+ // Test Solve Fail
157+ fprintf (stderr, " Test Solve Fail\n " );
158+ success = fabrik2D_3_2DOF.solve (1000 , 1000 , lengths_3_joints);
159+ assertEqual (0 , success);
160+
161+ // Test Solve tolerance too low
162+ fprintf (stderr, " Test Solve tolerance too low\n " );
163+ fabrik2D_3_2DOF.setTolerance (0.001 );
164+ success = fabrik2D_3_2DOF.solve (100 , 100 , lengths_3_joints);
165+ assertEqual (2 , success);
166+
149167 // Solve 4 joints, 3DOF
150- fprintf (stderr, " Solve 4 joints, 3DOF\n " );
151- Fabrik2D fabrik2D_3_3DOF (3 , lengths_4_joints, 10 );
152- success = fabrik2D_3_3DOF.solve (150 , 50 , -HALF_PI, lengths_4_joints);
168+ fprintf (stderr, " Solve 4 joints, 3DOF (tool angle) \n " );
169+ Fabrik2D fabrik2D_3_3DOF (4 , lengths_4_joints, 10 );
170+ success = fabrik2D_3_3DOF.solve (50 , 50 , -HALF_PI, lengths_4_joints);
153171 assertEqual (1 , success);
154172
155- assertEqualFloat (150 , fabrik2D_3_3DOF.getX (3 ), fabrik2D_3_3DOF.getTolerance ());
173+ assertEqualFloat (50 , fabrik2D_3_3DOF.getX (3 ), fabrik2D_3_3DOF.getTolerance ());
156174 assertEqualFloat (50 , fabrik2D_3_3DOF.getY (3 ), fabrik2D_3_3DOF.getTolerance ());
157175
158- assertEqualFloat (150 , fabrik2D_3_3DOF.getX (2 ), fabrik2D_3_3DOF.getTolerance ());
176+ assertEqualFloat (50 , fabrik2D_3_3DOF.getX (2 ), fabrik2D_3_3DOF.getTolerance ());
159177 assertEqualFloat (250 , fabrik2D_3_3DOF.getY (2 ), fabrik2D_3_3DOF.getTolerance ());
160178
161- // Solve 4 joints, 3DOF, Gripping offset
179+ // Solve 4 joints, 3DOF (tool angle) , Gripping offset
162180 fprintf (stderr, " Solve 4 joints, 3DOF, Gripping offset\n " );
163- Fabrik2D fabrik2D_3_3DOF_GO (3 , lengths_4_joints, 1 );
164- success = fabrik2D_3_3DOF_GO.solve (150 , 50 , -HALF_PI, 10 , lengths_4_joints);
181+ Fabrik2D fabrik2D_3_3DOF_GO (4 , lengths_4_joints, 1 );
182+ success = fabrik2D_3_3DOF_GO.solve (50 , 50 , -HALF_PI, 10 , lengths_4_joints);
165183 assertEqual (1 , success);
166184
167- assertEqualFloat (150 , fabrik2D_3_3DOF_GO.getX (3 ), fabrik2D_3_3DOF_GO.getTolerance ());
185+ assertEqualFloat (50 , fabrik2D_3_3DOF_GO.getX (3 ), fabrik2D_3_3DOF_GO.getTolerance ());
168186 assertEqualFloat (60 , fabrik2D_3_3DOF_GO.getY (3 ), fabrik2D_3_3DOF_GO.getTolerance ());
169187
170- assertEqualFloat (150 , fabrik2D_3_3DOF_GO.getX (2 ), fabrik2D_3_3DOF_GO.getTolerance ());
188+ assertEqualFloat (50 , fabrik2D_3_3DOF_GO.getX (2 ), fabrik2D_3_3DOF_GO.getTolerance ());
171189 assertEqualFloat (260 , fabrik2D_3_3DOF_GO.getY (2 ), fabrik2D_3_3DOF_GO.getTolerance ());
172190
173191 // Solve 4 joints, 3DOF
@@ -200,17 +218,45 @@ unittest(test_solve)
200218 // Solve 4 joints, 4DOF, Gripping offset
201219 fprintf (stderr, " Solve 4 joints, 4DOF, Gripping offset\n " );
202220 Fabrik2D fabrik2D_4_4DOF_GO (4 , lengths_4_joints, 1 );
203- success = fabrik2D_4_4DOF_GO.solve (150 , 50 , -HALF_PI, 10 , lengths_4_joints);
221+ success = fabrik2D_4_4DOF_GO.solve2 (150 , 50 , 0 , -HALF_PI, 10 , lengths_4_joints);
204222 assertEqual (1 , success);
205223
206224 assertEqualFloat (150 , fabrik2D_4_4DOF_GO.getX (3 ), fabrik2D_4_4DOF_GO.getTolerance ());
207225 assertEqualFloat (60 , fabrik2D_4_4DOF_GO.getY (3 ), fabrik2D_4_4DOF_GO.getTolerance ());
208- assertEqualFloat (100 , fabrik2D_4_4DOF_GO.getZ (3 ), fabrik2D_4_4DOF_GO.getTolerance ());
226+ assertEqualFloat (0 , fabrik2D_4_4DOF_GO.getZ (3 ), fabrik2D_4_4DOF_GO.getTolerance ());
209227
210228 assertEqualFloat (150 , fabrik2D_4_4DOF_GO.getX (2 ), fabrik2D_4_4DOF_GO.getTolerance ());
211229 assertEqualFloat (260 , fabrik2D_4_4DOF_GO.getY (2 ), fabrik2D_4_4DOF_GO.getTolerance ());
230+
231+ // Test Set Base Angle
232+ fprintf (stderr, " Test Set Base Angle\n " );
233+ fprintf (stderr, " Test Set Base Angle %f\n " , HALF_PI - fabrik2D_4_4DOF_GO.getChain ()->angle );
234+ fabrik2D_4_4DOF_GO.setBaseAngle (HALF_PI);
235+ assertEqualFloat (0 , fabrik2D_4_4DOF_GO.getX (3 ), fabrik2D_4_4DOF_GO.getTolerance ());
236+ assertEqualFloat (60 , fabrik2D_4_4DOF_GO.getY (3 ), fabrik2D_4_4DOF_GO.getTolerance ());
237+ assertEqualFloat (150 , fabrik2D_4_4DOF_GO.getZ (3 ), fabrik2D_4_4DOF_GO.getTolerance ());
238+
212239}
213240
241+ unittest (test_getters_setters)
242+ {
243+ int lengths[] = {200 , 200 };
244+ Fabrik2D fabrik2D (3 , lengths);
245+
246+ fabrik2D.setTolerance (20 );
247+ assertEqual (20 , fabrik2D.getTolerance ());
248+
249+ fabrik2D.setBaseAngle (HALF_PI);
250+ assertEqualFloat (HALF_PI, fabrik2D.getBaseAngle (), 1e-3 );
251+
252+ assertEqual (0 , fabrik2D.getZ ());
253+ assertEqual (0 , fabrik2D.getAngle (0 ));
254+ assertEqual (0 , fabrik2D.getAngle (1 ));
255+ assertEqual (200 , fabrik2D.getY (1 ));
256+ assertEqual (400 , fabrik2D.getY (2 ));
257+ assertEqual (0 , fabrik2D.getX (0 ));
258+ assertEqual (0 , fabrik2D.getX (1 ));
259+ }
214260
215261unittest_main ()
216262
0 commit comments