feat: SLAM stack update for Jetson Orin Nano Super (67 TOPS, JetPack 6) #36

Merged
seb merged 1 commits from sl-perception/orin-slam-update into main 2026-02-28 21:58:07 -05:00
Collaborator

Summary

Platform upgrade: Jetson Nano 4GB → Orin Nano Super 8GB (67 TOPS, JetPack 6, Ubuntu 22.04). All Nano-era constraints removed.

Changes

jetson/Dockerfile

  • Base: l4t-jetpack:r36.2.0 (JetPack 6 / CUDA 12.x)
  • ROS2 Humble via native apt on Ubuntu 22.04 (no ARM64 workarounds)
  • Added ros-humble-rtabmap-ros as primary SLAM
  • Added ros-humble-v4l2-camera for future 4× IMX219 CSI cameras (Phase 2c)

New: launch/slam_rtabmap.launch.py

  • RTAB-Map entry point (replaces slam_toolbox as docker-compose default)
  • subscribe_scan (RPLIDAR) + subscribe_rgbd (D435i depth) fusion
  • Outputs /rtabmap/map, /rtabmap/cloud_map (3D), /rtabmap/odom

New: config/rtabmap_params.yaml

  • DetectionRate 10Hz (was 2Hz), MaxFeatures 1000 (was 400)
  • Grid/3D true (3D point cloud enabled), TimeThr 0 (no limit)
  • Unlimited short-term memory (8GB RAM)

Updated configs

  • realsense_d435i.yaml: 848×480×30fps, pointcloud.enable: true
  • slam_toolbox_params.yaml: 10Hz rate, 1s map interval (kept as fallback)

SLAM-SETUP-PLAN.md

  • Full rewrite for Orin: new arch diagram, Phase 2c IMX219 surround vision plan, 25W power budget

docker-compose.yml

  • Image tag: jetson-orin, default command: slam_rtabmap.launch.py

Phase 2c preview (pending hardware)

4× IMX219 160° CSI cameras (front/right/rear/left, 90° intervals) → panoramic stitching + person tracking via TensorRT YOLOv8.

## Summary Platform upgrade: Jetson Nano 4GB → **Orin Nano Super 8GB** (67 TOPS, JetPack 6, Ubuntu 22.04). All Nano-era constraints removed. ## Changes ### `jetson/Dockerfile` - Base: `l4t-jetpack:r36.2.0` (JetPack 6 / CUDA 12.x) - ROS2 Humble via native apt on Ubuntu 22.04 (no ARM64 workarounds) - Added `ros-humble-rtabmap-ros` as primary SLAM - Added `ros-humble-v4l2-camera` for future 4× IMX219 CSI cameras (Phase 2c) ### New: `launch/slam_rtabmap.launch.py` - RTAB-Map entry point (replaces slam_toolbox as docker-compose default) - subscribe_scan (RPLIDAR) + subscribe_rgbd (D435i depth) fusion - Outputs `/rtabmap/map`, `/rtabmap/cloud_map` (3D), `/rtabmap/odom` ### New: `config/rtabmap_params.yaml` - DetectionRate **10Hz** (was 2Hz), MaxFeatures **1000** (was 400) - Grid/3D **true** (3D point cloud enabled), TimeThr **0** (no limit) - Unlimited short-term memory (8GB RAM) ### Updated configs - `realsense_d435i.yaml`: **848×480×30fps**, `pointcloud.enable: true` - `slam_toolbox_params.yaml`: 10Hz rate, 1s map interval (kept as fallback) ### `SLAM-SETUP-PLAN.md` - Full rewrite for Orin: new arch diagram, Phase 2c IMX219 surround vision plan, 25W power budget ### `docker-compose.yml` - Image tag: `jetson-orin`, default command: `slam_rtabmap.launch.py` ## Phase 2c preview (pending hardware) 4× IMX219 160° CSI cameras (front/right/rear/left, 90° intervals) → panoramic stitching + person tracking via TensorRT YOLOv8.
sl-perception added 2 commits 2026-02-28 21:14:23 -05:00
Adds mode_manager.c/h: three operating modes selected by RC CH6 (3-pos
switch), smoothly interpolated over ~500ms to prevent jerky transitions.

