https://www.cnblogs.com/prayer521/p/6944534.html
加速度计和陀螺仪的校准:
在传感器静止不动水平放置时,测出陀螺仪和加速度计各轴的偏移值,保存。以后每次上电调用dmp_set_xx_bias()就行了。
在inv_mpu.c文件中又run_self_test函数。
其是在主程序中MPU6050_INIT初始化程序中调用的。
具体可参考阿莫上的链接:
https://www.amobbs.com/forum.php?mod=viewthread&tid=5585536&highlight=%E5%9B%9B%E5%85%83%E6%95%B0
在自测函数里面改,run_self_test函数在上电的时候会执行,传感器会读取静止时的陀螺仪和加速度值,作为静态误差,输出的时候会减去这个静态误差再输出,所以你斜着放的时候读回来的数据也是0附近
我解决的方法是,把传感器放水平了,读取10次左右陀螺仪和加速度的值,算出平均值,在自测函数里面直接把刚才算出来的陀螺仪和加速度的平均值写入到传感器里面,这样无论你怎么放传感器,输出的时候都会减去这个你最初设定的在水平位置的值(水平位置的静态误差)就可以避免你说的这种的情况。。。。。。仅供参考。。不知道还有没有其他更好的方法。。。
在selftest函数里面,
mpu_run_self_test(gyro, accel);这个函数会把你初始状态加速度值和陀螺仪值读取回来,放到gyro和accel两个数组里面,作为静态误差,并且返回result,
如果result为3,说明测试自测通过,就会把刚才读回来的gyro和accel数组里面的数据乘以分辨率(由mpu_get_gyro_sens(&sens)获得),最后把结果通过dmp_set_gyro_bias(gyro)函数
和dmp_set_accel_bias(accel)函数写入到dmp。。。
我是在dmp_set_accel_bias(accel)函数前把accel数组里面的值改了。。改成我再水平状态下测到的值。
MPU默认的安装方向如图a,若要让芯片立起来,则相当于MPU的安装方向绕Y轴旋转了+90度,如图b。此时欧拉转动的轴的顺序发生了改变,应该为”Z轴(俯仰)–>Y轴(滚转)–>X轴(偏航)”,而不是默认的XYZ。由inv_orientation_matrix_to_scalar()函数可知,当转动顺序为ZYX时,scalar的值为000_001_010,由inv_row_2_scale()函数反推,既可得到gyro_orientation[]的值为{0 0 1, 0 1 0, 1 0 0}。
板子不在身边,@xyq665513可以先试一下。
https://www.amobbs.com/forum.php?mod=viewthread&tid=5619086&ordertype=1
转载请注明:徐自远的乱七八糟小站 » MPU6050陀螺仪和加速度计的校准