用python代码建立一阶直线倒立摆模型
时间: 2023-11-13 15:47:52 浏览: 78
单摆运动相图matlab代码-LQRcontroller-InvertedPendulum-in-OpenAIGym-python:在Open
好的,以下是建立一阶直线倒立摆模型的 Python 代码:
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
# 定义模型函数
def pend(y, t, u, m=1.0, M=2.0, L=1.0, g=9.8):
theta, theta_dot, x, x_dot = y
# 计算状态量的导数
theta_ddot = (g * np.sin(theta) - u * np.cos(theta)) / L
x_ddot = (u - m * L * theta_ddot * np.cos(theta)) / M
return [theta_dot, theta_ddot, x_dot, x_ddot]
# 设置模型参数
m = 1.0 # 摆的质量
M = 2.0 # 小车的质量
L = 1.0 # 摆杆的长度
g = 9.8 # 重力加速度
# 设置控制参数
u = 0.2 # 控制力
# 设置初始条件
theta0 = np.pi/6 # 摆的初始角度
theta_dot0 = 0.0 # 摆的初始角速度
x0 = 0.0 # 小车的初始位置
x_dot0 = 0.0 # 小车的初始速度
y0 = [theta0, theta_dot0, x0, x_dot0]
# 设置时间范围
t = np.linspace(0, 10, 1000)
# 求解微分方程
sol = odeint(pend, y0, t, args=(u, m, M, L, g))
# 绘图
plt.plot(t, sol[:, 0], 'b', label='theta(t)')
plt.plot(t, sol[:, 2], 'g', label='x(t)')
plt.legend(loc='best')
plt.xlabel('t')
plt.grid()
plt.show()
```
这段代码建立了一个一阶直线倒立摆模型,利用 scipy.integrate.odeint 函数求解了该模型的微分方程,并且绘制了模型的角度变化和小车位置变化的时域图像。欢迎再次提出问题,我会尽力回答。
阅读全文