ROS IndigoでのOpenCVの利用について

ROSでカメラから取り込んだ画像をOpenCVを用いて処理したいときの
手順について示す.なお,ここでは,ROS Indigoを用いた説明となっている.

カメラ用ノードのインストール

ROSの全部入りパッケージのインストールをしても,USBカメラ関係はインストールされない.
そこで,下記の手順でパッケージのインストールを行う.

$sudo apt-get install ros-indigo-usb-cam

カメラ用ノードの起動テスト

カメラ用のノードを起動テストするためには,下記の手順を行う.
なお,コマンドが見つからない場合は,ROSの環境設定がうまくいっていない可能性があるので,見直すこと.

最初にroscore,imageview,usb_camを起動するため,ターミナルを3つ開き,各ターミナルで
下記の様にコマンドを実行する.

【ターミナル1】

$roscore

【ターミナル2】

$rosrun image_view image_view image:=/usb_cam/image_raw

【ターミナル3】

$rosparam set /usb_cam/pixel_format yuyv
$rosrun usb_cam usb_cam_node

画像処理用ノードの作成

(ここでは参考資料1を元に,cv_bridge_tutorialを作成.エディタは何でも良い)

$cd ~/catkin_ws/src
$catkin_create_pkg cv_bridge_tutorial sensor_msgs cv_bridge roscpp std_msgs image_transport
$cd cv_bridge_tutorial/src
$emacs cv_bridge_tutorial.cpp

添付のソースコードの中身をコピーする.

つづいて,CMakeLists.txtを書き換える.

$cd ~/catkin_ws/src
$cd cv_bridge_tutorial
$emacs CMakeLists.txt

133行目のコメント,および140-142のコメントを外し,
cv_bridge_tutorial_nodeと書かれている部分をcv_bridge_tutorialと編集する.

ノードの起動

各ノードを起動するために,ターミナルを4つ起動する.

【ターミナル1】

$roscore

【ターミナル2】(カメラの起動)

$rosparam set /usb_cam/pixel_format yuyv
$rosrun usb_cam usb_cam_node

【ターミナル3】

$rosrun cv_bridge_tutorial cv_bridge_tutorial

【ターミナル4】

$rosrun image_view image_view image:=/image_topic

ここまでやると,cv_bridge_tutorialで起動した3つのウィンドウ(original, result, edge)とimage_viewが取得した画像データを表示することができる.

最後に

cv_beidge_tutorialにあるようにカメラの画像をサブスクライブ(読み込み)し,処理結果をパブリッシュ(出力)するかたちをとることで,
ROSのカメラノードからくる画像をOpenCVの関数を用いて処理し,出力することができるようになる.
サンプルプログラムの中身をよく理解して適宜自分のアプリケーションに合わせた実装を行うこと.

参考資料

ロボットプログラミングⅡ:第8週 GAZEBOで画像処理(cv_bridge)

サンプルプログラム

ダウンロード