建立直线一阶倒立摆的线性化数学模型
时间: 2024-01-08 15:03:38 浏览: 180
直线一级倒立摆系统的建模及仿真
5星 · 资源好评率100%
直线一阶倒立摆系统的线性化数学模型可以通过牛顿欧拉法进行建立。首先,对小车和摆杆进行受力分析,并分别求出它们的运动方程。然后,将线性化后的两个运动方程进行拉普拉斯变换,并整理得到系统的状态空间方程。
具体步骤如下:
1. 对小车进行受力分析,考虑小车的质量、摩擦力和外部施加的控制力。根据牛顿第二定律,可以得到小车的运动方程。
2. 对摆杆进行受力分析,考虑摆杆的质量、重力和摩擦力。根据牛顿第二定律,可以得到摆杆的运动方程。
3. 对小车和摆杆的运动方程进行线性化处理。线性化是将非线性方程在某一工作点附近进行近似,通常采用泰勒级数展开。在这里,我们假设小车和摆杆的偏离角度都很小,可以使用一阶近似。
4. 将线性化后的运动方程进行拉普拉斯变换,得到系统的传递函数。
5. 整理传递函数,得到系统的状态空间方程。状态空间方程是一组一阶微分方程,描述了系统的状态变化和输入输出关系。
下面是一个示例的线性化数学模型的代码:
```python
import sympy as sp
# 定义符号变量
x, theta, F, m, M, l, g = sp.symbols('x theta F m M l g')
# 定义小车和摆杆的运动方程
x_dot = sp.Function('x_dot')(t)
theta_dot = sp.Function('theta_dot')(t)
x_ddot = sp.Function('x_ddot')(t)
theta_ddot = sp.Function('theta_ddot')(t)
eq1 = m*x_ddot - m*theta_dot**2*l*sp.sin(theta) + F - M*x_dot
eq2 = m*l*theta_ddot + m*g*sp.sin(theta) - M*l*sp.cos(theta)*theta_dot
# 线性化处理
eq1_linear = sp.series(eq1, x, 0, 1).removeO()
eq2_linear = sp.series(eq2, theta, 0, 1).removeO()
# 求解线性化后的运动方程
x_ddot_linear = sp.solve(eq1_linear, x_ddot)[0]
theta_ddot_linear = sp.solve(eq2_linear, theta_ddot)[0]
# 拉普拉斯变换
s = sp.symbols('s')
X = sp.Function('X')(s)
Theta = sp.Function('Theta')(s)
F = sp.Function('F')(s)
eq3 = sp.laplace_transform(x_ddot_linear, t, s, noconds=True) - s**2*X + s*x(0) - x_dot(0)
eq4 = sp.laplace_transform(theta_ddot_linear, t, s, noconds=True) - s**2*Theta + s*theta(0) - theta_dot(0)
# 整理得到系统的传递函数
X = sp.solve(eq3, X)[0]
Theta = sp.solve(eq4, Theta)[0]
# 得到系统的状态空间方程
A = sp.Matrix([[0, 1, 0, 0], [0, 0, m*g/M, 0], [0, 0, 0, 1], [0, 0, (M+m)*g/(M*l), 0]])
B = sp.Matrix([[0], [1/M], [0], [1/(M*l)]])
C = sp.Matrix([[1, 0, 0, 0], [0, 0, 1, 0]])
D = sp.Matrix([[0], [0]])
sys = sp.Matrix([[X], [Theta]])
u = sp.Matrix([[F]])
y = C*sys + D*u
# 输出系统的状态空间方程
A, B, C, D
```
阅读全文