2025年6月5日 星期四

Jetson + ROS 2 上部署 Navigation2 (Nav2) 導航系統

針對 Jetson + ROS 2 上部署 Navigation2 (Nav2) 導航系統 的完整流程,

包含 SLAM 建圖、地圖儲存、定位(AMCL)、路徑規劃與移動控制。


🧰 環境需求

硬體:

  • Jetson Nano / Xavier / Orin 系列

  • 雷射雷達(如 RPLIDAR、Hokuyo)

  • 底盤驅動(支援 cmd_vel 控制)

  • IMU(建議,有助於定位穩定)

軟體:

  • ROS 2 Foxy / Humble / Iron(建議使用 LTS 版本)

  • navigation2, slam_toolbox, robot_state_publisher, rviz2


🔁 部署流程總覽

css
[SLAM建圖][儲存地圖][AMCL定位][Nav2導航][移動控制]

🔧 1. 安裝套件

bash
sudo apt update sudo apt install ros-humble-navigation2 ros-humble-nav2-bringup \ ros-humble-slam-toolbox ros-humble-map-server \ ros-humble-amcl ros-humble-rviz2

📌 2. 啟動 SLAM 建圖

建立啟動檔(如 slam_launch.py

python
from launch import LaunchDescription from launch_ros.actions import Node def generate_launch_description(): return LaunchDescription([ Node( package='slam_toolbox', executable='sync_slam_toolbox_node', name='slam_toolbox', parameters=[{'use_sim_time': False}], output='screen' ), Node( package='rviz2', executable='rviz2', name='rviz2', arguments=['-d', '/path/to/your/slam_config.rviz'] ) ])

執行:

bash
ros2 launch your_package slam_launch.py

🟢 此時在 RViz 中可以看到地圖隨著機器人移動而繪製。


💾 3. 儲存地圖

bash
ros2 run nav2_map_server map_saver_cli -f ~/my_map

將會產生:

  • my_map.yaml

  • my_map.pgm


🎯 4. AMCL 定位 + 載入地圖

啟動定位(localization_launch.py):

python
from launch import LaunchDescription from launch_ros.actions import Node def generate_launch_description(): return LaunchDescription([ Node( package='nav2_map_server', executable='map_server', parameters=['map.yaml'] ), Node( package='nav2_amcl', executable='amcl', parameters=[{'use_sim_time': False}] ), Node( package='rviz2', executable='rviz2', arguments=['-d', 'nav2_config.rviz'] ) ])

🧭 5. 啟動 Navigation2 堆疊

官方方式(Nav2 Bringup):

bash
ros2 launch nav2_bringup navigation_launch.py \
use_sim_time:=False map:=/path/to/map.yaml

🕹️ 6. RViz2 進行導航測試

  • 在 RViz2 中設定機器人初始位置(2D Pose Estimate)

  • 使用「2D Nav Goal」點選目標位置

  • 機器人應該開始移動並避開障礙


📌 小提醒(Jetson 實務)

注意事項建議
效能瓶頸Jetson Nano 請搭配 swap 或增加 ZRAM
時間同步若無 RTC,建議搭配 NTP 或硬體 IMU 校準
驅動整合確保你的底盤可接收 cmd_vel 並回報 TF
RViz 設定可用 headless 模式或遠端執行減少 CPU 負擔
TF 配置檢查 base_link、odom、map 之間的關係完整性

📂 範例資料夾結構

arduino
your_nav2_ws/ ├── maps/ │ └── my_map.yaml + my_map.pgm ├── launch/ │ └── slam_launch.py │ └── localization_launch.py ├── rviz/ │ └── slam_config.rviz │ └── nav2_config.rviz └── config/ └── nav2_params.yaml

如果你需要我提供:

  • ✅ 範例 nav2_params.yaml

  • ✅ 整合 imu + wheel odometry 的 TF 設定方式

  • ✅ Jetson Nano 專用優化建議(SWAP、ZRAM、headless RViz)



沒有留言:

張貼留言