ORB_SLAM2 環境構築中に出たエラーとその対処
OpenCV
- OpenCVをcmakeする際に発生
fatal error: stdlib.h: No such file or directory
cmakeにオプションをつけて
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -DENABLE_PRECOMPILED_HEADERS=OFF ..
とすることで解決。
- opencvのアンインストール
cd build sudo make uninstall
(openCVのアンインストールを行う場合は先にDBoW2をアンインストールする。)
g2o
- g2oをcmakeするときに発生
target_compile_features specified unknown feature "cxx_std_14" for target "core".
g2o/g2o/core/CMakeLists.txtをgeditで開き、46行目の
target_compile_features(core PUBLIC cxx_std_14)
を、
set (CMAKE_CXX_STANDARD 14)
とすることで解決。
DBoW2
- DBoW2をcmakeする際に発生
CMake Error at CMakeLists.txt:32 (find_package):
DBoW2/CMakeLists.txtの32行目に、
find_package(OpenCV REQUIRED)
とあるので、その上の行に、
set(OpenCV_DIR "~/opencv-3.1.0/build")
を追加して解決
- DBoW2の最新バージョンで発生
error: ‘class cv::ORB’ has no member named ‘detectAndCompute’;
cv::KeyPoint is not a member of 'cv'
opencvのバージョンが古いことが原因のためopencv3.xを入れるか、DBoW2の古いバージョンを入れることで解決しました。
- DBoW2のアンインストール
makeからはアンインストールできなかったので、手動でアンインストールしました。
sudo make install
一度再インストールを行い、インストール箇所を表示してくれるため、それを見て手動で削除。
ROS
- 全てインストール完了後、ORB-SLAMを実行する際に発生
OpenCV Error: Bad argument (Invalid pointer to file storage) in cvGetFileNodeByName, file /build/opencv-_msWgW/opencv-2.4.8+dfsg1/modules/core/src/persistence.cpp, line 740 terminate called after throwing an instance of 'cv::Exception'
自分でインストールしたOpenCVとROSに対応するOpenCVのバージョンが異なることが原因。
ROSをインストールする際に自動でROS内部にOpenCVがインストールされます。Ubuntu14.04 ROS IndigoはOpenCV2.4.8に正式対応していてUbuntu16.04 ROS KineticはOpenCV3.1.0に正式対応しています。ROSのバージョンに対応しているOpenCVを入れることで解決します。
ORB-SLAM
- ./build.shを実行する際に発生
/tmp/cc7KAqxb.s: Assembler messages: /tmp/cc7KAqxb.s:1008: Error: operand type mismatch for `vxorps'
gcc,g++のバージョンを4.8に戻して解決。
- ./build.shを実行する際に発生
error: ‘usleep’ was not declared in this scope
https://ei0124.blog.fc2.com/blog-entry-21.html
を参考にして以下のように対処しました。
grep -ril "usleep" ~/ORB_SLAM2/Examples/ | xargs sed -i 1i#include\ \"unistd.h\" grep -ril "usleep" ~/ORB_SLAM2/src/ | xargs sed -i 1i#include\ \"unistd.h\"
src/と.Examples/の中にあるファイルのうちusleepの文字が含まれるものの先頭行に#include "unistd.h"を付加しています。
- ./build_rosを実行した際に発生
fatal error: Eigen/Core: そのようなファイルやディレクトリはありません
次のように対処します。
gedit ./Examples/ROS/ORB_SLAM2/CMakeLists.txt
でテキストエディタでCtrl+Fで検索機能を使い、「include_directories」と入力。以下の箇所に
include_directories( ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/../../../ ${PROJECT_SOURCE_DIR}/../../../include ${Pangolin_INCLUDE_DIRS} )
一行追加して、このようにします。
include_directories( ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/../../../ ${PROJECT_SOURCE_DIR}/../../../include ${Pangolin_INCLUDE_DIRS} ${EIGEN3_INCLUDE_DIR} )
- ubuntu 16.04で./build_rosを実行した際に発生
/usr/bin/ld: CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o: シンボル '_ZN5boost6system15system_categoryEv' への未定義参照です /usr/lib/x86_64-linux-gnu/libboost_system.so: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status
gedit ./Examples/ROS/ORB_SLAM2/CMakeLists.txt
でテキストエディタでCtrl+Fで検索機能を使い、「include_directories」と入力。その下にあるsetの部分を変更して以下のように-lboost_systemを追加します。
set(LIBS ${OpenCV_LIBS} ${EIGEN3_LIBS} ${Pangolin_LIBRARIES} ${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so ${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so ${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so -lboost_system )
- いろんなところで発生
warning: ‘Eigen::AlignedBit’ is deprecated (declared at /usr/local/include/eigen3/Eigen/src/Core/util/Constants.h:162) [-Wdeprecated-declarations]
errorではなくwarningなので出てきても一応ビルドは行えました。今回は無視してます。