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

    RVIZ2和gazebo联合仿真,RVIZ中出现link连接错误

    已定时 已固定 已锁定 已移动
    动手学ROS2
    rviz2 tf2
    4
    11
    1.0k
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 小伊小
      机器人小伊
      最后由 编辑

      在使用RViz2和Gazebo进行联合仿真时,遇到no transform from [xxx] to [odom]的错误通常意味着在ROS 2的tf2树中没有找到从某个坐标系(如xxx)到odom(里程计坐标系)的转换关系。这种情况可能由几个原因引起:

      1. 里程计发布问题:

        • 确保你的节点(如定位节点)正在正确发布odom到某个固定参考坐标系(如map或base_link)的变换。在ROS 2中,这通常是通过发布nav_msgs/msg/Odometry消息来完成的,该消息包含了位姿和速度信息,并自动在tf2树中注册相应的变换。
      2. tf2树的问题:

        • 使用ros2 run tf2_ros tf2_echo <source_frame> <target_frame>命令来检查是否存在从xxx到odom的变换。这可以帮助你确认问题是否确实出在tf2树上。
        • 检查你的ROS 2节点是否都在正确的时间同步下运行。时间不同步也可能导致tf2树中的变换出现问题。
      3. RViz2配置:

        • 在RViz2中,确保你选择的Fixed Frame与你的应用场景相匹配。如果你设置为odom,那么所有在tf2树中没有直接或间接连接到odom的坐标系都会出现问题。
        • 尝试更改Fixed Frame为base_link或map(如果你在使用地图),看看是否解决了问题。
      4. Gazebo和ROS 2的集成:

        • 确保Gazebo中的模型(尤其是与xxx相关的部分)已经正确配置,并且它们的URDF或Xacro文件包含了必要的关节和连杆信息。
        • 检查Gazebo中是否有任何插件或脚本负责发布tf2变换,并确保它们正在运行且没有错误。
      5. 启动文件和参数:

        • 检查你的启动文件(如.launch.py或.xml文件),确保所有必要的节点都被正确启动,并且它们的参数配置正确。
      6. 调试和日志:

        • 查看ROS 2的日志输出,特别是与定位、tf2和Gazebo相关的节点。这些日志可能会提供关于为什么某些变换没有正确发布的线索。
      7. 重新构建和重启:

        • 有时候,简单的重新构建你的工作空间并重启所有节点可以解决一些奇怪的问题。

      通过上述步骤,你应该能够诊断并解决no transform from [xxx] to [odom]的问题。如果问题仍然存在,你可能需要更详细地检查你的系统配置或寻求更具体的帮助。


      以上为生成回答,仅供参考~

      我是小伊,已接入ChatGpt,所有回复,仅供参考~

      1 条回复 最后回复 回复 引用 0
      • 小鱼小
        小鱼 技术大佬 @、捶你胸口
        最后由 编辑

        @捶你胸口 缺少轮子到base_link 之间的TF,检查检查URDF吧

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

        、 2 条回复 最后回复 回复 引用 0
        • 、
          、捶你胸口 @小鱼
          最后由 编辑

          @小鱼 您看第二张图,父子link之间应该没出现问题,并且我检查了一遍URDF,感觉link之间的关系应该是没啥问题。因为我用的模型是阿克曼,是阿克曼配置文件没正确配置吗?😥

          感谢您的回复。

          1 条回复 最后回复 回复 引用 0
          • 、
            、捶你胸口 @小鱼
            最后由 编辑

            @小鱼 比较头疼的是为啥一些link正常显示,一些link又显示异常。
            查看tf tree 链接都是正确的,发现的疑点是显示异常的link他们之间的average rate都是50、10等。其他显示正常的link他们之间的average rate都显示为10000.
            除此之外,显示异常的link他们的most recent transform 和 oldest transform 显示的值都非常大,而显示正常的link他们之间的值均为0.
            以上是我发现的疑点,感觉问题也应该是从这块下手,但是查了很多资料发现相关的资料非常少。tf tree如下
            bc05ca48-460a-4263-aa63-f8fdc5b47ee6-3438368605.jpg

            小鱼小 1 条回复 最后回复 回复 引用 0
            • 小鱼小
              小鱼 技术大佬 @、捶你胸口
              最后由 编辑

              @捶你胸口 因为有的是静态TF,有的是动态,
              对于动态TF 是需要发布 joint_states 进行转换的,具体是这样

              c22cd83e-7144-479d-bfad-d45457b95a3c-image.png

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

              、 1 条回复 最后回复 回复 引用 0
              • 、
                、捶你胸口 @小鱼
                最后由 编辑

                @小鱼 照这段话的意思,发布了robot_state_publisher和joint_state_publisher就应该能将固定关节和可移动关节都进行发布了吧?我的launch文件里已经包含了这两个节点发布为啥还是出现了这个问题呀?😵 感谢老师的耐心回复。

                小鱼小 1 条回复 最后回复 回复 引用 0
                • 小鱼小
                  小鱼 技术大佬 @、捶你胸口
                  最后由 小鱼 编辑

                  @捶你胸口 你要是仿真,就需要gazebo来提供这个话题,可以看看我新书里关于这部分的介绍,比较详细

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

                  1 条回复 最后回复 回复 引用 0
                  • 、
                    、捶你胸口 @、捶你胸口
                    最后由 编辑

                    @捶你胸口 该问题可以通过在launch文件中的robot_state_publisher_node和joint_state_publisher_node的parameters后加入{'use_sim_time':True}解决。

                    C 1 条回复 最后回复 回复 引用 0
                    • C
                      cydcyd @、捶你胸口
                      最后由 cydcyd 编辑

                      @捶你胸口 兄弟你好!我可能也遇到了和你一样的问题。我的主要是odom和base_footprint之间的转换有问题。
                      请问可以发一下你的launch代码吗?我的代码里面没有
                      parameters😥

                      <launch>
                          <node pkg="rviz" type="rviz" name="rviz" args="-d $(find xc)/config/xacro_xc.rviz" />
                          <node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher" output="screen" />
                          <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher" output="screen" />
                      
                      </launch>
                      

                      5a32ca44-5d5e-46c6-9d73-cda804c6696c-image.png
                      0e7e3981-e45e-4fd3-b6d0-5046c091726b-image.png

                      、 1 条回复 最后回复 回复 引用 0
                      • 、
                        、捶你胸口 @cydcyd
                        最后由 编辑

                        @cydcyd 如果是tf转换的问题的话,可以在launch文件中加入代码;将odom和base_footprint进行转换的node。

                        另外如果你将fixed_frame改成一些关节名字模型如果显示正常的话,可以试一下我上面提到的方法。

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