def setUp(self): self.geom = ArmKinematics((104.4, 104.4, 99.0))
class IKCase(unittest.TestCase): def setUp(self): self.geom = ArmKinematics((104.4, 104.4, 99.0)) def test_01(self): alpha, beta, gamma, delta = self.geom.ik( x=0, y=0, z=self.geom.l1 + self.geom.l2 + self.geom.l3, pitch=0 ) self.assertEqual(alpha, 0) self.assertEqual(beta, 0) self.assertAlmostEqual(gamma, math.pi, 4) self.assertAlmostEqual(delta, math.pi, 4) def test_02(self): alpha, beta, gamma, delta = self.geom.ik( x=0, y=self.geom.l1 + self.geom.l2 + self.geom.l3, z=0, pitch=math.pi / 2 ) self.assertEqual(alpha, 0) self.assertEqual(beta, math.pi / 2) self.assertAlmostEqual(gamma, math.pi, 4) self.assertAlmostEqual(delta, math.pi, 4) def test_03(self): alpha, beta, gamma, delta = self.geom.ik( x=0, y=(self.geom.l1 + self.geom.l2 + self.geom.l3) * math.sin(math.pi / 4), z=(self.geom.l1 + self.geom.l2 + self.geom.l3) * math.cos(math.pi / 4), pitch=math.pi / 4 ) self.assertEqual(alpha, 0) self.assertAlmostEqual(beta, math.pi / 4, 4) self.assertAlmostEqual(gamma, math.pi, 4) self.assertAlmostEqual(delta, math.pi, 4) def test_04(self): alpha, beta, gamma, delta = self.geom.ik( x=0, y=0, z=self.geom.l1 * math.cos(math.pi / 4) + self.geom.l2 * math.cos(math.pi / 4) + self.geom.l3, pitch=0 ) self.assertEqual(alpha, 0) self.assertAlmostEqual(beta, math.pi / 4, 4) self.assertAlmostEqual(gamma, math.pi / 2, 4) self.assertAlmostEqual(delta, math.pi * 5 / 4, 4) def test_05(self): alpha, beta, gamma, delta = self.geom.ik( x=0, y=-self.geom.l3, z=self.geom.l1 * math.cos(math.pi / 4) + self.geom.l2 * math.cos(math.pi / 4), pitch=-math.pi / 2 ) self.assertEqual(alpha, 0) self.assertAlmostEqual(beta, math.pi / 4, 4) self.assertAlmostEqual(gamma, math.pi / 2, 4) self.assertAlmostEqual(delta, math.pi * 3 / 4, 4) def test_06_out_of_reach(self): with self.assertRaises(ValueError): self.geom.ik( x=0, y=0, z=self.geom.l1 + self.geom.l2 + self.geom.l3 + 10, pitch=0 )