一阶倒立摆simulink仿真以及代码
时间: 2023-09-16 16:10:33 浏览: 141
一阶倒立摆的Simulink仿真
5星 · 资源好评率100%
以下是一阶倒立摆的Simulink模型和相应的MATLAB代码:
Simulink模型:
![Simulink模型](https://img-blog.csdnimg.cn/20220203110731556.png)
MATLAB代码:
```matlab
% 一阶倒立摆参数
m = 0.5; % 摆杆质量
M = 0.2; % 小车质量
g = 9.8; % 重力加速度
l = 0.3; % 摆杆长度
b = 0.1; % 摩擦系数
% 系统状态空间表达式
A = [0 1 0 0; 0 -b/M -m*g/M 0; 0 0 0 1; 0 -b/(M*l) -(m+M)*g/(M*l) 0];
B = [0; 1/M; 0; 1/(M*l)];
C = [1 0 0 0; 0 0 1 0];
D = [0; 0];
% 设计控制器
Q = diag([1 1 10 10]); % 设计状态反馈增益矩阵Q
R = 0.01; % 设计输入反馈增益矩阵R
[K,~,~] = lqr(A,B,Q,R); % 线性二次调节器设计
% 仿真时长
tspan = 0:0.02:10;
% 初始条件
x0 = [-1; 0; pi/6; 0];
% 仿真
[t,x] = ode45(@(t,x)pendulum_dynamics(x,m,M,g,l,b,-K*(x-[0; 0; 0; 0])),tspan,x0);
% 绘图
figure
subplot(2,1,1)
plot(t,x(:,1),'b',t,x(:,3),'r')
legend('小车位置','倒立摆角度')
ylabel('位置/角度 (m/rad)')
title('一阶倒立摆Simulink仿真')
subplot(2,1,2)
plot(t,-K*(x.'-[0; 0; 0; 0]))
legend('控制输入')
xlabel('时间 (s)')
ylabel('输入 (N)')
```
这个模型描述了一个小车上的一阶倒立摆系统,并使用线性二次调节器进行控制。模型中包含了小车位置、倒立摆角度和它们的速度等状态变量,以及控制输入。仿真结果将显示小车位置和倒立摆角度随时间的变化以及控制输入的强度。
阅读全文