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

    fishbot仿真建模在rviz中轮子无法正确显示的问题:no transform from [xxx] to base_link

    已定时 已固定 已锁定 已移动
    仿真
    fishbot 仿真 动手学ros2 urdf tf
    3
    5
    1.1k
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • N
      November
      最后由 编辑

      1729017137725.png 1729017155491.png
      urdf如下:

      <?xml version="1.0"?>
      <robot name="fishbot">
          
        <!-- base link -->
        <link name="base_link">
            <visual>
            <origin xyz="0 0 0.0" rpy="0 0 0"/>
            <geometry>
              <cylinder length="0.12" radius="0.10"/>
            </geometry>
            <material name="blue">
                <color rgba="0.1 0.1 1.0 0.5" /> 
            </material>
          </visual>
        </link>
          
        <!-- laser link -->
        <link name="laser_link">
            <visual>
            <origin xyz="0 0 0" rpy="0 0 0"/>
            <geometry>
              <cylinder length="0.02" radius="0.02"/>
            </geometry>
            <material name="black">
                <color rgba="0.0 0.0 0.0 0.5" /> 
            </material>
          </visual>
        </link>
          
        <!-- laser joint -->
        <joint name="laser_joint" type="fixed">
            <parent link="base_link" />
            <child link="laser_link" />
            <origin xyz="0 0 0.075" />
        </joint>
      
        <link name="imu_link">
            <visual>
            <origin xyz="0 0 0.0" rpy="0 0 0"/>
            <geometry>
                  <box size="0.02 0.02 0.02"/>
            </geometry>
          </visual>
        </link>
      
        <!-- imu joint -->
        <joint name="imu_joint" type="fixed">
            <parent link="base_link" />
            <child link="imu_link" />
            <origin xyz="0 0 0.02" />
        </joint>
      
      
        <link name="left_wheel_link">
            <visual>
              <origin xyz="0 0 0" rpy="1.57079 0 0"/>
              <geometry>
                <cylinder length="0.04" radius="0.032"/>
              </geometry>
                <material name="black">
                  <color rgba="0.0 0.0 0.0 0.5" /> 
                </material>
            </visual>
        </link>
          
        <joint name="left_wheel_joint" type="continuous">
            <parent link="base_link" />
            <child link="left_wheel_link" />
            <origin xyz="-0.02 0.10 -0.06" />
            <axis xyz="0 1 0" />
        </joint>
      
        <link name="right_wheel_link">
            <visual>
              <origin xyz="0 0 0" rpy="1.57079 0 0"/>
              <geometry>
                <cylinder length="0.04" radius="0.032"/>
              </geometry>
                <material name="black">
                  <color rgba="0.0 0.0 0.0 0.5" /> 
                </material>
            </visual>
        </link>
          
        <joint name="right_wheel_joint" type="continuous">
            <parent link="base_link" />
            <child link="right_wheel_link" />
            <origin xyz="-0.02 -0.10 -0.06" />
            <axis xyz="0 1 0" />
        </joint>
      
        <link name="caster_link">
          <visual>
            <origin xyz="0 0 0" rpy="1.57079 0 0"/>
            <geometry>
                <sphere radius="0.016"/>
            </geometry>
              <material name="black">
                <color rgba="0.0 0.0 0.0 0.5" /> 
              </material>
          </visual>
        </link>
          
        <joint name="caster_joint" type="fixed">
            <parent link="base_link" />
            <child link="caster_link" />
            <origin xyz="0.06 0.0 -0.076" />
            <axis xyz="0 1 0" />
        </joint>
      
      
      
      </robot>
      

      launch文件如下:

      import os
      from launch import LaunchDescription
      from launch.substitutions import LaunchConfiguration
      from launch_ros.actions import Node
      from launch_ros.substitutions import FindPackageShare
      
      
      def generate_launch_description():
          package_name = 'fishbot_description'
          urdf_name = "fishbot_base.urdf"
      
          ld = LaunchDescription()
          pkg_share = FindPackageShare(package=package_name).find(package_name) 
          urdf_model_path = os.path.join(pkg_share, f'urdf/{urdf_name}')
      
          robot_state_publisher_node = Node(
              package='robot_state_publisher',
              executable='robot_state_publisher',
              arguments=[urdf_model_path]
              )
      
          joint_state_publisher_node = Node(
              package='joint_state_publisher_gui',#'joint_state_publisher_gui'
              executable='joint_state_publisher_gui',
              name='joint_state_publisher_gui',
              arguments=[urdf_model_path]
              )
      
          rotate_fishbot_wheel_node = Node(
              package='fishbot_description',
              executable='rotate_wheel',
              arguments=[urdf_model_path]
              )
              
          rviz2_node = Node(
              package='rviz2',
              executable='rviz2',
              name='rviz2',
              output='screen',
              )
      
          # ld.add_action(joint_state_publisher_node)
          ld.add_action(robot_state_publisher_node)
          ld.add_action(rviz2_node)
      
          return ld
      
      1 条回复 最后回复 回复 引用 0
      • 小伊小
        机器人小伊
        最后由 编辑

        从您提供的URDF文件和launch文件来看,主要的问题可能在于几个关键配置上,尤其是关于RViz的配置以及可能缺少的TF(变换)树信息的发布。下面是一些可能的解决步骤和修改建议:

        1. 确保TF变换树被正确发布

        在ROS中,所有的坐标变换(TF)都需要通过tf2_ros库中的节点(如robot_state_publisher)来发布。您已经在launch文件中添加了robot_state_publisher节点,这是正确的。但是,请确保这个节点能够正确读取URDF文件,并且没有因为路径问题或URDF文件本身的错误而失败。

        2. 检查RViz配置

        在RViz中,您可能需要手动添加车轮的显示,并确保它们被正确地放置在TF树中。以下是一些步骤:

        • 打开RViz,并添加一个RobotModel显示。
        • 确保RViz的Fixed Frame设置为base_link或任何您希望作为参考的链接。
        • 检查车轮是否在TF树中正确显示。在RViz的左侧面板中,找到“TF”选项,并查看是否有从base_link到left_wheel_link和right_wheel_link的变换。

        3. 修改URDF文件(如果需要)

        您的URDF文件看起来结构上是正确的,但请确保所有标签都已正确关闭,并且没有任何语法错误。

        4. 确保URDF文件名和路径正确

        在您的launch文件中,您指定了urdf_name = "fishbot_base.urdf",但通常URDF文件名应与<robot name="...">标签中的名称相匹配。如果您的URDF文件实际上是fishbot.urdf或类似的名称,请确保在launch文件中也使用相同的名称。

        5. 启用joint_state_publisher_gui(如果需要)

        虽然您已经注释掉了joint_state_publisher_gui的添加,但如果您想实时控制或查看关节状态,请取消注释这部分。这个工具对于调试和可视化关节状态非常有用。

        6. 检查ROS 2版本兼容性

        确保您使用的所有包(如robot_state_publisher, rviz2, joint_state_publisher_gui等)都与您的ROS 2版本兼容。

        7. 查看终端输出和日志文件

        运行launch文件时,检查终端输出和ROS 2的日志文件,看是否有任何错误或警告信息。这些可能会提供关于问题所在的线索。

        按照这些步骤操作后,您应该能够在RViz中看到正确显示的车轮。如果问题仍然存在,请检查是否有其他配置或环境问题。


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

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

        N 1 条回复 最后回复 回复 引用 0
        • N
          November @小伊
          最后由 编辑

          @小伊 查看rviz中的tf树发现确实没有左右轮和base_link的变换,但这不是已经在urdf中正确定义了吗

          Z 1 条回复 最后回复 回复 引用 0
          • 小伊小
            机器人小伊
            最后由 编辑

            在ROS(Robot Operating System)中,使用URDF(Unified Robot Description Format)文件来定义机器人的模型是常见做法。然而,即使你在URDF文件中正确定义了机器人各部件之间的变换关系(包括左右轮和base_link之间的变换),这并不意味着在RViz中自动就能看到完整的TF(Transform)树。TF树在ROS中用于表示不同坐标系之间的相对位置和姿态,这些变换关系需要在运行时被正确发布和订阅。

            如果你发现RViz中的TF树缺少某些部分(比如左右轮和base_link之间的变换),可能是由以下几个原因造成的:

            1. TF发布者未运行:

              • 确保你有一个节点在运行,该节点负责发布从URDF文件中定义的TF变换。这通常是通过robot_state_publisher节点实现的,它订阅/tf和/tf_static话题以及/robot_description参数(该参数通常包含URDF的XML字符串)。
              • 检查robot_state_publisher是否已正确配置并运行。你可以通过rostopic echo /tf来查看是否有TF消息被发布。
            2. URDF文件未正确加载:

              • 确保URDF文件被正确加载到/robot_description参数中。你可以使用rosparam get /robot_description来检查这一点。
              • 如果URDF文件是通过动态加载的(比如使用xacro文件并通过xacro命令转换),确保转换过程没有错误,并且结果文件被正确加载。
            3. TF监听器(Listener)或查看器(Viewer)问题:

              • 在RViz中,确保你已经添加了TF插件(通常在Displays面板中,名为“TF”),并且它已经被正确配置以显示你关心的TF。
              • 尝试重新启动RViz,有时简单的重启可以解决显示问题。
            4. 时间同步问题:

              • 确保所有节点都正确设置了时间戳,并且ROS系统的时间同步设置正确。时间不同步可能会导致TF消息无法正确匹配和显示。
            5. 检查URDF文件:

              • 重新检查URDF文件,确保左右轮和base_link之间的连接和变换定义正确无误。有时候,简单的拼写错误或格式错误就可能导致问题。
            6. 查看日志和调试信息:

              • 检查ROS的日志文件(通常位于~/.ros/log/目录下),看看是否有与TF或robot_state_publisher相关的错误或警告信息。
              • 使用rosnode info和rostopic info等命令来获取更多关于节点和话题的信息,这有助于诊断问题。

            通过上述步骤,你应该能够诊断并解决RViz中TF树缺失的问题。如果问题依然存在,可能需要更详细地检查你的ROS环境和配置。


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

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

            1 条回复 最后回复 回复 引用 0
            • Z
              zy888 @November
              最后由 编辑

              @November你好,你解决了吗?我发现使用up的代码也遇到这样的错误,按照视频来写就没有问题!!

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