|
早期版本的MWC用的就是卡尔曼滤波,你可以找20111220版本的IMU,搜索kalman就是了,MWC的问题不是ACC振荡,我试过,同一平面上,剧烈晃动飞控板是不会影响姿态判断的,用MultiWiiConf可以看得清清楚楚。但问题是在于MWC用的是这样的算法来计算姿态:
// Rotate Estimated vector(s) with small angle approximation, according to the gyro data
void rotateV(struct fp_vector *v,float* delta) {
fp_vector v_tmp = *v;
v->Z -= delta[ROLL] * v_tmp.X + delta[PITCH] * v_tmp.Y;
v->X += delta[ROLL] * v_tmp.Z - delta[YAW] * v_tmp.Y;
v->Y += delta[PITCH] * v_tmp.Z + delta[YAW] * v_tmp.X;
}
后果是,如果试图做3D动作,数据就会大乱,比如:仰起90度,顺时横滚90度,俯下90度,顺时偏航(平面旋转)90度,这样的动作实际结果是归位,但像MWC这样的算法就惨了,我看着MultiWiiConf就是姿态大乱,直到被ACC渐渐纠正,完全纠正那是5秒钟后的事了。 |
|