You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A ROS 2 package for detecting and tracking moving objects from 2D LiDAR scans.
Part of the service_robot stack.
Overview
The pipeline runs on every incoming LaserScan:
Scan → Point Cloud — raw ranges are converted to 2D Cartesian points.
TF transform — the point cloud is transformed into target_frame.
Static background subtraction(optional) — an occupancy grid filters out walls and fixed furniture.
Radius outlier removal(optional) — isolated points with too few neighbours are discarded.
DBSCAN clustering — remaining points are grouped into object candidates.
Centroid extraction — a 2D centroid is computed per cluster.
LMB tracker — centroids are fed to the Labelled Multi-Bernoulli tracker, which maintains per-object Kalman filters and existence probabilities.
Publish & visualise — confirmed tracked objects are published and rendered in RViz.
Components
Component
File
Description
ObjectsTracker
lidar_objects_tracker.hpp/.cpp
ROS 2 node. Orchestrates the full pipeline.
KalmanFilter2D
kalman_filter.hpp
Constant-velocity Kalman filter. State: [x, y, vx, vy].
StaticBackgroundSubtractor
static_background_subtractor.hpp
Robot-centric occupancy grid. Cells above a probability threshold are treated as static background and removed.
LMBTracker
lmb_tracker.hpp
Labelled Multi-Bernoulli tracker. Each track is an independent Bernoulli with an existence probability, updated via Mahalanobis gating and a Kalman filter.