Sensor fusion
Sensor fusion – definition
Sensor fusion is the process of combining measurements from multiple sensors into one estimate of a robot state or of the surrounding environment. In mobile robotics, the fused output is usually more accurate, more stable, or more observable than any single sensor stream used alone. For a UGV, this typically means estimating pose, velocity, heading, terrain-relative motion, or obstacle structure from sources such as wheel odometry, IMU, LiDAR, depth cameras, and GNSS.
In ROS and ROS 2 systems, sensor fusion is usually implemented as a state estimation pipeline. The pipeline consumes time-stamped messages, transforms them into a common coordinate frame, models uncertainty, and publishes filtered outputs such as odom -> base_link or map -> odom. This aligns with standard ROS frame conventions defined in REP 103 for units and coordinate conventions and REP 105 for mobile platform frame semantics.
For UGV platforms such as Leo Rover and Raph Rover, sensor fusion is not optional once the robot leaves a controlled indoor environment. Wheel encoders drift on loose soil. IMU heading drifts without correction. GNSS alone may be noisy or unavailable near buildings or under vegetation. LiDAR or vision can lose features in dust, fog, or repetitive corridors. Fusion reduces these failure modes by combining complementary sensing modalities.
How sensor fusion works in mobile robotics
The core idea is estimation under uncertainty. Each sensor provides a partial and noisy observation. The estimator combines them using a motion model and a measurement model. In practice, most UGV deployments use a Kalman-filter family estimator, graph-based optimization, or a tightly coupled inertial-navigation stack.
The most common outputs in ROS 2 are:
nav_msgs/msg/Odometry– filtered pose and twistgeometry_msgs/msg/PoseWithCovarianceStamped– global pose estimatesensor_msgs/msg/Imu– orientation, angular velocity, linear accelerationtf2transforms – especiallymap,odom,base_link, and sensor frames
For a differential-drive UGV, a simplified state vector often includes planar position and yaw:
x = [p_x, p_y, yaw, v_x, omega_z]^T
The prediction step propagates state using wheel odometry and inertial measurements. The update step corrects that prediction using observations from LiDAR SLAM, visual odometry, or GNSS. In estimator notation:
x_k = f(x_k-1, u_k) + w_k
z_k = h(x_k) + v_k
where w_k and v_k are process and measurement noise terms. Their covariance values directly affect filter behavior.
Common sensor combinations on UGV platforms
Sensor fusion architecture depends on terrain, speed, payload budget, and compute resources. On compact educational robots and larger field robots, the same principles apply, but the sensor set and update rates differ.
| Sensor | Typical ROS message | Typical rate | Main contribution | Typical limitation |
|---|---|---|---|---|
| Wheel encoders | nav_msgs/msg/Odometry |
10 – 100 Hz | Short-term motion estimate | Slip on gravel, mud, ramps |
| IMU | sensor_msgs/msg/Imu |
50 – 400 Hz | Angular rate, attitude dynamics | Bias drift, vibration sensitivity |
| 2D or 3D LiDAR | sensor_msgs/msg/LaserScan, sensor_msgs/msg/PointCloud2 |
5 – 20 Hz | Scan matching, obstacle geometry | Poor returns in heavy rain, dust, some surfaces |
| Depth camera | sensor_msgs/msg/Image, sensor_msgs/msg/PointCloud2 |
15 – 90 Hz | Visual odometry, local obstacles | Sunlight sensitivity, limited range |
| GNSS / RTK | sensor_msgs/msg/NavSatFix |
1 – 20 Hz | Global position reference | Multipath, canopy blockage |
Manufacturer specifications should be used for actual rates, noise density, field of view, and range. For example, Intel RealSense depth cameras, Slamtec LiDARs, and RTK receivers expose different operating modes that must be reflected in estimator tuning.
Sensor fusion in ROS 2
In ROS 2, a common baseline stack uses robot_localization for EKF or UKF-based state estimation. It can fuse odometry, IMU, and GNSS-derived data into a locally smooth odometric estimate and, optionally, a globally referenced estimate. This approach is widely used because it follows ROS frame conventions and integrates cleanly with Nav2.
A typical dual-filter setup separates local and global estimation:
- Local EKF: wheel odometry + IMU, publishes
odom -> base_link - Global EKF: wheel odometry + IMU + GNSS or SLAM pose, publishes
map -> odom navsat_transform_node: converts GNSS fixes into the world frame using heading and robot orientation
ekf_filter_node:
ros__parameters:
frequency: 30.0
two_d_mode: true
publish_tf: true
map_frame: map
odom_frame: odom
base_link_frame: base_link
world_frame: odom
odom0: /wheel/odometry
odom0_config: [false, false, false,
false, false, true,
true, false, false,
false, false, true,
false, false, false]
imu0: /imu/data
imu0_config: [false, false, false,
false, false, true,
false, false, false,
false, false, true,
true, false, false]
imu0_remove_gravitational_acceleration: true
Frame consistency matters. REP 105 defines the relationship between base_link, odom, map, and earth-referenced frames. A frequent integration error is mixing local odometry and global pose in one frame without clear ownership of the transform chain.
Use on Leo Rover and Raph Rover
On Leo Rover, sensor fusion usually starts with differential-drive wheel odometry and an IMU. This is the minimum practical setup for stable local motion estimation on ROS 2. Since Leo Rover runs on an embedded Raspberry Pi-based compute unit by default, estimator choice and sensor bandwidth should match limited CPU and memory resources.
For indoor navigation on Leo Rover, a common extension is 2D LiDAR plus IMU plus wheel odometry. LiDAR scan matching or SLAM provides drift correction beyond pure dead reckoning. For outdoor work, GNSS or RTK can be added, but only after careful antenna placement, time synchronization, and frame calibration.
Raph Rover is better suited to heavier sensor payloads and field-grade positioning stacks. That makes it a more natural platform for combinations such as:
- industrial IMU + wheel odometry + RTK GNSS
- 3D LiDAR + IMU for localization in rough terrain
- stereo or depth sensing + LiDAR for obstacle perception
On both platforms, fusion quality depends less on the number of sensors than on calibration, timestamps, and covariance tuning.
Key integration requirements
Good fusion results require consistent geometry and timing. Most field failures come from integration errors rather than from the estimator itself.
- Extrinsic calibration – fixed transforms between
base_linkand each sensor must be correct intf2 - Timestamp quality – message timestamps should represent acquisition time, not delayed publish time
- Covariance values – estimator tuning must reflect actual sensor noise, not placeholder zeros
- Observability – yaw, velocity, and position must be constrained by at least one reliable source
- 2D vs 3D mode – planar UGV stacks often use
two_d_modeto suppress unobservable vertical states
ros2 topic hz /imu/data
ros2 topic echo /wheel/odometry
ros2 run tf2_tools view_frames
ros2 topic echo /odometry/filtered
Limitations and trade-offs
Sensor fusion does not remove all error. It redistributes uncertainty based on models and measurements. If all inputs are biased, the fused estimate will also be biased. If wheel slip is severe and GNSS is intermittent, the filter may become overconfident unless covariance is tuned conservatively.
There is also a trade-off between computational simplicity and estimator fidelity. EKF-based fusion is efficient and sufficient for many UGV tasks. Tightly coupled visual-inertial or LiDAR-inertial methods can be more accurate, but they require better calibration, more compute, and sometimes GPU-class hardware.
Normative references and standards
The ROS coordinate and frame semantics relevant to sensor fusion are defined in official ROS Enhancement Proposals. These documents should be treated as baseline references during system design.
- REP 103 – Standard Units of Measure and Coordinate Conventions
- REP 105 – Coordinate Frames for Mobile Platforms
- ROS 2 message definitions for
sensor_msgs,nav_msgs, andgeometry_msgs tf2documentation and ROS frame conventionsrobot_localizationdocumentation for EKF, UKF, and GNSS integration in ROS
For deployed robots, vendor specifications remain essential. IMU bias stability, LiDAR scan rate, camera depth range, and GNSS update rate should all come from the official datasheet of the specific device.
See also
- SLAM
- ROS 2
- LiDAR
- Odometry