[ROS1][feat] Update wheel encoder
Goal
- 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
Changes
Fix
- 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.
Feat
- 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)
Results
Reproduction
General
- Modify the config file
- external_sensors/wheel_encoder/enable: true
- external_sensors/wheel_encoder/weight: 30.
- Remap the encoder topic to wheel_odom
- Add TF from base_link to wheel (possible in launch file)
Example
-
Data used for testing here.
-
Config file for specific os128 here.
-
Calibration is
-0.615 -0.4 0.2 0 0 0
-
Commands :
roslaunch lidar_slam slam_ouster.launch outdoor:=false
rosbag play --clock -d 2 path/to/bag.bag /wire_converted:=wheel_odom
Output
With the previous config, the user should see :
Results
Results before and after the use of the wire encoder with the different modes are stored here
Edited by Julia Sanchez