为什么 RVIZ 告诉我有 "No transfrom from [velodyne] to [base_link]",即使我在我的 URDF 中定义了这样一个关节?

Why is RVIZ telling me that there is "No transfrom from [velodyne] to [base_link]" even though I have such a joint defined in my URDF?

RVIZ 告诉我“没有从 [velodyne] 到 [base_link] 的转换”。我的 URDF 文件中定义了这两个对象之间的关节:

<robot name="jackal">
  <material name="orange">
    <color rgba="1.0 0.5 0.2 1" />
  </material>
  <material name="gray">
    <color rgba="0.2 0.2 0.2 1" />
  </material>


  <link name="velodyne">
    <visual>
      <origin xyz="0.0 0.0 0.0" />
      <geometry>
        <cylinder length="0.07" radius="0.05" />
      </geometry>
      <material name="gray" />
    </visual>
  </link>

  
  <link name="base_link" />



  <joint name="velodyne_to_base" type="fixed">
    <parent link="base_link" />
    <child link="velodyne" />
    <origin xyz="0.0 0.0 0.0" />
  </joint>

  
</robot>

为什么我在定义这样一个关节时会收到此错误消息?

在任何情况下,您都需要启动一个 robot_state_publisher node 来发布 tf 不同链接之间的转换 - 即使您的链接仅与固定关节相连。因此要么添加

<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"/>

到您的启动文件或打开另一个终端,获取当前工作区和运行相应节点

rosrun robot_state_publisher robot_state_publisher

这是由于 Velodyne 启动文件的“frame_id”属性 与 URDF 文件中使用的名称不一致造成的。 link urdf 文件中的名称必须与相应传感器的帧 ID 匹配。