|
prox_mpc_obstacle_tracker package from prox_mpc repoprox_mpc_benchmark prox_mpc_controller prox_mpc_core prox_mpc_demo prox_mpc_msgs prox_mpc_obstacle_tracker prox_mpc_test_models |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/simone-contorno/prox_mpc.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-28 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Simone Contorno
Authors
prox_mpc_obstacle_tracker
An in-house 2D-lidar dynamic-obstacle detector and tracker for ProxMPC.
A managed lifecycle node clusters a sensor_msgs/LaserScan, transforms the
cluster centroids into a fixed tracking frame, runs one IMM
(constant-velocity + constant-turn-rate) filter per object, and publishes the
confirmed tracks - including sampled predicted positions along each track’s
estimated arc - as a prox_mpc_msgs/ObstacleArray.
That feed is what prox_mpc_controller consumes for
predictive (dynamic) obstacle avoidance.
The detection and tracking math is written from scratch (Eigen only, no third-party tracker), so the package is license-clean and unit-testable without ROS. The design, algorithm, parameters, and interfaces are documented in doc/architecture.md.
Table of Contents
Key Features
-
Lifecycle node: managed
configure -> activate -> deactivate -> cleanup, with a signal-safe shutdown ladder in the standalone driver. - Self-contained pipeline: LaserScan -> planar points -> adjacency clusters -> tracking-frame centroids -> IMM (CV + CTRV) tracks with sampled predicted positions.
-
Multi-object tracking: gated greedy nearest-neighbour association, one
IMM filter per track (a constant-velocity Kalman filter and a
constant-turn-rate-and-velocity EKF run in parallel, blended by model
probability), and a birth/confirm/death lifecycle.
imm_enabled: falserestores the legacy single-CV path. -
Curved prediction feed: each published obstacle carries
prediction_stepspredicted positions atprediction_dtspacing (default 25 x 0.1 s = 2.5 s), so the controller can follow turning obstacles instead of a straight constant-velocity ray. - Wall rejection: a cluster-radius cap drops extended structure (walls) whose centroid would otherwise be tracked as a phantom fast-moving obstacle.
-
Pure core: the clustering and tracker are a ROS-free Eigen library
(
prox_mpc_obstacle_tracker_core) covered by GoogleTest.
Prerequisites
- ROS 2 Jazzy on Ubuntu 24.04.
- prox_mpc_msgs (workspace package).
-
Eigen3,rclcpp,rclcpp_components,rclcpp_lifecycle,lifecycle_msgs,sensor_msgs,geometry_msgs,tf2,tf2_ros(resolved byrosdep).
Build
colcon build --symlink-install --packages-select prox_mpc_msgs prox_mpc_obstacle_tracker
source install/setup.bash
Run
The standalone executable is a self-activating lifecycle node: it brings itself up
(configure -> activate), spins, and tears itself down on SIGINT/SIGTERM.
The bundled launch file loads config/obstacle_tracker.yaml
and wires the node-only logger level, with a params_file argument to override the
parameters:
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py \
params_file:=/path/to/custom.yaml
To run the executable directly instead of through the launch file:
ros2 run prox_mpc_obstacle_tracker obstacle_tracker \
--ros-args --params-file \
$(ros2 pkg prefix prox_mpc_obstacle_tracker)/share/prox_mpc_obstacle_tracker/config/obstacle_tracker.yaml
config/obstacle_tracker.yaml is the single source of truth for the parameters. Watch the output with:
ros2 topic echo /tracked_obstacles
In simulation the tracker is started automatically by the demo’s Nav2 launch with
predictive:=True (see
prox_mpc_demo/doc/nav2-simulation.md).
Interfaces
File truncated at 100 lines see the full file
Changelog for package prox_mpc_obstacle_tracker
1.0.0 (2026-07-28)
- Initial release: lifecycle node that clusters a 2D
LaserScan, associates clusters to an IMM (constant-velocity + constant-turn-rate) filter in a fixed frame, and publishes aprox_mpc_msgs/ObstacleArray. - Composable component registration plus a mutually-exclusive callback
group and teardown guard, so it is safe under a
MultiThreadedExecutor; node-only
log_levelparameter and a standalone launch file. - Contributors: Simone Contorno
Package Dependencies
System Dependencies
| Name |
|---|
| python3-yaml |
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| prox_mpc_benchmark | |
| prox_mpc_demo |
Launch files
Messages
Services
Plugins
Recent questions tagged prox_mpc_obstacle_tracker at Robotics Stack Exchange
|
prox_mpc_obstacle_tracker package from prox_mpc repoprox_mpc_benchmark prox_mpc_controller prox_mpc_core prox_mpc_demo prox_mpc_msgs prox_mpc_obstacle_tracker prox_mpc_test_models |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/simone-contorno/prox_mpc.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-28 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Simone Contorno
Authors
prox_mpc_obstacle_tracker
An in-house 2D-lidar dynamic-obstacle detector and tracker for ProxMPC.
A managed lifecycle node clusters a sensor_msgs/LaserScan, transforms the
cluster centroids into a fixed tracking frame, runs one IMM
(constant-velocity + constant-turn-rate) filter per object, and publishes the
confirmed tracks - including sampled predicted positions along each track’s
estimated arc - as a prox_mpc_msgs/ObstacleArray.
That feed is what prox_mpc_controller consumes for
predictive (dynamic) obstacle avoidance.
The detection and tracking math is written from scratch (Eigen only, no third-party tracker), so the package is license-clean and unit-testable without ROS. The design, algorithm, parameters, and interfaces are documented in doc/architecture.md.
Table of Contents
Key Features
-
Lifecycle node: managed
configure -> activate -> deactivate -> cleanup, with a signal-safe shutdown ladder in the standalone driver. - Self-contained pipeline: LaserScan -> planar points -> adjacency clusters -> tracking-frame centroids -> IMM (CV + CTRV) tracks with sampled predicted positions.
-
Multi-object tracking: gated greedy nearest-neighbour association, one
IMM filter per track (a constant-velocity Kalman filter and a
constant-turn-rate-and-velocity EKF run in parallel, blended by model
probability), and a birth/confirm/death lifecycle.
imm_enabled: falserestores the legacy single-CV path. -
Curved prediction feed: each published obstacle carries
prediction_stepspredicted positions atprediction_dtspacing (default 25 x 0.1 s = 2.5 s), so the controller can follow turning obstacles instead of a straight constant-velocity ray. - Wall rejection: a cluster-radius cap drops extended structure (walls) whose centroid would otherwise be tracked as a phantom fast-moving obstacle.
-
Pure core: the clustering and tracker are a ROS-free Eigen library
(
prox_mpc_obstacle_tracker_core) covered by GoogleTest.
Prerequisites
- ROS 2 Jazzy on Ubuntu 24.04.
- prox_mpc_msgs (workspace package).
-
Eigen3,rclcpp,rclcpp_components,rclcpp_lifecycle,lifecycle_msgs,sensor_msgs,geometry_msgs,tf2,tf2_ros(resolved byrosdep).
Build
colcon build --symlink-install --packages-select prox_mpc_msgs prox_mpc_obstacle_tracker
source install/setup.bash
Run
The standalone executable is a self-activating lifecycle node: it brings itself up
(configure -> activate), spins, and tears itself down on SIGINT/SIGTERM.
The bundled launch file loads config/obstacle_tracker.yaml
and wires the node-only logger level, with a params_file argument to override the
parameters:
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py \
params_file:=/path/to/custom.yaml
To run the executable directly instead of through the launch file:
ros2 run prox_mpc_obstacle_tracker obstacle_tracker \
--ros-args --params-file \
$(ros2 pkg prefix prox_mpc_obstacle_tracker)/share/prox_mpc_obstacle_tracker/config/obstacle_tracker.yaml
config/obstacle_tracker.yaml is the single source of truth for the parameters. Watch the output with:
ros2 topic echo /tracked_obstacles
In simulation the tracker is started automatically by the demo’s Nav2 launch with
predictive:=True (see
prox_mpc_demo/doc/nav2-simulation.md).
Interfaces
File truncated at 100 lines see the full file
Changelog for package prox_mpc_obstacle_tracker
1.0.0 (2026-07-28)
- Initial release: lifecycle node that clusters a 2D
LaserScan, associates clusters to an IMM (constant-velocity + constant-turn-rate) filter in a fixed frame, and publishes aprox_mpc_msgs/ObstacleArray. - Composable component registration plus a mutually-exclusive callback
group and teardown guard, so it is safe under a
MultiThreadedExecutor; node-only
log_levelparameter and a standalone launch file. - Contributors: Simone Contorno
Package Dependencies
System Dependencies
| Name |
|---|
| python3-yaml |
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| prox_mpc_benchmark | |
| prox_mpc_demo |
Launch files
Messages
Services
Plugins
Recent questions tagged prox_mpc_obstacle_tracker at Robotics Stack Exchange
|
prox_mpc_obstacle_tracker package from prox_mpc repoprox_mpc_benchmark prox_mpc_controller prox_mpc_core prox_mpc_demo prox_mpc_msgs prox_mpc_obstacle_tracker prox_mpc_test_models |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/simone-contorno/prox_mpc.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-28 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Simone Contorno
Authors
prox_mpc_obstacle_tracker
An in-house 2D-lidar dynamic-obstacle detector and tracker for ProxMPC.
A managed lifecycle node clusters a sensor_msgs/LaserScan, transforms the
cluster centroids into a fixed tracking frame, runs one IMM
(constant-velocity + constant-turn-rate) filter per object, and publishes the
confirmed tracks - including sampled predicted positions along each track’s
estimated arc - as a prox_mpc_msgs/ObstacleArray.
That feed is what prox_mpc_controller consumes for
predictive (dynamic) obstacle avoidance.
The detection and tracking math is written from scratch (Eigen only, no third-party tracker), so the package is license-clean and unit-testable without ROS. The design, algorithm, parameters, and interfaces are documented in doc/architecture.md.
Table of Contents
Key Features
-
Lifecycle node: managed
configure -> activate -> deactivate -> cleanup, with a signal-safe shutdown ladder in the standalone driver. - Self-contained pipeline: LaserScan -> planar points -> adjacency clusters -> tracking-frame centroids -> IMM (CV + CTRV) tracks with sampled predicted positions.
-
Multi-object tracking: gated greedy nearest-neighbour association, one
IMM filter per track (a constant-velocity Kalman filter and a
constant-turn-rate-and-velocity EKF run in parallel, blended by model
probability), and a birth/confirm/death lifecycle.
imm_enabled: falserestores the legacy single-CV path. -
Curved prediction feed: each published obstacle carries
prediction_stepspredicted positions atprediction_dtspacing (default 25 x 0.1 s = 2.5 s), so the controller can follow turning obstacles instead of a straight constant-velocity ray. - Wall rejection: a cluster-radius cap drops extended structure (walls) whose centroid would otherwise be tracked as a phantom fast-moving obstacle.
-
Pure core: the clustering and tracker are a ROS-free Eigen library
(
prox_mpc_obstacle_tracker_core) covered by GoogleTest.
Prerequisites
- ROS 2 Jazzy on Ubuntu 24.04.
- prox_mpc_msgs (workspace package).
-
Eigen3,rclcpp,rclcpp_components,rclcpp_lifecycle,lifecycle_msgs,sensor_msgs,geometry_msgs,tf2,tf2_ros(resolved byrosdep).
Build
colcon build --symlink-install --packages-select prox_mpc_msgs prox_mpc_obstacle_tracker
source install/setup.bash
Run
The standalone executable is a self-activating lifecycle node: it brings itself up
(configure -> activate), spins, and tears itself down on SIGINT/SIGTERM.
The bundled launch file loads config/obstacle_tracker.yaml
and wires the node-only logger level, with a params_file argument to override the
parameters:
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py \
params_file:=/path/to/custom.yaml
To run the executable directly instead of through the launch file:
ros2 run prox_mpc_obstacle_tracker obstacle_tracker \
--ros-args --params-file \
$(ros2 pkg prefix prox_mpc_obstacle_tracker)/share/prox_mpc_obstacle_tracker/config/obstacle_tracker.yaml
config/obstacle_tracker.yaml is the single source of truth for the parameters. Watch the output with:
ros2 topic echo /tracked_obstacles
In simulation the tracker is started automatically by the demo’s Nav2 launch with
predictive:=True (see
prox_mpc_demo/doc/nav2-simulation.md).
Interfaces
File truncated at 100 lines see the full file
Changelog for package prox_mpc_obstacle_tracker
1.0.0 (2026-07-28)
- Initial release: lifecycle node that clusters a 2D
LaserScan, associates clusters to an IMM (constant-velocity + constant-turn-rate) filter in a fixed frame, and publishes aprox_mpc_msgs/ObstacleArray. - Composable component registration plus a mutually-exclusive callback
group and teardown guard, so it is safe under a
MultiThreadedExecutor; node-only
log_levelparameter and a standalone launch file. - Contributors: Simone Contorno
Package Dependencies
System Dependencies
| Name |
|---|
| python3-yaml |
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| prox_mpc_benchmark | |
| prox_mpc_demo |
Launch files
Messages
Services
Plugins
Recent questions tagged prox_mpc_obstacle_tracker at Robotics Stack Exchange
|
prox_mpc_obstacle_tracker package from prox_mpc repoprox_mpc_benchmark prox_mpc_controller prox_mpc_core prox_mpc_demo prox_mpc_msgs prox_mpc_obstacle_tracker prox_mpc_test_models |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/simone-contorno/prox_mpc.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-28 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Simone Contorno
Authors
prox_mpc_obstacle_tracker
An in-house 2D-lidar dynamic-obstacle detector and tracker for ProxMPC.
A managed lifecycle node clusters a sensor_msgs/LaserScan, transforms the
cluster centroids into a fixed tracking frame, runs one IMM
(constant-velocity + constant-turn-rate) filter per object, and publishes the
confirmed tracks - including sampled predicted positions along each track’s
estimated arc - as a prox_mpc_msgs/ObstacleArray.
That feed is what prox_mpc_controller consumes for
predictive (dynamic) obstacle avoidance.
The detection and tracking math is written from scratch (Eigen only, no third-party tracker), so the package is license-clean and unit-testable without ROS. The design, algorithm, parameters, and interfaces are documented in doc/architecture.md.
Table of Contents
Key Features
-
Lifecycle node: managed
configure -> activate -> deactivate -> cleanup, with a signal-safe shutdown ladder in the standalone driver. - Self-contained pipeline: LaserScan -> planar points -> adjacency clusters -> tracking-frame centroids -> IMM (CV + CTRV) tracks with sampled predicted positions.
-
Multi-object tracking: gated greedy nearest-neighbour association, one
IMM filter per track (a constant-velocity Kalman filter and a
constant-turn-rate-and-velocity EKF run in parallel, blended by model
probability), and a birth/confirm/death lifecycle.
imm_enabled: falserestores the legacy single-CV path. -
Curved prediction feed: each published obstacle carries
prediction_stepspredicted positions atprediction_dtspacing (default 25 x 0.1 s = 2.5 s), so the controller can follow turning obstacles instead of a straight constant-velocity ray. - Wall rejection: a cluster-radius cap drops extended structure (walls) whose centroid would otherwise be tracked as a phantom fast-moving obstacle.
-
Pure core: the clustering and tracker are a ROS-free Eigen library
(
prox_mpc_obstacle_tracker_core) covered by GoogleTest.
Prerequisites
- ROS 2 Jazzy on Ubuntu 24.04.
- prox_mpc_msgs (workspace package).
-
Eigen3,rclcpp,rclcpp_components,rclcpp_lifecycle,lifecycle_msgs,sensor_msgs,geometry_msgs,tf2,tf2_ros(resolved byrosdep).
Build
colcon build --symlink-install --packages-select prox_mpc_msgs prox_mpc_obstacle_tracker
source install/setup.bash
Run
The standalone executable is a self-activating lifecycle node: it brings itself up
(configure -> activate), spins, and tears itself down on SIGINT/SIGTERM.
The bundled launch file loads config/obstacle_tracker.yaml
and wires the node-only logger level, with a params_file argument to override the
parameters:
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py \
params_file:=/path/to/custom.yaml
To run the executable directly instead of through the launch file:
ros2 run prox_mpc_obstacle_tracker obstacle_tracker \
--ros-args --params-file \
$(ros2 pkg prefix prox_mpc_obstacle_tracker)/share/prox_mpc_obstacle_tracker/config/obstacle_tracker.yaml
config/obstacle_tracker.yaml is the single source of truth for the parameters. Watch the output with:
ros2 topic echo /tracked_obstacles
In simulation the tracker is started automatically by the demo’s Nav2 launch with
predictive:=True (see
prox_mpc_demo/doc/nav2-simulation.md).
Interfaces
File truncated at 100 lines see the full file
Changelog for package prox_mpc_obstacle_tracker
1.0.0 (2026-07-28)
- Initial release: lifecycle node that clusters a 2D
LaserScan, associates clusters to an IMM (constant-velocity + constant-turn-rate) filter in a fixed frame, and publishes aprox_mpc_msgs/ObstacleArray. - Composable component registration plus a mutually-exclusive callback
group and teardown guard, so it is safe under a
MultiThreadedExecutor; node-only
log_levelparameter and a standalone launch file. - Contributors: Simone Contorno
Package Dependencies
System Dependencies
| Name |
|---|
| python3-yaml |
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| prox_mpc_benchmark | |
| prox_mpc_demo |
Launch files
Messages
Services
Plugins
Recent questions tagged prox_mpc_obstacle_tracker at Robotics Stack Exchange
|
prox_mpc_obstacle_tracker package from prox_mpc repoprox_mpc_benchmark prox_mpc_controller prox_mpc_core prox_mpc_demo prox_mpc_msgs prox_mpc_obstacle_tracker prox_mpc_test_models |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/simone-contorno/prox_mpc.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-28 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Simone Contorno
Authors
prox_mpc_obstacle_tracker
An in-house 2D-lidar dynamic-obstacle detector and tracker for ProxMPC.
A managed lifecycle node clusters a sensor_msgs/LaserScan, transforms the
cluster centroids into a fixed tracking frame, runs one IMM
(constant-velocity + constant-turn-rate) filter per object, and publishes the
confirmed tracks - including sampled predicted positions along each track’s
estimated arc - as a prox_mpc_msgs/ObstacleArray.
That feed is what prox_mpc_controller consumes for
predictive (dynamic) obstacle avoidance.
The detection and tracking math is written from scratch (Eigen only, no third-party tracker), so the package is license-clean and unit-testable without ROS. The design, algorithm, parameters, and interfaces are documented in doc/architecture.md.
Table of Contents
Key Features
-
Lifecycle node: managed
configure -> activate -> deactivate -> cleanup, with a signal-safe shutdown ladder in the standalone driver. - Self-contained pipeline: LaserScan -> planar points -> adjacency clusters -> tracking-frame centroids -> IMM (CV + CTRV) tracks with sampled predicted positions.
-
Multi-object tracking: gated greedy nearest-neighbour association, one
IMM filter per track (a constant-velocity Kalman filter and a
constant-turn-rate-and-velocity EKF run in parallel, blended by model
probability), and a birth/confirm/death lifecycle.
imm_enabled: falserestores the legacy single-CV path. -
Curved prediction feed: each published obstacle carries
prediction_stepspredicted positions atprediction_dtspacing (default 25 x 0.1 s = 2.5 s), so the controller can follow turning obstacles instead of a straight constant-velocity ray. - Wall rejection: a cluster-radius cap drops extended structure (walls) whose centroid would otherwise be tracked as a phantom fast-moving obstacle.
-
Pure core: the clustering and tracker are a ROS-free Eigen library
(
prox_mpc_obstacle_tracker_core) covered by GoogleTest.
Prerequisites
- ROS 2 Jazzy on Ubuntu 24.04.
- prox_mpc_msgs (workspace package).
-
Eigen3,rclcpp,rclcpp_components,rclcpp_lifecycle,lifecycle_msgs,sensor_msgs,geometry_msgs,tf2,tf2_ros(resolved byrosdep).
Build
colcon build --symlink-install --packages-select prox_mpc_msgs prox_mpc_obstacle_tracker
source install/setup.bash
Run
The standalone executable is a self-activating lifecycle node: it brings itself up
(configure -> activate), spins, and tears itself down on SIGINT/SIGTERM.
The bundled launch file loads config/obstacle_tracker.yaml
and wires the node-only logger level, with a params_file argument to override the
parameters:
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py \
params_file:=/path/to/custom.yaml
To run the executable directly instead of through the launch file:
ros2 run prox_mpc_obstacle_tracker obstacle_tracker \
--ros-args --params-file \
$(ros2 pkg prefix prox_mpc_obstacle_tracker)/share/prox_mpc_obstacle_tracker/config/obstacle_tracker.yaml
config/obstacle_tracker.yaml is the single source of truth for the parameters. Watch the output with:
ros2 topic echo /tracked_obstacles
In simulation the tracker is started automatically by the demo’s Nav2 launch with
predictive:=True (see
prox_mpc_demo/doc/nav2-simulation.md).
Interfaces
File truncated at 100 lines see the full file
Changelog for package prox_mpc_obstacle_tracker
1.0.0 (2026-07-28)
- Initial release: lifecycle node that clusters a 2D
LaserScan, associates clusters to an IMM (constant-velocity + constant-turn-rate) filter in a fixed frame, and publishes aprox_mpc_msgs/ObstacleArray. - Composable component registration plus a mutually-exclusive callback
group and teardown guard, so it is safe under a
MultiThreadedExecutor; node-only
log_levelparameter and a standalone launch file. - Contributors: Simone Contorno
Package Dependencies
System Dependencies
| Name |
|---|
| python3-yaml |
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| prox_mpc_benchmark | |
| prox_mpc_demo |
Launch files
Messages
Services
Plugins
Recent questions tagged prox_mpc_obstacle_tracker at Robotics Stack Exchange
|
prox_mpc_obstacle_tracker package from prox_mpc repoprox_mpc_benchmark prox_mpc_controller prox_mpc_core prox_mpc_demo prox_mpc_msgs prox_mpc_obstacle_tracker prox_mpc_test_models |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/simone-contorno/prox_mpc.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-28 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Simone Contorno
Authors
prox_mpc_obstacle_tracker
An in-house 2D-lidar dynamic-obstacle detector and tracker for ProxMPC.
A managed lifecycle node clusters a sensor_msgs/LaserScan, transforms the
cluster centroids into a fixed tracking frame, runs one IMM
(constant-velocity + constant-turn-rate) filter per object, and publishes the
confirmed tracks - including sampled predicted positions along each track’s
estimated arc - as a prox_mpc_msgs/ObstacleArray.
That feed is what prox_mpc_controller consumes for
predictive (dynamic) obstacle avoidance.
The detection and tracking math is written from scratch (Eigen only, no third-party tracker), so the package is license-clean and unit-testable without ROS. The design, algorithm, parameters, and interfaces are documented in doc/architecture.md.
Table of Contents
Key Features
-
Lifecycle node: managed
configure -> activate -> deactivate -> cleanup, with a signal-safe shutdown ladder in the standalone driver. - Self-contained pipeline: LaserScan -> planar points -> adjacency clusters -> tracking-frame centroids -> IMM (CV + CTRV) tracks with sampled predicted positions.
-
Multi-object tracking: gated greedy nearest-neighbour association, one
IMM filter per track (a constant-velocity Kalman filter and a
constant-turn-rate-and-velocity EKF run in parallel, blended by model
probability), and a birth/confirm/death lifecycle.
imm_enabled: falserestores the legacy single-CV path. -
Curved prediction feed: each published obstacle carries
prediction_stepspredicted positions atprediction_dtspacing (default 25 x 0.1 s = 2.5 s), so the controller can follow turning obstacles instead of a straight constant-velocity ray. - Wall rejection: a cluster-radius cap drops extended structure (walls) whose centroid would otherwise be tracked as a phantom fast-moving obstacle.
-
Pure core: the clustering and tracker are a ROS-free Eigen library
(
prox_mpc_obstacle_tracker_core) covered by GoogleTest.
Prerequisites
- ROS 2 Jazzy on Ubuntu 24.04.
- prox_mpc_msgs (workspace package).
-
Eigen3,rclcpp,rclcpp_components,rclcpp_lifecycle,lifecycle_msgs,sensor_msgs,geometry_msgs,tf2,tf2_ros(resolved byrosdep).
Build
colcon build --symlink-install --packages-select prox_mpc_msgs prox_mpc_obstacle_tracker
source install/setup.bash
Run
The standalone executable is a self-activating lifecycle node: it brings itself up
(configure -> activate), spins, and tears itself down on SIGINT/SIGTERM.
The bundled launch file loads config/obstacle_tracker.yaml
and wires the node-only logger level, with a params_file argument to override the
parameters:
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py \
params_file:=/path/to/custom.yaml
To run the executable directly instead of through the launch file:
ros2 run prox_mpc_obstacle_tracker obstacle_tracker \
--ros-args --params-file \
$(ros2 pkg prefix prox_mpc_obstacle_tracker)/share/prox_mpc_obstacle_tracker/config/obstacle_tracker.yaml
config/obstacle_tracker.yaml is the single source of truth for the parameters. Watch the output with:
ros2 topic echo /tracked_obstacles
In simulation the tracker is started automatically by the demo’s Nav2 launch with
predictive:=True (see
prox_mpc_demo/doc/nav2-simulation.md).
Interfaces
File truncated at 100 lines see the full file
Changelog for package prox_mpc_obstacle_tracker
1.0.0 (2026-07-28)
- Initial release: lifecycle node that clusters a 2D
LaserScan, associates clusters to an IMM (constant-velocity + constant-turn-rate) filter in a fixed frame, and publishes aprox_mpc_msgs/ObstacleArray. - Composable component registration plus a mutually-exclusive callback
group and teardown guard, so it is safe under a
MultiThreadedExecutor; node-only
log_levelparameter and a standalone launch file. - Contributors: Simone Contorno
Package Dependencies
System Dependencies
| Name |
|---|
| python3-yaml |
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| prox_mpc_benchmark | |
| prox_mpc_demo |
Launch files
Messages
Services
Plugins
Recent questions tagged prox_mpc_obstacle_tracker at Robotics Stack Exchange
|
prox_mpc_obstacle_tracker package from prox_mpc repoprox_mpc_benchmark prox_mpc_controller prox_mpc_core prox_mpc_demo prox_mpc_msgs prox_mpc_obstacle_tracker prox_mpc_test_models |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/simone-contorno/prox_mpc.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-28 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Simone Contorno
Authors
prox_mpc_obstacle_tracker
An in-house 2D-lidar dynamic-obstacle detector and tracker for ProxMPC.
A managed lifecycle node clusters a sensor_msgs/LaserScan, transforms the
cluster centroids into a fixed tracking frame, runs one IMM
(constant-velocity + constant-turn-rate) filter per object, and publishes the
confirmed tracks - including sampled predicted positions along each track’s
estimated arc - as a prox_mpc_msgs/ObstacleArray.
That feed is what prox_mpc_controller consumes for
predictive (dynamic) obstacle avoidance.
The detection and tracking math is written from scratch (Eigen only, no third-party tracker), so the package is license-clean and unit-testable without ROS. The design, algorithm, parameters, and interfaces are documented in doc/architecture.md.
Table of Contents
Key Features
-
Lifecycle node: managed
configure -> activate -> deactivate -> cleanup, with a signal-safe shutdown ladder in the standalone driver. - Self-contained pipeline: LaserScan -> planar points -> adjacency clusters -> tracking-frame centroids -> IMM (CV + CTRV) tracks with sampled predicted positions.
-
Multi-object tracking: gated greedy nearest-neighbour association, one
IMM filter per track (a constant-velocity Kalman filter and a
constant-turn-rate-and-velocity EKF run in parallel, blended by model
probability), and a birth/confirm/death lifecycle.
imm_enabled: falserestores the legacy single-CV path. -
Curved prediction feed: each published obstacle carries
prediction_stepspredicted positions atprediction_dtspacing (default 25 x 0.1 s = 2.5 s), so the controller can follow turning obstacles instead of a straight constant-velocity ray. - Wall rejection: a cluster-radius cap drops extended structure (walls) whose centroid would otherwise be tracked as a phantom fast-moving obstacle.
-
Pure core: the clustering and tracker are a ROS-free Eigen library
(
prox_mpc_obstacle_tracker_core) covered by GoogleTest.
Prerequisites
- ROS 2 Jazzy on Ubuntu 24.04.
- prox_mpc_msgs (workspace package).
-
Eigen3,rclcpp,rclcpp_components,rclcpp_lifecycle,lifecycle_msgs,sensor_msgs,geometry_msgs,tf2,tf2_ros(resolved byrosdep).
Build
colcon build --symlink-install --packages-select prox_mpc_msgs prox_mpc_obstacle_tracker
source install/setup.bash
Run
The standalone executable is a self-activating lifecycle node: it brings itself up
(configure -> activate), spins, and tears itself down on SIGINT/SIGTERM.
The bundled launch file loads config/obstacle_tracker.yaml
and wires the node-only logger level, with a params_file argument to override the
parameters:
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py \
params_file:=/path/to/custom.yaml
To run the executable directly instead of through the launch file:
ros2 run prox_mpc_obstacle_tracker obstacle_tracker \
--ros-args --params-file \
$(ros2 pkg prefix prox_mpc_obstacle_tracker)/share/prox_mpc_obstacle_tracker/config/obstacle_tracker.yaml
config/obstacle_tracker.yaml is the single source of truth for the parameters. Watch the output with:
ros2 topic echo /tracked_obstacles
In simulation the tracker is started automatically by the demo’s Nav2 launch with
predictive:=True (see
prox_mpc_demo/doc/nav2-simulation.md).
Interfaces
File truncated at 100 lines see the full file
Changelog for package prox_mpc_obstacle_tracker
1.0.0 (2026-07-28)
- Initial release: lifecycle node that clusters a 2D
LaserScan, associates clusters to an IMM (constant-velocity + constant-turn-rate) filter in a fixed frame, and publishes aprox_mpc_msgs/ObstacleArray. - Composable component registration plus a mutually-exclusive callback
group and teardown guard, so it is safe under a
MultiThreadedExecutor; node-only
log_levelparameter and a standalone launch file. - Contributors: Simone Contorno
Package Dependencies
System Dependencies
| Name |
|---|
| python3-yaml |
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| prox_mpc_benchmark | |
| prox_mpc_demo |
Launch files
Messages
Services
Plugins
Recent questions tagged prox_mpc_obstacle_tracker at Robotics Stack Exchange
|
prox_mpc_obstacle_tracker package from prox_mpc repoprox_mpc_benchmark prox_mpc_controller prox_mpc_core prox_mpc_demo prox_mpc_msgs prox_mpc_obstacle_tracker prox_mpc_test_models |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/simone-contorno/prox_mpc.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-28 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Simone Contorno
Authors
prox_mpc_obstacle_tracker
An in-house 2D-lidar dynamic-obstacle detector and tracker for ProxMPC.
A managed lifecycle node clusters a sensor_msgs/LaserScan, transforms the
cluster centroids into a fixed tracking frame, runs one IMM
(constant-velocity + constant-turn-rate) filter per object, and publishes the
confirmed tracks - including sampled predicted positions along each track’s
estimated arc - as a prox_mpc_msgs/ObstacleArray.
That feed is what prox_mpc_controller consumes for
predictive (dynamic) obstacle avoidance.
The detection and tracking math is written from scratch (Eigen only, no third-party tracker), so the package is license-clean and unit-testable without ROS. The design, algorithm, parameters, and interfaces are documented in doc/architecture.md.
Table of Contents
Key Features
-
Lifecycle node: managed
configure -> activate -> deactivate -> cleanup, with a signal-safe shutdown ladder in the standalone driver. - Self-contained pipeline: LaserScan -> planar points -> adjacency clusters -> tracking-frame centroids -> IMM (CV + CTRV) tracks with sampled predicted positions.
-
Multi-object tracking: gated greedy nearest-neighbour association, one
IMM filter per track (a constant-velocity Kalman filter and a
constant-turn-rate-and-velocity EKF run in parallel, blended by model
probability), and a birth/confirm/death lifecycle.
imm_enabled: falserestores the legacy single-CV path. -
Curved prediction feed: each published obstacle carries
prediction_stepspredicted positions atprediction_dtspacing (default 25 x 0.1 s = 2.5 s), so the controller can follow turning obstacles instead of a straight constant-velocity ray. - Wall rejection: a cluster-radius cap drops extended structure (walls) whose centroid would otherwise be tracked as a phantom fast-moving obstacle.
-
Pure core: the clustering and tracker are a ROS-free Eigen library
(
prox_mpc_obstacle_tracker_core) covered by GoogleTest.
Prerequisites
- ROS 2 Jazzy on Ubuntu 24.04.
- prox_mpc_msgs (workspace package).
-
Eigen3,rclcpp,rclcpp_components,rclcpp_lifecycle,lifecycle_msgs,sensor_msgs,geometry_msgs,tf2,tf2_ros(resolved byrosdep).
Build
colcon build --symlink-install --packages-select prox_mpc_msgs prox_mpc_obstacle_tracker
source install/setup.bash
Run
The standalone executable is a self-activating lifecycle node: it brings itself up
(configure -> activate), spins, and tears itself down on SIGINT/SIGTERM.
The bundled launch file loads config/obstacle_tracker.yaml
and wires the node-only logger level, with a params_file argument to override the
parameters:
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py \
params_file:=/path/to/custom.yaml
To run the executable directly instead of through the launch file:
ros2 run prox_mpc_obstacle_tracker obstacle_tracker \
--ros-args --params-file \
$(ros2 pkg prefix prox_mpc_obstacle_tracker)/share/prox_mpc_obstacle_tracker/config/obstacle_tracker.yaml
config/obstacle_tracker.yaml is the single source of truth for the parameters. Watch the output with:
ros2 topic echo /tracked_obstacles
In simulation the tracker is started automatically by the demo’s Nav2 launch with
predictive:=True (see
prox_mpc_demo/doc/nav2-simulation.md).
Interfaces
File truncated at 100 lines see the full file
Changelog for package prox_mpc_obstacle_tracker
1.0.0 (2026-07-28)
- Initial release: lifecycle node that clusters a 2D
LaserScan, associates clusters to an IMM (constant-velocity + constant-turn-rate) filter in a fixed frame, and publishes aprox_mpc_msgs/ObstacleArray. - Composable component registration plus a mutually-exclusive callback
group and teardown guard, so it is safe under a
MultiThreadedExecutor; node-only
log_levelparameter and a standalone launch file. - Contributors: Simone Contorno
Package Dependencies
System Dependencies
| Name |
|---|
| python3-yaml |
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| prox_mpc_benchmark | |
| prox_mpc_demo |
Launch files
Messages
Services
Plugins
Recent questions tagged prox_mpc_obstacle_tracker at Robotics Stack Exchange
|
prox_mpc_obstacle_tracker package from prox_mpc repoprox_mpc_benchmark prox_mpc_controller prox_mpc_core prox_mpc_demo prox_mpc_msgs prox_mpc_obstacle_tracker prox_mpc_test_models |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/simone-contorno/prox_mpc.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-28 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Simone Contorno
Authors
prox_mpc_obstacle_tracker
An in-house 2D-lidar dynamic-obstacle detector and tracker for ProxMPC.
A managed lifecycle node clusters a sensor_msgs/LaserScan, transforms the
cluster centroids into a fixed tracking frame, runs one IMM
(constant-velocity + constant-turn-rate) filter per object, and publishes the
confirmed tracks - including sampled predicted positions along each track’s
estimated arc - as a prox_mpc_msgs/ObstacleArray.
That feed is what prox_mpc_controller consumes for
predictive (dynamic) obstacle avoidance.
The detection and tracking math is written from scratch (Eigen only, no third-party tracker), so the package is license-clean and unit-testable without ROS. The design, algorithm, parameters, and interfaces are documented in doc/architecture.md.
Table of Contents
Key Features
-
Lifecycle node: managed
configure -> activate -> deactivate -> cleanup, with a signal-safe shutdown ladder in the standalone driver. - Self-contained pipeline: LaserScan -> planar points -> adjacency clusters -> tracking-frame centroids -> IMM (CV + CTRV) tracks with sampled predicted positions.
-
Multi-object tracking: gated greedy nearest-neighbour association, one
IMM filter per track (a constant-velocity Kalman filter and a
constant-turn-rate-and-velocity EKF run in parallel, blended by model
probability), and a birth/confirm/death lifecycle.
imm_enabled: falserestores the legacy single-CV path. -
Curved prediction feed: each published obstacle carries
prediction_stepspredicted positions atprediction_dtspacing (default 25 x 0.1 s = 2.5 s), so the controller can follow turning obstacles instead of a straight constant-velocity ray. - Wall rejection: a cluster-radius cap drops extended structure (walls) whose centroid would otherwise be tracked as a phantom fast-moving obstacle.
-
Pure core: the clustering and tracker are a ROS-free Eigen library
(
prox_mpc_obstacle_tracker_core) covered by GoogleTest.
Prerequisites
- ROS 2 Jazzy on Ubuntu 24.04.
- prox_mpc_msgs (workspace package).
-
Eigen3,rclcpp,rclcpp_components,rclcpp_lifecycle,lifecycle_msgs,sensor_msgs,geometry_msgs,tf2,tf2_ros(resolved byrosdep).
Build
colcon build --symlink-install --packages-select prox_mpc_msgs prox_mpc_obstacle_tracker
source install/setup.bash
Run
The standalone executable is a self-activating lifecycle node: it brings itself up
(configure -> activate), spins, and tears itself down on SIGINT/SIGTERM.
The bundled launch file loads config/obstacle_tracker.yaml
and wires the node-only logger level, with a params_file argument to override the
parameters:
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py \
params_file:=/path/to/custom.yaml
To run the executable directly instead of through the launch file:
ros2 run prox_mpc_obstacle_tracker obstacle_tracker \
--ros-args --params-file \
$(ros2 pkg prefix prox_mpc_obstacle_tracker)/share/prox_mpc_obstacle_tracker/config/obstacle_tracker.yaml
config/obstacle_tracker.yaml is the single source of truth for the parameters. Watch the output with:
ros2 topic echo /tracked_obstacles
In simulation the tracker is started automatically by the demo’s Nav2 launch with
predictive:=True (see
prox_mpc_demo/doc/nav2-simulation.md).
Interfaces
File truncated at 100 lines see the full file
Changelog for package prox_mpc_obstacle_tracker
1.0.0 (2026-07-28)
- Initial release: lifecycle node that clusters a 2D
LaserScan, associates clusters to an IMM (constant-velocity + constant-turn-rate) filter in a fixed frame, and publishes aprox_mpc_msgs/ObstacleArray. - Composable component registration plus a mutually-exclusive callback
group and teardown guard, so it is safe under a
MultiThreadedExecutor; node-only
log_levelparameter and a standalone launch file. - Contributors: Simone Contorno
Package Dependencies
System Dependencies
| Name |
|---|
| python3-yaml |
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| prox_mpc_benchmark | |
| prox_mpc_demo |
Launch files
Messages
Services
Plugins
Recent questions tagged prox_mpc_obstacle_tracker at Robotics Stack Exchange
|
prox_mpc_obstacle_tracker package from prox_mpc repoprox_mpc_benchmark prox_mpc_controller prox_mpc_core prox_mpc_demo prox_mpc_msgs prox_mpc_obstacle_tracker prox_mpc_test_models |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/simone-contorno/prox_mpc.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-28 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Simone Contorno
Authors
prox_mpc_obstacle_tracker
An in-house 2D-lidar dynamic-obstacle detector and tracker for ProxMPC.
A managed lifecycle node clusters a sensor_msgs/LaserScan, transforms the
cluster centroids into a fixed tracking frame, runs one IMM
(constant-velocity + constant-turn-rate) filter per object, and publishes the
confirmed tracks - including sampled predicted positions along each track’s
estimated arc - as a prox_mpc_msgs/ObstacleArray.
That feed is what prox_mpc_controller consumes for
predictive (dynamic) obstacle avoidance.
The detection and tracking math is written from scratch (Eigen only, no third-party tracker), so the package is license-clean and unit-testable without ROS. The design, algorithm, parameters, and interfaces are documented in doc/architecture.md.
Table of Contents
Key Features
-
Lifecycle node: managed
configure -> activate -> deactivate -> cleanup, with a signal-safe shutdown ladder in the standalone driver. - Self-contained pipeline: LaserScan -> planar points -> adjacency clusters -> tracking-frame centroids -> IMM (CV + CTRV) tracks with sampled predicted positions.
-
Multi-object tracking: gated greedy nearest-neighbour association, one
IMM filter per track (a constant-velocity Kalman filter and a
constant-turn-rate-and-velocity EKF run in parallel, blended by model
probability), and a birth/confirm/death lifecycle.
imm_enabled: falserestores the legacy single-CV path. -
Curved prediction feed: each published obstacle carries
prediction_stepspredicted positions atprediction_dtspacing (default 25 x 0.1 s = 2.5 s), so the controller can follow turning obstacles instead of a straight constant-velocity ray. - Wall rejection: a cluster-radius cap drops extended structure (walls) whose centroid would otherwise be tracked as a phantom fast-moving obstacle.
-
Pure core: the clustering and tracker are a ROS-free Eigen library
(
prox_mpc_obstacle_tracker_core) covered by GoogleTest.
Prerequisites
- ROS 2 Jazzy on Ubuntu 24.04.
- prox_mpc_msgs (workspace package).
-
Eigen3,rclcpp,rclcpp_components,rclcpp_lifecycle,lifecycle_msgs,sensor_msgs,geometry_msgs,tf2,tf2_ros(resolved byrosdep).
Build
colcon build --symlink-install --packages-select prox_mpc_msgs prox_mpc_obstacle_tracker
source install/setup.bash
Run
The standalone executable is a self-activating lifecycle node: it brings itself up
(configure -> activate), spins, and tears itself down on SIGINT/SIGTERM.
The bundled launch file loads config/obstacle_tracker.yaml
and wires the node-only logger level, with a params_file argument to override the
parameters:
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py \
params_file:=/path/to/custom.yaml
To run the executable directly instead of through the launch file:
ros2 run prox_mpc_obstacle_tracker obstacle_tracker \
--ros-args --params-file \
$(ros2 pkg prefix prox_mpc_obstacle_tracker)/share/prox_mpc_obstacle_tracker/config/obstacle_tracker.yaml
config/obstacle_tracker.yaml is the single source of truth for the parameters. Watch the output with:
ros2 topic echo /tracked_obstacles
In simulation the tracker is started automatically by the demo’s Nav2 launch with
predictive:=True (see
prox_mpc_demo/doc/nav2-simulation.md).
Interfaces
File truncated at 100 lines see the full file
Changelog for package prox_mpc_obstacle_tracker
1.0.0 (2026-07-28)
- Initial release: lifecycle node that clusters a 2D
LaserScan, associates clusters to an IMM (constant-velocity + constant-turn-rate) filter in a fixed frame, and publishes aprox_mpc_msgs/ObstacleArray. - Composable component registration plus a mutually-exclusive callback
group and teardown guard, so it is safe under a
MultiThreadedExecutor; node-only
log_levelparameter and a standalone launch file. - Contributors: Simone Contorno
Package Dependencies
System Dependencies
| Name |
|---|
| python3-yaml |
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| prox_mpc_benchmark | |
| prox_mpc_demo |
Launch files
Messages
Services
Plugins
Recent questions tagged prox_mpc_obstacle_tracker at Robotics Stack Exchange
|
prox_mpc_obstacle_tracker package from prox_mpc repoprox_mpc_benchmark prox_mpc_controller prox_mpc_core prox_mpc_demo prox_mpc_msgs prox_mpc_obstacle_tracker prox_mpc_test_models |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/simone-contorno/prox_mpc.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-28 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Simone Contorno
Authors
prox_mpc_obstacle_tracker
An in-house 2D-lidar dynamic-obstacle detector and tracker for ProxMPC.
A managed lifecycle node clusters a sensor_msgs/LaserScan, transforms the
cluster centroids into a fixed tracking frame, runs one IMM
(constant-velocity + constant-turn-rate) filter per object, and publishes the
confirmed tracks - including sampled predicted positions along each track’s
estimated arc - as a prox_mpc_msgs/ObstacleArray.
That feed is what prox_mpc_controller consumes for
predictive (dynamic) obstacle avoidance.
The detection and tracking math is written from scratch (Eigen only, no third-party tracker), so the package is license-clean and unit-testable without ROS. The design, algorithm, parameters, and interfaces are documented in doc/architecture.md.
Table of Contents
Key Features
-
Lifecycle node: managed
configure -> activate -> deactivate -> cleanup, with a signal-safe shutdown ladder in the standalone driver. - Self-contained pipeline: LaserScan -> planar points -> adjacency clusters -> tracking-frame centroids -> IMM (CV + CTRV) tracks with sampled predicted positions.
-
Multi-object tracking: gated greedy nearest-neighbour association, one
IMM filter per track (a constant-velocity Kalman filter and a
constant-turn-rate-and-velocity EKF run in parallel, blended by model
probability), and a birth/confirm/death lifecycle.
imm_enabled: falserestores the legacy single-CV path. -
Curved prediction feed: each published obstacle carries
prediction_stepspredicted positions atprediction_dtspacing (default 25 x 0.1 s = 2.5 s), so the controller can follow turning obstacles instead of a straight constant-velocity ray. - Wall rejection: a cluster-radius cap drops extended structure (walls) whose centroid would otherwise be tracked as a phantom fast-moving obstacle.
-
Pure core: the clustering and tracker are a ROS-free Eigen library
(
prox_mpc_obstacle_tracker_core) covered by GoogleTest.
Prerequisites
- ROS 2 Jazzy on Ubuntu 24.04.
- prox_mpc_msgs (workspace package).
-
Eigen3,rclcpp,rclcpp_components,rclcpp_lifecycle,lifecycle_msgs,sensor_msgs,geometry_msgs,tf2,tf2_ros(resolved byrosdep).
Build
colcon build --symlink-install --packages-select prox_mpc_msgs prox_mpc_obstacle_tracker
source install/setup.bash
Run
The standalone executable is a self-activating lifecycle node: it brings itself up
(configure -> activate), spins, and tears itself down on SIGINT/SIGTERM.
The bundled launch file loads config/obstacle_tracker.yaml
and wires the node-only logger level, with a params_file argument to override the
parameters:
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py \
params_file:=/path/to/custom.yaml
To run the executable directly instead of through the launch file:
ros2 run prox_mpc_obstacle_tracker obstacle_tracker \
--ros-args --params-file \
$(ros2 pkg prefix prox_mpc_obstacle_tracker)/share/prox_mpc_obstacle_tracker/config/obstacle_tracker.yaml
config/obstacle_tracker.yaml is the single source of truth for the parameters. Watch the output with:
ros2 topic echo /tracked_obstacles
In simulation the tracker is started automatically by the demo’s Nav2 launch with
predictive:=True (see
prox_mpc_demo/doc/nav2-simulation.md).
Interfaces
File truncated at 100 lines see the full file
Changelog for package prox_mpc_obstacle_tracker
1.0.0 (2026-07-28)
- Initial release: lifecycle node that clusters a 2D
LaserScan, associates clusters to an IMM (constant-velocity + constant-turn-rate) filter in a fixed frame, and publishes aprox_mpc_msgs/ObstacleArray. - Composable component registration plus a mutually-exclusive callback
group and teardown guard, so it is safe under a
MultiThreadedExecutor; node-only
log_levelparameter and a standalone launch file. - Contributors: Simone Contorno
Package Dependencies
System Dependencies
| Name |
|---|
| python3-yaml |
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| prox_mpc_benchmark | |
| prox_mpc_demo |
Launch files
Messages
Services
Plugins
Recent questions tagged prox_mpc_obstacle_tracker at Robotics Stack Exchange
|
prox_mpc_obstacle_tracker package from prox_mpc repoprox_mpc_benchmark prox_mpc_controller prox_mpc_core prox_mpc_demo prox_mpc_msgs prox_mpc_obstacle_tracker prox_mpc_test_models |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/simone-contorno/prox_mpc.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-28 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Simone Contorno
Authors
prox_mpc_obstacle_tracker
An in-house 2D-lidar dynamic-obstacle detector and tracker for ProxMPC.
A managed lifecycle node clusters a sensor_msgs/LaserScan, transforms the
cluster centroids into a fixed tracking frame, runs one IMM
(constant-velocity + constant-turn-rate) filter per object, and publishes the
confirmed tracks - including sampled predicted positions along each track’s
estimated arc - as a prox_mpc_msgs/ObstacleArray.
That feed is what prox_mpc_controller consumes for
predictive (dynamic) obstacle avoidance.
The detection and tracking math is written from scratch (Eigen only, no third-party tracker), so the package is license-clean and unit-testable without ROS. The design, algorithm, parameters, and interfaces are documented in doc/architecture.md.
Table of Contents
Key Features
-
Lifecycle node: managed
configure -> activate -> deactivate -> cleanup, with a signal-safe shutdown ladder in the standalone driver. - Self-contained pipeline: LaserScan -> planar points -> adjacency clusters -> tracking-frame centroids -> IMM (CV + CTRV) tracks with sampled predicted positions.
-
Multi-object tracking: gated greedy nearest-neighbour association, one
IMM filter per track (a constant-velocity Kalman filter and a
constant-turn-rate-and-velocity EKF run in parallel, blended by model
probability), and a birth/confirm/death lifecycle.
imm_enabled: falserestores the legacy single-CV path. -
Curved prediction feed: each published obstacle carries
prediction_stepspredicted positions atprediction_dtspacing (default 25 x 0.1 s = 2.5 s), so the controller can follow turning obstacles instead of a straight constant-velocity ray. - Wall rejection: a cluster-radius cap drops extended structure (walls) whose centroid would otherwise be tracked as a phantom fast-moving obstacle.
-
Pure core: the clustering and tracker are a ROS-free Eigen library
(
prox_mpc_obstacle_tracker_core) covered by GoogleTest.
Prerequisites
- ROS 2 Jazzy on Ubuntu 24.04.
- prox_mpc_msgs (workspace package).
-
Eigen3,rclcpp,rclcpp_components,rclcpp_lifecycle,lifecycle_msgs,sensor_msgs,geometry_msgs,tf2,tf2_ros(resolved byrosdep).
Build
colcon build --symlink-install --packages-select prox_mpc_msgs prox_mpc_obstacle_tracker
source install/setup.bash
Run
The standalone executable is a self-activating lifecycle node: it brings itself up
(configure -> activate), spins, and tears itself down on SIGINT/SIGTERM.
The bundled launch file loads config/obstacle_tracker.yaml
and wires the node-only logger level, with a params_file argument to override the
parameters:
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py \
params_file:=/path/to/custom.yaml
To run the executable directly instead of through the launch file:
ros2 run prox_mpc_obstacle_tracker obstacle_tracker \
--ros-args --params-file \
$(ros2 pkg prefix prox_mpc_obstacle_tracker)/share/prox_mpc_obstacle_tracker/config/obstacle_tracker.yaml
config/obstacle_tracker.yaml is the single source of truth for the parameters. Watch the output with:
ros2 topic echo /tracked_obstacles
In simulation the tracker is started automatically by the demo’s Nav2 launch with
predictive:=True (see
prox_mpc_demo/doc/nav2-simulation.md).
Interfaces
File truncated at 100 lines see the full file
Changelog for package prox_mpc_obstacle_tracker
1.0.0 (2026-07-28)
- Initial release: lifecycle node that clusters a 2D
LaserScan, associates clusters to an IMM (constant-velocity + constant-turn-rate) filter in a fixed frame, and publishes aprox_mpc_msgs/ObstacleArray. - Composable component registration plus a mutually-exclusive callback
group and teardown guard, so it is safe under a
MultiThreadedExecutor; node-only
log_levelparameter and a standalone launch file. - Contributors: Simone Contorno
Package Dependencies
System Dependencies
| Name |
|---|
| python3-yaml |
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| prox_mpc_benchmark | |
| prox_mpc_demo |
Launch files
Messages
Services
Plugins
Recent questions tagged prox_mpc_obstacle_tracker at Robotics Stack Exchange
|
prox_mpc_obstacle_tracker package from prox_mpc repoprox_mpc_benchmark prox_mpc_controller prox_mpc_core prox_mpc_demo prox_mpc_msgs prox_mpc_obstacle_tracker prox_mpc_test_models |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/simone-contorno/prox_mpc.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-28 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Simone Contorno
Authors
prox_mpc_obstacle_tracker
An in-house 2D-lidar dynamic-obstacle detector and tracker for ProxMPC.
A managed lifecycle node clusters a sensor_msgs/LaserScan, transforms the
cluster centroids into a fixed tracking frame, runs one IMM
(constant-velocity + constant-turn-rate) filter per object, and publishes the
confirmed tracks - including sampled predicted positions along each track’s
estimated arc - as a prox_mpc_msgs/ObstacleArray.
That feed is what prox_mpc_controller consumes for
predictive (dynamic) obstacle avoidance.
The detection and tracking math is written from scratch (Eigen only, no third-party tracker), so the package is license-clean and unit-testable without ROS. The design, algorithm, parameters, and interfaces are documented in doc/architecture.md.
Table of Contents
Key Features
-
Lifecycle node: managed
configure -> activate -> deactivate -> cleanup, with a signal-safe shutdown ladder in the standalone driver. - Self-contained pipeline: LaserScan -> planar points -> adjacency clusters -> tracking-frame centroids -> IMM (CV + CTRV) tracks with sampled predicted positions.
-
Multi-object tracking: gated greedy nearest-neighbour association, one
IMM filter per track (a constant-velocity Kalman filter and a
constant-turn-rate-and-velocity EKF run in parallel, blended by model
probability), and a birth/confirm/death lifecycle.
imm_enabled: falserestores the legacy single-CV path. -
Curved prediction feed: each published obstacle carries
prediction_stepspredicted positions atprediction_dtspacing (default 25 x 0.1 s = 2.5 s), so the controller can follow turning obstacles instead of a straight constant-velocity ray. - Wall rejection: a cluster-radius cap drops extended structure (walls) whose centroid would otherwise be tracked as a phantom fast-moving obstacle.
-
Pure core: the clustering and tracker are a ROS-free Eigen library
(
prox_mpc_obstacle_tracker_core) covered by GoogleTest.
Prerequisites
- ROS 2 Jazzy on Ubuntu 24.04.
- prox_mpc_msgs (workspace package).
-
Eigen3,rclcpp,rclcpp_components,rclcpp_lifecycle,lifecycle_msgs,sensor_msgs,geometry_msgs,tf2,tf2_ros(resolved byrosdep).
Build
colcon build --symlink-install --packages-select prox_mpc_msgs prox_mpc_obstacle_tracker
source install/setup.bash
Run
The standalone executable is a self-activating lifecycle node: it brings itself up
(configure -> activate), spins, and tears itself down on SIGINT/SIGTERM.
The bundled launch file loads config/obstacle_tracker.yaml
and wires the node-only logger level, with a params_file argument to override the
parameters:
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py \
params_file:=/path/to/custom.yaml
To run the executable directly instead of through the launch file:
ros2 run prox_mpc_obstacle_tracker obstacle_tracker \
--ros-args --params-file \
$(ros2 pkg prefix prox_mpc_obstacle_tracker)/share/prox_mpc_obstacle_tracker/config/obstacle_tracker.yaml
config/obstacle_tracker.yaml is the single source of truth for the parameters. Watch the output with:
ros2 topic echo /tracked_obstacles
In simulation the tracker is started automatically by the demo’s Nav2 launch with
predictive:=True (see
prox_mpc_demo/doc/nav2-simulation.md).
Interfaces
File truncated at 100 lines see the full file
Changelog for package prox_mpc_obstacle_tracker
1.0.0 (2026-07-28)
- Initial release: lifecycle node that clusters a 2D
LaserScan, associates clusters to an IMM (constant-velocity + constant-turn-rate) filter in a fixed frame, and publishes aprox_mpc_msgs/ObstacleArray. - Composable component registration plus a mutually-exclusive callback
group and teardown guard, so it is safe under a
MultiThreadedExecutor; node-only
log_levelparameter and a standalone launch file. - Contributors: Simone Contorno
Package Dependencies
System Dependencies
| Name |
|---|
| python3-yaml |
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| prox_mpc_benchmark | |
| prox_mpc_demo |
Launch files
Messages
Services
Plugins
Recent questions tagged prox_mpc_obstacle_tracker at Robotics Stack Exchange
|
prox_mpc_obstacle_tracker package from prox_mpc repoprox_mpc_benchmark prox_mpc_controller prox_mpc_core prox_mpc_demo prox_mpc_msgs prox_mpc_obstacle_tracker prox_mpc_test_models |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/simone-contorno/prox_mpc.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-28 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Simone Contorno
Authors
prox_mpc_obstacle_tracker
An in-house 2D-lidar dynamic-obstacle detector and tracker for ProxMPC.
A managed lifecycle node clusters a sensor_msgs/LaserScan, transforms the
cluster centroids into a fixed tracking frame, runs one IMM
(constant-velocity + constant-turn-rate) filter per object, and publishes the
confirmed tracks - including sampled predicted positions along each track’s
estimated arc - as a prox_mpc_msgs/ObstacleArray.
That feed is what prox_mpc_controller consumes for
predictive (dynamic) obstacle avoidance.
The detection and tracking math is written from scratch (Eigen only, no third-party tracker), so the package is license-clean and unit-testable without ROS. The design, algorithm, parameters, and interfaces are documented in doc/architecture.md.
Table of Contents
Key Features
-
Lifecycle node: managed
configure -> activate -> deactivate -> cleanup, with a signal-safe shutdown ladder in the standalone driver. - Self-contained pipeline: LaserScan -> planar points -> adjacency clusters -> tracking-frame centroids -> IMM (CV + CTRV) tracks with sampled predicted positions.
-
Multi-object tracking: gated greedy nearest-neighbour association, one
IMM filter per track (a constant-velocity Kalman filter and a
constant-turn-rate-and-velocity EKF run in parallel, blended by model
probability), and a birth/confirm/death lifecycle.
imm_enabled: falserestores the legacy single-CV path. -
Curved prediction feed: each published obstacle carries
prediction_stepspredicted positions atprediction_dtspacing (default 25 x 0.1 s = 2.5 s), so the controller can follow turning obstacles instead of a straight constant-velocity ray. - Wall rejection: a cluster-radius cap drops extended structure (walls) whose centroid would otherwise be tracked as a phantom fast-moving obstacle.
-
Pure core: the clustering and tracker are a ROS-free Eigen library
(
prox_mpc_obstacle_tracker_core) covered by GoogleTest.
Prerequisites
- ROS 2 Jazzy on Ubuntu 24.04.
- prox_mpc_msgs (workspace package).
-
Eigen3,rclcpp,rclcpp_components,rclcpp_lifecycle,lifecycle_msgs,sensor_msgs,geometry_msgs,tf2,tf2_ros(resolved byrosdep).
Build
colcon build --symlink-install --packages-select prox_mpc_msgs prox_mpc_obstacle_tracker
source install/setup.bash
Run
The standalone executable is a self-activating lifecycle node: it brings itself up
(configure -> activate), spins, and tears itself down on SIGINT/SIGTERM.
The bundled launch file loads config/obstacle_tracker.yaml
and wires the node-only logger level, with a params_file argument to override the
parameters:
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py \
params_file:=/path/to/custom.yaml
To run the executable directly instead of through the launch file:
ros2 run prox_mpc_obstacle_tracker obstacle_tracker \
--ros-args --params-file \
$(ros2 pkg prefix prox_mpc_obstacle_tracker)/share/prox_mpc_obstacle_tracker/config/obstacle_tracker.yaml
config/obstacle_tracker.yaml is the single source of truth for the parameters. Watch the output with:
ros2 topic echo /tracked_obstacles
In simulation the tracker is started automatically by the demo’s Nav2 launch with
predictive:=True (see
prox_mpc_demo/doc/nav2-simulation.md).
Interfaces
File truncated at 100 lines see the full file
Changelog for package prox_mpc_obstacle_tracker
1.0.0 (2026-07-28)
- Initial release: lifecycle node that clusters a 2D
LaserScan, associates clusters to an IMM (constant-velocity + constant-turn-rate) filter in a fixed frame, and publishes aprox_mpc_msgs/ObstacleArray. - Composable component registration plus a mutually-exclusive callback
group and teardown guard, so it is safe under a
MultiThreadedExecutor; node-only
log_levelparameter and a standalone launch file. - Contributors: Simone Contorno
Package Dependencies
System Dependencies
| Name |
|---|
| python3-yaml |
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| prox_mpc_benchmark | |
| prox_mpc_demo |
Launch files
Messages
Services
Plugins
Recent questions tagged prox_mpc_obstacle_tracker at Robotics Stack Exchange
|
prox_mpc_obstacle_tracker package from prox_mpc repoprox_mpc_benchmark prox_mpc_controller prox_mpc_core prox_mpc_demo prox_mpc_msgs prox_mpc_obstacle_tracker prox_mpc_test_models |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/simone-contorno/prox_mpc.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-28 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Simone Contorno
Authors
prox_mpc_obstacle_tracker
An in-house 2D-lidar dynamic-obstacle detector and tracker for ProxMPC.
A managed lifecycle node clusters a sensor_msgs/LaserScan, transforms the
cluster centroids into a fixed tracking frame, runs one IMM
(constant-velocity + constant-turn-rate) filter per object, and publishes the
confirmed tracks - including sampled predicted positions along each track’s
estimated arc - as a prox_mpc_msgs/ObstacleArray.
That feed is what prox_mpc_controller consumes for
predictive (dynamic) obstacle avoidance.
The detection and tracking math is written from scratch (Eigen only, no third-party tracker), so the package is license-clean and unit-testable without ROS. The design, algorithm, parameters, and interfaces are documented in doc/architecture.md.
Table of Contents
Key Features
-
Lifecycle node: managed
configure -> activate -> deactivate -> cleanup, with a signal-safe shutdown ladder in the standalone driver. - Self-contained pipeline: LaserScan -> planar points -> adjacency clusters -> tracking-frame centroids -> IMM (CV + CTRV) tracks with sampled predicted positions.
-
Multi-object tracking: gated greedy nearest-neighbour association, one
IMM filter per track (a constant-velocity Kalman filter and a
constant-turn-rate-and-velocity EKF run in parallel, blended by model
probability), and a birth/confirm/death lifecycle.
imm_enabled: falserestores the legacy single-CV path. -
Curved prediction feed: each published obstacle carries
prediction_stepspredicted positions atprediction_dtspacing (default 25 x 0.1 s = 2.5 s), so the controller can follow turning obstacles instead of a straight constant-velocity ray. - Wall rejection: a cluster-radius cap drops extended structure (walls) whose centroid would otherwise be tracked as a phantom fast-moving obstacle.
-
Pure core: the clustering and tracker are a ROS-free Eigen library
(
prox_mpc_obstacle_tracker_core) covered by GoogleTest.
Prerequisites
- ROS 2 Jazzy on Ubuntu 24.04.
- prox_mpc_msgs (workspace package).
-
Eigen3,rclcpp,rclcpp_components,rclcpp_lifecycle,lifecycle_msgs,sensor_msgs,geometry_msgs,tf2,tf2_ros(resolved byrosdep).
Build
colcon build --symlink-install --packages-select prox_mpc_msgs prox_mpc_obstacle_tracker
source install/setup.bash
Run
The standalone executable is a self-activating lifecycle node: it brings itself up
(configure -> activate), spins, and tears itself down on SIGINT/SIGTERM.
The bundled launch file loads config/obstacle_tracker.yaml
and wires the node-only logger level, with a params_file argument to override the
parameters:
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py \
params_file:=/path/to/custom.yaml
To run the executable directly instead of through the launch file:
ros2 run prox_mpc_obstacle_tracker obstacle_tracker \
--ros-args --params-file \
$(ros2 pkg prefix prox_mpc_obstacle_tracker)/share/prox_mpc_obstacle_tracker/config/obstacle_tracker.yaml
config/obstacle_tracker.yaml is the single source of truth for the parameters. Watch the output with:
ros2 topic echo /tracked_obstacles
In simulation the tracker is started automatically by the demo’s Nav2 launch with
predictive:=True (see
prox_mpc_demo/doc/nav2-simulation.md).
Interfaces
File truncated at 100 lines see the full file
Changelog for package prox_mpc_obstacle_tracker
1.0.0 (2026-07-28)
- Initial release: lifecycle node that clusters a 2D
LaserScan, associates clusters to an IMM (constant-velocity + constant-turn-rate) filter in a fixed frame, and publishes aprox_mpc_msgs/ObstacleArray. - Composable component registration plus a mutually-exclusive callback
group and teardown guard, so it is safe under a
MultiThreadedExecutor; node-only
log_levelparameter and a standalone launch file. - Contributors: Simone Contorno
Package Dependencies
System Dependencies
| Name |
|---|
| python3-yaml |
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| prox_mpc_benchmark | |
| prox_mpc_demo |
Launch files
Messages
Services
Plugins
Recent questions tagged prox_mpc_obstacle_tracker at Robotics Stack Exchange
|
prox_mpc_obstacle_tracker package from prox_mpc repoprox_mpc_benchmark prox_mpc_controller prox_mpc_core prox_mpc_demo prox_mpc_msgs prox_mpc_obstacle_tracker prox_mpc_test_models |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/simone-contorno/prox_mpc.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-28 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Simone Contorno
Authors
prox_mpc_obstacle_tracker
An in-house 2D-lidar dynamic-obstacle detector and tracker for ProxMPC.
A managed lifecycle node clusters a sensor_msgs/LaserScan, transforms the
cluster centroids into a fixed tracking frame, runs one IMM
(constant-velocity + constant-turn-rate) filter per object, and publishes the
confirmed tracks - including sampled predicted positions along each track’s
estimated arc - as a prox_mpc_msgs/ObstacleArray.
That feed is what prox_mpc_controller consumes for
predictive (dynamic) obstacle avoidance.
The detection and tracking math is written from scratch (Eigen only, no third-party tracker), so the package is license-clean and unit-testable without ROS. The design, algorithm, parameters, and interfaces are documented in doc/architecture.md.
Table of Contents
Key Features
-
Lifecycle node: managed
configure -> activate -> deactivate -> cleanup, with a signal-safe shutdown ladder in the standalone driver. - Self-contained pipeline: LaserScan -> planar points -> adjacency clusters -> tracking-frame centroids -> IMM (CV + CTRV) tracks with sampled predicted positions.
-
Multi-object tracking: gated greedy nearest-neighbour association, one
IMM filter per track (a constant-velocity Kalman filter and a
constant-turn-rate-and-velocity EKF run in parallel, blended by model
probability), and a birth/confirm/death lifecycle.
imm_enabled: falserestores the legacy single-CV path. -
Curved prediction feed: each published obstacle carries
prediction_stepspredicted positions atprediction_dtspacing (default 25 x 0.1 s = 2.5 s), so the controller can follow turning obstacles instead of a straight constant-velocity ray. - Wall rejection: a cluster-radius cap drops extended structure (walls) whose centroid would otherwise be tracked as a phantom fast-moving obstacle.
-
Pure core: the clustering and tracker are a ROS-free Eigen library
(
prox_mpc_obstacle_tracker_core) covered by GoogleTest.
Prerequisites
- ROS 2 Jazzy on Ubuntu 24.04.
- prox_mpc_msgs (workspace package).
-
Eigen3,rclcpp,rclcpp_components,rclcpp_lifecycle,lifecycle_msgs,sensor_msgs,geometry_msgs,tf2,tf2_ros(resolved byrosdep).
Build
colcon build --symlink-install --packages-select prox_mpc_msgs prox_mpc_obstacle_tracker
source install/setup.bash
Run
The standalone executable is a self-activating lifecycle node: it brings itself up
(configure -> activate), spins, and tears itself down on SIGINT/SIGTERM.
The bundled launch file loads config/obstacle_tracker.yaml
and wires the node-only logger level, with a params_file argument to override the
parameters:
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py \
params_file:=/path/to/custom.yaml
To run the executable directly instead of through the launch file:
ros2 run prox_mpc_obstacle_tracker obstacle_tracker \
--ros-args --params-file \
$(ros2 pkg prefix prox_mpc_obstacle_tracker)/share/prox_mpc_obstacle_tracker/config/obstacle_tracker.yaml
config/obstacle_tracker.yaml is the single source of truth for the parameters. Watch the output with:
ros2 topic echo /tracked_obstacles
In simulation the tracker is started automatically by the demo’s Nav2 launch with
predictive:=True (see
prox_mpc_demo/doc/nav2-simulation.md).
Interfaces
File truncated at 100 lines see the full file
Changelog for package prox_mpc_obstacle_tracker
1.0.0 (2026-07-28)
- Initial release: lifecycle node that clusters a 2D
LaserScan, associates clusters to an IMM (constant-velocity + constant-turn-rate) filter in a fixed frame, and publishes aprox_mpc_msgs/ObstacleArray. - Composable component registration plus a mutually-exclusive callback
group and teardown guard, so it is safe under a
MultiThreadedExecutor; node-only
log_levelparameter and a standalone launch file. - Contributors: Simone Contorno
Package Dependencies
System Dependencies
| Name |
|---|
| python3-yaml |
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| prox_mpc_benchmark | |
| prox_mpc_demo |
Launch files
Messages
Services
Plugins
Recent questions tagged prox_mpc_obstacle_tracker at Robotics Stack Exchange
|
prox_mpc_obstacle_tracker package from prox_mpc repoprox_mpc_benchmark prox_mpc_controller prox_mpc_core prox_mpc_demo prox_mpc_msgs prox_mpc_obstacle_tracker prox_mpc_test_models |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/simone-contorno/prox_mpc.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-28 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Simone Contorno
Authors
prox_mpc_obstacle_tracker
An in-house 2D-lidar dynamic-obstacle detector and tracker for ProxMPC.
A managed lifecycle node clusters a sensor_msgs/LaserScan, transforms the
cluster centroids into a fixed tracking frame, runs one IMM
(constant-velocity + constant-turn-rate) filter per object, and publishes the
confirmed tracks - including sampled predicted positions along each track’s
estimated arc - as a prox_mpc_msgs/ObstacleArray.
That feed is what prox_mpc_controller consumes for
predictive (dynamic) obstacle avoidance.
The detection and tracking math is written from scratch (Eigen only, no third-party tracker), so the package is license-clean and unit-testable without ROS. The design, algorithm, parameters, and interfaces are documented in doc/architecture.md.
Table of Contents
Key Features
-
Lifecycle node: managed
configure -> activate -> deactivate -> cleanup, with a signal-safe shutdown ladder in the standalone driver. - Self-contained pipeline: LaserScan -> planar points -> adjacency clusters -> tracking-frame centroids -> IMM (CV + CTRV) tracks with sampled predicted positions.
-
Multi-object tracking: gated greedy nearest-neighbour association, one
IMM filter per track (a constant-velocity Kalman filter and a
constant-turn-rate-and-velocity EKF run in parallel, blended by model
probability), and a birth/confirm/death lifecycle.
imm_enabled: falserestores the legacy single-CV path. -
Curved prediction feed: each published obstacle carries
prediction_stepspredicted positions atprediction_dtspacing (default 25 x 0.1 s = 2.5 s), so the controller can follow turning obstacles instead of a straight constant-velocity ray. - Wall rejection: a cluster-radius cap drops extended structure (walls) whose centroid would otherwise be tracked as a phantom fast-moving obstacle.
-
Pure core: the clustering and tracker are a ROS-free Eigen library
(
prox_mpc_obstacle_tracker_core) covered by GoogleTest.
Prerequisites
- ROS 2 Jazzy on Ubuntu 24.04.
- prox_mpc_msgs (workspace package).
-
Eigen3,rclcpp,rclcpp_components,rclcpp_lifecycle,lifecycle_msgs,sensor_msgs,geometry_msgs,tf2,tf2_ros(resolved byrosdep).
Build
colcon build --symlink-install --packages-select prox_mpc_msgs prox_mpc_obstacle_tracker
source install/setup.bash
Run
The standalone executable is a self-activating lifecycle node: it brings itself up
(configure -> activate), spins, and tears itself down on SIGINT/SIGTERM.
The bundled launch file loads config/obstacle_tracker.yaml
and wires the node-only logger level, with a params_file argument to override the
parameters:
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py \
params_file:=/path/to/custom.yaml
To run the executable directly instead of through the launch file:
ros2 run prox_mpc_obstacle_tracker obstacle_tracker \
--ros-args --params-file \
$(ros2 pkg prefix prox_mpc_obstacle_tracker)/share/prox_mpc_obstacle_tracker/config/obstacle_tracker.yaml
config/obstacle_tracker.yaml is the single source of truth for the parameters. Watch the output with:
ros2 topic echo /tracked_obstacles
In simulation the tracker is started automatically by the demo’s Nav2 launch with
predictive:=True (see
prox_mpc_demo/doc/nav2-simulation.md).
Interfaces
File truncated at 100 lines see the full file
Changelog for package prox_mpc_obstacle_tracker
1.0.0 (2026-07-28)
- Initial release: lifecycle node that clusters a 2D
LaserScan, associates clusters to an IMM (constant-velocity + constant-turn-rate) filter in a fixed frame, and publishes aprox_mpc_msgs/ObstacleArray. - Composable component registration plus a mutually-exclusive callback
group and teardown guard, so it is safe under a
MultiThreadedExecutor; node-only
log_levelparameter and a standalone launch file. - Contributors: Simone Contorno
Package Dependencies
System Dependencies
| Name |
|---|
| python3-yaml |
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| prox_mpc_benchmark | |
| prox_mpc_demo |
Launch files
Messages
Services
Plugins
Recent questions tagged prox_mpc_obstacle_tracker at Robotics Stack Exchange
|
prox_mpc_obstacle_tracker package from prox_mpc repoprox_mpc_benchmark prox_mpc_controller prox_mpc_core prox_mpc_demo prox_mpc_msgs prox_mpc_obstacle_tracker prox_mpc_test_models |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/simone-contorno/prox_mpc.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-28 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Simone Contorno
Authors
prox_mpc_obstacle_tracker
An in-house 2D-lidar dynamic-obstacle detector and tracker for ProxMPC.
A managed lifecycle node clusters a sensor_msgs/LaserScan, transforms the
cluster centroids into a fixed tracking frame, runs one IMM
(constant-velocity + constant-turn-rate) filter per object, and publishes the
confirmed tracks - including sampled predicted positions along each track’s
estimated arc - as a prox_mpc_msgs/ObstacleArray.
That feed is what prox_mpc_controller consumes for
predictive (dynamic) obstacle avoidance.
The detection and tracking math is written from scratch (Eigen only, no third-party tracker), so the package is license-clean and unit-testable without ROS. The design, algorithm, parameters, and interfaces are documented in doc/architecture.md.
Table of Contents
Key Features
-
Lifecycle node: managed
configure -> activate -> deactivate -> cleanup, with a signal-safe shutdown ladder in the standalone driver. - Self-contained pipeline: LaserScan -> planar points -> adjacency clusters -> tracking-frame centroids -> IMM (CV + CTRV) tracks with sampled predicted positions.
-
Multi-object tracking: gated greedy nearest-neighbour association, one
IMM filter per track (a constant-velocity Kalman filter and a
constant-turn-rate-and-velocity EKF run in parallel, blended by model
probability), and a birth/confirm/death lifecycle.
imm_enabled: falserestores the legacy single-CV path. -
Curved prediction feed: each published obstacle carries
prediction_stepspredicted positions atprediction_dtspacing (default 25 x 0.1 s = 2.5 s), so the controller can follow turning obstacles instead of a straight constant-velocity ray. - Wall rejection: a cluster-radius cap drops extended structure (walls) whose centroid would otherwise be tracked as a phantom fast-moving obstacle.
-
Pure core: the clustering and tracker are a ROS-free Eigen library
(
prox_mpc_obstacle_tracker_core) covered by GoogleTest.
Prerequisites
- ROS 2 Jazzy on Ubuntu 24.04.
- prox_mpc_msgs (workspace package).
-
Eigen3,rclcpp,rclcpp_components,rclcpp_lifecycle,lifecycle_msgs,sensor_msgs,geometry_msgs,tf2,tf2_ros(resolved byrosdep).
Build
colcon build --symlink-install --packages-select prox_mpc_msgs prox_mpc_obstacle_tracker
source install/setup.bash
Run
The standalone executable is a self-activating lifecycle node: it brings itself up
(configure -> activate), spins, and tears itself down on SIGINT/SIGTERM.
The bundled launch file loads config/obstacle_tracker.yaml
and wires the node-only logger level, with a params_file argument to override the
parameters:
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py \
params_file:=/path/to/custom.yaml
To run the executable directly instead of through the launch file:
ros2 run prox_mpc_obstacle_tracker obstacle_tracker \
--ros-args --params-file \
$(ros2 pkg prefix prox_mpc_obstacle_tracker)/share/prox_mpc_obstacle_tracker/config/obstacle_tracker.yaml
config/obstacle_tracker.yaml is the single source of truth for the parameters. Watch the output with:
ros2 topic echo /tracked_obstacles
In simulation the tracker is started automatically by the demo’s Nav2 launch with
predictive:=True (see
prox_mpc_demo/doc/nav2-simulation.md).
Interfaces
File truncated at 100 lines see the full file
Changelog for package prox_mpc_obstacle_tracker
1.0.0 (2026-07-28)
- Initial release: lifecycle node that clusters a 2D
LaserScan, associates clusters to an IMM (constant-velocity + constant-turn-rate) filter in a fixed frame, and publishes aprox_mpc_msgs/ObstacleArray. - Composable component registration plus a mutually-exclusive callback
group and teardown guard, so it is safe under a
MultiThreadedExecutor; node-only
log_levelparameter and a standalone launch file. - Contributors: Simone Contorno
Package Dependencies
System Dependencies
| Name |
|---|
| python3-yaml |
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| prox_mpc_benchmark | |
| prox_mpc_demo |
Launch files
Messages
Services
Plugins
Recent questions tagged prox_mpc_obstacle_tracker at Robotics Stack Exchange
|
prox_mpc_obstacle_tracker package from prox_mpc repoprox_mpc_benchmark prox_mpc_controller prox_mpc_core prox_mpc_demo prox_mpc_msgs prox_mpc_obstacle_tracker prox_mpc_test_models |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/simone-contorno/prox_mpc.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-28 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Simone Contorno
Authors
prox_mpc_obstacle_tracker
An in-house 2D-lidar dynamic-obstacle detector and tracker for ProxMPC.
A managed lifecycle node clusters a sensor_msgs/LaserScan, transforms the
cluster centroids into a fixed tracking frame, runs one IMM
(constant-velocity + constant-turn-rate) filter per object, and publishes the
confirmed tracks - including sampled predicted positions along each track’s
estimated arc - as a prox_mpc_msgs/ObstacleArray.
That feed is what prox_mpc_controller consumes for
predictive (dynamic) obstacle avoidance.
The detection and tracking math is written from scratch (Eigen only, no third-party tracker), so the package is license-clean and unit-testable without ROS. The design, algorithm, parameters, and interfaces are documented in doc/architecture.md.
Table of Contents
Key Features
-
Lifecycle node: managed
configure -> activate -> deactivate -> cleanup, with a signal-safe shutdown ladder in the standalone driver. - Self-contained pipeline: LaserScan -> planar points -> adjacency clusters -> tracking-frame centroids -> IMM (CV + CTRV) tracks with sampled predicted positions.
-
Multi-object tracking: gated greedy nearest-neighbour association, one
IMM filter per track (a constant-velocity Kalman filter and a
constant-turn-rate-and-velocity EKF run in parallel, blended by model
probability), and a birth/confirm/death lifecycle.
imm_enabled: falserestores the legacy single-CV path. -
Curved prediction feed: each published obstacle carries
prediction_stepspredicted positions atprediction_dtspacing (default 25 x 0.1 s = 2.5 s), so the controller can follow turning obstacles instead of a straight constant-velocity ray. - Wall rejection: a cluster-radius cap drops extended structure (walls) whose centroid would otherwise be tracked as a phantom fast-moving obstacle.
-
Pure core: the clustering and tracker are a ROS-free Eigen library
(
prox_mpc_obstacle_tracker_core) covered by GoogleTest.
Prerequisites
- ROS 2 Jazzy on Ubuntu 24.04.
- prox_mpc_msgs (workspace package).
-
Eigen3,rclcpp,rclcpp_components,rclcpp_lifecycle,lifecycle_msgs,sensor_msgs,geometry_msgs,tf2,tf2_ros(resolved byrosdep).
Build
colcon build --symlink-install --packages-select prox_mpc_msgs prox_mpc_obstacle_tracker
source install/setup.bash
Run
The standalone executable is a self-activating lifecycle node: it brings itself up
(configure -> activate), spins, and tears itself down on SIGINT/SIGTERM.
The bundled launch file loads config/obstacle_tracker.yaml
and wires the node-only logger level, with a params_file argument to override the
parameters:
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py \
params_file:=/path/to/custom.yaml
To run the executable directly instead of through the launch file:
ros2 run prox_mpc_obstacle_tracker obstacle_tracker \
--ros-args --params-file \
$(ros2 pkg prefix prox_mpc_obstacle_tracker)/share/prox_mpc_obstacle_tracker/config/obstacle_tracker.yaml
config/obstacle_tracker.yaml is the single source of truth for the parameters. Watch the output with:
ros2 topic echo /tracked_obstacles
In simulation the tracker is started automatically by the demo’s Nav2 launch with
predictive:=True (see
prox_mpc_demo/doc/nav2-simulation.md).
Interfaces
File truncated at 100 lines see the full file
Changelog for package prox_mpc_obstacle_tracker
1.0.0 (2026-07-28)
- Initial release: lifecycle node that clusters a 2D
LaserScan, associates clusters to an IMM (constant-velocity + constant-turn-rate) filter in a fixed frame, and publishes aprox_mpc_msgs/ObstacleArray. - Composable component registration plus a mutually-exclusive callback
group and teardown guard, so it is safe under a
MultiThreadedExecutor; node-only
log_levelparameter and a standalone launch file. - Contributors: Simone Contorno
Package Dependencies
System Dependencies
| Name |
|---|
| python3-yaml |
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| prox_mpc_benchmark | |
| prox_mpc_demo |
Launch files
Messages
Services
Plugins
Recent questions tagged prox_mpc_obstacle_tracker at Robotics Stack Exchange
|
prox_mpc_obstacle_tracker package from prox_mpc repoprox_mpc_benchmark prox_mpc_controller prox_mpc_core prox_mpc_demo prox_mpc_msgs prox_mpc_obstacle_tracker prox_mpc_test_models |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/simone-contorno/prox_mpc.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-28 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Simone Contorno
Authors
prox_mpc_obstacle_tracker
An in-house 2D-lidar dynamic-obstacle detector and tracker for ProxMPC.
A managed lifecycle node clusters a sensor_msgs/LaserScan, transforms the
cluster centroids into a fixed tracking frame, runs one IMM
(constant-velocity + constant-turn-rate) filter per object, and publishes the
confirmed tracks - including sampled predicted positions along each track’s
estimated arc - as a prox_mpc_msgs/ObstacleArray.
That feed is what prox_mpc_controller consumes for
predictive (dynamic) obstacle avoidance.
The detection and tracking math is written from scratch (Eigen only, no third-party tracker), so the package is license-clean and unit-testable without ROS. The design, algorithm, parameters, and interfaces are documented in doc/architecture.md.
Table of Contents
Key Features
-
Lifecycle node: managed
configure -> activate -> deactivate -> cleanup, with a signal-safe shutdown ladder in the standalone driver. - Self-contained pipeline: LaserScan -> planar points -> adjacency clusters -> tracking-frame centroids -> IMM (CV + CTRV) tracks with sampled predicted positions.
-
Multi-object tracking: gated greedy nearest-neighbour association, one
IMM filter per track (a constant-velocity Kalman filter and a
constant-turn-rate-and-velocity EKF run in parallel, blended by model
probability), and a birth/confirm/death lifecycle.
imm_enabled: falserestores the legacy single-CV path. -
Curved prediction feed: each published obstacle carries
prediction_stepspredicted positions atprediction_dtspacing (default 25 x 0.1 s = 2.5 s), so the controller can follow turning obstacles instead of a straight constant-velocity ray. - Wall rejection: a cluster-radius cap drops extended structure (walls) whose centroid would otherwise be tracked as a phantom fast-moving obstacle.
-
Pure core: the clustering and tracker are a ROS-free Eigen library
(
prox_mpc_obstacle_tracker_core) covered by GoogleTest.
Prerequisites
- ROS 2 Jazzy on Ubuntu 24.04.
- prox_mpc_msgs (workspace package).
-
Eigen3,rclcpp,rclcpp_components,rclcpp_lifecycle,lifecycle_msgs,sensor_msgs,geometry_msgs,tf2,tf2_ros(resolved byrosdep).
Build
colcon build --symlink-install --packages-select prox_mpc_msgs prox_mpc_obstacle_tracker
source install/setup.bash
Run
The standalone executable is a self-activating lifecycle node: it brings itself up
(configure -> activate), spins, and tears itself down on SIGINT/SIGTERM.
The bundled launch file loads config/obstacle_tracker.yaml
and wires the node-only logger level, with a params_file argument to override the
parameters:
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py
ros2 launch prox_mpc_obstacle_tracker obstacle_tracker.launch.py \
params_file:=/path/to/custom.yaml
To run the executable directly instead of through the launch file:
ros2 run prox_mpc_obstacle_tracker obstacle_tracker \
--ros-args --params-file \
$(ros2 pkg prefix prox_mpc_obstacle_tracker)/share/prox_mpc_obstacle_tracker/config/obstacle_tracker.yaml
config/obstacle_tracker.yaml is the single source of truth for the parameters. Watch the output with:
ros2 topic echo /tracked_obstacles
In simulation the tracker is started automatically by the demo’s Nav2 launch with
predictive:=True (see
prox_mpc_demo/doc/nav2-simulation.md).
Interfaces
File truncated at 100 lines see the full file
Changelog for package prox_mpc_obstacle_tracker
1.0.0 (2026-07-28)
- Initial release: lifecycle node that clusters a 2D
LaserScan, associates clusters to an IMM (constant-velocity + constant-turn-rate) filter in a fixed frame, and publishes aprox_mpc_msgs/ObstacleArray. - Composable component registration plus a mutually-exclusive callback
group and teardown guard, so it is safe under a
MultiThreadedExecutor; node-only
log_levelparameter and a standalone launch file. - Contributors: Simone Contorno
Package Dependencies
System Dependencies
| Name |
|---|
| python3-yaml |
| eigen |
Dependant Packages
| Name | Deps |
|---|---|
| prox_mpc_benchmark | |
| prox_mpc_demo |