还是说我程序里的卡尔曼滤波参数有问题?其实是可以直接用滤波算法用陀螺仪的动态稳定来弥补加速度计的静态缺陷的?
想用arduino加MPU6050搞一个火箭飞控,具体就是用mpu 6050读取三轴的角速度和加速度,然后解算姿态,用卡尔曼滤波融合,再用舵机输出,但是在研究加速度解算姿态时遇到了问题。
首先先说一下加速度解算姿态的原理,在传感器水平放置且静止不动的条件下,总会有一个重力加速度指向下,与传感器z轴方向重合。当传感器不是水平放置时,重力加速度方向仍向下,但不与传感器z轴方向重合,这时,在传感器xyz三轴上会有重力加速度的分量
(差不多就是这个样子)
然后再根据旋转矩阵解方程组
这个矩阵是这么来的
然后就可以用三轴加速度的数据解算角度了。但是这里有一个问题,他这个解算加速度的原理是在大地坐标系上,加速度的x和y方向的分量均为零(gx,gy=0),但是在火箭上,显然这一条件是难以实现的,所以这样解算似乎并不十分准确,我在网上找关于用mpu6050写无人机飞控的文章也有提到这一点,比如说加速度计在动态条件下的准确度不高,或者说加速度解算的时候需要忽略运动之类的。无人机的飞控或许可以做到忽略其他加速度,但是火箭的显然不行啊,我刚刚又用程序试了一下mpu 6050有向上加速度时的数据(模拟火箭发射),发现有较大的偏差
另附上程序
请教一下各位大佬怎么解决?是要调整滤波器?还是说要加入新的模块?感激不尽!
飞起来之后用陀螺仪数据积分就行了,几分钟漂移不会很大的。或者加入三轴磁场/GPS/气压之类更多数据源来融合。
所以说要弃用加速度吗?我倒是想过只用陀螺仪积分,应该是可行的,等考完试试试。航电上打算加气压计磁力计和GPS,气压计算高度可以和mpu6050还有GPS融合一波,但是磁力计好像只能解算偏航角,这样的话对于pitch和roll角就只有陀螺仪的数据了,希望漂移别太大吧
我记得6050里陀螺还是加速度计的z轴数据可靠性极低,照楼主的结果来看是加计
6050在加速度计量程16G。在火箭加速度下会饱和,其积分出来的速度,或二阶积分出来的位置,都会误差极大,尤其是位置。
6050在加速度计量程16G。在火箭加速度下会饱和,其积分出来的速度,或二阶积分出来的位置,都会误差...
我这个用openrocket模拟的加速度最大是6g左右,应该不会超量程,以后可能会设计速度更高的再考虑这个因素。所以加速度计好像在火箭上的准确度不高是吗?那我就不加加速度计数据了吧
刚刚又试了一下只有陀螺仪积分算角度,5分钟漂移大概6度,不算多,我就是怕上pid控制之后会偏的多一些,只用陀螺仪积分应该也勉强能用。
6050在加速度计量程16G。在火箭加速度下会饱和,其积分出来的速度,或二阶积分出来的位置,都会误差...
确实误差很大,我刚才试了一下二阶积分位置,不到十分钟已经飘出1000多米了,就算跟气压计数据融合也不好使了
或许有需要可以试试这个库,jrowberg大佬写的,内置了卡尔曼滤波器和坐标转换,自己的代码用的就是这个,感觉还挺准的
XXXXXXXXXXXXXXXXXX/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050
mpu6050会有抖动偏移,用卡尔曼滤波算法
时段 | 个数 |
---|---|
{{f.startingTime}}点 - {{f.endTime}}点 | {{f.fileCount}} |
200字以内,仅用于支线交流,主线讨论请采用回复功能。