ORB-SLAM3 支援 ROS1 整合,而且比 ROS2 更成熟穩定(開發者原本就是基於 ROS1 開發 wrapper 的),很多研究和專案也是以 ROS1 為基礎。
🎯 你將達成的目標:
✅ 使用 ROS1(如 Noetic)整合 ORB-SLAM3,讓它:
- 訂閱
/camera/image_raw
與/imu/data
(視狀況) - 自動建圖 + 發布
/odom
,/tf
,/orbslam3/pose
- 可搭配 rosbag 回放或實時相機串流
- 可與導航、控制、地圖伺服器等 ROS 節點整合
🛠️ Step-by-step:ROS1 + ORB-SLAM3 整合流程
🧱 1. 環境建議
項目 | 建議 |
---|---|
作業系統 | Ubuntu 20.04 |
ROS 版本 | ROS Noetic |
OpenCV | 4.x(libopencv-dev ) |
相依套件 | Pangolin、GTSAM、Eigen3 |
🧰 2. 建立 ROS1 工作區
bashmkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make
bashecho "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
📦 3. 下載 ORB-SLAM3 ROS1 Wrapper
bashcd ~/catkin_ws/src
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git
這個 repo 已經內含 ROS1 的 Examples/ROS
範例
⚙️ 4. 編譯 ORB-SLAM3 with ROS
bashcd ~/catkin_ws
catkin_make -j$(nproc)
💡 若出現錯誤:
- 檢查你有沒有安裝
libopencv-dev
,libpangolin-dev
,libyaml-cpp-dev
- 若用 CUDA 編譯報錯,可先試純 CPU 模式
📁 5. 建立相機設定檔與詞彙檔
你需要:
camera.yaml
(內含 fx, fy, cx, cy...)ORBvoc.txt
(詞彙檔,可從 GitHub releases 下載)
放在 /home/yourname/ORB_SLAM3/config/
路徑下
▶️ 6. 執行 ORB-SLAM3 ROS 節點
範例:單目相機
bashrosrun ORB_SLAM3 Mono \
/home/you/ORB_SLAM3/Vocabulary/ORBvoc.txt \
/home/you/ORB_SLAM3/Examples/ROS/Monocular/YourCam.yaml \
true # ← 表示使用圖像時間戳同步
📡 7. rosbag 播放影像資料
bashrosbag play your_video_data.bag
記得要包含 /camera/image_raw
話題。
📤 8. ORB-SLAM3 ROS 輸出資訊
話題 | 說明 |
---|---|
/orbslam3/pose | 相機 pose(geometry_msgs/PoseStamped) |
/tf | 世界 → 相機轉換(可用於地圖) |
/map (無) | ORB-SLAM3 不會主動發布地圖話題,但你可改寫程式導出 |
🚀 延伸功能與整合建議
功能 | 說明 |
---|---|
加上 IMU 支援 | 使用 Mono_Inertial 模式,訂閱 /imu/data |
整合導航 | 可將 /orbslam3/pose → /odom → move_base |
地圖儲存 | 可用 Open3D、evo、PCL 將點雲或軌跡儲存成 .ply/.pcd |
🧪 測試範例 rosbag
可先測試官方資料集:
- TUM RGBD
- EuRoC MAV(含 IMU)
✅ 小結:你現在可以...
bash# 播放 rosbag
rosbag play yourdata.bag
# 執行 ORB-SLAM3 節點
rosrun ORB_SLAM3 Mono ORBvoc.txt camera.yaml true
📌 再透過 rviz
查看 pose、軌跡
📌 再與導航或控制整合
❓想進一步?
我可以幫你:
- 寫完整 ROS Launch 檔 →
roslaunch orbslam3_run.launch
- 整合 ROS bag 播放 + slam + tf + odom
- 改寫 node 將
pose
導出為/odom
- 產生
.ply
地圖儲存器
要不要我幫你包一份 ROS1 launch 包?
還是把你的影片轉 ROS Bag?
沒有留言:
張貼留言