5iMX宗旨:分享遥控模型兴趣爱好

5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)
查看: 13384|回复: 65
打印 上一主题 下一主题

MWC和FF算法比较

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-28 03:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、刚才看了玉兔被破解后,还有多次失控过程,不得不让自己深入挖掘一下MWC的代码,最后发现了一个很搞笑的问题。

其实MWC根本没有用到任何卡尔曼滤波,也就是说,以加速度计取值,然后忽略+-2之内的变化,然后用取平均值校准陀螺。陀螺仪限幅+-500°。

虽然很简单有效,但是被移植到STM32有很多地方需要修改。如果依样画葫芦肯定会出现,侧翻等情况。


二、FF用了四元数姿态解算,这部分是学习了MK的代码,使用这种方式解算,不必担心加速度计会因为震动产生数据混乱,这点可以搜索一下关于卡尔曼滤波的视频。使用卡尔曼滤波解算姿态角度的优势就是,准确,速度快,比加速度计求平均值后用陀螺积分去控制来得准确,且有效。

FF在作者的的笔下也做了点小小的优化。特别是平滑输出部分,为了能发挥STM32高速的特点。

缩小很多变量希望能不变补偿参数的情况下能够支持更多尺寸的机架。这是早期的想法,但是经过试验,现在已经可以用默认参数兼容从230-600的机架不用调试参数即可飞行。

这个时候大家就会问我了,为什么FF会失去自稳。其实MWC在调试初期,你也可能看到飞机对角线的乱跳,然后炸鸡。这点原理是一样的,早期FF把陀螺仪的感度调节的过高,这样姿态角度值相等精确,但是飞机的电机和桨的补偿不够的时候,或者说补偿量过大了就会进入震荡,这个时候就失去自稳了。

解决办法:从MWC的角度是缩小LEVEL值,其实缩小这个值等同于缩小陀螺仪的感度,也就是等比例缩小了PID的补偿。

后期的FF已经把感度缩小了,相对来说对机架的兼容性也有所提高


这是我对MWC和FF姿态算法的比较。希望对大家有些帮助。

[ 本帖最后由 栋栋 于 2012-1-28 03:02 编辑 ]

评分

参与人数 1威望 +2 收起 理由
吖龙 + 2 不错,有帮助。。。

查看全部评分

欢迎继续阅读楼主其他信息

沙发
发表于 2012-1-28 07:14 | 只看该作者
换个好点的陀螺仪,很多算法都可以省了,而且陀螺仪的带宽也可以有效利用。
3
发表于 2012-1-28 08:40 | 只看该作者
算法是不可能省的。即使是潜艇上用的机械式陀螺仪,卡尔曼滤波算法仍然必不可少。因为再好的陀螺仪和加速度计,也还是有误差的。
4
发表于 2012-1-28 10:06 | 只看该作者
高手啊,话说能不能把楼主修改的代码贴出来大家一起学习学习?:em21:
5
发表于 2012-1-28 10:19 | 只看该作者
:em15:  反正现在FF 不再失稳了
我用的很爽~
6
发表于 2012-1-28 10:31 | 只看该作者
你有FF代码?这种比较是自己想像的吧
7
 楼主| 发表于 2012-1-28 10:46 | 只看该作者
原帖由 top-one 于 2012-1-28 10:31 发表
你有FF代码?这种比较是自己想像的吧

因为有,所以才比较。
8
发表于 2012-1-28 10:49 | 只看该作者
技术贴我习惯先顶再看:em26:
9
 楼主| 发表于 2012-1-28 11:14 | 只看该作者
原帖由 seutommy 于 2012-1-28 08:40 发表
算法是不可能省的。即使是潜艇上用的机械式陀螺仪,卡尔曼滤波算法仍然必不可少。因为再好的陀螺仪和加速度计,也还是有误差的。

关于卡尔曼滤波,也有数据健康度这么一说,这点在APM飞控上就有。
10
发表于 2012-1-28 12:02 | 只看该作者
学习了,不懂什么滤波,但算法对是明白了
11
发表于 2012-1-28 17:01 | 只看该作者
楼主说的比较明白 看懂了一点
那现在的玉兔 无药可救了?反而FF要好的多
12
发表于 2012-1-28 17:02 | 只看该作者
攒一个,我也想学习代码
13
发表于 2012-1-28 17:36 | 只看该作者
能上传代码吗?我现在有MK和MWC的代码,缺少FF的代码了,没的比较。


有比较才有技术的提高。

feitan227@21cn。com
14
发表于 2012-1-28 17:52 | 只看该作者
是FF比玉免更稳更可靠吗?
15
发表于 2012-1-28 20:40 | 只看该作者
MK开启了多旋翼飞控的DIY之门,MWC促进了多旋翼飞控的普及,两者都功不可没啊!
16
发表于 2012-1-28 22:00 | 只看该作者
早期版本的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秒钟后的事了。
17
发表于 2012-1-28 22:20 | 只看该作者
楼主厉害。
18
发表于 2012-1-28 22:26 | 只看该作者
再次强烈建议楼主贴出代码。。。。。突然感觉,莫非楼主是FF的开发者?:em26:
19
 楼主| 发表于 2012-1-29 02:02 | 只看该作者
原帖由 dongfang 于 2012-1-28 22:00 发表
早期版本的MWC用的就是卡尔曼滤波,你可以找20111220版本的IMU,搜索kalman就是了,MWC的问题不是ACC振荡,我试过,同一平面上,剧烈晃动飞控板是不会影响姿态判断的,用MultiWiiConf可以看得清清楚楚。但问题是在于 ...

上位机里有,程序里没有。
20
 楼主| 发表于 2012-1-29 02:03 | 只看该作者
原帖由 yue621 于 2012-1-28 22:26 发表
再次强烈建议楼主贴出代码。。。。。突然感觉,莫非楼主是FF的开发者?:em26:

不是,只是知情人。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

【站内推荐】上一条 /1 下一条

快速回复 返回顶部 返回列表