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

    ros2 robot_localization

    已定时 已固定 已锁定 已移动
    ROS 2相关问题
    ros2 imu odom
    3
    14
    2.2k
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 王涛王
      王涛
      最后由 编辑

      在使用ros2中使用robot_localization平滑包 融合输出odom里程计时候

      输入源为 odom话题, imu话题 输出为odom到base_footprint的tf转换
      运行的时候,初始位置就出现异常,odom相对于base_footprint 是偏转和反转的!
      24397b2dd733dd61b2198c1c099fcc3.jpg 8f9af42acf4baab6dab6310039674ec.jpg
      就是类似图片这样,程序初始运行 odom就偏了和反转了

      让小车原地旋转的时候,odom和小车偏差不明显
      让小车仅进行x轴前后移动的时候 小车相对于odom有y轴方向的偏移,
      不知道因为什么原因

      小鱼小 18723118761 2 条回复 最后回复 回复 引用 0
      • 小鱼小
        小鱼 技术大佬 @王涛
        最后由 编辑

        @王涛 很有可能是IMU坐标系问题造成的

        参考文档:http://docs.ros.org/en/noetic/api/robot_localization/html/preparing_sensor_data.html

        IMU应该转换到NEU坐标系上,他们之间的位置关系要通过静态TF进行变换

        从官方网站提取一段:

        sensor_msgs/Imu - IMU消息目前存在一些歧义,但ROS社区正在解决这个问题。大多数IMU本身报告的方向数据是固定在世界中的坐标系,其X、Y和Z轴分别由指向磁北极和地球中心的向量定义,其中Y轴面向东(与磁北向量相差90度)。这个坐标系通常被称为NED(North, East, Down)。然而,REP-103为室外导航指定了一个ENU(East, North, Up)坐标系。截至本文撰写时,假定所有IMU数据都采用ENU坐标系,并且不使用NED坐标系数据。这可能会在将来发生变化,但目前,用户应确保在将数据与任何节点一起使用之前,将数据转换为ENU坐标系。

        IMU也可能以其“中立”位置以外的姿态放置在机器人上。例如,用户可能将IMU安装在机器人的侧面,或者将其旋转,使其面向机器人的前方以外的方向。这个偏移通常由从参数到IMU消息的base_link_frame_id的静态转换来指定。在中,状态估计节点会自动校正传感器的方向,以使其数据与参数指定的坐标系对齐。

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

        王涛王 2 条回复 最后回复 回复 引用 0
        • 王涛王
          王涛 @小鱼
          最后由 编辑

          @小鱼 感谢大佬解答 现在梳理了一下 还是有小问题
          1:根据淘宝imu店家的意思 把imu调整为 x y z 为北西天, 家电说输出数据直接可以对接ros不需要转换了
          2调整以后 发现odom初始状态 z轴已经转为朝上, 但是x y轴依然和base_footprint有45度的夹角!61c3e7934c7a95a8f99591779cb17fe.jpg d74d8f41c1935cc8e78af74a6f573e6.jpg

          看上面的图片 初始位置 odom和小车tf之间存在夹角
          如果小车直线x运动,在odom y轴上也会产生位移,

          现在看一下 imu的配置文件
          imu的话题发布为imu, 平滑包里面也改为了imu
          imu的 话题里面的fram_id 改为了 imu_link ,和urdf里面的imu_link名字也统一起来了,因为imu模块在小车上并不是中心放置,所以也特意留意了这个名字的统一,如下图
          ca24c029e716e5de099231cc6fa0bad.jpg

          3: 然后又进行了一些测试, 把平滑包里面的imu全部改为false, 只使用编码器odom来输出,
          进行x轴移动,发现虽然不准确但是是正确的。67b680e8d7213e9bff99632c4b7e3c0.jpg
          ae9caff8b110ff4c33a551adc65385a.jpg 8672905dbeb0548881e4dd94465e332.jpg

          可以看出不使用imu数据 初始位置 和移动 tf都还算正常,加上imu数据以后
          odom的初始位置就和小车有45度夹角,
          希望大佬帮我解答一下

          1 条回复 最后回复 回复 引用 0
          • 王涛王
            王涛 @小鱼
            最后由 编辑

            @小鱼
            我用echo输出了 小车编码器的 odom话题,同时输出了imu的话题 想要寻找区别,定位到一个有差异的地方

            用轮编码器计算出的odom四元数数据,会在每一次重新开启节点的时候x y z w 为:0 0 0 1

            而imu的话题四元数 的x y z w,不会初始化, 而是会继续上一次的数据

            我猜测是imu是上电就运行,它的四元数信息有融合过磁力计, 所以不会重置。

            我继续测试,
            在小车开启的时候, 用键盘控制小车旋转,一直转到imu的四元数 接近 0 0 0 1这个数据,
            然后退出全部节点,再重启节点, 发现imu寺院是还是退出前的数据,odom恢复为 0 0 0 1
            然后用rviz观察平滑包输出的tf信息, 发现odom和base_footprint 之间的夹角非常的小了,

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

              @王涛 那就是IMU工作模式问题,用了地磁,上电没有校零,应该可以直接改模式,你问问卖家

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

              王涛王 2 条回复 最后回复 回复 引用 0
              • 王涛王
                王涛 @小鱼
                最后由 编辑

                @小鱼 是的
                我用了robot_localization 最新的yaml文件, 里面有配置选项可以设置相对imu 这个问题已经解决了 谢谢大佬

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

                  @王涛 👍

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

                  1 条回复 最后回复 回复 引用 0
                  • 王涛王
                    王涛 @小鱼
                    最后由 编辑

                    @小鱼 现在又有一个新的问题
                    我现在是差速车
                    robot_localization使用的输入源odom话题里面的x y位置数据 是利用编码器的弧度+x轴速度 利用三角函数计算出的x y值
                    x y速度是有误差的,利用时间积分计算出的弧度误差会越来越大,导致计算出的x y值越来越偏离实际,对robot_localization不仅会失去参考价值,而且还会起反作用。

                    robot_localization的输出信息z轴弧度是imu输入经过map反馈然后输出的相对准确的弧度。
                    我在考虑能否把输出后的 z轴弧度代替 编码器计算x y值三角函数里面的弧度,从而使 x y也相对准确。

                    但是不知道怎么把robot_localization输出的小车z弧度读取出来,是可以读取相应的话题 还是要利用tf转换出来小车z轴弧度呢?

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

                      @王涛 把imu的z代入两轮差速模型中进行计算即可

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

                      王涛王 1 条回复 最后回复 回复 引用 0
                      • 王涛王
                        王涛 @小鱼
                        最后由 编辑

                        @小鱼 imu的z是四元数格式 怎么转换为弧度呢?

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

                          @王涛
                          最後面有写公式

                          https://fishros.com/d2lros2/#/humble/chapt6/get_started/3.姿态的多种表示

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

                          王涛王 1 条回复 最后回复 回复 引用 0
                          • 王涛王
                            王涛 @小鱼
                            最后由 编辑

                            @小鱼 微信图片编辑_20230219173947.jpg 请问我画圈的这个是不是z轴偏航角呢? 直接利用后面的公式就能计算出来了吗

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

                              @王涛 是的,可以让小伊直接把代码写出来

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

                              1 条回复 最后回复 回复 引用 0
                              • 18723118761
                                蟋梦人生 @王涛
                                最后由 编辑

                                @王涛 有没有融合效果对比比较明显的数据集啊

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