sgunji’s blog

ものづくりやプログラミングなど…最近はXamarinを少々

Jetson TX2でOpenCV3.4.0のセットアップから,ROSのインストール・ORB_SLAM2のインストールまでやってみよう!(編集中)

目標

github.com
www.youtube.com

これをやる。

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


jetpackからインストールしたopencvを消す。

sudo apt-get purge libopencv*

邪魔なライブラリも消す。

sudo apt-get purge python-numpy

autoremoveで依存関係ないもの消しちゃう

sudo apt autoremove

updateでパッケージを更新して

sudo apt-get update

これからビルドしようとしているOpenCVgccなり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にチャレンジ

qiita.com

任意のフォルダを作成し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のぞいたら,ワーニングのメッセージを消してマージされていたから,
ちょっとこれ大丈夫かなんて思ったけども・・・。

github.com



TX2なら-j6でいいんじゃないかと・・・。

make -j6
sudo make install

以下,編集中。

Build and install OpenCV for the NVIDIA Jetson TX2
https://github.com/jetsonhacks/buildOpenCVTX2

github.com
github.com





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

opencvjetpackでインストールされるはずなので,
たぶん大丈夫(いらない)
↓これはいるかも。
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がない。

ei0124.blog.fc2.com