Give a robot a wider field of view by combining scans from multiple LiDAR sensors mounted at different angles.
Eliminate sensor blind spots so obstacle-avoidance software gets a complete picture of the surroundings.
Run more than eight LiDAR sensors simultaneously, bypassing the limit found in standard ROS2 sync libraries.
Speed up multi-sensor scan processing by handling each sensor's data in parallel rather than one at a time.
Requires a working ROS2 installation (Humble, Iron, Jazzy, or Kilted Kaiju). Build with colcon, configure sensors via YAML parameter file. C++20 compiler required.
This repository provides a software component for robots that use multiple laser range-finders, sometimes called LiDARs, to sense their surroundings. A 2D LiDAR sweeps a horizontal beam in a circle and measures how far away objects are at each angle, producing a ring of distance readings. Robots often carry more than one of these sensors to cover blind spots or widen their field of view. The problem is that most navigation and obstacle-avoidance algorithms expect a single scan, not several independent ones. This package takes the separate scans and combines them into one. The package is built for ROS2, a widely used framework for writing robot software. It supports four versions of ROS2 (Humble, Iron, Jazzy, and Kilted Kaiju) and is written in C++ using the C++20 standard. It is packaged as a composable node, which is a ROS2 concept that allows multiple software components to run inside the same process and share data efficiently. A key design goal was to support any number of input sensors. Earlier solutions were limited by a compile-time constraint in a standard ROS2 library that capped the number of inputs at around eight. This package replaces that synchronization logic with a custom implementation that has no such cap. When scans arrive from different sensors, the code waits until it has readings from all of them that are close enough in time (within a configurable window), then merges them together. The merging itself runs in parallel: each sensor's readings are processed simultaneously in separate threads, and the results are combined by taking the closest detected object at each angle. This avoids a slower sequential approach and eliminates the need to convert the data to a 3D point cloud format as an intermediate step. Additional options include filtering out returns above or below a certain height (useful when sensors are tilted), caching transform lookups for fixed-mount sensors to reduce processing overhead, and setting the reliability policy per sensor topic. Configuration is done through a YAML parameter file.
← ali-pahlevani on gitmyhub — every repo by this author, as a profile.
Verify against the repo before relying on details.