还是说我程序里的卡尔曼滤波参数有问题?其实是可以直接用滤波算法用陀螺仪的动态稳定来弥补加速度计的静态缺陷的?
想用arduino加MPU6050搞一个火箭飞控,具体就是用mpu 6050读取三轴的角速度和加速度,然后解算姿态,用卡尔曼滤波融合,再用舵机输出,但是在研究加速度解算姿态时遇到了问题。
首先先说一下加速度解算姿态的原理,在传感器水平放置且静止不动的条件下,总会有一个重力加速度指向下,与传感器z轴方向重合。当传感器不是水平放置时,重力加速度方向仍向下,但不与传感器z轴方向重合,这时,在传感器xyz三轴上会有重力加速度的分量
(差不多就是这个样子)
然后再根据旋转矩阵解方程组
这个矩阵是这么来的
然后就可以用三轴加速度的数据解算角度了。但是这里有一个问题,他这个解算加速度的原理是在大地坐标系上,加速度的x和y方向的分量均为零(gx,gy=0),但是在火箭上,显然这一条件是难以实现的,所以这样解算似乎并不十分准确,我在网上找关于用mpu6050写无人机飞控的文章也有提到这一点,比如说加速度计在动态条件下的准确度不高,或者说加速度解算的时候需要忽略运动之类的。无人机的飞控或许可以做到忽略其他加速度,但是火箭的显然不行啊,我刚刚又用程序试了一下mpu 6050有向上加速度时的数据(模拟火箭发射),发现有较大的偏差
另附上程序
请教一下各位大佬怎么解决?是要调整滤波器?还是说要加入新的模块?感激不尽!
飞起来之后用陀螺仪数据积分就行了,几分钟漂移不会很大的。或者加入三轴磁场/GPS/气压之类更多数据源来融合。
所以说要弃用加速度吗?我倒是想过只用陀螺仪积分,应该是可行的,等考完试试试。航电上打算加气压计磁力计和GPS,气压计算高度可以和mpu6050还有GPS融合一波,但是磁力计好像只能解算偏航角,这样的话对于pitch和roll角就只有陀螺仪的数据了,希望漂移别太大吧
或许有需要可以试试这个库,jrowberg大佬写的,内置了卡尔曼滤波器和坐标转换,自己的代码用的就是这个,感觉还挺准的
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX