Implements real-time moving obstacle detection, Kalman tracking, trajectory
prediction, and Nav2 costmap integration at 10 Hz / <50ms latency:
saltybot_dynamic_obs_msgs (ament_cmake):
• TrackedObject.msg — id, PoseWithCovariance, velocity, predicted_path,
predicted_times, speed, confidence, age, hits
• MovingObjectArray.msg — TrackedObject[], active_count, tentative_count,
detector_latency_ms
saltybot_dynamic_obstacles (ament_python):
• object_detector.py — LIDAR background subtraction (EMA occupancy grid),
foreground dilation + scipy connected-component
clustering → Detection list
• kalman_tracker.py — CV Kalman filter, state [px,py,vx,vy], Joseph-form
covariance update, predict_horizon() (non-mutating)
• tracker_manager.py — up to 20 tracks, Hungarian assignment
(scipy.optimize.linear_sum_assignment), TENTATIVE→
CONFIRMED lifecycle, miss-prune
• dynamic_obs_node.py — 10 Hz timer: detect→track→publish
/saltybot/moving_objects + MarkerArray viz
• costmap_layer_node.py — predicted paths → PointCloud2 inflation smear
→ /saltybot/dynamic_obs_cloud for Nav2 ObstacleLayer
• launch/dynamic_obstacles.launch.py + config/dynamic_obstacles_params.yaml
• test/test_dynamic_obstacles.py — 27 unit tests (27/27 pass, no ROS2 needed)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
33 lines
1.0 KiB
Python
33 lines
1.0 KiB
Python
from setuptools import setup, find_packages
|
|
from glob import glob
|
|
|
|
package_name = 'saltybot_dynamic_obstacles'
|
|
|
|
setup(
|
|
name=package_name,
|
|
version='0.1.0',
|
|
packages=find_packages(exclude=['test']),
|
|
data_files=[
|
|
('share/ament_index/resource_index/packages',
|
|
['resource/' + package_name]),
|
|
('share/' + package_name, ['package.xml']),
|
|
('share/' + package_name + '/launch',
|
|
glob('launch/*.launch.py')),
|
|
('share/' + package_name + '/config',
|
|
glob('config/*.yaml')),
|
|
],
|
|
install_requires=['setuptools'],
|
|
zip_safe=True,
|
|
maintainer='SaltyLab',
|
|
maintainer_email='robot@saltylab.local',
|
|
description='Dynamic obstacle tracking: LIDAR motion detection, Kalman tracking, Nav2 costmap',
|
|
license='MIT',
|
|
tests_require=['pytest'],
|
|
entry_points={
|
|
'console_scripts': [
|
|
'dynamic_obs_tracker = saltybot_dynamic_obstacles.dynamic_obs_node:main',
|
|
'dynamic_obs_costmap = saltybot_dynamic_obstacles.costmap_layer_node:main',
|
|
],
|
|
},
|
|
)
|