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

该用户从未签到

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

    本版积分规则

    热门推荐

    KittenBot杯第六届开源硬件开发大赛启动啦
    KittenBot杯第六届开源硬
    大赛简介: 第六届开源硬件开发大赛由Arduino中文社区发起 由KittenBot冠名赞助
    全过程展示:PWM自定义、测速、PID调速、PID自整定
    全过程展示:PWM自定义、
    arduino如何控制带驱动28步进电机
    arduino如何控制带驱动28
    有大佬知道吗,arduino不知道能不能发出脉冲信号
    Wifiduino(esp8266)+blinker+微信消息推送
    Wifiduino(esp8266)+bli
    最近呢,有个很小的项目 需要反馈现场电源工作状态,着急开发,没时间做方案。我又是
    因为DHT11是假的吗?
    因为DHT11是假的吗?
    用DHT11测温湿度时,监视窗口总是这样显示,这是为什么啊,求大佬告知!
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表