查看: 17952|回复: 12

MPU9250的姿态解算方法(RTIMULib-Arduino)

[复制链接]

该用户从未签到

发表于 2016-4-13 22:33 | 显示全部楼层 |阅读模式
库下载链接:https://github.com/richards-tech/RTIMULib-Arduino我也在附件中上传了压缩包

折腾了一下午终于把这个库的使用方法弄明白了,论坛里也没什么人说的清楚,我觉得弄明白了还是和大家说一下比较好,以后也都少走弯路吧。
这个库不是标准的arduino库,所以不可以使用ide直接添加,而实际上程序都在压缩包里面。

连接方法:
3.3v-VCC
GND-GND
A4-SDA
A5-SCL

使用方法是这样的(我以mpu9250为例,其它的模块也是一样的)
1.首先解压压缩包,把libraries里面的几个文件夹拉进arduino的libraries文件夹里面(这个应该大家都知道在哪了)
2.在RTIMULib这个文件夹里面,打开RTIMULibDefs,把你想用的模块定义出来,其它的用“//”盖住,如下是使用0x68总线地址mpu9250的示范。默认是mpu9150,你需要把它前面加上“//”。
//#define MPU9150_68                      // MPU9150 at address 0x68
//#define MPU9150_69                      // MPU9150 at address 0x69
#define MPU9250_68                      // MPU9250 at address 0x68
//#define MPU9250_69                      // MPU9250 at address 0x69
//#define LSM9DS0_6a                      // LSM9DS0 at address 0x6a
//#define LSM9DS0_6b                      // LSM9DS0 at address 0x6b
//#define GD20HM303D_6a                   // GD20H + M303D at address 0x6a
//#define GD20HM303D_6b                   // GD20H + M303D at address 0x6b
//#define GD20HM303DLHC_6a                // GD20H + M303DLHC at address 0x6a
//#define GD20HM303DLHC_6b                // GD20H + M303DLHC at address 0x6b
//#define GD20M303DLHC_6a                 // GD20 + M303DLHC at address 0x6a
//#define GD20M303DLHC_6b                 // GD20 + M303DLHC at address 0x6b
//#define BNO055_28                       // BNO055 at address 0x28
//#define BNO055_29                       // BNO055 at address 0x29

3.烧写并运行ArduinoMagCal.ino校准磁强计,可以用八字校准法,校准完成后串口监视器会自动停止输出。这时候输入s,把校准数据存入MPU9250.
4.烧写并运行ArduinoIMU.ino,如果之前没有错的话,这里就可以看到roll pitch yaw 三个角度的输出了。


RTIMULib-Arduino-master.zip

117.68 KB, 下载次数: 658

该用户从未签到

 楼主| 发表于 2016-4-13 22:37 | 显示全部楼层
至于yaw角的精确度,仍然是比较差劲,但至少比没有磁力计校正的mpu6050积分出来的yaw角多了些可用性。
具体的算法还在研究中。

其实这个库的使用方法在github上面已经有提到了,在压缩包的readme文件中也有一份说明(我用的是os x,可以用Mou这个软件打开),不过可能很多人一开始不会注意到。所以我上面说的算是一个转述或者说是翻译吧~

最后还是要感谢作者!
  • TA的每日心情
    无聊
    2017-6-24 14:20
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2016-4-14 12:03 | 显示全部楼层
    本帖最后由 190808149 于 2016-4-14 12:46 编辑

    楼主找到的这个库太有用了,提供了数据融合的基本方法和完整的源代码。
    [face76.gif]
    我一直在找这样的代码以供学习。
    姿态矫正是个大问题,国内的论文一搜索一大堆,就是没人讲具体实现,感觉国内玩飞控,发论文,写博客的那帮研究生就是在吹牛。
    要么不敢贴代码,要么吹牛做假论文。真正会做飞控编程的估计悄悄进大疆了。
    特别那个什么号称“圆点博士”的傻逼,在论坛上放文,说教你设计飞控,掉足胃口,然后核心内容要联系他收费买教材。

    所以之前几个月我一直思索解决飞控代码的问题,想在Intel Edison上读取陀螺仪姿态。

    第一个方法是直接编写数据融合程序,但是数学基础没有打好,又没有源码参考,所以知难而退。

    我是按第二个方法,直接调用MPU6050 DMP进行数据融合解算,读取姿态。
    我在GitHub上也找到了相应的实现程序:
    https://github.com/wesleymilan/C ... Intel-Galileo-Edson
    他是在用arduino读取MPU6050 DMP程序的基础上,移植到Intel Galileo。我又把该程序移植到Intel Edison。
    以此实现对陀螺仪姿态的读取。

    但是直接读MPU6050 DMP数据有个问题,估计是国内买到的gy521质量问题,烧写1次到几次DMP至MPU6050芯片后,芯片就损坏了。即使断电重启,其I2C总线也不再响应。我改写了芯片制造商提供的官方DMP程序,再次试验,同样损坏gy521模块。

    我想,合理的陀螺仪姿态读取方案,还是应该在于自己编程解算,避免对gy521的重复擦写。楼主的帖子太救命,太及时。您说:“论坛里也没什么人说的清楚”,我也如此体会,国人动嘴的多,动手的少。大家热追无人机,姿态飞控却没人深入。

    最可恨的就是发论文吹牛皮,既不敢公布自己实现细节,也不敢制造成品参与商业实践的,那帮学渣。
    打赏
  • TA的每日心情
    无聊
    2017-6-24 14:20
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2016-10-8 17:05 来自手机 | 显示全部楼层
    再顶起来。现在arduino
    打赏
  • TA的每日心情
    无聊
    2017-6-24 14:20
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2016-10-8 17:06 来自手机 | 显示全部楼层
    现在arduino有madgwick库,实现同样功能更简易。
    打赏

    该用户从未签到

    发表于 2017-2-7 15:13 | 显示全部楼层
    楼主。Y轴的角度值怎么改。他是0-90。。怎么改成0-180
  • TA的每日心情
    开心
    2017-2-7 15:27
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2017-2-7 15:23 | 显示全部楼层
    红线点嫩色 发表于 2016-4-13 22:37
    至于yaw角的精确度,仍然是比较差劲,但至少比没有磁力计校正的mpu6050积分出来的yaw角多了些可用性。
    具体 ...

    你的做出来了么??我可以参考一下你的算法么

    该用户从未签到

    发表于 2017-10-3 14:02 | 显示全部楼层
    请问磁力校正具体怎么用呢
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    Arduino MEGA 与UNO 通过nRF24L模块通讯
    Arduino MEGA 与UNO 通过n
    之前在深水宝很“实惠”的店铺买了一些原件,随手砍了esp8266以及nRF24L*3 因为缺
    美科科技microAI之Mixly篇之三
    美科科技microAI之Mixly篇
    本节介绍使用Mixly控制MicroAI,制作蓝牙耳机音频接收器。 编辑环境:Mixly V1.4.4 准
    请问拆下来的屏幕怎么连接arduino
    请问拆下来的屏幕怎么连接
    屏幕是以前车子拆下来的导航屏幕,液晶屏驱动板芯片是MST702-LF,要怎样改装才能接上a
    arduino智能小车蓝牙控制系统
    arduino智能小车蓝牙控制
    蓝牙智能小车简介 智能小车主要可以分为 3 部分, 传感器部分、控制部分、执行部分。
    花费更少的钱 更换12864OLED
    花费更少的钱 更换12864OL
    导读分割线 国庆第一天开门红,就摔坏一块刚买不久的oled屏幕,买的时候是16。经过研
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表