fishbot仿真建模在rviz中轮子无法正确显示的问题:no transform from [xxx] to base_link
-
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
-
从您提供的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中看到正确显示的车轮。如果问题仍然存在,请检查是否有其他配置或环境问题。
以上为生成回答,仅供参考~
- 打开RViz,并添加一个