双足自平衡机器人是机器人入门经典的項目之一。两轮平衡、实时PID控制,做完这个项目对控制理论的理解会上一个台阶。今天用ESP32和MPU6050搭建一台,总成本不到100元。
一、硬件方案
核心硬件就三样:ESP32开发板(约25元)、MPU6050陀螺仪加速度计模块(约8元)、两台带编码器的N20减速电机(约30元一对)。再加上L298N电机驱动板、锂电池、3D打印车架,总成本控制在100元以内。
MPU6050通过I2C接口和ESP32通信,采样率可以设到200Hz。ESP32读取角度数据后运行PID算法,输出PWM信号给L298N,控制两台电机的转速和方向。整个过程在主循环里完成,循环周期建议控制在5ms以内。

二、PID调参是关键
硬件搭起来不难,难的是PID调参。平衡机器人的PID一般用串级PID:外环是角度环,内环是速度环。角度环根据MPU6050测到的倾斜角计算出需要的加速度,速度环再根据目标加速度计算电机输出。
调参顺序是先调角度环的P,让机器人能短暂站立几秒钟。然后加角度环的D,减少振荡。加上加速度环的PI,让机器人能在平衡的同时不跑偏。
一个实用技巧:调参的时候把机器人用绳子吊起来,这样可以防止它倒下来摔坏,也能让你更专心地调参数。

三、MPU6050数据融合
MPU6050同时输出加速度计和陀螺仪数据。加速度计长期稳定但高频噪声大,陀螺仪短期精确但有漂移。两者互补融合才能得到稳定的角度估计。
简单的融合方式是用互补滤波器:angle = 0.98 * (angle + gyro * dt) + 0.02 * accel_angle。这个公式里0.98和0.02是两个权重系数,可以根据实际效果微调。ESP32的算力完全够跑这个计算。
如果想要更好的效果,可以用Madgwick滤波器或者卡尔曼滤波器,但对平衡机器人来说互补滤波器已经够用了。
四、常见问题
电机响应延迟是另一个容易忽视的问题。N20电机的减速比一般在1:100左右,启停响应较慢。如果PID的D参数设得太大,会导致系统震荡。解决方式是限制电机输出的变化率,加一个输出限幅。
重心位置也很关键。电池和电路板要尽量放在靠近轮子轴心的位置,重心太高会导致稳定性变差。建议车架设计的时候把重心控制在轮轴上方3cm以内。


做完这个项目对PID的理解确实深了很多,推荐新手都试试
一百块就能搞定吗?电机带编码器的N20好像不止30吧
吊绳子调参这个技巧太实用了,之前每次调参都摔坏零件
互补滤波器做平衡确实够用,我之前用卡尔曼滤波反而效果差不多但计算量大很多