たれながし.info

とあるITエンジニアの備忘録

Jetson Nano 2GBにCOLMAPをインストールする(How to Install COLMAP on Jetson Nano 2GB)

Jetson Nano 2GBにCOLMAPをインストールした時のメモになります。

f:id:tarenagashi_info:20201228062402p:plain:w450

はじめに

Jetson Nano 2GBにCOLMAPをインストールした時のメモになります。

COLMAPの公式ドキュメントに沿ってインストール作業を実施したところ、COLMAPのビルドでエラーが発生しました。UbuntuリポジトリからインストールしたQt5に問題があるようだったので、Qt5をソースからビルドしてインストールしたところ、COLMAPのビルドも成功しました。

Qt5をリポジトリからインストールした時のCOLMAPのビルドエラーは「COLMAPのビルドで発生したエラー」に記載しています。

COLMAPについて

画像から3次元データを作成してくれるソフトウェア(という認識)です。

f:id:tarenagashi_info:20201228062402p:plain

環境

  • Jetson Nano 2GB
    • OS:Ubuntu 18.04.5 LTS(jetson-nano-2gb-jp441-sd-card-image)
    • COLMAP:3.7
    • Qt5:5.12.11
    • Ceres Solver:2.0.0

COLMAPインストール

パッケージのインストール

sudo apt -y install \
    git \
    cmake \
    build-essential \
    libboost-program-options-dev \
    libboost-filesystem-dev \
    libboost-graph-dev \
    libboost-regex-dev \
    libboost-system-dev \
    libboost-test-dev \
    libeigen3-dev \
    libsuitesparse-dev \
    libfreeimage-dev \
    libgoogle-glog-dev \
    libgflags-dev \
    libglew-dev \
    libcgal-dev

Ceres Solverのビルドとインストール

sudo apt-get install libatlas-base-dev libsuitesparse-dev
git clone https://ceres-solver.googlesource.com/ceres-solver
cd ceres-solver
git checkout $(git describe --tags) # Checkout the latest release
mkdir build
cd build
cmake .. -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF
make -j4
sudo make install

Qt5のビルドとインストール

ソースからQt5を導入します。

<参考手順>


パッケージのインストール

sudo vi /etc/apt/sources.list
→「#deb-src」のコメントアウトを解除

sudo apt update

sudo apt-get -y  build-dep qt5-default
sudo apt-get -y install libxcb-xinerama0-dev 
sudo apt-get -y install build-essential perl python git
sudo apt-get -y install '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev
sudo apt-get -y install libxcursor-dev libxcomposite-dev libxdamage-dev libxrandr-dev libxtst-dev libxss-dev libdbus-1-dev libevent-dev libfontconfig1-dev libcap-dev libpulse-dev libudev-dev libpci-dev libnss3-dev libasound2-dev libegl1-mesa-dev gperf bison nodejs
sudo apt-get -y install libasound2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev libgstreamer-plugins-bad1.0-dev
sudo apt -y install libclang-6.0-dev llvm-6.0


ビルド実施

git clone git://git.qt-users.jp/mirror/qt/qt5.git --branch 5.12
cd qt5
./init-repository --module-subset=qtbase,qtdeclarative,qt3d
mkdir build
cd build
../configure -opensource -confirm-license
make -j4
sudo make install


ライブラリにパスを通す

cd /etc/ld.so.conf.d
echo "/usr/local/Qt-5.12.11/lib" | sudo tee -a Qt-5.12.11.conf
sudo ldconfig -v

COLMAPのビルドとインストール

cmakeの「-D」オプションで「CMAKE_PREFIX_PATH」にQt5のパスを渡します。

git clone https://github.com/colmap/colmap.git
cd colmap
git checkout dev
mkdir build
cd build
cmake -DCMAKE_PREFIX_PATH=/usr/local/Qt-5.12.11 ..
make -j4
sudo make install

動作確認

CUIの場合

colmap -h
COLMAP 3.7 -- Structure-from-Motion and Multi-View Stereo
              (Commit ec6c2aa on 2020-12-22 with CUDA)

Usage:
  colmap [command] [options]
...

GUIの場合

colmap gui

f:id:tarenagashi_info:20201229152916p:plain

COLMAPのビルドで発生したエラー

Qt5をUbuntuリポジトリからインストールした際に発生したCOLMAPのビルドエラーは以下になります。クラス「QOpenGLFunctions_3_2_Core」が見つからないというエラーみたいです。

[ 78%] Building CXX object src/CMakeFiles/colmap.dir/ui/automatic_reconstruction_widget.cc.o
In file included from /home/test/colmap/src/ui/main_window.h:50:0,
                 from /home/test/colmap/src/ui/automatic_reconstruction_widget.cc:34:
/home/test/colmap/src/ui/model_viewer_widget.h:55:63: error: expected class-name before ‘{’ token
                           protected QOpenGLFunctions_3_2_Core {
                                                               ^
In file included from /home/test/colmap/src/ui/main_window.h:50:0,
                 from /home/test/colmap/src/ui/bundle_adjustment_widget.cc:35:
/home/test/colmap/src/ui/model_viewer_widget.h:55:63: error: expected class-name before ‘{’ token
                           protected QOpenGLFunctions_3_2_Core {
                                                               ^
src/CMakeFiles/colmap.dir/build.make:1718: recipe for target 'src/CMakeFiles/colmap.dir/ui/automatic_reconstruction_widget.cc.o' failed
make[2]: *** [src/CMakeFiles/colmap.dir/ui/automatic_reconstruction_widget.cc.o] Error 1
make[2]: *** Waiting for unfinished jobs....
src/CMakeFiles/colmap.dir/build.make:1742: recipe for target 'src/CMakeFiles/colmap.dir/ui/bundle_adjustment_widget.cc.o' failed
make[2]: *** [src/CMakeFiles/colmap.dir/ui/bundle_adjustment_widget.cc.o] Error 1
CMakeFiles/Makefile2:1009: recipe for target 'src/CMakeFiles/colmap.dir/all' failed
make[1]: *** [src/CMakeFiles/colmap.dir/all] Error 2
Makefile:129: recipe for target 'all' failed
make: *** [all] Error 2


確認した感じだと以下のファイルに問題がありそうでした。

  • /usr/include/aarch64-linux-gnu/qt5/QtGui/qtgui-config.h
    → コンフィグの内容がJetson Nanoにあっていない?
  • /usr/include/aarch64-linux-gnu/qt5/QtGui/QOpenGLFunctions_3_2_Core
  • /usr/include/aarch64-linux-gnu/qt5/QtGui/QOpenGLVersionFunctions
    → ヘッダに宣言されている関数の定義がない