welcom ! Handel home

2025年3月24日 星期一

完整的 ORB-SLAM3 Docker 啟動與使用範例

 當然可以,這裡提供你一套 完整的 ORB-SLAM3 Docker 啟動與使用範例,適合你在乾淨環境中測試自有資料(像你之前處理的影片轉影格 + rgb.txt)。


🧱 假設你的資料結構如下:

bash
orbslam3_ws/ ├── Dockerfile ├── ORB_SLAM3/ ← GitHub clone 下來的 ORB_SLAM3 原始碼 ├── Vocabulary/ORBvoc.txt ← 詞彙檔 ├── my_dataset/ │ ├── slam_frames/ ← 拆出來的影格圖像 │ ├── rgb.txt ← 時間戳與圖像對應 │ └── camera.yaml ← 相機內參設定檔

Docker 會以當前目錄 orbslam3_ws/ 作為 build context,所以你必須確保:

orbslam3_ws/ ├── Dockerfile ├── ORB_SLAM3/ ← ✅ 這個資料夾必須存在!

🧩 修正步驟如下:

1️⃣ 複製 ORB-SLAM3 原始碼到該資料夾

bash
cd orbslam3_ws git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git

這樣會產生:

orbslam3_ws/ORB_SLAM3

2️⃣ 確認 DockerfileORB_SLAM3 是同層


🧰 Dockerfile(支援 ORB-SLAM3 + GTSAM)

dockerfile
FROM ubuntu:20.04 ENV DEBIAN_FRONTEND=noninteractive # 基本工具與依賴 RUN apt update && apt install -y \ build-essential cmake git wget curl pkg-config \ libeigen3-dev libboost-all-dev libtbb-dev libyaml-cpp-dev \ libopencv-dev libpangolin-dev libglew-dev \ libpython3-dev python3 python3-pip # 安裝 GTSAM(用於 IMU 模式) WORKDIR /opt RUN git clone https://github.com/borglab/gtsam.git && \ cd gtsam && mkdir build && cd build && \ cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local && \ make -j$(nproc) && make install # 複製 ORB-SLAM3 原始碼 WORKDIR /root COPY ORB_SLAM3 /root/ORB_SLAM3 # 編譯 ORB-SLAM3 WORKDIR /root/ORB_SLAM3 RUN chmod +x build.sh && ./build.sh # 預設工作目錄 WORKDIR /root/ORB_SLAM3

🏗️ 建立 Docker 映像

bash
cd orbslam3_ws docker build -t orbslam3 .

▶️ 啟動 Docker 容器並掛載資料

bash
xhost +local:root # 允許 GUI 顯示 docker run -it --rm \ --net=host \ --env DISPLAY=$DISPLAY \ --volume=$HOME/.Xauthority:/root/.Xauthority:rw \ --volume=$(pwd)/ORB_SLAM3:/root/ORB_SLAM3 \ --volume=$(pwd)/Vocabulary:/root/Vocabulary \ --volume=$(pwd)/my_dataset:/root/my_dataset \ orbslam3

🚀 Docker 容器內啟動 ORB-SLAM3(Monocular)

bash
cd /root/ORB_SLAM3 ./Examples/Monocular/mono_tum \ /root/Vocabulary/ORBvoc.txt \ /root/my_dataset/camera.yaml \ /root/my_dataset/rgb.txt \ /root/my_dataset/slam_frames

🎥 建議影格大小與 fps 與 camera.yaml 中一致(640x480、30Hz 等)


📄 camera.yaml 範例

yaml
%YAML:1.0 Camera.fx: 525.0 Camera.fy: 525.0 Camera.cx: 319.5 Camera.cy: 239.5 Camera.k1: 0.0 Camera.k2: 0.0 Camera.p1: 0.0 Camera.p2: 0.0 Camera.width: 640 Camera.height: 480 Camera.fps: 30.0 Camera.bf: 0.0 Camera.RGB: 1

🧪 執行結果

你會看到:

  • OpenCV 視窗顯示影像與特徵點

  • Pangolin 視窗顯示相機軌跡與建圖結果

結束後按 Ctrl+C,可在 terminal 中看到 summary 與儲存軌跡(可改程式匯出)


📁 Optional:將 pose 輸出為檔案

你可以編輯 Examples/Monocular/mono_tum.cc

cpp
SLAM.SaveKeyFrameTrajectoryTUM("KeyFrameTrajectory.txt");

然後重新 make,即可輸出 .txt 軌跡供你做後續分析或轉成 /odom


✅ 總結:快速跑 ORB-SLAM3 流程

bash
# 主機建映像 docker build -t orbslam3 . # 啟動容器 docker run -it --rm ... orbslam3 # 容器內執行 ./Examples/Monocular/mono_tum ORBvoc.txt camera.yaml rgb.txt slam_frames

如果你要跑 stereo / RGB-D / Mono+IMU 模式,我也可以幫你整理範例指令,或者加入 rosbag 播放、ROS Bridge 支援。

你是否要我幫你整合 docker + rosbag + ORB-SLAM3 自動啟動腳本?還是打包你的影片流程成一鍵跑 slam 的容器?我可以幫你完成 ✅


=== use Docker image cchicc/orb_slam3_ubuntu20.04 =========================

你提到的 Docker 映像:

cchicc/orb_slam3_ubuntu20.04
包含 ORB-SLAM3 + Ubuntu 20.04 + ROS Noetic

這是一個非常適合直接使用的容器環境,用來部署 ORB-SLAM3 到 ROS Noetic 專案中。


✅ 如何使用這個 Docker 映像

1️⃣ 拉取映像:

bash
docker pull cchicc/orb_slam3_ubuntu20.04

2️⃣ 執行容器(含 GUI 顯示與掛載)

bash
xhost +local:root docker run -it --rm \ --net=host \ --env DISPLAY=$DISPLAY \ --volume=$HOME/.Xauthority:/root/.Xauthority:rw \ --volume=$(pwd)/my_dataset:/root/my_dataset \ cchicc/orb_slam3_ubuntu20.04

這樣你就可以把你原本的影像資料(如 slam_frames + rgb.txt)掛入 /root/my_dataset 使用。


3️⃣ 容器內使用範例

bash
cd /root/ORB_SLAM3 ./Examples/Monocular/mono_tum \ Vocabulary/ORBvoc.txt \ /root/my_dataset/camera.yaml \ /root/my_dataset/rgb.txt \ /root/my_dataset/slam_frames

📁 相機設定 camera.yaml 範例

如果你沒有內參,可先用這個:

yaml
%YAML:1.0 Camera.fx: 525.0 Camera.fy: 525.0 Camera.cx: 319.5 Camera.cy: 239.5 Camera.k1: 0.0 Camera.k2: 0.0 Camera.p1: 0.0 Camera.p2: 0.0 Camera.width: 640 Camera.height: 480 Camera.fps: 30.0 Camera.bf: 0.0 Camera.RGB: 1

🎯 適合用於:

  • ✅ 開箱即用 ORB-SLAM3 測試影片

  • ✅ 配合 rosbag 播放 /camera/image_raw

  • ✅ 快速接上 ROS Noetic 專案做導航、地圖、視覺處理


如果你希望我幫你整合:

  • 把影片轉成 rgb.txt + slam_frames

  • 建立一鍵執行的 docker+bash 啟動腳本

  • 撰寫 ROS Launch 自動播放 rosbag 並串 ORB-SLAM3

我可以幫你出完整的 run_slam.sh + launch 結構 ✅
是否要我幫你做一份範本?只要提供影片或 rosbag 名稱即可。



沒有留言: