Goodbye, World

日々のプログラミングで得た経験を個人的な備忘録としてまとめてます.他のブログ・ページを参考させて頂いている部分が多いので,参考ページへのリンクを併記しております.

ROS indigo for Ubuntu 14.04へのOpenCV nonfree moduleの導入

Ubuntu 14.04 用のROS indigoをインストールすると,どうやらOpenCVのnonfree moduleが含まれていないよう.
このことはLSD-SLAMのREADMEにも記述されている.

Note for Ubuntu 14.04: The packaged OpenCV for Ubuntu 14.04 does not include the nonfree module, which is required for openFabMap (which requires SURF features). You need to get a full version of OpenCV with nonfree module, which is easiest by compiling your own version. We suggest to use the 2.4.8 version, to assure compatibility with the current indigo open-cv package.

このままではSURF等の機能が利用できないので,上記のアドバイスに従い手動でOpenCV2.4.8をmakeしてインストールしましょう.

参考サイト:Pepperめも~SLAMに挑戦~ (前編) - Qiita
Installing OpenCV 2.4.9 in Ubuntu 14.04 LTS – Sebastian Montabone
OpenCV Lover: Install OpenCV 2.4.8 on Ubuntu 13.10

$sudo apt-get install build-essential cmake 
$sudo apt-get install libjpeg-dev libtiff4-dev libjasper-dev 
$sudo apt-get install libgtk2.0-dev 
$sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

$cd ~ 
$wget https://github.com/Itseez/opencv/archive/2.4.8.zip
$unzip 2.4.8.zip 
$cd opencv-2.4.8 
$mkdir build
$cd build

####要変更:後述####
$cmake -D CMAKE_BUILD_TYPE=RELEASE -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON ..
$cmake -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D MAKE_INSTALL_PREFIX=/usr/local ..
###############

$make
$sudo make install

$echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/opencv.conf
$sudo ldconfig

$export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
$export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
$export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH


しかし,OpenCVのインストール後,ROSのimage_viewパッケージが下記のエラーで動かなくなりました.

init done
opengl support available

(image_view:31631): GLib-GObject-WARNING **: invalid uninstantiatable type '(null)' in cast to 'GtkWidget'

(image_view:31631): GLib-GObject-WARNING **: instance of invalid non-instantiatable type '(null)'

(image_view:31631): GLib-GObject-CRITICAL **: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed

いくつかのサイト*1によると,QtをONにした状態でOpenCVをビルドしたため,OpenCV(のHighgui)のbackendであるQtとimage_viewのbackendであるGTKを取り違えてる?的なエラーが起きているようです.(よくわからん)

エラーを回避するためにsudo make uninstallで一度OpenCVを取り除き,再度Qtのオプションをはずした状態でmakeしました.

$cmake -D CMAKE_BUILD_TYPE=RELEASE -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_OPENGL=ON ..
$cmake -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_OPENGL=ON -D MAKE_INSTALL_PREFIX=/usr/local ..
$make
$sudo make install
...

上記のコマンドで今のところ良好に動いています.Ubuntu14.04 + ROS IndigoでnonfreeのOpenCVを利用したい方は,OpenCVのインストール後にROSのimage_viewパッケージを立ち上げて競合が起こっていないか確認しておいた方がよいと思います.