OpenVSLAM - eiichiromomma/CVMLAB GitHub Wiki

OpenVSLAM

国産VSLAM環境

dockerを使った一番楽な環境構築

これ がOpenVSLAMのビルドに完璧な環境なので有り難く使わせてもらう。

前提としてはUbuntuのX環境だが,WSL2+VcXsrvでも動いた。

sudo docker run --name opvslm --net=host -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -it matt0001/openvslam-desktop:v1.1

で,既にPangolinも入ってたりするのでcloneしてビルドするだけで良い。再開する場合は

sudo docker start -i opvslm

別のターミナルで複数roscore, rosrun, roslaunch等を使うときは

sudo docker exec -it opvslm /bin/bash

で繋がる。

また,コンテナ内でのrosの設定は

source /ros_entrypoint.sh

で整う。

cd
git clone https://github.com/xdspacelab/openvslam
cd openvslam
mkdir build && cd build
cmake \
    -DBUILD_WITH_MARCH_NATIVE=ON \
    -DUSE_PANGOLIN_VIEWER=ON \
    -DUSE_SOCKET_PUBLISHER=OFF \
    -DUSE_STACK_TRACE_LOGGER=ON \
    -DBOW_FRAMEWORK=DBoW2 \
    -DBUILD_TESTS=ON \
    ..
make -j4

あとはテストの通り動かしてみる

# download an ORB vocabulary from Google Drive
FILE_ID="1wUPb328th8bUqhOk-i8xllt5mgRW4n84"
curl -sc /tmp/cookie "https://drive.google.com/uc?export=download&id=${FILE_ID}" > /dev/null
CODE="$(awk '/_warning_/ {print $NF}' /tmp/cookie)"
curl -sLb /tmp/cookie "https://drive.google.com/uc?export=download&confirm=${CODE}&id=${FILE_ID}" -o orb_vocab.zip
unzip orb_vocab.zip


# download a sample dataset from Google Drive
FILE_ID="1d8kADKWBptEqTF7jEVhKatBEdN7g0ikY"
curl -sc /tmp/cookie "https://drive.google.com/uc?export=download&id=${FILE_ID}" > /dev/null
CODE="$(awk '/_warning_/ {print $NF}' /tmp/cookie)"
curl -sLb /tmp/cookie "https://drive.google.com/uc?export=download&confirm=${CODE}&id=${FILE_ID}" -o aist_living_lab_1.zip
unzip aist_living_lab_1.zip


# download a sample dataset from Google Drive
FILE_ID="1TVf2D2QvMZPHsFoTb7HNxbXclPoFMGLX"
curl -sc /tmp/cookie "https://drive.google.com/uc?export=download&id=${FILE_ID}" > /dev/null
CODE="$(awk '/_warning_/ {print $NF}' /tmp/cookie)"
curl -sLb /tmp/cookie "https://drive.google.com/uc?export=download&confirm=${CODE}&id=${FILE_ID}" -o aist_living_lab_2.zip
unzip aist_living_lab_2.zip


# run tracking and mapping
./run_video_slam -v ./orb_vocab/orb_vocab.dbow2 -m ./aist_living_lab_1/video.mp4 -c ./aist_living_lab_1/config.yaml --frame-skip 3 --no-sleep --map-db map.msg

で動けば成功。

ROS packageのビルド

これもマニュアル通り。

cd ~/openvslam/ros
git clone --branch ${ROS_DISTRO} --depth 1 https://github.com/ros-perception/vision_opencv.git
cp -r vision_opencv/cv_bridge src/
rm -rf vision_opencv
catkin_make \
    -DBUILD_WITH_MARCH_NATIVE=ON \
    -DUSE_PANGOLIN_VIEWER=ON \
    -DUSE_SOCKET_PUBLISHER=OFF \
    -DUSE_STACK_TRACE_LOGGER=ON \
    -DBOW_FRAMEWORK=DBoW2

で,別のターミナルから

source ~/openvslam/ros/devel/setup.sh
roscore

また別のターミナルから

source ~/openvslam/ros/devel/setup.sh
cd ~/openvslam/build
rosrun publisher video -m aist_living_lab_1/video.mp4

更に別のターミナルから

source ~/openvslam/ros/deve/setup.sh
rosrun image_transport republish raw in:=/video/image_raw raw out:=/camera/image_raw

もう一つ別のターミナルから

source ~/openvslam/ros/devel/setup.sh
cd ~/openvslam/build
rosrun openvslam run_slam -v ./orb_vocab/orb_vocab.dbow2 -c ./aist_living_lab_1/config.yaml

でさっきのテストと同じ動きになれば成功。

publisherでvideoを出して,image_transportで/camera/image_rawに変換し,openvslamで拾っているので,Jetson nano上のカメラからpublishしたnodeを同じように/camera/image_rawにして送れれば良い。