在先前的小车视频教程中,我利用MPU6050模块提供的偏航角yaw数据作为反馈,对小车实施了PID控制。但随着时间的推移,我发现传感器输出的yaw角度逐渐变得不准确,且误差随时间增长而增大,这无疑是一个令人头疼的问题。今天,我将尝试解决这一数据漂移现象。
为了解决这一问题,我制定了一个方案:首先,收集一定数量的yaw数据;接着,通过图形化展示数据来识别潜在问题;最后,运用数学算法来消除这些误差。
在数据采集阶段,我保持小车静止不动,即yaw角度理论上应为0度。我通过串口从MPU6050模块中读取yaw数据,每100毫秒记录一次,共收集了6000个样本,耗时约10分钟。随后,我使用matlibplot工具对数据进行图形化展示,其中x轴代表时间T,y轴代表传感器输出的角度值direct(即yaw角)。经过分析,我发现传感器存在较严重的零点漂移现象,在恒定的30°C环境下,零点漂移量已达到约2°。这显然是一个需要解决的问题。
不过,值得庆幸的是,传感器零点漂移的曲线呈现出较为线性的特征,基本符合y=kx+b这一线性方程的规律。因此,我考虑通过计算线性方程中的斜率k和截距b,来预测不同运行时间下的零点漂移值yaw_zero_predict。然后,从传感器测量值yaw中减去这个预测值,从而得到更准确的实际yaw值yaw1。
接下来,我利用这6000个数据样本,通过sklearn库中的线性回归算法,得出了MPU6050零点漂移的线性模型y=kx+b。最终得到的斜率为k=0.00040329,截距为b=-48903838。也就是说,MPU6050的零点漂移规律大致可以表示为y=0.0004x-0.49。
在单片机程序中,我根据这一线性模型对MPU6050输出的yaw值进行插补修正,得到更准确的yaw1值。具体修正公式为yaw1=yaw-0.0004T+0.49,其中T为MPU6050的运行时间。经过这样的补偿处理,yaw的实际输出值在开机后的10分钟内基本保持在0线附近,误差控制在1°以内。这对于初学者来说应该已经足够满足小车控制的需求了。
全部评论 (0)