Skip to content

[ROS1][feat] Update wheel encoder

Julia Sanchez requested to merge ROS1/feat/UpdateWheelEncoder into master


  • Update the wheel encoder to work in live conditions
  • Add a calibration and a reference point for absolute constraint
  • Create a ROS interface for the wheel encoder



  • Uniformize the config files
  • Refactor the time synchronization management and its documentation
  • If the external sensor messages don't provide the time of the data acquisition, the messages reception time can be used. In this case, the pointclouds header time is still used all along the SLAM pipeline but a time offset is added to perform the synchronization when we want to include the external sensors data in the pipeline.


  • Fix the previous Ceres constraint
  • Create ROS interface (measure callback + parameters + command)
  • Add calibration for wheel encoder in ExternalSensorManagers and in SLAM interface
  • Get the calibration in ROS from TF tree
  • Generalize the absolute constraint to take a reference
  • Move the relative option to the SLAM manager (instead of the wheel encoder manager as before).
  • Add a saturation threshold to the wheel sensor (+ SLAM interface + ROS interface)




  1. Modify the config file
    1. external_sensors/wheel_encoder/enable: true
    2. external_sensors/wheel_encoder/weight: 30.
  2. Remap the encoder topic to wheel_odom
  3. Add TF from base_link to wheel (possible in launch file)


  1. Data used for testing here.

  2. Config file for specific os128 here.

  3. Calibration is

    -0.615  -0.4  0.2  0  0  0
  4. Commands :

    roslaunch lidar_slam slam_ouster.launch outdoor:=false

    rosbag play --clock -d 2 path/to/bag.bag /wire_converted:=wheel_odom


With the previous config, the user should see :

Screenshot from 2023-10-25 17-16-44.png


Results before and after the use of the wire encoder with the different modes are stored here

Edited by Julia Sanchez

Merge request reports