查看: 20113|回复: 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, 下载次数: 712

该用户从未签到

 楼主| 发表于 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 | 显示全部楼层
    请问磁力校正具体怎么用呢
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    博哥零基础教你玩转ESP8266(十三) ESP8266WiFiGeneric库
    博哥零基础教你玩转ESP826
    帖子导航帖 博哥零基础教你玩转ESP8266(一) 重识ESP8266 博哥零基础教你玩转ESP8266
    求助!WeMos D1 WiFi怎么接0.96寸OLED?(ㄒoㄒ)
    求助!WeMos D1 WiFi怎么
    求助!WeMos D1 WiFi怎么接0.96寸OLED?(ㄒoㄒ) 想用WeMos D1 WiFi接收服务器的数据然
    串口发送16进制指令求助
    串口发送16进制指令求助
    我准备串口发出16进制指令到我的外置设备 代码如下图 我分别监控ARDUINO的tx口和USB口
    一文教你选择Arduino开发板,小白进
    一文教你选择Arduino开发
    笔者在2016年接触了Arduino,跳了万条坑,行了千里弯,到今天也算是Arduino的一
    大神们!1602显示屏上的MQ2浓度示数不是实时监测的何解
    大神们!1602显示屏上的MQ
    本人小白,刚刚接触arduino,长时间的查阅资料后,通过复制修改代码接线实现了DHT11实
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表