1. 项目概述
双轮平衡车作为典型的欠驱动系统,其控制问题一直是机器人领域的热门研究方向。记得我第一次接触平衡车项目时,就被它那看似简单却蕴含复杂控制原理的机械结构深深吸引。这种两轮自平衡机器人本质上是一个倒立摆系统,需要通过实时调整电机转速来维持直立状态。
在这个项目中,我们将重点探讨PID控制在平衡车系统中的应用。不同于普通的电机控制,平衡车的PID调节需要同时考虑角度环和速度环的双重耦合。我曾在一个大学生科创项目中指导过团队调参,当时学生们花了两周时间才让小车勉强站稳,这让我意识到PID参数整定在工程实践中的重要性。
2. PID控制原理深度解析
2.1 PID数学本质
PID控制器的核心可以用这个微分方程表示:
u(t) = K_p e(t) + K_i ∫e(t)dt + K_d de(t)/dt
在实际工程中,我们通常使用离散化的形式:
u(k) = K_pe(k) + K_iTΣe(j) + K_d(e(k)-e(k-1))/T
其中采样周期T的选择很关键,根据香农采样定理,一般取控制系统带宽的5-10倍。对于平衡车这类快速响应系统,我通常建议T取5-10ms。
2.2 各环节物理意义
比例项(P)是最直观的,就像用手扶住倒立的扫把——倾斜角度越大,施加的纠正力就越大。但纯比例控制会产生稳态误差,就像总差一点才能完全垂直。
积分项(I)用于消除稳态误差,但容易引起超调。去年调试时我们就遇到过:当Ki设得过大时,小车会出现明显的"点头"现象。
微分项(D)提供预见性控制,能抑制振荡。但要注意传感器噪声会被放大,这也是为什么实际系统中常需要低通滤波。
3. 平衡车系统建模
3.1 动力学方程推导
建立如图所示的坐标系,通过拉格朗日方程可以得到:
(I + ml²)θ'' - mglsinθ = -mlx''cosθ + τ
其中最难处理的是非线性项sinθ和cosθ。在小角度近似下(|θ|<15°),我们可以线性化为:
(I + ml²)θ'' - mglθ ≈ -mlx'' + τ
这个简化让控制器设计成为可能,但也带来局限性——当倾角过大时控制效果会急剧恶化。
3.2 状态空间表达
将系统转化为状态空间形式:
x = [θ θ' x x']ᵀ
u = τ
A = [0 1 0 0;
mgl/I 0 0 0;
0 0 0 1;
-ml/I 0 0 0]
B = [0; 1/I; 0; 1/I]
这个表示方法为后续LQR等现代控制算法奠定了基础,但在PID控制中我们更关注传递函数形式。
4. 双环PID控制器设计
4.1 角度环设计
角度环是内环,需要最快的响应速度。根据工程经验:
- Kp初始值可按Kp≈4π²J/Ts²估算,其中Ts为目标稳定时间
- Ki一般取Kp/10~Kp/5
- Kd需要仔细调整,通常从Kp/2开始尝试
实际调试时,我习惯先关闭I和D,逐渐增大P直到出现等幅振荡,此时的Kp记为Ku,振荡周期Tu。然后按Ziegler-Nichols法则:
Kp=0.6Ku, Ki=2Kp/Tu, Kd=KpTu/8
4.2 速度环设计
速度环作为外环,带宽应低于角度环3-5倍。常见误区是速度环参数过大导致系统振荡。建议:
- 先调角度环至稳定
- 固定角度环参数
- 从较小Kp开始调速度环
- 最后微调两个环的耦合关系
5. 参数整定实战技巧
5.1 工具准备
推荐使用以下工具组合:
- MATLAB/Simulink用于前期仿真
- Saleae逻辑分析仪观测PWM波形
- 蓝牙模块实时传输调试数据
- 自制上位机显示姿态曲线
5.2 调参步骤详解
- 机械校准
- 确保IMU安装牢固
- 检查车轮同心度
- 测量整车重心高度
- 传感器测试
- 静止时读取陀螺仪零偏
- 做标准斜坡测试加速度计
- 设计互补滤波器时,我常用α=0.98
- 参数整定
c复制// 典型参数范围参考
#define KP_ANGLE 20.0 // 通常15-30
#define KI_ANGLE 0.1 // 通常0.05-0.3
#define KD_ANGLE 0.5 // 通常0.3-1.0
#define KP_SPEED 10.0 // 通常5-15
#define KI_SPEED 0.05 // 通常0.01-0.1
5.3 常见问题排查
问题1:小车剧烈振荡
- 检查陀螺仪极性是否正确
- 降低Kd值
- 增加软件低通滤波
问题2:向一侧缓慢倾斜
- 检查加速度计校准
- 适当增加Ki值
- 检查电机输出对称性
问题3:响应迟钝
- 提高采样频率
- 检查PWM分辨率(建议至少10bit)
- 增大Kp值
6. 进阶优化方向
6.1 参数自整定
可以实现的简单算法:
- 施加阶跃扰动
- 记录响应曲线
- 计算超调量、稳定时间
- 按预定规则调整参数
6.2 模糊PID改进
设计模糊规则库示例:
IF 误差大 AND 误差变化快 THEN 增大Kp
IF 误差小 AND 误差变化慢 THEN 增大Ki
6.3 动力学补偿
考虑以下非线性因素:
- 电机死区补偿
- 电池电压衰减补偿
- 轮地摩擦建模
经过三个月的迭代优化,我们最终实现的平衡车可以在5°斜坡上稳定停留,抗扰动能力达到施加1N·m扭矩冲击后2s内恢复平衡。这个过程中最大的收获是:理论计算提供起点,但真正的参数优化必须通过大量实验来完成。建议每调整3组参数就做一次系统性能评估,记录下所有调试数据,这比任何教科书都有价值。
