打印

[小应用]GD32F103+MPU9150 四轴飞行器第一步:9DOF姿态融合

[复制链接]
楼主: zkcaptain
手机看帖
扫描二维码
随时随地手机跟帖
401
zkcaptain|  楼主 | 2015-8-3 12:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
本帖最后由 zkcaptain 于 2015-8-3 12:05 编辑
williamma931 发表于 2015-8-1 00:22
前面的我明白了,谢谢楼主,这里的我想问问
static uint32_t now=0; // 采样周期计数 单位 us
。。。

GET_NOWTIME()用于计时姿态解算周期,这个值不会累加,每次读取完这个时间都会清零

temp = (float)now / 2000000.0f;后面的注释应该是写错了,没改过来。你说的对,就是换算成秒。以秒为单位计时。

使用特权

评论回复
402
zkcaptain|  楼主 | 2015-8-3 12:04 | 只看该作者
Jhomin 发表于 2015-7-31 22:32
放平了也没晃动,自检还是没通过。测试了下,发现自检函数  mpu_run_self_test  返回值值 result = 4, 再 ...

从你的result结果来看,确实是加速度计和陀螺仪自检没通过,设个断点看一下accel_result和gyro_result的返回值是多少。

使用特权

评论回复
403
zkcaptain|  楼主 | 2015-8-3 12:22 | 只看该作者
williamma931 发表于 2015-8-1 16:17
感谢楼主大神啊,我搞出来了,不过,我有个问题,就是目前好像只有水平姿态的时候,YEW角是对的,倾斜以后 ...

倾斜时yaw偏多少?算法那块的代码我验证过,没有问题,那个算法也不是完美的,误差是有的,不过是在可接受范围内,另外你如何观测yaw发生了偏移呢?

使用特权

评论回复
404
zkcaptain|  楼主 | 2015-8-3 12:27 | 只看该作者
wuss1021521@163 发表于 2015-8-2 12:59
我的Yaw转动后,有时候会出现漂移

你用的哪个代码?
yaw怎么个漂法?静止不动也会漂?
转动或静止时磁力计的读数是否正确?

使用特权

评论回复
405
zkcaptain|  楼主 | 2015-8-3 12:29 | 只看该作者
yc_xpg 发表于 2015-7-8 15:38
楼主,你这个算法在当俯仰角>90度或小于-90时,横滚角会由0变为一个很大的值,而只转动Roll,俯仰Ptich就没有此 ...

这是这个代码的正常现象,这个代码并没有处理pitch=正负90度的那个奇点。

使用特权

评论回复
406
wuss1021521@163| | 2015-8-3 14:24 | 只看该作者
zkcaptain 发表于 2015-8-3 12:27
你用的哪个代码?
yaw怎么个漂法?静止不动也会漂?
转动或静止时磁力计的读数是否正确? ...

大神,我用的是AHRS代码,静止时的磁力计读数会有+-7左右的变动,旋转磁力计,数据会正负变化。附件是我手动添加了磁力计的校准值。

Yaw静止时没有变化,有时候刚开始转动,对应的yaw都比较正常,后面就开始漂了,不断递增。


你可以加我微信或QQ:250928250 吗? 我等你返回论坛好久了:P

11.png (27.01 KB )

11.png

使用特权

评论回复
407
zkcaptain|  楼主 | 2015-8-4 12:56 | 只看该作者
wuss1021521@163 发表于 2015-8-3 14:24
大神,我用的是AHRS代码,静止时的磁力计读数会有+-7左右的变动,旋转磁力计,数据会正负变化。附件是我 ...

磁力计+-7的变动没什么问题,各地方磁场干扰不一样,只要没有突变或强磁场,都不会影响到yaw。
我觉得你的情况不是校准的问题,如果是校准的问题,那顶多就是yaw不够准确,而不会递增。
如果你的磁力计数据正确的话,那应该是算法的问题,你可以查看一下你四元数-欧拉角的公式和AHRS算法,我觉得你这两个地方应该有问题。
我代码里的AHRS算法我是根据我自己的定义修改过的,别直接用,你好好看看吧,或者上一下代码。

使用特权

评论回复
408
wuss1021521@163| | 2015-8-4 15:11 | 只看该作者
zkcaptain 发表于 2015-8-4 12:56
磁力计+-7的变动没什么问题,各地方磁场干扰不一样,只要没有突变或强磁场,都不会影响到yaw。
我觉得你 ...

大神, 附件是相关代码和欧拉角输出数据,请指导,谢谢!:handshake

9150.rar

7.92 KB

磁力计&欧拉角输出数据.rar

5.8 KB

使用特权

评论回复
409
wuss1021521@163| | 2015-8-4 15:21 | 只看该作者
zkcaptain 发表于 2015-8-4 12:56
磁力计+-7的变动没什么问题,各地方磁场干扰不一样,只要没有突变或强磁场,都不会影响到yaw。
我觉得你 ...

见图,测试到Yaw一直都在缓慢递增,是靠近奇异点吗?

