gen_second_order_dynamics.py
Go to the documentation of this file.
1 from sympy import Symbol, sin, cos, diff
2 from pprint import pprint
3 
4 theta = Symbol('theta')
5 tdot = Symbol('tdot')
6 xdot = Symbol('xdot')
7 u = Symbol('u')
8 m_p_ = Symbol('m_p_')
9 m_c_ = Symbol('m_c_')
10 g_ = Symbol('g_')
11 l_ = Symbol('l_')
12 
13 xddot = (u + m_p_ * sin(theta) * (l_ * (tdot * tdot) + g_ * cos(theta))) / (m_c_ + m_p_ * (sin(theta) * sin(theta)))
14 tddot = - (l_ * m_p_ * cos(theta) * sin(theta) * (tdot * tdot) + u * cos(theta) + (m_c_ + m_p_) * g_ * \
15  sin(theta))/ (l_ * m_c_ + l_ * m_p_ * (sin(theta)*sin(theta)))
16 
17 f = [
18  xdot, tdot, xddot, tddot
19 ]
20 
21 fx = [
22  # d/dx, d/dtheta, d/dxdot, d/dtdot
23  [0, 0, 1, 0],
24  [0, 0, 0, 1],
25  [0, diff(xddot, theta), 0, diff(xddot, tdot)],
26  [0, diff(tddot, theta), 0, diff(tddot, tdot)]
27 ]
28 
29 fu = [
30  0, 0, diff(xddot, u), diff(tddot, u)
31 ]
32 
33 fuu = [
34  0, 0, diff(diff(xddot, u), u), diff(diff(tddot, u), u)
35 ]
36 
37 fxx = [
38  [
39  [0, 0, 0, 0],
40  [0, 0, 0, 0],
41  [0, 0, 0, 0],
42  [0, 0, 0, 0]
43  ], # fx_x
44  [
45  [0, 0, 0, 0],
46  [0, 0, 0, 0],
47  [0, diff(diff(xddot, theta), theta), 0, diff(diff(xddot, tdot), theta)],
48  [0, diff(diff(tddot, theta), theta), 0, diff(diff(tddot, tdot), theta)]
49  ], # fx_theta
50  [
51  [0, 0, 0, 0],
52  [0, 0, 0, 0],
53  [0, 0, 0, 0],
54  [0, 0, 0, 0]
55  ], # fx_xdot
56  [
57  [0, 0, 0, 0],
58  [0, 0, 0, 0],
59  [0, diff(diff(xddot, theta), tdot), 0, diff(diff(xddot, tdot), tdot)],
60  [0, diff(diff(tddot, theta), tdot), 0, diff(diff(tddot, tdot), tdot)]
61  ], # fx_tdot
62 ]
63 
64 
65 fu = [
66  0, 0, diff(xddot, u), diff(tddot, u)
67 ]
68 
69 
70 # fu = 0, 0, diff(xddot, u), diff(tddot, u)
71 fux = [
72  # d/dx, d/dtheta, d/dxdot, d/dtdot
73  [0, 0, 0, 0],
74  [0, 0, 0, 0],
75  [0, diff(diff(xddot, u), theta), 0, diff(diff(xddot, u), tdot)],
76  [0, diff(diff(tddot, u), theta), 0, diff(diff(tddot, u), tdot)]
77 ]
78 
79 fxu = [
80  [0, 0, 0, 0],
81  [0, 0, 0, 0],
82  [0, diff(diff(xddot, theta), u), 0, diff(diff(xddot, tdot), u)],
83  [0, diff(diff(tddot, theta), u), 0, diff(diff(tddot, tdot), u)]
84 ]
85 
86 pprint(fxx)
87 pprint(fux)
88 pprint(fuu)


exotica_cartpole_dynamics_solver
Author(s): Traiko Dinev
autogenerated on Sat Apr 10 2021 02:36:04