Arduino Nano 33 Sense BLE, 集成IMU模块LSM9DS1
IMU惯性测量单元
全称Inertial Measurement Unit, 9轴的IMU包含3个传感器,加速计(线速度),陀螺仪(角速度),磁力计(磁场),每个单元3个轴,对于姿态解算这个任务来说,三个信息来源再加上传感器融合算法一起组成一个AHRS系统 Attitude and heading reference system,用来估计系统的姿态,可以用欧拉角pitch, roll, yaw表示,也可以使用效率更高而且不会出现万向锁这样的问题的四元数。
欧拉角表示系统姿态,x,y,z 轴如何对应要看具体设置
姿态估计的误差来源
有些问题是传感器普遍存在的,比如非线性,温度漂移,随机游走,接下来挨个看看将Nano33开放版静置在桌面上时,三个传感器返回的数据:
静止时的加速度测量值,除了零漂,还有可能放置时imu的z轴没有和重力方向重合,不过这个可以通过矢量求和进一步估算
陀螺仪测量值,有高频噪声,随机游走,结果受到地球自转的影响,(陀螺仪本身就是在研究地球自转的过程中发明的)
磁力计可以用来推算东南西北,但是注意会受到系统周围磁性材料的影响,无论是硬磁还是软磁
传感器融合算法
科学上网推荐Matlab传感器融合教程
通过加速计和磁力计可以获取当前的绝对方向,但是对于非静止的系统,平移运动的加速度和旋转运动的柯氏加速度会导致无法给出准确的重力方向,而磁力计又会受到系统周围磁性材料影响。
另一方面通过陀螺仪获取角速度可以积分获得系统位姿,但是需要一个初始位姿而且会逐渐偏离真实结果。
Sensor Fusion 传感器融合算法就是在三个信息来源之间权衡获取最终结果,一般的融合算法都可以总结为两个步骤:
1.初始化姿态
2. 通过加速计和磁力计校正陀螺仪的漂移误差。
下一章介绍如何调 Arduino的SensorFusion库观察融合算法的效果~