1.PNG (19.39 KB )

1.PNG

使用特权

评论回复
410
wuss1021521@163| | 2015-8-4 15:27 | 只看该作者
zkcaptain 发表于 2015-8-4 12:56
磁力计+-7的变动没什么问题,各地方磁场干扰不一样,只要没有突变或强磁场,都不会影响到yaw。
我觉得你 ...

大神,我将9150放在桌面上不动,读出的Yaw漂移比较大,这个是正常的吗?

2.jpg (104.35 KB )

2.jpg

使用特权

评论回复
411
farsailing| | 2015-8-4 17:45 | 只看该作者
楼主,我参考了你的immupdata算法,但是结果yaw不正确,旋转90度,但是读取到的数据却只有70度左右,而且转动180度后,变成了负值。这是什么原因?有什么相关的算法资料分享一下。谢谢啦!
这是转动90度的值。


使用特权

评论回复
412
wuss1021521@163| | 2015-8-4 23:01 | 只看该作者
farsailing 发表于 2015-8-4 17:45
楼主,我参考了你的immupdata算法,但是结果yaw不正确,旋转90度,但是读取到的数据却只有70度左右,而且转 ...

Immupdate算法融合磁力计数据没?

使用特权

评论回复
413
farsailing| | 2015-8-5 11:22 | 只看该作者
wuss1021521@163 发表于 2015-8-4 23:01
Immupdate算法融合磁力计数据没?

有的

使用特权

评论回复
414
farsailing| | 2015-8-5 11:29 | 只看该作者
williamma931 发表于 2015-8-1 16:17
感谢楼主大神啊,我搞出来了,不过,我有个问题,就是目前好像只有水平姿态的时候,YEW角是对的,倾斜以后 ...

你好,你用的是哪一个算法?在水平面上,yaw的角度都正确吗

使用特权

评论回复
415
springvirus| | 2015-8-5 13:16 | 只看该作者
赞一个,真正研究仪的!!

使用特权

评论回复
416
Jhomin| | 2015-8-5 22:54 | 只看该作者
zkcaptain 发表于 2015-8-3 12:04
从你的result结果来看,确实是加速度计和陀螺仪自检没通过,设个断点看一下accel_result和gyro_result的 ...

两个返回值都是 7 。分别进入以下两个自检函数调试的情况如图
    accel_result = accel_self_test(accel, accel_st);
    gyro_result = gyro_self_test(gyro, gyro_st);


dfag_225140.png (35.92 KB )

dfag_225140.png

jietu 8.png (47.28 KB )

jietu 8.png

使用特权

评论回复
417
wuss1021521@163| | 2015-8-12 13:24 | 只看该作者
zkcaptain 发表于 2015-8-3 12:29
这是这个代码的正常现象,这个代码并没有处理pitch=正负90度的那个奇点。

楼主,在不?

使用特权

评论回复
418
Jhomin| | 2015-9-3 16:41 | 只看该作者
zkcaptain 发表于 2015-8-3 12:04
从你的result结果来看,确实是加速度计和陀螺仪自检没通过,设个断点看一下accel_result和gyro_result的 ...

LZ还在吗?我那个问题还是没解决,现在项目基本完成了,就差这一块了,老师那边现在在催,能给点建议吗

使用特权

评论回复
419
zkcaptain|  楼主 | 2015-9-14 11:54 | 只看该作者
Jhomin 发表于 2015-9-3 16:41
LZ还在吗?我那个问题还是没解决,现在项目基本完成了,就差这一块了,老师那边现在在催,能给点建议吗 ...

忙的都没空上来,那个就是官方的自检库不通过,我看了下代码,就是比较实测值和给定值,如果实测值与给定值差距过大,就累加result,如果差距在允许范围内,result就为0。
这意味着你的传感器有震动或者xyz轴比水平位置有较大的偏斜,你看看你的传感器是否处于水平静止状态,如果这部分没问题,那就多试几颗传感器芯片试试,他那个自校准其实不用也罢,无所谓的。我后面的代码都没用那个了,太麻烦了。

使用特权

评论回复
420
zkcaptain|  楼主 | 2015-9-14 12:04 | 只看该作者
Jhomin 发表于 2015-9-3 16:41
LZ还在吗?我那个问题还是没解决,现在项目基本完成了,就差这一块了,老师那边现在在催,能给点建议吗 ...

你的代码我看过了,IMUupdate那个算法不是那么用的,请参考我代码里IMUupdata最下面那几行四元数转欧拉角的代码,我在这给你贴出来如下:
////        Yaw   = -(0.9 * (-Yaw + init_gz*2*halfT) + 5.73 * atan2(init_mx*cos(Roll) + init_my*sin(Roll)*sin(Pitch) + init_mz*sin(Roll)*cos(Pitch), init_my*cos(Pitch) - init_mz*sin(Pitch)));
////        Pitch = Pitch * 57.3;
////        Roll = Roll * 57.3;


重点是上面yaw这个公式。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则