鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    MPU6050数据漂移问题讨论

    已定时 已固定 已锁定 已移动 未解决
    嵌入式系统
    设计讨论 fishbot
    2
    26
    6.3k
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 哈喽哈嘿哈
      哈喽哈嘿 @小鱼
      最后由 编辑

      @小鱼 确实self_test应该加进去的,关于calibrate它执行的时间比较长,一边要读取数据,另外一边还要写入数据,我就把写入数据那一部分省去了,使得初始化快了很多,效果也没变化

      小鱼小 1 条回复 最后回复 回复 引用 0
      • 小鱼小
        小鱼 技术大佬 @哈喽哈嘿
        最后由 编辑

        @哈喽哈嘿 刚测试了下,calibration时间确实太长了,一直没有初始化完成。

        新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

        哈喽哈嘿哈 1 条回复 最后回复 回复 引用 0
        • 哈喽哈嘿哈
          哈喽哈嘿 @小鱼
          最后由 编辑

          @小鱼 那个里面有个packet_count,我的读出来是65535/12,就是满的,我觉得就是循环取平均,我后面改成100了

          小鱼小 1 条回复 最后回复 回复 引用 0
          • 小鱼小
            小鱼 技术大佬 @哈喽哈嘿
            最后由 编辑

            @哈喽哈嘿 对的,AHRS相关的开源库可以再试试,卡尔曼估计比较消耗计算。

            这里有提供代码可以参考:

            • https://x-io.co.uk/open-source-imu-and-ahrs-algorithms/
            • https://x-io.co.uk/downloads/madgwick_algorithm_c.zip

            新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

            哈喽哈嘿哈 1 条回复 最后回复 回复 引用 0
            • 哈喽哈嘿哈
              哈喽哈嘿 @哈喽哈嘿
              最后由 编辑

              此回复已被删除!
              1 条回复 最后回复 回复 引用 0
              • 哈喽哈嘿哈
                哈喽哈嘿 @小鱼
                最后由 哈喽哈嘿 编辑

                @小鱼 https://github.com/cuizhongren45/fishbot-mpu6050
                这里更新了代码。目前yaw的漂移大幅度减小,mpu6050正常工作前有3000次的取平均计算偏移,上电大概5s后进入正常工作状态,静态误差大幅度减小,5min漂移一度,甚至更加稳定

                小鱼小 1 条回复 最后回复 回复 引用 0
                • 小鱼小
                  小鱼 技术大佬 @哈喽哈嘿
                  最后由 小鱼 编辑

                  @哈喽哈嘿 👍 点赞,刚测试了下最新的代码,运动一会后停下来貌似飘得就厉害了,但刚启动的时候的确要稳定很多。

                  看了下代码,0.02这个系数是如何确定的,它对整体的计算有何影响。

                   angleX = (0.98 * (angleX + gyroX * interval)) + (0.02 * angleAccX);
                          angleY = (0.98 * (angleY + gyroY * interval)) + (0.02 * angleAccY);
                          angleZ = angleGyroZ;
                  

                  目前数据会出现大于2*pi的值

                  I (539616) MPU6050: pitch:-0.159,roll:-0.049,yaw:-390.895
                  I (539622) MPU6050: pitch:-0.159,roll:-0.049,yaw:-390.904
                  I (539628) MPU6050: pitch:-0.159,roll:-0.049,yaw:-390.913
                  I (539634) MPU6050: pitch:-0.159,roll:-0.049,yaw:-390.921
                  I (539640) MPU6050: pitch:-0.159,roll:-0.049,yaw:-390.930
                  I (539646) MPU6050: pitch:-0.159,roll:-0.049,yaw:-390.939
                  I (539652) MPU6050: pitch:-0.159,roll:-0.049,yaw:-390.948
                  I (539658) MPU6050: pitch:-0.159,roll:-0.049,yaw:-390.956
                  I (539664) MPU6050: pitch:-0.159,roll:-0.049,yaw:-390.965
                  I (539670) MPU6050: pitch:-0.159,roll:-0.049,yaw:-390.974
                  I (539676) MPU6050: pitch:-0.159,roll:-0.049,yaw:-390.982
                  I (539682) MPU6050: pitch:-0.159,roll:-0.049,yaw:-390.991
                  

                  新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

                  哈喽哈嘿哈 1 条回复 最后回复 回复 引用 0
                  • 哈喽哈嘿哈
                    哈喽哈嘿 @小鱼
                    最后由 编辑

                    @小鱼 这里我用的是github上MPU6050_tockn这个开源库里的计算公式,上面说采用的是互补滤波器来计算角度,以陀螺仪为主,权重0.98,加速度计权重0.02,当短时间内变化剧烈的时候,可能就不太准确了,不过应该还有优化的空间,采用滤波或者是变化的权重值,应该都可以增加yaw鲁棒性,至于会出现大于2PI的值,yaw是累计增加的,固定在-180~180的话写个判断就能解决。

                    小鱼小 1 条回复 最后回复 回复 引用 0
                    • 小鱼小
                      小鱼 技术大佬 @哈喽哈嘿
                      最后由 编辑

                      @哈喽哈嘿 👍 感谢讲解,把角度范围解决后可以先合一个版本,你看看可以优化的地方持续优化下,这是个有挑战和有深度的问题,我们能尽力我们最大努力做好即可。

                      新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

                      哈喽哈嘿哈 1 条回复 最后回复 回复 引用 0
                      • 哈喽哈嘿哈
                        哈喽哈嘿 @小鱼
                        最后由 编辑

                        @小鱼 我晚上刚看到你前面发的AHRS,我准备再试试AHRS这个库先

                        小鱼小 1 条回复 最后回复 回复 引用 0
                        • 小鱼小
                          小鱼 技术大佬 @哈喽哈嘿
                          最后由 编辑

                          @哈喽哈嘿 也可以,这两天我在整电机和SDK,最快也要下周才能搞PCB,你先整着。

                          新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

                          哈喽哈嘿哈 1 条回复 最后回复 回复 引用 0
                          • 哈喽哈嘿哈
                            哈喽哈嘿 @小鱼
                            最后由 编辑

                            @小鱼 又测试了一下AHRS,效果始终不太好,我转动MPU6050一个直角,yaw的变化只有六七十,感觉误差更大。角度范围问题已经解决了,代码还在那个地址上。

                            小鱼小 1 条回复 最后回复 回复 引用 0
                            • 小鱼小
                              小鱼 技术大佬 @哈喽哈嘿
                              最后由 编辑

                              @哈喽哈嘿 可以,那目前先固定参数吧,完善下代码结构,提一个新的PR到v1.0分支,后续再优化(你可以换成mpu9050试试)

                              新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

                              哈喽哈嘿哈 1 条回复 最后回复 回复 引用 0
                              • 哈喽哈嘿哈
                                哈喽哈嘿 @小鱼
                                最后由 编辑

                                @小鱼 好的,已经pr上去了

                                1 条回复 最后回复 回复 引用 0
                                • 哈喽哈嘿哈
                                  哈喽哈嘿
                                  最后由 编辑

                                  之前准备使用MPU9250来解决yaw角漂移的问题,就是用磁力计纠正yaw的漂移,但是经过一番代码的移植和调试,器件读数始终不正常,上淘宝一看,评论区里早已开火,好多人都说器件的问题,器件读出的ID和手册上对于不上,更别说读取数据了。
                                  无奈,只得继续优化之前MPU6050的驱动,经过测试,之前的互补滤波在转动速度较快的时候,偏差较大,后又测试AHRS算法,其在转动较快的环境下,其鲁棒性相比于互补滤波好一些。关于零点漂移的问题仍然存在,不过经过AHRS和互补滤波的处理,零飘已经大大减小。最后融合两者,以0.3和0.7的权重算作最终的yaw值。这里添加一个测试视频的链接:https://www.bilibili.com/video/BV16v4y1c7nv?spm_id_from=444.41.list.card_archive.click&vd_source=b741c1764645507298e463258c43bbb6
                                  后续也会继续更新9250的驱动,目前器件还没到,希望器件正常可以使用。👽

                                  小鱼小 1 条回复 最后回复 回复 引用 0
                                  • 小鱼小
                                    小鱼 技术大佬 @哈喽哈嘿
                                    最后由 编辑

                                    @哈喽哈嘿 赞赞赞,互补滤波被你玩明白了,卡尔曼滤波效果不知道如何,有时间也可以测测看

                                    新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

                                    哈喽哈嘿哈 1 条回复 最后回复 回复 引用 0
                                    • 哈喽哈嘿哈
                                      哈喽哈嘿 @小鱼
                                      最后由 编辑

                                      @小鱼 确实,我之前看论文里有说到用卡尔曼滤波对acc和gyro滤波,可能让数据更好一些,不过卡尔曼的原理我还不太清楚,最近准备先补补理论知识,再用卡尔曼看看效果怎么样

                                      小鱼小 1 条回复 最后回复 回复 引用 0
                                      • 小鱼小
                                        小鱼 技术大佬 @哈喽哈嘿
                                        最后由 编辑

                                        @哈喽哈嘿 ok,B站的DR_CAN卡尔曼滤波讲的不错,推荐一下

                                        新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

                                        1 条回复 最后回复 回复 引用 0
                                        • 哈喽哈嘿哈
                                          哈喽哈嘿
                                          最后由 编辑

                                          刚提交了关于mpu6050和mpu9250的驱动文件,6050里解决了之前的代码冲突问题,零飘更小,而且在较快速度下yaw的偏移也更小了,9250是使用AHRS算法,融合AK8963磁力计数据,计算欧拉角。还有一个点就是修改了采样频率,现在IMU的采样频率是50HZ,之前是200HZ,说是200HZ,但是根据计算时间来算,根本达不到200HZ,极限的计算速度应该在130HZ左右,即计算一帧IMU数据预计5-8ms。
                                          之前看了很多资料,因为mpu6050的yaw存在漂移,一般都是对pitch和roll卡尔曼滤波,这俩的随机误差是正态分布的,没有直接对yaw。后来有卡在9250的数据读取上卡了一段时间,测试MPU9250的时候,按照陀螺仪地址、磁场地址一个字节的读取数据,就会变得很慢,但是连续读取多个字节就不会出现这样的问题。现在使用AHRS融合磁力计计算出来的欧拉角数据还算稳定,后续准备加上卡尔曼滤波并进行yaw运动测试。✊
                                          关于mpu9250还要补充的一点,购买芯片的时候一定要找正规的店铺,看看评论,不要贪图便宜。有些店铺卖的可能很便宜,但是其实磁力计芯片地址读不出,假的!!!👻

                                          小鱼小 1 条回复 最后回复 回复 引用 -1
                                          • 小鱼小
                                            小鱼 技术大佬 @哈喽哈嘿
                                            最后由 编辑

                                            @哈喽哈嘿 👍 👍 最近已经开始画运控板了,搞定了给你寄一块

                                            新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

                                            哈喽哈嘿哈 1 条回复 最后回复 回复 引用 0
                                            • 第一个帖子
                                              最后一个帖子
                                            皖ICP备16016415号-7
                                            Powered by NodeBB | 鱼香ROS