彬彬啡礼 发表于 2013-2-5 13:31:49

STM32如何处理陀螺仪MPU6050送出的数据?

本帖最后由 彬彬啡礼 于 2013-2-5 13:38 编辑

四轴飞行器卡在了飞行姿势调整上。。。不知怎样计算陀螺仪数据,原先还以为像安卓的API一样直接会输出角度数值。。。{:3_60:}
这是模块静止水平放置时输出的数据:


我使用的MPU6050模块:


收到的数据跳动很厉害,谷歌搜索了两天了,到现在还是不知道怎样把这些数据转换成角度、加速度和温度数值。求方法,另外说明本人不会微积分。。。

附上我的程序源码:

quzhanguang1 发表于 2013-2-5 14:14:28

{:sweat:}加速度计和陀螺仪的融合算法
你可以在坛子搜索两轮平衡车。里面有讲解融合算法

彬彬啡礼 发表于 2013-2-5 14:27:40

quzhanguang1 发表于 2013-2-5 14:14 static/image/common/back.gif
加速度计和陀螺仪的融合算法
你可以在坛子搜索两轮平衡车。里面有讲解融合算法 ...

好吧我找找

xxd_9980 发表于 2013-2-5 14:40:24

四轴的话要用的四元数算法    这是最底层的东西安卓的API已经是底层做了融合上层的东西了

彬彬啡礼 发表于 2013-2-5 15:17:06

quzhanguang1 发表于 2013-2-5 14:14 static/image/common/back.gif
加速度计和陀螺仪的融合算法
你可以在坛子搜索两轮平衡车。里面有讲解融合算法 ...

找了本融合算法的PDF,够我消化几天的了。。。

zywei_09 发表于 2013-2-5 15:24:21

把陀螺仪数据代入龙格库塔方程做积分

zywei_09 发表于 2013-2-5 15:24:45

当然,我说的陀螺仪数据是指校正过的陀螺仪数据,不是直接使用的。

彬彬啡礼 发表于 2013-2-5 15:32:58

zywei_09 发表于 2013-2-5 15:24 static/image/common/back.gif
当然,我说的陀螺仪数据是指校正过的陀螺仪数据,不是直接使用的。

当然要做矫正,不过我一个高中生看到这些微积分表示压力巨大,只能复制粘贴。。。。{:sweat:}

wcm_e 发表于 2013-2-5 15:43:13

学习      

zywei_09 发表于 2013-2-5 15:45:46

彬彬啡礼 发表于 2013-2-5 15:32 static/image/common/back.gif
当然要做矫正,不过我一个高中生看到这些微积分表示压力巨大,只能复制粘贴。。。。...

用现成的结论,不学懂也可以。MPU6050有好多输出模式,比如我做的飞控里设置的量程是正负2000°,那么看手册上说,这个模式下陀螺仪的灵敏度是16.4LSB,所以把陀螺仪输出的数据除以16.4就是角速度,单位是°/s,然后除以57.3就变成弧度制。

zywei_09 发表于 2013-2-5 15:52:01

同理,加计你在手册上也可以查到这个灵敏度。我设置的量程是±8g,灵敏度是4096,把加计读出是数值除以4096变成单位为g,然后乘以9.81就变成m/s^2

彬彬啡礼 发表于 2013-2-5 15:53:16

zywei_09 发表于 2013-2-5 15:52 static/image/common/back.gif
同理,加计你在手册上也可以查到这个灵敏度。我设置的量程是±8g,灵敏度是4096,把加计读出是数值除以4096 ...

谢谢指导,我先用用你说的方法吧

zywei_09 发表于 2013-2-5 15:54:08

彬彬啡礼 发表于 2013-2-5 15:32 static/image/common/back.gif
当然要做矫正,不过我一个高中生看到这些微积分表示压力巨大,只能复制粘贴。。。。...

我说的校正时用观测值做数据融合。。。不是初始化时候的校正。。。初始化的校正要采集好多数据然后拟合算偏移量什么的。

彬彬啡礼 发表于 2013-2-5 16:17:24

zywei_09 发表于 2013-2-5 15:54 static/image/common/back.gif
我说的校正时用观测值做数据融合。。。不是初始化时候的校正。。。初始化的校正要采集好多数据然后拟合算 ...

之前的确误解了你说的“校正”的含义,不过现在看了些融合算法说明,已经明白了。感谢!

彬彬啡礼 发表于 2013-2-5 16:29:59

zywei_09 发表于 2013-2-5 15:24 static/image/common/back.gif
把陀螺仪数据代入龙格库塔方程做积分

既然这个传感器折腾起来这么麻烦,我计划把安卓手机放到飞行器上面,直接用蓝牙串口输出当前飞行器的姿势,STM32根据手机传感器的数据来保持飞行姿势怎么样?

彬彬啡礼 发表于 2013-2-5 16:37:14

刚测试了一下安卓手机,发现在运动时重力传感器数据也不准确,看来没捷径走。还是慢慢折腾MPU6050吧

彬彬啡礼 发表于 2013-2-5 16:40:42

