welcom ! Handel home

2025年3月21日 星期五

ORB-SLAM3 整合成 ROS2

要將 ORB-SLAM3 整合成ROS2:

可直接用 ROS bag 播放資料 → 啟動 ROS2 Launch 檔 → 執行 ORB-SLAM3 SLAM 任務

這樣就可以輕鬆地串接整套視覺 SLAM 流程,並可未來與導航(Nav2)、控制、IMU、地圖伺服器等組件整合。


🎯 目標功能

你輸入:

bash
ros2 launch orbslam3_ros2 orbslam3_mono.launch.py

🔁 系統會自動:

  1. 播放指定 rosbag(含 /camera/image_raw
  2. 啟動 ORB-SLAM3 ROS2 節點
  3. 建圖、定位、發布 /odom/tf 等資訊
  4. 可選擇將地圖軌跡存檔

✅ 如何整合?完整教學如下:


🧱 1. 建立 ROS2 工作空間

bash
mkdir -p ~/ros2_orbslam3_ws/src cd ~/ros2_orbslam3_ws

🧰 2. 安裝 ROS2 相依套件

bash
sudo apt update sudo apt install -y \ ros-humble-image-transport \ ros-humble-cv-bridge \ ros-humble-ament-cmake \ ros-humble-rclcpp \ ros-humble-sensor-msgs \ ros-humble-std-msgs \ ros-humble-tf2 \ ros-humble-geometry-msgs

(建議用 ROS 2 Humble + Ubuntu 22.04)


📦 3. 將 ORB-SLAM3 ROS2 Wrapper 加入專案

bash
cd ~/ros2_orbslam3_ws/src git clone https://github.com/ToniRV/ORB_SLAM3-ROS2.git orbslam3_ros2

📁 這個 wrapper 包含:

  • ROS2 節點
  • 支援 monocular / stereo / RGB-D / inertial
  • 可用 rosbag 播放

🛠️ 4. 編譯專案

bash
cd ~/ros2_orbslam3_ws source /opt/ros/humble/setup.bash colcon build --symlink-install

🔁 每次開新 Terminal 記得:

bash
source ~/ros2_orbslam3_ws/install/setup.bash

📁 5. 資料準備(ROS Bag + 相機參數)

  • ROS Bag 中必須有話題 /camera/image_raw
  • 建立你的相機內參 .yaml 檔(camera.yaml
  • 建立 config/ 放參數

🧩 6. 建立 launch 檔(Monocular)

建立 launch/orbslam3_mono.launch.py

python
from launch import LaunchDescription from launch_ros.actions import Node def generate_launch_description(): return LaunchDescription([ Node( package='orbslam3_ros2', executable='mono', name='orbslam3_mono', parameters=[ {'voc_file': '/absolute/path/ORBvoc.txt'}, {'camera_config_file': '/absolute/path/config/camera.yaml'} ], remappings=[ ('/camera/image_raw', '/camera/image_raw') ] ) ])

✅ 記得換成你的實際路徑!


▶️ 7. 播放 ROS bag + 啟動 Launch

分開執行(建議)

bash
# 第1個 terminal:播放資料 ros2 bag play your_dataset.bag # 第2個 terminal:啟動 ORB-SLAM3 ros2 launch orbslam3_ros2 orbslam3_mono.launch.py

🎯 ORB-SLAM3 輸出資訊(自動在 ROS 中)

話題說明
/tf相機位姿
/odom機器人 odometry(可接入導航)
/map(選配)建立地圖點雲或格點圖
/orbslam3/image特徵提取後畫面(除錯用)

☁️ [進階] 自訂 rosbag 播放節點(Python)

你也可以寫一個 launch 中內建 rosbag play(透過 launch + subprocess),但推薦還是分開執行更彈性。


✅ 你已完成:

bash
ros2 launch orbslam3_ros2 orbslam3_mono.launch.py

📌 ORB-SLAM3 會訂閱 /camera/image_raw,自動處理影像與建圖定位。


🚀 加值應用你可以做:

功能說明
將 ORB-SLAM3 輸出導入 nav2 導航堆疊/odom + /tf 接入
加上 IMU 話題使用 mono_inertial 節點
使用 rtabmap 作為替代方案如果要語義地圖或 loop closure 更強
加入地圖儲存器存成 .pgm + .yaml 用於 AMCL / Nav2

若你需要我幫你打包成:

  • 📦 一鍵 Docker + ROS2 環境(含 rosbag + slam 啟動)
  • 🧪 測試範例(含你提供的影片轉 ROS Bag 範例)
  • 🗺️ 建圖後地圖輸出工具

只要把你目前的影片與 IMU/Bag 結構告訴我,我可以幫你一鍵整合 ✅
要不要我幫你建一份可直接跑的專案目錄?

沒有留言: