feat(jetson): dynamic obstacle tracking — LIDAR motion detection, Kalman tracking, trajectory prediction, Nav2 costmap (#176) #181
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "sl-perception/issue-176-dynamic-obstacles"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
TrackedObject.msg(id, pose, velocity, predicted_path, confidence) +MovingObjectArray.msg[px,py,vx,vy], Joseph-form update, non-mutatingpredict_horizon()(2.5 s @ 0.5 s steps)scipy.optimize.linear_sum_assignment), TENTATIVE→CONFIRMED lifecycle, miss-prune/saltybot/moving_objects+ RViz MarkerArray/saltybot/dynamic_obs_cloud) for Nav2 ObstacleLayerPerformance
Test plan
pytest test/test_dynamic_obstacles.py) — no ROS2 or hardware requiredros2 topic hz /saltybot/moving_objects≥ 9 Hz/saltybot/dynamic_obs_cloudros2 topic delay /saltybot/moving_objects< 50 ms🤖 Generated with Claude Code
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>