5 from numpy.linalg
import inv
6 from random
import random
8 from eigenpy
import AngleAxis
9 import pinocchio
as pin
16 computeRpyJacobianInverse,
17 computeRpyJacobianTimeDerivative,
20 from test_case
import PinocchioTestCase
as TestCase
25 m = np.array(list(range(9)))
26 self.assertEqual(
npToTuple(m), tuple(range(9)))
27 self.assertEqual(
npToTuple(m.T), tuple(range(9)))
29 npToTuple(np.reshape(m, (3, 3))), ((0, 1, 2), (3, 4, 5), (6, 7, 8))
35 np.array([[1.0, 0.0, 0.0], [0.0, 0.0, -1.0], [0.0, 1.0, 0.0]]),
37 self.assertApprox(rotate(
"x", pi).dot(rotate(
"y", pi)), rotate(
"z", pi))
38 m = rotate(
"x", pi / 3).dot(rotate(
"y", pi / 5)).dot(rotate(
"y", pi / 7))
40 rpy = np.array(list(range(3))) * pi / 2
51 self.assertTrue(
False)
58 self.assertTrue(
False)
68 AngleAxis(y, np.array([0.0, 0.0, 1.0]))
70 .dot(AngleAxis(p, np.array([0.0, 1.0, 0.0])).matrix())
71 .dot(AngleAxis(r, np.array([1.0, 0.0, 0.0])).matrix())
74 self.assertApprox(R, Raa)
76 v = np.array([r, p, y])
80 self.assertApprox(Rv, Raa)
81 self.assertApprox(Rv, R)
86 quat = pin.Quaternion(np.random.rand(4, 1)).normalized()
87 R = quat.toRotationMatrix()
92 self.assertApprox(Rprime, R)
93 self.assertTrue(-pi <= v[0]
and v[0] <= pi)
94 self.assertTrue(-pi / 2 <= v[1]
and v[1] <= pi / 2)
95 self.assertTrue(-pi <= v[2]
and v[2] <= pi)
100 Rp = np.array([[0.0, 0.0, 1.0], [0.0, 1.0, 0.0], [-1.0, 0.0, 0.0]])
102 r =
random() * 2 * pi - pi
103 y =
random() * 2 * pi - pi
106 AngleAxis(y, np.array([0.0, 0.0, 1.0]))
109 .dot(AngleAxis(r, np.array([1.0, 0.0, 0.0])).matrix())
115 self.assertApprox(Rprime, R)
116 self.assertTrue(-pi <= v[0]
and v[0] <= pi)
117 self.assertTrue(-pi / 2 <= v[1]
and v[1] <= pi / 2)
118 self.assertTrue(-pi <= v[2]
and v[2] <= pi)
121 Rp = np.array([[0.0, 0.0, -1.0], [0.0, 1.0, 0.0], [1.0, 0.0, 0.0]])
123 r =
random() * 2 * pi - pi
124 y =
random() * 2 * pi - pi
127 AngleAxis(y, np.array([0.0, 0.0, 1.0]))
130 .dot(AngleAxis(r, np.array([1.0, 0.0, 0.0])).matrix())
136 self.assertApprox(Rprime, R)
137 self.assertTrue(-pi <= v[0]
and v[0] <= pi)
138 self.assertTrue(-pi / 2 <= v[1]
and v[1] <= pi / 2)
139 self.assertTrue(-pi <= v[2]
and v[2] <= pi)
145 self.assertTrue((j0 == np.eye(3)).all())
147 self.assertTrue((jL == np.eye(3)).all())
149 self.assertTrue((jW == np.eye(3)).all())
151 self.assertTrue((jA == np.eye(3)).all())
154 r =
random() * 2 * pi - pi
155 p =
random() * pi - pi / 2
156 y =
random() * 2 * pi - pi
157 rpy = np.array([r, p, y])
163 self.assertTrue((j0 == jL).all())
164 self.assertTrue((jW == jA).all())
165 self.assertApprox(jW, R.dot(jL))
168 rpydot = np.random.rand(3)
175 Rdot = dRdr * rpydot[0] + dRdp * rpydot[1] + dRdy * rpydot[2]
177 omegaL = jL.dot(rpydot)
178 self.assertTrue(np.allclose(Rdot, R.dot(pin.skew(omegaL)), atol=tol))
180 omegaW = jW.dot(rpydot)
181 self.assertTrue(np.allclose(Rdot, pin.skew(omegaW).dot(R), atol=tol))
185 r =
random() * 2 * pi - pi
186 p =
random() * pi - pi / 2
188 y =
random() * 2 * pi - pi
189 rpy = np.array([r, p, y])
193 self.assertApprox(j0inv, inv(j0))
197 self.assertApprox(jLinv, inv(jL))
201 self.assertApprox(jWinv, inv(jW))
205 self.assertApprox(jAinv, inv(jA))
209 r =
random() * 2 * pi - pi
210 p =
random() * pi - pi / 2
211 y =
random() * 2 * pi - pi
212 rpy = np.array([r, p, y])
215 self.assertTrue((dj0 == np.zeros((3, 3))).all())
217 self.assertTrue((djL == np.zeros((3, 3))).all())
219 self.assertTrue((djW == np.zeros((3, 3))).all())
221 self.assertTrue((djA == np.zeros((3, 3))).all())
224 rpydot = np.random.rand(3)
229 self.assertTrue((dj0 == djL).all())
230 self.assertTrue((djW == djA).all())
235 omegaL = jL.dot(rpydot)
236 omegaW = jW.dot(rpydot)
237 self.assertApprox(omegaW, R.dot(omegaL))
238 self.assertApprox(djW, pin.skew(omegaW).dot(R).dot(jL) + R.dot(djL))
239 self.assertApprox(djW, R.dot(pin.skew(omegaL)).dot(jL) + R.dot(djL))
242 if __name__ ==
"__main__":