LoginSignup
1
0

ORB-SLAM3をROS1で使うためのセットアップまで

Last updated at Posted at 2023-07-21

ORB-SLAM3がなんか動きそうなのでメモがてら.
現段階では制約あり

環境

  • Ubuntu 20.04
  • ROS noetic

上記は公式の標準的なインストール方法を踏んでます.

  • OpenCV 4.2
  • Eigen 3.3.7

気が付いたら入っていた.多分どこかでapt install libopencvapt install libeigen-dev
をしたのだろう

 aptでインストールしたのかの確認方法(展開)
apt list --installed | grep libeigen

libeigen3-dev/focal,focal,now 3.3.7-2 all [インストール済み]
apt list --installed | grep libopencv

libopencv-calib3d-dev/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-calib3d4.2/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-contrib-dev/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-contrib4.2/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-core-dev/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-core4.2/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-dev/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-dnn-dev/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-dnn4.2/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-features2d-dev/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-features2d4.2/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-flann-dev/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-flann4.2/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-highgui-dev/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-highgui4.2/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-imgcodecs-dev/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-imgcodecs4.2/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-imgproc-dev/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-imgproc4.2/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-ml-dev/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-ml4.2/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-objdetect-dev/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-objdetect4.2/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-photo-dev/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-photo4.2/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-shape-dev/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-shape4.2/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-stitching-dev/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-stitching4.2/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-superres-dev/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-superres4.2/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-ts-dev/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-video-dev/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-video4.2/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-videoio-dev/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-videoio4.2/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-videostab-dev/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-videostab4.2/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-viz-dev/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv-viz4.2/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]
libopencv4.2-java/focal,focal,now 4.2.0+dfsg-5 all [インストール済み、自動]
libopencv4.2-jni/focal,now 4.2.0+dfsg-5 amd64 [インストール済み、自動]

別のなにか(PCL?)を入れたときに依存関係として入ったっぽい

補足:EigenのVersion確認方法

 grep "#define EIGEN_[^_]*_VERSION" /usr/include/eigen3/Eigen/src/Core/util/Macros.h
#define EIGEN_WORLD_VERSION 3
#define EIGEN_MAJOR_VERSION 3
#define EIGEN_MINOR_VERSION 7

3.3.7ですね

補足:OpenCVのVersion確認方法

python-opencvではなくてc++のほうなので

grep "CV_VERSION" /usr/include/opencv4/opencv2/core/version.hpp 
#ifndef OPENCV_VERSION_HPP
#define OPENCV_VERSION_HPP
#define CV_VERSION_MAJOR    4
#define CV_VERSION_MINOR    2
#define CV_VERSION_REVISION 0
#define CV_VERSION_STATUS   ""
#define CV_VERSION          CVAUX_STR(CV_VERSION_MAJOR) "." CVAUX_STR(CV_VERSION_MINOR) "." CVAUX_STR(CV_VERSION_REVISION) CV_VERSION_STATUS
#define CV_MAJOR_VERSION    CV_VERSION_MAJOR
#define CV_MINOR_VERSION    CV_VERSION_MINOR
#define CV_SUBMINOR_VERSION CV_VERSION_REVISION
#endif // OPENCV_VERSION_HPP

4.2.0っぽいことがわかる

セットアップ

まえがき

それぞれのGitリポジトリのReadmeを一読してから以下を進めると良いかも
大まかには以下の二つを入れる

後者はラッパーとして普通のROSパッケージになってるので使いやすそう

ディレクトリ作成

 mkdir ~/ORB_SLAM

ROSと関係ない部分を1フォルダに押し込めようとしているだけ

Build Pangolin

 cd ~/ORB_SLAM
 git clone --recursive https://github.com/stevenlovegrove/Pangolin.git
 cd Pangolin/
 ./scripts/install_prerequisites.sh recommended
 cmake -B build -GNinja
 cmake --build build

recommendedで依存パッケージのインストールを行うとNinjaが入るので,オプション指定してビルドを高速化する

Modify and Build ORB_SLAM3

 cd ~/ORB_SLAM
 git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git
 cd ORB_SLAM3/

ここでCMakeLists.txtを編集します
お好きなエディタで開いてください

L15~29のうち,++11++14に置き換えます.
以下置き換えた結果

# Check C++14 or C++0x support
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++14" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
   add_definitions(-DCOMPILEDWITHC11)
   message(STATUS "Using flag -std=c++14.")
elseif(COMPILER_SUPPORTS_CXX0X)
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
   add_definitions(-DCOMPILEDWITHC0X)
   message(STATUS "Using flag -std=c++0x.")
else()
   message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++14 support. Please use a different C++ compiler.")
endif()

つぎにL33~36で4.44.2にします.
最初に示したOpenCVのバージョンです.
人によっては違うのかもしれない.
ORB-SLAM3のReadme曰く
Required at leat 3.0. Tested with OpenCV 3.2.0 and 4.4.0.
とのこと

find_package(OpenCV 4.2)
   if(NOT OpenCV_FOUND)
      message(FATAL_ERROR "OpenCV > 4.2 not found.")
   endif()

find_packageでバージョンを範囲指定できるのでしょうか

編集した内容を保存してからビルドします.

 chmod +x build.sh
 ./build.sh

warningが出るものの一応ビルドが通ればOKとしました.

orb_slam3_ros_wrapper

ここでORB_SLAM3本家のセットアップを離れます.

READMEを参考に以下

  • 普通のROSのワークスペース(catkin_wsなど)のsrc内にcloneする
  • CMakeLists.txtのL6修正(上記のディレクトリでインストールしてたら$ENV{HOME}/ORB_SLAM/ORB_SLAM3)
  • CMakeLists.txtのL70-76, L90-96をコメントアウトしてStereoシリーズを除外
    (本家側のAPIが変わってしまったようでビルドが通りませんでした.ステレオカメラ使いたかったら調べて修正する必要がありそうです)
  • ワークスペースに戻ってcatkin_makeなりcatkin buildなり
  • cp ORB_SLAM/ORB_SLAM3/Vocabulary/ORBvoc.txt catkin_ws/src/orb_slam3_ros_wrapper/config/
  • sudo apt install ros-noetic-hector-trajectory-server

usb_cam

取り敢えず普通のwebカメラでテストするためにいれます.他のパッケージ(libuvc-camera)とかでも問題ないかと

Install

sudo apt install ros-noetic-usb-cam

usb_camに関連した修正

orb_slam3_ros_wrapperのeuroc_mono.launchでL4を

<remap from="/camera/image_raw" to="/usb_cam/image_raw"/>

に変更

動かしてみる

roslaunch orb_slam3_ros_wrapper euroc_mono.launch

別ターミナルで

rosrun usb_cam usb_cam_node _video_device:=/dev/video0 _image_width:=1280 _image_height:=720

(カメラの種類によってはオプション変える必要があるかも)

なんか動いてなくはないけど…
euroc_monoimu.launchとの違いは何だろう.

参考先

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0