Manifold 2Gのセットアップ(opencvの導入から有効化まで)


はじめに

現在、ドローンの活躍分野はますます拡大を見せており、ビジネス・学問の現場では設備保全であったり、生態調査であったりと様々な現場で利用されております。

ドローンの活用に欠かせない技術としてあげられるのが、画像認識や物体検出をはじめとした画像処理です。その画像処理に必要な様々な機能が実装されていて、BSDライセンスで配布されているため商用目的でも利用できるopencvはドローンにおける画像処理を行う第一段階として最適です。
今回はそのopencvの導入手順について説明します。世界のドローンメーカーのシェア率トップの「DJI」のドローンでの導入手順を説明します。

DJI SDKとは

DJI Developerではドローンアプリ開発者むけに「DJI SDK」を提供してます。DJI SDKにはカスタマイズされたモバイルアプリを開発する「Mobile SDK」、そのモバイルアプリのUI要素を提供することで、開発時間を短縮する「UX SDK」、低遅延、高周波センサーテレメトリ、航空機制御、およびビデオフィードにより、ソフトウェアおよびハードウェア機能を拡張する「Onboard SDK」、ドローンの内部システムと通信できるようにする新しいプロトコルのセットである「Payload SDK」、カスタマイズされたアプリケーションを作成する「Windows SDK」があります。
その中でもOnboard SDK(OSDK)は、産業用に使われるドローンであるMatriceシリーズ用のアプリケーション開発時に使用され、そのOSDKに基づいてアプリケーションを開発することによってドローンを制御して自律飛行などの複雑な飛行タスクを実行することができます。

ハードウェアについて

今回の導入に用いたハードウェアは以下のとおりです。
Manifold 2G: NVIDIA Jetson TX2、128GB SATA-SSDを搭載し、画像処理等の計算を行うのに適しています。
- Ubuntu 16.04
- CUDA 9
- Cmake
- GCC 7

DJI Onboard SDK ROSの導入

以下を参照して、導入します。DJIの公式サイトは更新が遅いため、こちらのリンクを参照する方が確実です。
https://github.com/dji-sdk/Onboard-SDK-ROS

OpenCVの導入

以下のリンクからopencv 3.3.1をダウンロードします。
- OpenCv
- opencv contrib

以下のようなデイレクトり構造にします。

┌opencv-3.3.1/
└opencv_contrib-3.3.1/

build ディレクトリを作成ます。

cd opencv-3.3.1
mkdir -p build && cd build

以下のように設定します。

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_CUDA=ON -D CUDA_ARCH_BIN="6.2" -D CUDA_ARCH_PTX="" -D WITH_CUBLAS=ON -D ENABLE_FAST_MATH=ON -D CUDA_FAST_MATH=ON -D ENABLE_NEON=ON -D WITH_LIBV4L=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D WITH_QT=ON -D WITH_OPENGL=ON -D WITH_TBB=ON -D ENABLE_PRECOMPILED_HEADERS=OFF -D ENABLE_CXX11=ON -D CUDA_NVCC_FLAGS=--expt-relaxed-constexpr -DBUILD_WEBP=ON -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.3.1/modules ..

ビルドし、インストールします。

make
make install

Package ファイルの書き換え

前節で正常に動作しない場合はCMakeLists.txtの3行目に以下を追加します。

set(OpenCV_DIR ~/opencv-3.3.1/build)

また、その下の行のfind_packagescv_bridgeを追加します。
以上で、ROSのnodeでopencvを利用できるようになります。