|
15 | 15 | import spatialgeometry as gm
|
16 | 16 | from math import pi, sin, cos
|
17 | 17 |
|
| 18 | +try: |
| 19 | + from sympy import symbols |
| 20 | + |
| 21 | + _sympy = True |
| 22 | +except ModuleNotFoundError: |
| 23 | + _sympy = False |
| 24 | + |
18 | 25 |
|
19 | 26 | class TestERobot(unittest.TestCase):
|
20 | 27 | def test_jacobm(self):
|
@@ -188,6 +195,28 @@ def test_jacobe(self):
|
188 | 195 |
|
189 | 196 | nt.assert_almost_equal(J, a1)
|
190 | 197 |
|
| 198 | + @unittest.skipUnless(_sympy, "sympy not installed") |
| 199 | + def test_symdyn(self): |
| 200 | + |
| 201 | + a1, a2, r1, r2, m1, m2, g = symbols("a1 a2 r1 r2 m1 m2 g") |
| 202 | + link1 = Link(ET.Ry(flip=True), m=m1, r=[r1, 0, 0], name="link0") |
| 203 | + link2 = Link(ET.tx(a1) * ET.Ry(flip=True), m=m2, r=[r2, 0, 0], name="link1") |
| 204 | + robot = ERobot([link1, link2]) |
| 205 | + |
| 206 | + q = symbols("q:2") |
| 207 | + qd = symbols("qd:2") |
| 208 | + qdd = symbols("qdd:2") |
| 209 | + Q = robot.rne(q, qd, qdd, gravity=[0, 0, g], symbolic=True) |
| 210 | + |
| 211 | + self.assertEqual( |
| 212 | + str(Q[0]), |
| 213 | + "a1**2*m2*qd0**2*sin(q1)*cos(q1) + a1*qd0*(-a1*m2*qd0*cos(q1) - m2*r2*(qd0 + qd1))*sin(q1) - a1*(m2*(a1*qd0*qd1*cos(q1) - a1*qdd0*sin(q1) - g*sin(q0)*cos(q1) - g*sin(q1)*cos(q0)) + (qd0 + qd1)*(-a1*m2*qd0*cos(q1) - m2*r2*(qd0 + qd1)))*sin(q1) - a1*(-a1*m2*qd0*(-qd0 - qd1)*sin(q1) - m2*r2*(qdd0 + qdd1) + m2*(-a1*qd0*qd1*sin(q1) - a1*qdd0*cos(q1) + g*sin(q0)*sin(q1) - g*cos(q0)*cos(q1)))*cos(q1) + g*m1*r1*cos(q0) + m1*qdd0*r1**2 + m2*r2**2*(qdd0 + qdd1) - m2*r2*(-a1*qd0*qd1*sin(q1) - a1*qdd0*cos(q1) + g*sin(q0)*sin(q1) - g*cos(q0)*cos(q1))", |
| 214 | + ) |
| 215 | + self.assertEqual( |
| 216 | + str(Q[1]), |
| 217 | + "a1**2*m2*qd0**2*sin(q1)*cos(q1) + a1*qd0*(-a1*m2*qd0*cos(q1) - m2*r2*(qd0 + qd1))*sin(q1) + m2*r2**2*(qdd0 + qdd1) - m2*r2*(-a1*qd0*qd1*sin(q1) - a1*qdd0*cos(q1) + g*sin(q0)*sin(q1) - g*cos(q0)*cos(q1))", |
| 218 | + ) |
| 219 | + |
191 | 220 |
|
192 | 221 | if __name__ == "__main__": # pragma nocover
|
193 | 222 |
|
|
0 commit comments