两轮平衡车LQR控制
本案例基于 LQR(线性二次型调节器)构建双轮自平衡小车(Segway 型)的建模、控制与演示系统,实现从初始倾斜恢复平衡、脉冲扰动抑制、速度指令跟踪与开环/闭环对比等典型控制实验,并提供 Modelica 物理建模 与 Sysblock 框图控制 两种控制器实现方式,是状态空间法、最优控制与多体建模仿真的典型教学示例。
适用课程、行业与场景
本案例库适用于自动控制原理、现代控制理论、线性系统理论、最优控制、机器人学与移动机器人、多体系统动力学、机电系统建模与仿真、嵌入式控制等课程教学;面向机器人、平衡车/两轮电动车、自动驾驶、工业自动化与运动控制等行业的研发与教学人员;可用于 LQR 最优控制与状态反馈的教学演示,轮式倒立摆这类本质不稳定系统的镇定实验,Modelica 物理建模与 Sysblock 框图控制实现的混合建模讲解,以及平衡机器人、两轮自平衡车的方案验证与产品展示等场景。
库结构
| 包 | 说明 |
|---|---|
Types |
统一类型定义:物理参数记录 BalanceBotParams、实验枚举 ExperimentKind |
Components |
可复用子模型:底盘 Chassis、车轮 Wheel、简化电机 SimplifiedMotor、传感器 SensorUnit、扰动发生器 DisturbanceGenerator、地面 GroundTrack、可视化外壳 BotVisualShell |
Plants |
被控对象:线性化 LinearizedBalanceBot、动画化 AnimatedBalanceBot |
Controllers |
LQR 控制器:LQRController(Modelica)、SysblockLQR(Sysblock 框图)、LQRGainCalculator(增益计算函数) |
Scenarios |
四类可运行实验场景(含无动画 / 动画 / Sysblock 版本) |
系统模型与控制原理(技术要点)
状态向量
双轮自平衡机器人本质上是轮式倒立摆,状态向量为:
x—— 水平位移(m)v—— 水平速度(m/s)θ—— 车身相对竖直方向的倾斜角(rad,正值前倾)ω—— 倾斜角速度(rad/s)
线性化状态空间模型
在 θ=0 附近线性化(小角度近似 sinθ≈θ、cosθ≈1)后,被控对象为:
dx/dt = v
dv/dt = A23·θ + B2·F
dθ/dt = ω
dω/dt = A43·θ + B4·F
其中 F 为等效水平驱动力(电机转矩之和 ÷ 车轮半径)。系数 A23、A43、B2、B4 由两轮倒立摆耦合运动方程导出,考虑了车身质量、车轮质量、车轮惯量与质心高度:
M_eff = (mBody + 2·mWheel) + 2·IWheel/rWheel² // 含车轮惯量的等效质量
I_total = IBody + mBody·L² // 绕轴总转动惯量
D = M_eff·I_total − (mBody·L)² // 解耦行列式
A23 = mBody²·g·L² / D B2 = I_total / D
A43 = M_eff·mBody·g·L / D B4 = −mBody·L / D
LQR 最优控制
LQR 通过最小化二次型代价函数求解全状态反馈增益:
最优控制律为 u = −K·x,增益 K 通过求解连续时间代数 Riccati 方程(CARE)得到。
- 默认加权:
Q = diag([1, 0.1, 100, 1]),R = 0.1(对倾斜角偏差施加较大惩罚 Q₃₃=100)。 - 默认增益:
K = [-3.162, -5.039, -292.56, -42.85],即u = −(3.162x + 5.039v + 292.56θ + 42.85ω)。 - 控制量经饱和限幅到
[-200, 200]N,防止不切实际的指令导致发散。 - 控制器附带
cost输出,实时给出瞬时代价x'Qx + u'Ru。
控制器实现方式
| 方式 | 模型 | 说明 |
|---|---|---|
| Modelica | Controllers.LQRController |
直接实现 u = −K·x,增益由 LQRGainCalculator 提供,含饱和限幅与代价输出 |
| Sysblock | Controllers.SysblockLQR |
框图实现同一控制律:DeMux 分离四维状态 → 四个 Gain(k1~k4)→ Sum 求和 → Saturation 饱和;代价由 Product+Gain+Sum 逐项平方加权求和 |
两种实现控制效果一致,用于对比「方程建模」与「框图数据流建模」两种建模范式。
实验场景
| 场景 | 实验内容 | 控制器 | 动画 |
|---|---|---|---|
BalanceFromInitialTilt |
初始倾斜角起步,LQR 扶正(θInit=0.15 rad) | Modelica LQR | 否 |
AnimatedBalanceFromInitialTilt |
同上,含多体可视化 | Modelica LQR | 是 |
AnimatedBalanceFromInitialTilt_Sysblock |
同上,Sysblock 控制器 + 可视化 | Sysblock LQR | 是 |
CompareOpenLoopAndLQR |
开环(倾倒)vs 闭环(平衡)并排对比 | Modelica LQR | 否 |
AnimatedCompareOpenLoopAndLQR |
同上,含可视化 | Modelica LQR | 是 |
AnimatedCompareOpenLoopAndLQR_Sysblock |
同上,Sysblock 控制器 + 可视化 | Sysblock LQR | 是 |
RejectImpulseDisturbance |
直立时施加脉冲扰动,LQR 抑制 | Modelica LQR | 否 |
AnimatedRejectImpulseDisturbance |
同上,含可视化 | Modelica LQR | 是 |
AnimatedRejectImpulseDisturbance_Sysblock |
同上,Sysblock 控制器 + 可视化 | Sysblock LQR | 是 |
TrackSmallVelocityCommand |
平衡的同时跟踪 0.5 m/s 速度指令 | Modelica LQR | 否 |
场景要点
- 初始倾斜平衡:小车以 0.15 rad(约 8.6°)前倾起步,倾斜角应在约 3~5 s 内收敛至零。
- 开环 vs 闭环对比:开环对象零力输入、快速倾倒发散;LQR 闭环对象倾斜角收敛,直观说明反馈镇定对本质不稳定系统的必要性。
- 脉冲扰动抑制:在 t=2 s 施加幅值 50 N、持续 0.1 s 的矩形脉冲,LQR 快速消除扰动。
- 速度指令跟踪:t=1 s 施加速度阶跃,控制器在平衡 LQR 基础上叠加前馈补偿,小车在保持直立的同时逼近目标速度。
关键物理参数
| 参数 | 值 | 说明 |
|---|---|---|
| mBody | 10 kg | 车身/底盘质量 |
| mWheel | 0.5 kg | 单轮质量 |
| rWheel | 0.15 m | 车轮半径 |
| L | 0.5 m | 轮轴到车身质心距离 |
| IBody | mBody·L²/3 | 车身转动惯量(细杆近似) |
| IWheel | mWheel·rWheel²/2 | 车轮转动惯量(实心圆柱近似) |
| g | 9.81 m/s² | 重力加速度 |
| tauMax | 10 N·m | 单轮最大电机扭矩 |
仿真配置与推荐设置
- 平衡恢复 / 速度跟踪场景:
StopTime = 15~20 s;开环对比、扰动抑制场景:StopTime = 5 s。 - 求解器:Dassl / CVODE,默认容差(场景默认
Tolerance=1e-6,Interval=0.01)。 - 关键观测量:
plant.theta_out(倾斜角)、plant.omega_out(倾斜角速度)、plant.x_out/v_out(位移/速度)、controller.u(控制力)、controller.cost(LQR 代价)。 - 动画场景在 3D 视图中观察车体的倾斜与恢复过程。
目录内容
| 路径 | 说明 |
|---|---|
package.mo |
库顶层包(依赖 Modelica 4.0.0.TY.1) |
Types/ |
参数与枚举类型 |
Components/ |
可复用子模型 |
Plants/ |
被控对象模型 |
Controllers/ |
LQR 控制器(Modelica 与 Sysblock) |
Scenarios/ |
四类实验场景 |
Resources/Images/ |
库资源图片 |
使用许可
本模型库版权由MoHub版权所有,未经许可,不得用于商业用途。
登录账号即可下载资源、参与讨论。