基于陀螺仪航向反馈的轮式机器人PID直线控制
1. PID控制在轮式移动机器人直线运动中的工程实现
轮式移动机器人在实际运行中常面临一个基础但关键的问题:即使对左右轮施加完全相同的PWM驱动信号,车辆仍会持续向某一侧偏转。这种现象并非由控制算法缺陷导致,而是源于机械系统固有的物理偏差——电机特性不一致、轮径微小差异、地面摩擦力分布不均、装配公差等因素共同作用,使得左右轮在相同输入下产生不同的实际输出转速。本方案摒弃传统依赖编码器反馈轮速的闭环方式,转而利用车载陀螺仪(MPU6050)测量的航向角作为系统状态反馈量,构建以航向角为被控量的PID控制器,直接调节右轮PWM输出,使车辆在无外部视觉或激光辅助条件下自主维持直线轨迹。该方法降低了传感器部署复杂度,避免了轮径标定、编码器安装偏心等额外误差源,特别适用于低成本教育平台与快速原型验证场景。
1.1 系统建模与控制架构设计
在经典自动控制理论中,一个完整的闭环控制系统包含被控对象(Plant)、执行器(Actuator)、传感器(Sensor)、控制器(Controller)及设定值(Setpoint)。本系统中:
- 被控对象 :小车整体动力学模型,其输入为左右轮PWM占空比,输出为车辆质心处的航向角θ;
- 执行器 :左右轮直流电机及其H桥驱动电路,左轮接收固定基准PWM(750/899),右轮接收经PID动态调节后的PWM;
- 传感器 :MPU6050六轴惯性测量单元(IMU),通过I²C接口实时读取融合后的航向角数据;
- 控制器 :嵌入式微控制器(STM32F103C8T6)中运行的离散时间PID算法;
- 设定值 :期望航向角θ_ref = 0°(即正前方为零点,向右偏转为正,向左为负)。
控制逻辑的核心在于将“航向角偏差”这一角度量转化为对右轮驱动功率的修正量。当车辆向右偏转时(θ > 0),需增大右轮转速以产生向左的扭矩分量进行纠偏;反之,当车辆向左偏转时(θ < 0),需减小右轮转速以减弱向左的扭矩,促使车身回正。此策略本质上将航向角偏差映射为右轮相对于左轮的“速度补偿”,而非绝对速度控制,显著降低了对电机线性度与系统建模精度的要求。
1.2 硬件资源分配与定时器配置
本项目采用STM32F103C8T6作为主控芯片,其72MHz主频与丰富外设资源足以支撑实时PID运算与多任务调度。关键外设资源配置如下:
| 外设 | 功能说明 | 配置要点 |
|---|---|---|
| TIM2 | 生成100ms周期性中断,作为PID控制器采样与执行节拍 | 时钟源:APB1总线(36MHz),预分频系数PSC=35999,自动重装载值ARR=99,产生100ms中断 |
| TIM3_CH2 | PWM输出通道,驱动右轮电机(GPIOB_Pin5) | 时钟源:APB1总线(36MHz),PSC=0,ARR=899,输出比较寄存器CCR2动态更新 |
| TIM4_CH1 | PWM输出通道,驱动左轮电机(GPIOB_Pin6) | 同上,CCR1固定写入750,保持基准速度 |
| I²C1 | 连接MPU6050,读取航向角数据 | 标准模式(100kHz),SCL: GPIOB_Pin8,SDA: GPIOB_Pin9 |
| USART1 | 调试串口,输出航向角、PID各环节输出、PWM值等调试信息 | 波特率115200,PA9/PA10 |
定时器TIM2的100ms中断是整个控制回路的时间基准。该周期的选择需兼顾三点:其一,MPU6050陀螺仪原始数据更新率通常为100Hz~1kHz,100ms采样间隔可有效滤除高频噪声;其二,小车机械响应存在惯性,过高的控制频率易引发振荡;其三,STM32F103在72MHz下执行一次完整PID运算(含浮点乘加)耗时约数十微秒,100ms窗口留有充足余量处理I²C通信与数据转换。实践中,若发现车辆响应迟滞,可尝试缩短至50ms;若出现高频抖动,则延长至200ms。
1.3 陀螺仪数据获取与航向角解算
MPU6050本身不直接输出航向角(Yaw),其内部DMP(Digital Motion Processor)虽可提供融合姿态,但本方案采用更可控的软件解算方式:仅使用陀螺仪Z轴角速度ω_z数据,通过数值积分获得航向角变化量。此方法规避了DMP固件加载的复杂性,且对低速直线运动场景足够精确。
具体流程如下:
1. 初始化I²C与MPU6050 :配置I²C1为标准模式,使能GPIOB时钟,初始化PB8/PB9为开漏输出;向MPU6