sl-perception
b74307c58a
feat: Nav2 AMCL integration with VESC odometry + LiDAR (Issue #655)
AMCL-based autonomous navigation on pre-built static maps, wired to
VESC CAN differential-drive odometry (/odom, Issue #646) and RPLiDAR
(/scan) as the primary sensor sources.
New files (saltybot_nav2_slam):
- config/amcl_nav2_params.yaml — complete Nav2 + AMCL parameter file
with inline global/local costmap configs (required by nav2_bringup):
· AMCL: DifferentialMotionModel, 500–3000 particles, z-weights=1.0,
odom_frame=/odom, scan_topic=/scan
· Global costmap: static_layer + obstacle_layer (LiDAR) +
inflation_layer (0.55m radius)
· Local costmap: 4m rolling window, obstacle_layer (LiDAR) +
inflation_layer, global_frame=odom
· DWB controller: 1.0 m/s max, diff-drive constrained (vy=0)
· NavFn A* planner
· Recovery: spin + backup + wait
· Lifecycle managers for localization and navigation
- launch/nav2_amcl_bringup.launch.py — orchestrates:
1. sensors.launch.py (RealSense + RPLIDAR, conditional)
2. odometry_bridge.launch.py (VESC CAN → /odom)
3. nav2_bringup localization_launch.py (map_server + AMCL)
4. nav2_bringup navigation_launch.py (full nav stack)
Exposes: map, use_sim_time, autostart, params_file, include_sensors
- maps/saltybot_map.yaml — placeholder map descriptor (0.05m/cell)
- maps/saltybot_map.pgm — 200×200 P5 PGM, all free space (10m×10m)
- test/test_nav2_amcl.py — 38 unit tests (no ROS2 required):
params structure, z-weight sum, costmap layers, DWB/NavFn validity,
recovery behaviors, PGM format, launch file syntax checks
Updated:
- saltybot_bringup/launch/nav2.launch.py — adds nav_mode argument:
nav_mode:=slam (default, existing RTAB-Map behaviour unchanged)
nav_mode:=amcl (new, delegates to nav2_amcl_bringup.launch.py)
- saltybot_nav2_slam/setup.py — installs new launch, config, maps
- saltybot_nav2_slam/package.xml — adds nav2_amcl, nav2_map_server,
nav2_behaviors, dwb_core, nav2_navfn_planner exec_depends
All 58 tests pass (38 new + 20 from Issue #646).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 11:39:08 -04:00
..
2026-03-02 12:22:58 -05:00
2026-03-03 18:17:41 -05:00
2026-03-02 09:38:46 -05:00
2026-03-02 11:07:35 -05:00
2026-03-02 11:07:35 -05:00
2026-03-15 14:37:22 -04:00
2026-03-05 08:53:43 -05:00
2026-03-07 10:03:31 -05:00
2026-03-15 10:12:40 -04:00
2026-03-04 22:40:40 -05:00
2026-03-03 00:46:12 -05:00
2026-03-02 12:48:16 -05:00
2026-03-04 12:17:56 -05:00
2026-03-03 00:41:39 -05:00
2026-03-17 11:39:08 -04:00
2026-03-02 08:38:24 -05:00
2026-02-28 22:59:13 -05:00
2026-03-06 10:25:04 -05:00
2026-03-02 20:45:21 -05:00
2026-03-02 12:01:00 -05:00
2026-03-02 12:11:37 -05:00
2026-03-05 12:09:07 -05:00
2026-03-05 14:48:46 -05:00
2026-03-07 09:52:18 -05:00
2026-03-05 14:42:49 -05:00
2026-03-05 09:06:18 -05:00
2026-03-05 17:08:48 -05:00
2026-03-02 10:19:22 -05:00
2026-03-02 10:44:32 -05:00
2026-03-02 10:44:32 -05:00
2026-03-02 10:39:37 -05:00
2026-03-02 10:39:37 -05:00
2026-03-05 09:19:31 -05:00
2026-03-05 08:53:56 -05:00
2026-03-05 12:09:07 -05:00
2026-03-04 12:44:33 -05:00
2026-03-04 13:12:47 -05:00
2026-03-02 09:36:17 -05:00
2026-03-02 09:36:17 -05:00
2026-03-01 00:48:03 -05:00
2026-03-05 08:53:56 -05:00
2026-03-05 09:05:55 -05:00
2026-03-05 09:19:43 -05:00
2026-03-14 10:34:06 -04:00
2026-03-03 12:47:22 -05:00
2026-03-03 12:47:22 -05:00
2026-03-14 10:28:17 -04:00
2026-03-14 11:47:01 -04:00
2026-03-02 17:35:30 -05:00
2026-03-05 08:55:41 -05:00
2026-03-03 17:29:14 -05:00
2026-03-05 14:46:33 -05:00
2026-03-02 08:38:49 -05:00
2026-03-06 23:02:57 -05:00
2026-03-02 11:57:17 -05:00
2026-03-04 23:33:18 -05:00
2026-03-17 11:39:08 -04:00
2026-03-14 15:02:26 -04:00
2026-03-05 09:05:16 -05:00
2026-03-02 10:36:21 -05:00
2026-03-02 11:17:19 -05:00
2026-03-05 12:14:50 -05:00
2026-03-05 12:14:50 -05:00
2026-03-15 10:09:23 -04:00
2026-03-05 09:21:30 -05:00
2026-03-02 11:50:13 -05:00
2026-03-05 17:04:27 -05:00
2026-03-01 00:52:54 -05:00
2026-03-04 08:44:51 -05:00
2026-03-02 08:41:40 -05:00
2026-03-05 12:10:33 -05:00
2026-03-05 09:04:10 -05:00
2026-03-02 12:12:57 -05:00
2026-03-02 11:39:21 -05:00
2026-03-02 11:39:21 -05:00
2026-03-14 14:59:41 -04:00
2026-03-05 11:09:41 -05:00
2026-03-07 09:56:19 -05:00
2026-03-02 21:37:08 -05:00
2026-03-17 09:54:19 -04:00
2026-03-05 14:34:37 -05:00
2026-03-03 06:47:45 -05:00
2026-03-04 23:33:55 -05:00
2026-03-01 01:07:06 -05:00
2026-03-02 09:03:28 -05:00
2026-03-14 11:54:52 -04:00
2026-03-02 09:59:53 -05:00
2026-03-03 16:48:17 -05:00
2026-03-01 01:15:13 -05:00
2026-03-01 01:15:13 -05:00
2026-03-05 19:25:23 -05:00
2026-03-05 11:09:32 -05:00
2026-03-04 13:14:44 -05:00
2026-03-04 13:32:20 -05:00
2026-03-02 12:05:24 -05:00
2026-03-05 09:04:49 -05:00
2026-03-05 09:04:49 -05:00
2026-03-05 14:34:37 -05:00
2026-03-01 23:15:00 -05:00
2026-03-01 23:56:05 -05:00
2026-03-02 08:50:22 -05:00
2026-03-01 23:59:10 -05:00
2026-03-05 09:19:21 -05:00
2026-03-01 01:06:50 -05:00
2026-03-02 11:14:10 -05:00
2026-02-28 23:19:23 -05:00
2026-03-15 16:36:04 -04:00
2026-03-02 09:14:37 -05:00
2026-03-02 10:04:36 -05:00
2026-03-06 16:43:21 -05:00
2026-03-02 10:04:36 -05:00
2026-03-06 23:10:42 -05:00
2026-03-02 11:21:18 -05:00
2026-03-05 08:53:55 -05:00
2026-03-05 19:25:23 -05:00
2026-03-04 23:32:21 -05:00
2026-03-01 23:25:08 -05:00
2026-03-14 15:03:53 -04:00
2026-03-14 15:03:53 -04:00
2026-03-15 10:08:19 -04:00
2026-03-14 11:55:43 -04:00
2026-03-15 14:44:21 -04:00
2026-03-15 14:44:21 -04:00
2026-03-15 10:08:19 -04:00
2026-03-14 12:15:12 -04:00
2026-03-03 00:23:53 -05:00
2026-03-17 09:47:57 -04:00
2026-03-17 09:53:09 -04:00
2026-03-14 12:21:58 -04:00
2026-03-04 22:40:40 -05:00
2026-03-05 17:05:02 -05:00
2026-03-02 17:29:03 -05:00
2026-03-05 09:20:42 -05:00
2026-03-05 09:20:42 -05:00