1. 项目概述:当PID遇上LQR的倒立摆对决
去年在实验室调试双足机器人时,我遇到了一个棘手的问题——机器人在快速转向时总会出现明显的姿态振荡。这个问题让我想起了研究生时期做过的一个经典实验:二级倒立摆控制。作为控制理论中的"Hello World",倒立摆系统完美诠释了什么是"不稳定系统":就像试图用指尖平衡一根长杆,稍有不慎就会失去控制。
二级倒立摆比普通单级倒立摆难度更高,它由两个串联的摆杆组成,就像杂技演员同时用下巴和额头顶起两根竹竿。这种系统有六个状态变量(小车位置、两个摆杆角度及其导数),表现出强烈的非线性和耦合特性。本文将通过MATLAB仿真,对比经典PID控制和现代LQR控制在二级倒立摆稳定中的表现,分享我在参数整定和算法实现中的实战经验。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统建模:从物理模型到状态方程
2.1 物理假设与参数设定
在开始推导方程前,我们需要明确几个合理假设:
- 所有连杆均为刚体(实际工程中需考虑柔性变形带来的振动)
- 忽略传动机构的齿隙(实际伺服系统约0.1-0.5°的间隙会影响控制精度)
- 不考虑库伦摩擦和空气阻力(但实际小车轨道存在约0.2N·s/m的粘滞摩擦)
以实验室常用的倒立摆设备为例,典型参数为:
matlab复制M = 0.5; % 小车质量(kg)
m1 = 0.2; % 下摆杆质量(kg)
m2 = 0.1; % 上摆杆质量(kg)
l1 = 0.3; % 下摆杆长度(m)
l2 = 0.25; % 上摆杆长度(m)
g = 9.81; % 重力加速度
2.2 拉格朗日动力学推导
使用拉格朗日法比牛顿-欧拉法更适合多体系统建模。首先建立系统动能T和势能V:
matlab复制% 动能表达式示例
T = 0.5*M*x_dot^2 + 0.5*m1*(x_dot^2 + l1^2*theta1_dot^2 + 2*l1*x_dot*theta1_dot*cos(theta1)) + ...
0.5*m2*(x_dot^2 + l1^2*theta1_dot^2 + l2^2*theta2_dot^2 + ...
2*l1*x_dot*theta1_dot*cos(theta1) + 2*l2*x_dot*theta2_dot*cos(theta2
