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

[复制链接]
楼主: zkcaptain
手机看帖
扫描二维码
随时随地手机跟帖
wuzhiliang1234| | 2014-2-12 14:46 | 显示全部楼层
zkcaptain 发表于 2014-2-12 14:00
上面我回复过你了啊,这是欧拉角的奇异点,本来就会出现你说这个的情况,除非做过全姿态欧拉角的处理,不 ...

哦,我以为只是在90°这个值的时候出现数据异常,谢谢楼主!因为我做的东西,必须要求0~90°pitch和yaw的值都可用。

使用特权

评论回复
zkcaptain|  楼主 | 2014-2-12 15:08 | 显示全部楼层
本帖最后由 zkcaptain 于 2014-2-12 15:10 编辑
wuzhiliang1234 发表于 2014-2-12 14:46
哦,我以为只是在90°这个值的时候出现数据异常,谢谢楼主!因为我做的东西,必须要求0~90°pitch和yaw的 ...

理论上来说,如果加速度计校准的很好,没有零点漂移,每一个轴在正负1g下的绝对值都相等,每个轴之间的灵敏度又都一样,那么当pitch非常接近+90度或者-90度时,才会出现欧拉角的奇异点,像你说的在pitch=80度以上时就出现了这个奇异点,那么应该就是你的加速度计校准的不好,或者芯片焊接位置不准确也会造成加速度计读数有误差。

如果你要求pitch要能达到90度,那么就要对欧拉角进行全角度处理。这个我也不是很清楚

使用特权

评论回复
wuzhiliang1234| | 2014-2-12 15:48 | 显示全部楼层
zkcaptain 发表于 2014-2-12 15:08
理论上来说,如果加速度计校准的很好,没有零点漂移,每一个轴在正负1g下的绝对值都相等,每个轴之间的灵 ...

嗯,我试试你说的方法,非常感谢楼主指点迷津

使用特权

评论回复
feiyinglala| | 2014-2-12 22:25 | 显示全部楼层
关注楼主更新

使用特权

评论回复
天毅破天| | 2014-2-13 13:22 | 显示全部楼层
小白请教,欧拉角转四元数的时候,那个角度值为什么要除2的。

使用特权

评论回复
zkcaptain|  楼主 | 2014-2-13 15:45 | 显示全部楼层
天毅破天 发表于 2014-2-13 13:22
小白请教,欧拉角转四元数的时候,那个角度值为什么要除2的。

公式推导来的,固定系数

还有,那个单位是弧度,不是角度

使用特权

评论回复
wuzhiliang1234| | 2014-2-20 11:13 | 显示全部楼层
wuzhiliang1234 发表于 2014-2-12 15:48
嗯,我试试你说的方法,非常感谢楼主指点迷津

楼主,你所用的带磁力计的传感器,通过
        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)));
求出的yaw角度,在pitch 0~+90或-90任何角度都是很准确的吗?
我用的传感器没有带磁力计的。

使用特权

评论回复
wuzhiliang1234| | 2014-2-20 15:02 | 显示全部楼层
楼主,你所用的带磁力计的传感器,通过
        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)));
求出的yaw角度,在pitch 0~+90或-90任何角度都是很准确的吗?
我用的传感器没有带磁力计的。

使用特权

