Jetson TX2でOpenCV3.4.0のセットアップから,ROSのインストール・ORB_SLAM2のインストールまでやってみよう!(編集中)
目標
これをやる。
Jetson TX2でOpenCV3.4.5のセットアップから
ROSのインストール
ORB_SLAM2のインストールまでやってみよう!
nvidia sdk manager(0.9.11.3405)では,OpenCV3.3.1が標準でインストールされる。
最近のJetPackは全部そう。
ただ,nVidia的には,動作がうまくいかないコアがあるので,
ライブラリは全部含めていないらしい。Gstreamerとか入ってない。
OpenCVでcudaがまともに動かせないのはこのせいなので,自分でビルドしなければいけません。
環境はこちら
Jetpack 4.2
Jetson TX2
Ubuntu 18.04 LTS
参考にしたのはここ。最新のJetpack4.2でもビルドできた。
jkjung-avt.github.io
sudo apt-get purge libopencv*
邪魔なライブラリも消す。
sudo apt-get purge python-numpy
autoremoveで依存関係ないもの消しちゃう
sudo apt autoremove
updateでパッケージを更新して
sudo apt-get update
これからビルドしようとしているOpenCVは gccなりgppが5系のものが必要なので,
とってくる。
sudo apt-get install g++-5 cpp-5 gcc-5
これからビルドしようとしているOpenCVによって6系が必要かもしれないので,
とってくる。
sudo apt-get install -g++-6 cpp-6 gcc-6
OpenCVで使いそうなライブラリとかビルド環境を落としてくる。
sudo apt-get install -y build-essential make cmake cmake-curses-gui g++ libavformat-dev libavutil-dev libswscale-dev libv4l-dev libeigen3-dev libglew-dev gtk2.0-dev
GStreamerとかも落とす。(商用利用するかたはライセンスに注意)
sudo apt-get install -y libdc1394-22-dev libxine2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
### Install additional dependencies according to the pyimageresearch
### article
ほかにもいろいろ落とす。
sudo apt-get install -y libjpeg8-dev libjpeg-turbo8-dev libtiff5-dev libpng-dev libavcodec-dev sudo apt-get install -y libxvidcore-dev libx264-dev libgtk-3-dev libatlas-base-dev gfortran sudo apt-get install -y libopenblas-dev liblapack-dev liblapacke-dev
libpng12-devって書いてるサイト多いけど(2019/05現在),
libpng-dev に名前変えたらしいよ!
Qt5とか
sudo apt-get install -y qt5-default vim
Pythonとか
sudo apt-get install -y python3-dev python3-pip python3-tk
sudo pip3 install numpy
sudo pip3 install matplotlib
あれvim入れたっけ。
まあいいや
sudo vim /usr/local/lib/python3.5/dist-packages/matplotlib/mpl-data/matplotlibrc
最近のは3.6とかなので,
sudo vim /usr/local/lib/python3.6/dist-packages/matplotlib/mpl-data/matplotlibrc
で開いて
41行目あたりを
backend : TkAgg
にする。
お次は,Python2
sudo apt-get install -y python-dev python-pip python-tk
sudo pip2 install numpy
sudo pip2 install matplotlib
同様に,
sudo vim /usr/local/lib/python2.7/dist-packages/matplotlib/mpl-data/matplotlibrc
で開いて
41行目あたりを
backend : TkAgg
libGL.so.をシンボリックリンクしなさいってかいてあるけど,
やんなくて大丈夫
ただし,/usr/local/cuda/include/cuda_gl_interop.hはいじらないとダメ
sudo vim /usr/local/cuda/include/cuda_gl_interop.h
とりあえず開いて
62~68行目あたりくらいをコメントアウトする。
//#if defined(__arm__) || defined(__aarch64__) //#ifndef GL_VERSION //#error Please include the appropriate gl headers before including cuda_gl_interop.h //#endif //#else #include <GL/gl.h> //<-これだけ残して他はコメントアウト //#endif
今回はお手本には従わず
OpenCV3.4.5にチャレンジ
任意のフォルダを作成しOpenCVをダウンロード!
mkdir -p ~/src cd ~/src
OpenCVの本体を
git clone https://github.com/opencv/opencv.git cd opencv git checkout -b v3.4.5 3.4.5
っていうようにgit cloneすると時間がかかるので,直接の方がよいと思います。
wget https://github.com/opencv/opencv/archive/3.4.5.tar.gz -O opencv-3.4.5.tar.gz tar -zxvf opencv-3.4.5.tar.gz mv opencv-3.4.5/ opencv/
Opencv_extraをgitcloneするなら
git clone https://github.com/opencv/opencv_extra.git cd opencv_extra git checkout -b v3.4.5 3.4.5
あああ
wget https://github.com/opencv/opencv_extra/archive/3.4.5.tar.gz -O opencv_extra-3.4.5.tar.gz tar -zxvf opencv_extra-3.4.5.tar.gz mv opencv_extra-3.4.5/ opencv_extra/
Opencv_contribを
git clone https://github.com/opencv/opencv_contrib.git cd opencv_extra git checkout -b v3.4.5 3.4.5
下の方が早いかも
wget https://github.com/opencv/opencv_contrib/archive/3.4.5.tar.gz -O opencv_contrib-3.4.5.tar.gz tar -zxvf opencv_contrib-3.4.5.tar.gz mv opencv_contrib-3.4.5/ opencv_contrib/
CUDA_ARCH_BINの指定は,
TX2なら6.2
TX1なら5.3
cmakeの前にコンパイラにgcc-6とg++-6をあてる。
github.com
ちなみに
CMAKE_INSTALL_PREFIXは
ORB-SLAM2をみると
/usrみたいなので注意が必要(たぶん)
cd ~/src/opencv mkdir build cd build CC=gcc-6 CXX=g++-6 cmake \ -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr \ -D BUILD_CUDA_STUBS=OFF \ -D BUILD_DOCS=OFF \ -D BUILD_EXAMPLES=OFF \ -D BUILD_JASPER=OFF \ -D BUILD_JPEG=OFF \ -D BUILD_OPENEXR=OFF \ -D BUILD_PACKAGE=ON \ -D BUILD_PERF_TESTS=OFF \ -D BUILD_PNG=OFF \ -D BUILD_SHARED_LIBS=ON \ -D BUILD_TBB=OFF \ -D BUILD_TESTS=OFF \ -D BUILD_TIFF=OFF \ -D BUILD_WITH_DEBUG_INFO=ON \ -D BUILD_ZLIB=OFF \ -D BUILD_WEBP=OFF \ -D BUILD_opencv_apps=ON \ -D BUILD_opencv_calib3d=ON \ -D BUILD_opencv_core=ON \ -D BUILD_opencv_dnn=ON \ -D BUILD_opencv_flann=ON \ -D BUILD_opencv_highgui=ON \ -D BUILD_opencv_imgcodecs=ON \ -D BUILD_opencv_imgproc=ON \ -D BUILD_opencv_java=OFF \ -D BUILD_opencv_ml=ON \ -D BUILD_opencv_objdetect=ON \ -D BUILD_opencv_photo=ON \ -D BUILD_opencv_python2=ON \ -D BUILD_opencv_python3=OFF \ -D BUILD_opencv_shape=ON \ -D BUILD_opencv_stitching=ON \ -D BUILD_opencv_superres=ON \ -D BUILD_opencv_ts=ON \ -D BUILD_opencv_video=ON \ -D BUILD_opencv_videoio=ON \ -D BUILD_opencv_videostab=ON \ -D BUILD_opencv_viz=ON \ -D BUILD_opencv_world=OFF \ -D BUILD_opencv_ximgproc=ON \ -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-10.0 \ -D CUDA_ARCH_BIN="6.2" \ -D CUDA_ARCH_PTX="" \ -D CUDA_NVCC_FLAGS=--expt-relaxed-constexpr \ -D CUDA_HOST_COMPILER=/usr/bin/gcc-6 \ -D CV_TRACE=OFF \ -D ENABLE_CXX11=ON \ -D WITH_1394=ON \ -D WITH_CAROTENE=ON \ -D WITH_CUBLAS=ON \ -D WITH_CUDA=ON \ -D WITH_CUFFT=ON \ -D WITH_EIGEN=ON \ -D WITH_FFMPEG=ON \ -D WITH_GDAL=OFF \ -D WITH_GPHOTO2=OFF \ -D WITH_GIGEAPI=ON \ -D WITH_GSTREAMER=ON \ -D WITH_GTK=ON \ -D WITH_INTELPERC=OFF \ -D WITH_IPP=OFF \ -D WITH_IPP_A=OFF \ -D WITH_ITT=OFF \ -D WITH_JASPER=ON \ -D WITH_JPEG=ON \ -D WITH_LIBV4L=ON \ -D WITH_OPENCL=OFF \ -D WITH_OPENCLAMDBLAS=OFF \ -D WITH_OPENCLAMDFFT=OFF \ -D WITH_OPENCL_SVM=OFF \ -D WITH_OPENEXR=ON \ -D WITH_OPENGL=OFF \ -D WITH_OPENNI=OFF \ -D WITH_PNG=ON \ -D WITH_PTHREADS_PF=ON \ -D WITH_PVAPI=ON \ -D WITH_QT=OFF \ -D WITH_TBB=ON \ -D WITH_TIFF=ON \ -D WITH_UNICAP=OFF \ -D WITH_V4L=ON \ -D WITH_VTK=ON \ -D WITH_WEBP=ON \ -D WITH_XIMEA=OFF \ -D WITH_XINE=OFF \ -D INSTALL_C_EXAMPLES=ON \ -D INSTALL_TESTS=OFF \ -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \ -D OPENCV_TEST_DATA_PATH=../../opencv_extra/testdata ..
気になるのが,途中ワーニングが出るんだけど,
githubのぞいたら,ワーニングのメッセージを消してマージされていたから,
ちょっとこれ大丈夫かなんて思ったけども・・・。
TX2なら-j6でいいんじゃないかと・・・。
make -j6
sudo make install
以下,編集中。
Build and install OpenCV for the NVIDIA Jetson TX2
https://github.com/jetsonhacks/buildOpenCVTX2
ros-kinetic-ros-base
ros-kinetic-desktop
ros-kinetic-desktop-full
がインストールできる。
最新のros-kinetic-opencv3をインストールするとビルドが通らなくなる
https://github.com/jsk-ros-pkg/jsk_recognition/issues/2271
https://docs.nvidia.com/sdk-manager/install-with-sdkm-jetson/index.html
Deep learning inference nodes for ROS with support for NVIDIA Jetson TX1/TX2/Xavier and TensorRT
https://github.com/dusty-nv/ros_deep_learning
深層学習するわけではないが,ROSのセットアップがのっている。
ROSはこっち
http://wiki.ros.org/kinetic/Installation/Ubuntu
Jetson TX2環境でのOpenCVビルド
https://github.com/atinfinity/lab/wiki/Jetson-TX2%E7%92%B0%E5%A2%83%E3%81%A7%E3%81%AEOpenCV%E3%83%93%E3%83%AB%E3%83%89
NVIDIA Jetson TX2をセットアップしてみた
https://dev.classmethod.jp/etc/jetson-setup/
https://github.com/hoangthien94/ORB_SLAM2_CUDA/tree/049e90f1128e91b699aaef6db8007de05fac34f8
に従い順番にインスコ
1.ROSのインストール
ROSのインストール
Install Robot Operating System (ROS) on NVIDIA Jetson TX2
https://github.com/jetsonhacks/installROSTX2
↓これで入れたROSはなぜか/opt/ros/kinetic/を作らない・・・。
./installROS.sh -p ros-kinetic-desktop-full -p ros-kinetic-opencv3
公式見てみたら18.04は対応してないっぽい。
自分でビルドするか,Melodicをインスコせよ(stackoverflowより)
sudo apt-get install python-rosdep
sudo apt-get install ros-kinetic-slam-gmapping
sudo apt-get install python-rosinstall
ROSの初期化
sudo rosdep init
rosdep update
スタートアップに追加する。
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
他の依存関係をインストールする
sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential
ROSの動作確認
roscore
新しいターミナルから以下を実行
rosrun turtlesim turtlesim_node
さらに新しいターミナルを開き、矢印キーでカメを制御するために次のコマンドを入力してください
rosrun turtlesim turtle_teleop_key
2.ORB SLAM2のインストール
ORB SLAM2を使うためにROSワークスペースを作成する
mkdir -p ~/slam/src
cd ~/slam/src
catkin_init_workspace
cd ..
catkin_make
echo "source ~/slam/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
cd ~/SLAM/src
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
インストール依存関係
(1)Boost
sudo apt-get install libboost-all-dev
(2)Pangolinのインストール
https://github.com/stevenlovegrove/Pangolin
Glewのインストール
sudo apt-get install libglew-dev
Cmakeのインストール(ビルド環境構築)
sudo apt-get install cmake
opencvはjetpackでインストールされるはずなので,
たぶん大丈夫(いらない)
↓これはいるかも。
sudo python -mpip install numpy pyopengl Pillow pybind11
その他オプションで色々ある。
githubページに従いビルドする
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
cmake --build .
3.BLAS and LAPACKのインストール
sudo apt-get install -y libblas-dev liblapack-dev
4.Eigen3のインストール
sudo apt-get inatall -y libeigen3-dev
なんだけど,jetpackからインストールされている。
DBoW2とg2o(Thirdpartyに含まれています)は、ORB-SLAM2のThirdpartyフォルダにはインストールされません。
5.PCL for ROSのインストール
sudo apt-get install -y libopenni2-dev python-vtk
python-vtkはどこへ?インスコできない。
pipに移行した?
標準ではpipが入っていないのでインスコする。
あるにはあるようなのでパスしてみる。
(4)コンパイル
スクリプトファイル./build.shと./build_ros.shを実行して、それぞれ2つのバージョンのslamをコンパイルします。
cd ORB_SLAM2
chmod +x build.sh
./build.sh
ubuntu16.04rosパッケージのコンパイル中に次の問題が発生しました
`/usr/bin/ld: CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o: undefined reference to symbol ‘_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
CMakeFiles/RGBD.dir/build.make:218: recipe for target ‘../RGBD’ failed
make[2]: * [../RGBD] Error 1
CMakeFiles/Makefile2:67: recipe for target
‘CMakeFiles/RGBD.dir/all’ failed
make[1]: * [CMakeFiles/RGBD.dir/all] Error 2
make[1]: * 未完成のタスクを待っています….
/usr/bin/ld:
CMakeFiles/Stereo.dir/src/ros_stereo.cc.o: undefined reference to symbol ‘_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
CMakeFiles/Stereo.dir/build.make:218: recipe for target ‘../Stereo’ failed
make[2]: * [../Stereo] Error 1
CMakeFiles/Makefile2:104: recipe for target
‘CMakeFiles/Stereo.dir/all’ failed
make[1]: * [CMakeFiles/Stereo.dir/all] Error 2
Makefile:127: recipe for target ‘all’ failed
make: * [all] Error 2
エラーが発生しました:libboost_system.soとlibboost_filesystem.soはリンクディレクトリを見つけることができませんでした
解決策は・・・・
Sudo locate boost_systemを見つけます
/ /ディレクトリを探す
/usr/lib/x86_64-linux-gnu/libboost_system.a
/usr/lib/x86_64-linux-gnu/libboost_system.so
/usr/lib/x86_64-linux-gnu/libboost_system.so.1.58.0
/usr/local/MATLAB/R2017a/bin/glnxa64/libboost_system.so.1.56.0
boost_filesystemを探します。
/ /ディレクトリを探す
/usr/lib/x86_64-linux-gnu/libboost_filesystem.a
/usr/lib/x86_64-linux-gnu/libboost_filesystem.so
/usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.58.0
/usr/local/MATLAB/R2017a/bin/glnxa64/libboost_filesystem.so.1.56.0
libboost_system.soおよびlibboost_filesystem.soパスをORB_SLAM2のCMakeLists内のlibにコピーし、特にORBSLAM2 / Examples / ROS / ORBSLAM2の下のCmakelists.txt
をライブラリディレクトリに追加します。
セットで(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
次に${PROJECT_SOURCE_DIR}/../../../lib/libboost_filesystem.so を追加します。
${PROJECT_SOURCE_DIR}/../../../lib/libboost_system.so
問題解決
ここで私のJetsonはまたリンクソリューションで、locateがubuntuの下で応答しないという状況に遭遇しました
(5)公開データセットを実行する
1.RGB-Dインスタンス
*****レディデータ**************
1)TUMデータセットをダウンロードする
下記のリンクhttps://vision.in.tum.de/data/datasets/rgbd-dataset/downloadから関連データセットをダウンロードしてください。例えば、ダウンロード
rgbd_dataset_freiburg2_pioneer_360.tgz
2)次に、解凍したい場所に解凍します。ここで、ORB_SLAM2のデータセットを解凍します。
3)実行:python associate.py home/ttwang/ORB_SLAM2/rgbd_dataset_freiburg2_pioneer_360/rgb.txt
home/ttwang/ORB_SLAM2/rgbd_dataset_freiburg2_pioneer_360/depth.txt > associations.txt
注:これはpython2です
********テスト*********
次のコマンドを実行してください。
./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUMX.yaml PATH_TO_SEQUENCE_FOLDER ASSOCIATIONS_FILE
PATH_TO_SEQUENCE_FOLDERデータセットが置かれているディレクトリをダウンロードした場所、ここではORB_SLAM2プロジェクトディレクトリ、つま
り/home/ttwang/ORB_SLAM2/rgbd_dataset_freiburg2_pioneer_360に配置しました。
ASSOCIATIONS_FILEは生成されたassociations.txtで、指定された場所を指定します。ここでは、これをデータセットにコピーしました。つま
り、/home/ttwang/ORB_SLAM2/rgbd_dataset_freiburg2_pioneer_360です。
/associations.txt
それから対応する、最初の
cd ORB_SLAM2
プロジェクトディレクトリ、私は実行します:
./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM2.yaml
/home/ttwang/ORB_SLAM2/rgbd_dataset_freiburg2_pioneer_360
/home/ttwang/ORB_SLAM2/rgbd_dataset_freiburg2_pioneer_360/associations.txt
(1)TUM Dataset
上記でダウンロードしたRGB-D用のデータセットを使用して、次のコマンドを実行します。
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER
上記のコマンドに次の変更を加えます。
TUMX.yamlをTUM1.yaml、TUM2.yaml、TUM3.yamlのいずれかに変更します。
PATH_TO_SEQUENCE_FOLDERをTUMデータセットデータセットの場所に変更します。
たとえば、私にとっては、ORB_SLAM2プロジェクトディレクトリに移動して次のコマンドを実行します。
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml /home/ttwang/ORB_SLAM2/rgbd_dataset_freiburg2_pioneer_360
(2)KITTI Dataset
リンクから http://www.cvlibs.net/datasets/kitti/eval_odometry.php
KITTIデータコレクションをダウンロードし、ここで私はグラウンドトゥルースポーズをダウンロードしてORB_SLAM2プロジェクトディレクトリに解凍します。
このデータセットを使用して、次のコマンドを実行します。
./Examples/Monocular/mono_kitti Vocabulary/ORBvoc.txt Examples/Monocular/KITTIX.yaml PATH_TO_DATASET_FOLDER/dataset/sequences/SEQUENCE_NUMBER
上記のコマンドに対して、以下の変更を加えます。
KITTIX.yamlをKITTI00-02.yaml、KITTI03.yaml、KITTI04-12.yamlのいずれかに変更します。
PATH_TO_DATASET_FOLDERは、ダウンロードしたデータコレクションが配置されている場所に変更されます。
SEQUENCE_NUMBERが00,01,02、...、11.22に変更されました
たとえば、私にとっては、ORB_SLAM2プロジェクトディレクトリに移動して次のコマンドを実行します。
./Examples/Monocular/mono_kitti Vocabulary/ORBvoc.txt Examples/Monocular/KITTI00.yaml /home/ttwang/ORB_SLAM2/dataset/sequences/00
------------------------------------------------------------------------------------------------
以下別github参照バージョン
うまくいかない 2019/5/7
------------------------------------------------------------------------------------------------
でとりあえず,クローンをつくる。
git clone https://github.com/hoangthien94/ORB_SLAM2_CUDA.git ORB_SLAM2_CUDA
cd ORB_SLAM2_CUDA
chmod +x build.sh
./build.sh
error
OpenCVのcuda関係でエラーが出ている模様。
【cudafilter.hppがエラー】
ビルド自前でしてみる?
このあたりを参考にして
https://shiroku.net/robotics/install-opencv-on-jetson-tx2/
gccのバージョンを5に落とす。
sudo apt-get install -y gcc-5 g++-5
でインストールしたあとに,gccを置換える。
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 60 --slave /usr/bin/g++ g++ /usr/bin/g++-5
sudo update-alternatives --config gcc
cmake qt4がないとかなんとか。
cmakeのバージョンを落とすために,
https://cmake.org/download/
から3.5.2をダウンロード
解凍してフォルダにcdで移動
./configure
make
sudo make install
のまえに
sudo apt-get install -y qt4-qmake qt4-default qt5-qmake qt5-default
なぜかqmakeがない。