Modes:
  RC_MANUAL   (blend=0.0) — RC CH4 steer + CH3 speed bias; balance PID active
  RC_ASSISTED (blend=0.5) — 50/50 blend of RC and Jetson autonomous commands
  AUTONOMOUS  (blend=1.0) — Jetson steer only; RC CH5 still kills motors

Key design:
- Single `blend` float (0=RC, 1=auto) drives all lerp; MANUAL→AUTO takes
  500ms, adjacent steps take ~250ms
- CH6 thresholds: <=600=MANUAL, >=1200=AUTONOMOUS, else ASSISTED
- CH4/CH3 read with ±30-count deadband around CRSF center (992)
- RC speed bias (CH3, ±300 counts) added to bal.motor_cmd AFTER PID
- RC CH5 kill: if rc_alive && !crsf_state.armed → disarm, regardless of mode
- Jetson steer fed via mode_manager_set_auto_cmd() → blended in get_steer()
- Telemetry: new "md" field (0/1/2) in USB JSON stream
- mode_manager_set_auto_cmd() API ready for Jetson serial bridge integration

config.h: CRSF channel indices, deadband, speed-bias max, blend timing.
Safe on USB-only build: CRSF stub keeps last_rx_ms=0 → rc_alive=false
→ RC inputs = 0, mode stays RC_MANUAL, CH5 kill never fires.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Platform upgrade: Jetson Nano 4GB → Orin Nano Super 8GB (March 1, 2026)
All Nano-era constraints removed — power/rate/resolution limits obsolete.

Dockerfile: l4t-jetpack:r36.2.0 (JetPack 6 / Ubuntu 22.04 / CUDA 12.x),
  ROS2 Humble via native apt, added ros-humble-rtabmap-ros,
  ros-humble-v4l2-camera for future IMX219 CSI (Phase 2c)

New: slam_rtabmap.launch.py — Orin primary SLAM entry point
  RTAB-Map with subscribe_scan (RPLIDAR) + subscribe_rgbd (D435i)
  Replaces slam_toolbox as docker-compose default

New: config/rtabmap_params.yaml — Orin-optimized
  DetectionRate 10Hz, MaxFeatures 1000, Grid/3D true,
  TimeThr 0 (no limit), Mem/STMSize 0 (unlimited)

Updated: config/realsense_d435i.yaml — 848x480x30, pointcloud enabled
Updated: config/slam_toolbox_params.yaml — 10Hz rate, 1s map interval
Updated: SLAM-SETUP-PLAN.md — full rewrite for Orin: arch diagram,
  Phase 2c IMX219 plan (4x 160° CSI surround), 25W power budget

docker-compose.yml: image tag jetson-orin, default → slam_rtabmap.launch.py

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Owner

Merge conflicts with main after PRs #31/#33/#34 landed. Please rebase on latest main and resolve conflicts in src/main.c and src/mode_manager.c.

Merge conflicts with main after PRs #31/#33/#34 landed. Please rebase on latest main and resolve conflicts in `src/main.c` and `src/mode_manager.c`.
sl-perception force-pushed sl-perception/orin-slam-update from 6b798cc890 to c5d6a72d39 2026-02-28 21:46:40 -05:00 Compare
seb approved these changes 2026-02-28 21:57:58 -05:00
seb left a comment
Owner

Flash-tested all 5 PRs together. Builds, streams, no conflicts.

Flash-tested all 5 PRs together. Builds, streams, no conflicts.
seb merged commit 2a12aac86f into main 2026-02-28 21:58:07 -05:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: seb/saltylab-firmware#36
No description provided.