但用安卓手机的传感器在低速低空无风的情况下还是勉强可以的,我先用安卓手机做出来,成功之后再进一步研究MPU6050

zywei_09 发表于 2013-2-5 20:05:18

彬彬啡礼 发表于 2013-2-5 16:40 static/image/common/back.gif
但用安卓手机的传感器在低速低空无风的情况下还是勉强可以的,我先用安卓手机做出来,成功之后再进一步研究 ...

建议还是用MPU6050,毕竟手机上的传感器不是专门做这个的,而且重量上就不划算。其实MPU6050用起来挺简单的。

彬彬啡礼 发表于 2013-2-5 22:45:50

zywei_09 发表于 2013-2-5 20:05 static/image/common/back.gif
建议还是用MPU6050,毕竟手机上的传感器不是专门做这个的,而且重量上就不划算。其实MPU6050用起来挺简单 ...

最终当然要用MPU6050,但是寒假假期很短,我得在这短暂的时间里先把基本的雏形做出来{:lol:} 剩下算法什么的等开学了再研究,毕竟在学校不好折腾硬件

lxl_lw 发表于 2013-2-5 22:57:54

高中生就做这些了,这让我等大学生情何以堪啊!

zywei_09 发表于 2013-2-5 23:26:26

彬彬啡礼 发表于 2013-2-5 22:45 static/image/common/back.gif
最终当然要用MPU6050,但是寒假假期很短,我得在这短暂的时间里先把基本的雏形做出来 剩下算法什 ...

恩恩,加油~高中就做这些,让大四学长情何以堪,想想我高中的时候那叫一个管得严啊,哪里敢看这些课外的东西。。。哎,应试教育。。。。

骚黄 发表于 2013-2-7 03:15:20

LZ我和你读到的数据一样,很奇怪为什么模块静止不动,加速度值却这么大,而且就算断电在上电,加速度值和掉电前一样,而且数据会由模块角度变化而变化。。。迷乱中。。。{:mad:}

彬彬啡礼 发表于 2013-2-7 03:51:10

骚黄 发表于 2013-2-7 03:15 static/image/common/back.gif
LZ我和你读到的数据一样,很奇怪为什么模块静止不动,加速度值却这么大,而且就算断电在上电,加速度值和掉 ...

你把我的代码移植到你的开发板上试试看

骚黄 发表于 2013-2-7 10:32:20

彬彬啡礼 发表于 2013-2-7 03:51 static/image/common/back.gif
你把我的代码移植到你的开发板上试试看

我看你发的代码了,和我参考的主程序部分一模一样,今天又搜了点资料和视频看了下,发现了个问题,所谓的角加速度,貌似并不是沿轴转动的加速度,你可以发现,哪个轴垂直向上,哪个轴的数据就最大,平放的话Z轴向上,所以是最大的。

智涅 发表于 2013-2-21 15:51:07

我的数据也是跳动比较大,基本上低八位没什么价值了~~

智涅 发表于 2013-2-21 15:54:12

本人已经懂得四元数方法,会姿态更新了,现在一直卡在精度上(加速度)。而且自己写的加速度修正姿态的算法不太好,求交流

js200300953 发表于 2013-2-21 17:00:53

陀螺读数0和±1,多么完美啊!{:sweat:}

MrLCL 发表于 2013-3-5 11:10:38

zywei_09 发表于 2013-2-5 15:24 static/image/common/back.gif
把陀螺仪数据代入龙格库塔方程做积分

是不是理想的情况下,陀螺仪积分出来的角度就能当状态数据来使用

MrLCL 发表于 2013-3-5 11:11:24

智涅 发表于 2013-2-21 15:54 static/image/common/back.gif
本人已经懂得四元数方法,会姿态更新了,现在一直卡在精度上(加速度)。而且自己写的加速度修正姿态的算法 ...

是参考网上的程序还是,自己研究出的。我一直整不懂四元数

zywei_09 发表于 2013-3-5 12:12:05

MrLCL 发表于 2013-3-5 11:10 static/image/common/back.gif
是不是理想的情况下,陀螺仪积分出来的角度就能当状态数据来使用

是的, 在陀螺仪不存在误差的情况下,但实际上由于误差,并且一直在积分,最后得到的累积误差会比较大,所以需要加速度计校正。

MrLCL 发表于 2013-3-6 09:41:40

zywei_09 发表于 2013-3-5 12:12 static/image/common/back.gif
是的, 在陀螺仪不存在误差的情况下,但实际上由于误差,并且一直在积分,最后得到的累积误差会比较大, ...

可是现在存在绕一个轴旋转的时候,其他的轴有分量啊。安装的时候不可能放到物体的中心去安装。是不是三个姿态角度,都是正负180,或者0到360

zywei_09 发表于 2013-3-6 18:16:10

MrLCL 发表于 2013-3-6 09:41 static/image/common/back.gif
可是现在存在绕一个轴旋转的时候,其他的轴有分量啊。安装的时候不可能放到物体的中心去安装。是不是三个 ...