评论回复
zkcaptain|  楼主 | 2014-2-20 16:17 | 显示全部楼层
本帖最后由 zkcaptain 于 2014-2-20 16:18 编辑
wuzhiliang1234 发表于 2014-2-20 15:02
楼主,你所用的带磁力计的传感器,通过
        Yaw   = -(0.9 * (-Yaw + init_gz*2*halfT) + 5.73 * atan2 ...

0~90度不敢保证,至少pitch 0~+-80度时,yaw都是准确的
   
一方面pitch也到不了90度,这是奇点
另一方面,我也没打算让pitch到90度,会限制到正负20度或30度之内

磁力计很容易受到干扰,跟所在环境也有关系

使用特权

评论回复
wuzhiliang1234| | 2014-2-21 10:53 | 显示全部楼层
zkcaptain 发表于 2014-2-20 16:17
0~90度不敢保证,至少pitch 0~+-80度时,yaw都是准确的
   
一方面pitch也到不了90度,这是奇点

我必须解决奇点问题和Yaw值80°以上不准确问题,不然产品达不到客户要求。既然磁力计影响大,那就不用了,我是看磁力计能解决这方面问题不。非常感谢楼主……

使用特权

评论回复
huangjia22| | 2014-2-22 14:17 | 显示全部楼层
赞一下子

使用特权

评论回复
orangebe| | 2014-2-25 22:00 | 显示全部楼层
UP主,MPU9150的dmp是输出欧拉角的变化量还是相对初始定义坐标系的欧拉角?

使用特权

评论回复
zkcaptain|  楼主 | 2014-2-26 09:10 | 显示全部楼层
orangebe 发表于 2014-2-25 22:00
UP主,MPU9150的dmp是输出欧拉角的变化量还是相对初始定义坐标系的欧拉角?

dmp只能输出四元数,需要自己转欧拉角,转化后的欧拉角是相对自定义坐标系的角度

使用特权

评论回复
orangebe| | 2014-2-27 23:02 | 显示全部楼层
zkcaptain 发表于 2014-2-26 09:10
dmp只能输出四元数,需要自己转欧拉角,转化后的欧拉角是相对自定义坐标系的角度 ...

谢谢Up主解答,小白初学,请多指教!

使用特权

评论回复
bennik| | 2014-3-6 08:49 | 显示全部楼层
zkcaptain 发表于 2013-9-2 18:04
上位机别人做的都很好了,我想的是先用串口助手看看数据,行了就拿别人的上位机来看漂亮的效果。。 ...

楼主,你的MPU6050的数据西安传给stm32芯片,芯片处理后再通过串口传给PC机吗 ?

使用特权

评论回复
zkcaptain|  楼主 | 2014-3-6 09:26 | 显示全部楼层
bennik 发表于 2014-3-6 08:49
楼主,你的MPU6050的数据西安传给stm32芯片,芯片处理后再通过串口传给PC机吗 ? ...

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
bennik + 1
baoliguo| | 2014-3-6 12:12 | 显示全部楼层
我前几天成功得到欧拉角,9轴的融合,使用Imu算法。我使用dmp和在初始位置给了一个与标准值差的一个偏移值校准。零点校准和零点漂移校准都在程序中对加速剂校准了,但数据与实际的有点偏差。比如Roll在垂直时显示60-80之间,经过几次运动才有80多的参数。,还有就是芯片在手上的时候,手轻微的抖动也影响数据的变化,我想微小的抖动可以忽略,这怎么设置呢?

使用特权

评论回复
zkcaptain|  楼主 | 2014-3-6 13:15 | 显示全部楼层
baoliguo 发表于 2014-3-6 12:12
我前几天成功得到欧拉角,9轴的融合,使用Imu算法。我使用dmp和在初始位置给了一个与标准值差的一个偏移值 ...

你看看你的加速度计z轴指天时数据是多少?z轴指地时数据是多少?
同理x,y轴

去抖动,一个是用软件滤波,另一个试试设置一下传感器的低通滤波
过分的滤波会产生滞后

使用特权

评论回复
bennik| | 2014-3-6 16:19 | 显示全部楼层
zkcaptain 发表于 2014-3-6 09:26

谢谢楼主,那么发送数据的格式(协议)都是固定死的?

使用特权

评论回复
smileage| | 2014-3-9 11:23 | 显示全部楼层
init_mx =(float)mag[1]-8;                                               
init_my =(float)1.046632*mag[0]-1.569948;
init_mz =(float)-mag[2];

楼主,按照右手定理,磁力计本来就符合的,你的程序里Z轴做了反向,是不是这里有问题?还是我弄错了右手定理。
QQ图片20140309112331.jpg

使用特权

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

本版积分规则