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)