- Inverted pendulum model
model
使用 Sympy 模組中的 mechanics 去定義系統的方程式,mechanics 模組有提供多體動力學及 Lagrangian mechanics 等相關放式
# n = How much with the connecting rod q = dynamicsymbols('q:' + str(n + 1)) # Generalized coordinates u = dynamicsymbols('u:' + str(n + 1)) # Generalized speeds f = dynamicsymbols('f') # Force applied to the cart m = symbols('m:' + str(n + 1)) # Mass of each bob l = symbols('l:' + str(n)) # Length of each link g, t = symbols('g t') # Gravity and time
定義慣性
I = ReferenceFrame('I') # Inertial reference frame O = Point('O') # Origin point O.set_vel(I, 0) # Origin's velocity is zero
P0 = Point('P0') # Hinge point of top link P0.set_pos(O, q[0] * I.x) # Set the position of P0 P0.set_vel(I, u[0] * I.x) # Set the velocity of P0 Pa0 = Particle('Pa0', P0, m[0]) # Define a particle at P0
使用 Sympy 將描述完的機械系統寫成微分方程式,這部分參考 Pydy 中使用 Sympy 描述系統
frames = [I] # List to hold the n + 1 frames points = [P0] # List to hold the n + 1 points particles = [Pa0] # List to hold the n + 1 particles forces = [(P0, f * I.x - m[0] * g * I.y)] # List to hold the n + 1 applied forces, including the input force, f kindiffs = [q[0].diff(t) - u[0]] # List to hold kinematic ODE's for i in range(n): Bi = I.orientnew('B' + str(i), 'Axis', [q[i + 1], I.z]) # Create a new frame Bi.set_ang_vel(I, u[i + 1] * I.z) # Set angular velocity frames.append(Bi) # Add it to the frames list Pi = points[-1].locatenew('P' + str(i + 1), l[i] * Bi.x) # Create a new point Pi.v2pt_theory(points[-1], I, Bi) # Set the velocity points.append(Pi) # Add it to the points list Pai = Particle('Pa' + str(i + 1), Pi, m[i + 1]) # Create a new particle particles.append(Pai) # Add it to the particles list forces.append((Pi, -m[i + 1] * g * I.y)) # Set the force applied at the point kindiffs.append(q[i + 1].diff(t) - u[i + 1]) # Define the kinematic ODE: dq_i / dt - u_i = 0 kane = KanesMethod(I, q_ind=q, u_ind=u, kd_eqs=kindiffs) # Initialize the object fr, frstar = kane.kanes_equations(forces, particles) # Generate EoM's fr + frstar = 0
效果大概是這個樣子,控制那部份要花比較多時間作圖和描述暫時先不做
問題
因為這樣描述的方式,變成非常的複雜,我可能參考以下的方式 !(Pymbs)[http://pymbs.readthedocs.io/en/latest/], 試著使用 joint , world 等方式進行描述機械系統並導入控制。
Comments
comments powered by Disqus