</collision>
</link>
+ <!-- base_footprint: planar frame at GROUND level (wheel contact), for 2D navigation.
+ Wheels dia 158 mm -> rolling radius 79 mm below the axle plane (= base_link origin).
+ Child of base_link (NOT parent): hw_node publishes /odom with child_frame_id
+ base_link and the EKF broadcasts odom->base_link, so base_link must stay the
+ odometry-attached frame; the footprint hangs 79 mm below it. -->
+ <joint name="base_link_to_base_footprint" type="fixed">
+ <parent link="base_link"/>
+ <child link="base_footprint"/>
+ <origin xyz="0 0 -0.079" rpy="0 0 0"/>
+ </joint>
+ <link name="base_footprint">
+ <visual>
+ <origin xyz="0 0 0" rpy="0 0 0"/>
+ <geometry><box size="0.001 0.001 0.001"/></geometry>
+ <material name="footprint_invisible"><color rgba="0.0 0.0 0.0 0.0"/></material>
+ </visual>
+ </link>
+
<!-- Lidar mount (2026-10-13, final): 3x 18 mm distance holders stand on the FLAT CHASSIS DECK
(z=35.0 mm) at the plate's 3 chassis screw holes; the raised central ring (top 43.5 mm)
is UNDER THE PLATE CENTER and clears it by ~9.5 mm (verified from the RViz mesh: all 3