8000 add test to detect floating point pollution in symbolic results · yhm1010/robotics-toolbox-python@bae3a73 · GitHub
[go: up one dir, main page]

Skip to content

Commit bae3a73

Browse files
committed
add test to detect floating point pollution in symbolic results
1 parent 62a5b95 commit bae3a73

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

tests/test_ERobot.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@
1515
import spatialgeometry as gm
1616
from math import pi, sin, cos
1717

18+
try:
19+
from sympy import symbols
20+
21+
_sympy = True
22+
except ModuleNotFoundError:
23+
_sympy = False
24+
1825

1926
class TestERobot(unittest.TestCase):
2027
def test_jacobm(self):
@@ -188,6 +195,28 @@ def test_jacobe(self):
188195

189196
nt.assert_almost_equal(J, a1)
190197

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+
191220

192221
if __name__ == "__main__": # pragma nocover
193222

0 commit comments

Comments
 (0)
0