I was looking at a model xacro [urdf] file in a ROS tutorial when I saw:

<link name="robot_footprint"></link>

right at the top. There were no child tags for: <collision>, <visual> or <inertial>. There was however a joint right after but no further references to the robot_footprint link.

  <joint name="robot_footprint_joint" type="fixed">
    <origin xyz="0 0 0" rpy="0 0 0" />
    <parent link="robot_footprint"/>
    <child link="chassis" />

What does the empty link serve?


In this particular case, it's probably used as a projection of the robot's root link on the floor. This is often useful for motion planning or SLAM, where the robot's pose is read (or set) as the projection from that frame to the global frame. Going back to that other case involving coordinate frames, robot_footprint would serve the same purpose as shifting link_01 vertically relative to its frame.

Another common use of such links is to define sensor coordinate frames. For example, coordinates in a point cloud are often given relative to frame of the sensor that generated it; by creating a link that matches the sensor's position relative to the robot's root link, transforms can be computed to map those points to the robot's pose in the global coordinate frame.

See the URDF tutorials for more information on how links and joints work and are used in ROS.

| improve this answer | |
  • $\begingroup$ In the first case, what do you mean by "a projection" of the robot's link? If the robot is moving, is the location just traced based on this reference position, robot_footprint? $\endgroup$ – heretoinfinity Apr 17 at 1:04
  • $\begingroup$ There is a sensor and motion planning/ SLAM will be dealt with next. I also observed that only the chassis has the <pose> tag, i.e., <link name='chassis'> <pose>0 0 0.1 0 0 0</pose> . Why is that? $\endgroup$ – heretoinfinity Apr 17 at 1:32
  • $\begingroup$ By "projection on the floor" I mean that if the chassis link is at position $(x, y, z)$, then robot_footprint is at position $(x, y, 0)$. $\endgroup$ – xperroni Apr 17 at 11:48
  • $\begingroup$ By default a link is assumed to be at the origin of its coordinate frame, so in that case pose information can be omitted. $\endgroup$ – xperroni Apr 17 at 11:50
  • $\begingroup$ Also see the URDF tutorials for more information, $\endgroup$ – xperroni Apr 17 at 11:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.