概要
Ubuntu 18.04 で ROS2 galactic (Ubuntu 20.04) の docker コンテナを作って stella_vslam_ros (https://github.com/stella-cv/stella_vslam_ros) を動かしてみました。
ビルド
git clone --recursive --branch galactic-devel --depth 1 https://github.com/stella-cv/stella_vslam_ros.git
cd stella_vslam_ros
docker build -t stella_vslam-ros2 -f Dockerfile.socket .
Viewer のビルド
stella_vslam のビューア用のDockerイメージをビルドする。(docker のバージョンは 20.10.12 でした。)
git clone --recursive https://github.com/stella-cv/stella_vslam.git
cd stella_vslam
git checkout 0.3.7
cd viewer
docker build -t stella_vslam-viewer .
Viewer のサーバ用コンテナを起動
Viewer のサーバ用のコンテナを起動する。
docker run --rm -it --name stella_vslam-viewer --net=host stella_vslam-viewer
Viewer のクライアントを起動
http://localhost:3001
をwebブラウザで開く。
stella_vslam_ros 実行用のコンテナを起動
別のターミナルを開いて、stella_vslam_ros 実行用のコンテナを起動する。
docker run --rm -it --name stella_vslam-ros2 --net=host stella_vslam-ros2
データセット等のダウンロード
起動した stella_vslam 実行用のコンテナの中にデータセット等をダウンロードする。
apt update
apt install -y python3-pip
pip3 install gdown
curl -sL "https://github.com/stella-cv/FBoW_orb_vocab/raw/main/orb_vocab.fbow" -o orb_vocab.fbow
curl -sL "https://raw.githubusercontent.com/stella-cv/stella_vslam/0.3.7/example/aist/equirectangular.yaml" -o equirectangular.yaml
gdown "https://drive.google.com/uc?id=1d8kADKWBptEqTF7jEVhKatBEdN7g0ikY"
gdown "https://drive.google.com/uc?id=1TVf2D2QvMZPHsFoTb7HNxbXclPoFMGLX"
unzip aist_living_lab_1.zip
unzip aist_living_lab_2.zip
再生用ツールをインストール
apt install -y ros-galactic-image-publisher
source /ros2_ws/install/setup.bash
tf を publish する
以下のコマンドで tf を publish するノードをバックグラウンドで起動する。
ros2 run tf2_ros static_transform_publisher 0 0 0 0 0 0 odom base_footprint&
ros2 run tf2_ros static_transform_publisher 0 0 -1.57 0 0 -1.57 base_footprint camera&
SLAM 実行
stella_vslam-ros2 のコンテナに戻って、以下のコマンドで run_slam をバックグラウンドで実行する。
ros2 run stella_vslam_ros run_slam \
-v ./orb_vocab.fbow \
-c ./equirectangular.yaml \
--map-db-out map.msg&
以下のコマンドで、動画を publish する。(ループ再生になっていることに注意。)
ros2 run image_publisher image_publisher_node ./aist_living_lab_1/video.mp4 --ros-args --remap /image_raw:=/camera/image_raw
Viewer の Terminate ボタンを押すと、地図を保存して run_slam が終了する。
Localization 実行
保存した地図を使って自己位置推定を行う。
ros2 run stella_vslam_ros run_slam \
--disable-mapping \
-v ./orb_vocab.fbow \
-c ./equirectangular.yaml \
--map-db-in map.msg&
以下のコマンドで、動画を publish する。
ros2 run image_publisher image_publisher_node ./aist_living_lab_2/video.mp4 --ros-args --remap /image_raw:=/camera/image_raw