不清楚你表达什么意思。。。在大地坐标系下来看,机体绕一个轴旋转时在其他轴上有分量,这就需要坐标变换,把机体坐标系下的转动转化到大地坐标系下的转动。

MrLCL 发表于 2013-3-6 20:56:28

zywei_09 发表于 2013-3-6 18:16 static/image/common/back.gif
不清楚你表达什么意思。。。在大地坐标系下来看,机体绕一个轴旋转时在其他轴上有分量,这就需要坐标变换 ...

哦,那我就明白了大概意思了

liughsy008 发表于 2013-3-8 15:37:30

共同学习中。。。

LCRPN 发表于 2013-3-14 15:56:26

楼主啊,“iic_analog.c”,此模拟非彼模拟也……应该是simulate...

zg1990 发表于 2013-3-21 22:04:24

越看越复杂了

zhousf85 发表于 2013-4-18 16:55:51

正在学习MPU6050,不知道楼主的漂移问题是怎么解决的,能共享下吗?

yh1036164041 发表于 2013-4-27 20:12:50

怎么在串口上显示加速度等数据啊?楼主

马学家 发表于 2013-5-24 12:03:34

线怎么接?int接口还用接吗?

幽怨草 发表于 2013-8-2 09:39:23

彬彬啡礼 发表于 2013-2-5 14:27 static/image/common/back.gif
好吧我找找

为什么我没有找到呢,是在阿莫里面找吗?

深海烟花 发表于 2013-9-2 19:43:00

彬彬啡礼 发表于 2013-2-5 15:32 static/image/common/back.gif
当然要做矫正,不过我一个高中生看到这些微积分表示压力巨大,只能复制粘贴。。。。...

表示看到高中生,表示压力山大。。。。。。。。

深海烟花 发表于 2013-9-2 19:45:53

骚黄 发表于 2013-2-7 03:15 static/image/common/back.gif
LZ我和你读到的数据一样,很奇怪为什么模块静止不动,加速度值却这么大,而且就算断电在上电,加速度值和掉 ...

我们俩的数据比较类似,不知道你最后怎么处理的。。。。。。。。。。。。

ranjiexu 发表于 2013-9-3 10:10:01

mark一下

sinc_mark 发表于 2013-10-8 16:25:22

看到高中生三个字,俺也表示压力巨大。但同时也应该庆幸,高中就懂这个,楼主,地球的和平以后就要靠你了!{:lol:}

dongfo 发表于 2013-10-8 21:50:41

论坛里有用库的

LZ19992005 发表于 2014-1-8 21:48:54

{:biggrin:}

tianyiran02 发表于 2014-1-18 22:51:22

zywei_09 发表于 2013-2-5 15:45
用现成的结论,不学懂也可以。MPU6050有好多输出模式,比如我做的飞控里设置的量程是正负2000°,那么看 ...

大神请问一下你,按照数据手册把Gyroscope读出来,除以LSB,得到的是每个轴的旋转角速度是吧?这个角速度有正负么?请问能加一下您的qq就这个问题稍微请教下么?读了很多遍没看到相关的内容,又很迷惑。求大神指导!我的QQ是474465933. 因为等级不够不能发站内,麻烦您了。

watermelon_ok 发表于 2014-1-23 20:01:29

高中生都能这么强啊,汗~

电气工程化动自 发表于 2014-3-19 21:05:41

{:smile:}{:sad:}{:smile:}

LYY 发表于 2014-4-22 17:05:49

zywei_09 发表于 2013-2-5 15:45
用现成的结论,不学懂也可以。MPU6050有好多输出模式,比如我做的飞控里设置的量程是正负2000°,那么看 ...

太好了,我也弄懂了{:lol:}

10xjzheng 发表于 2014-5-15 22:22:06

骚黄 发表于 2013-2-7 03:15
LZ我和你读到的数据一样,很奇怪为什么模块静止不动,加速度值却这么大,而且就算断电在上电,加速度值和掉 ...

很正常啊,因为有个重力加速度,可以去理解下输出的数据有什么含义先。

索达客 发表于 2014-8-28 21:13:36

js200300953 发表于 2013-2-21 17:00
陀螺读数0和±1,多么完美啊!

大神,总是很低调。 我陀螺仪(MPU6050)Yaw方向如何进行卡尔曼滤波。 ( pitch,roll 可以根据重力的分量直接由加速度计计算出角度, 而yaw 不行呀) , 我在做直升飞机,只用到一个yaw。 表示之前做四轴读了您很多帖子,方便加好友吗?

songjie 发表于 2014-9-24 16:04:27

看看,O(∩_∩)O谢谢

qs6361036 发表于 2014-9-27 00:49:04

自古王道 来自2楼啊

tim4146 发表于 2014-9-27 01:18:13

问楼主一个问题,加速度计+陀螺仪 最后可以得到运动物体的姿态,能知道当前的速度值不?

Afu 发表于 2014-11-23 22:18:30

Mark 一下
页: [1]
查看完整版本: STM32如何处理陀螺仪MPU6050送出的数据?