2014年10月7日火曜日

ROSでOpenCVを使う (C++編)

ROSとOpenCVの間で画像形式を変換するcv_bridgeパッケージをC++で使ってみます。
チュートリアルのページを参照してください。
Ubuntu12.04+ROS Hydroで動作を確認しています。

準備

画像の入力にはcv_cameraを使います。cv_cameraを使ったことが無い場合は以下のようにインストールして下さい。
$ sudo apt-get install ros-hydro-cv-camera
image_viewで画像が表示されるか確認してください。
$ rosrun cv_camera cv_camera_node
$ rosrun image_view image_view image:=/cv_camera/image_raw
cv_camera では /cv_camera/image_raw にカラー画像を出力しています。

新しいパッケージの作成

cv_bridgeをテストするための新しいパッケージ(cvTest)を以下のように作成します。
$ cd ~/catkin_ws/src
$ catkin_create_pkg cvTest sensor_msgs cv_bridge roscpp rospy std_msgs image_transport
次に、チュートリアルのページにあるソースコードをコピペして、~/catkin_ws/src/cvTest/src/image_converter.cpp  を作って下さい。
ここで、image_converter.cpp を見ると、以下のように /camera/image_raw からカラー画像を読み込むようになっています。
22     image_sub_ = it_.subscribe("/camera/image_raw", 1, 
23       &ImageConverter::imageCb, this);
cv_camera では /cv_camera/image_raw にカラー画像を出力しているので、このままでは画像データが正しく伝わらないので、以下の二つの方法のどちらかを行って下さい。

(1)image_converter.cpp を修正する

image_converter.cpp を以下のように修正してください。
22     image_sub_ = it_.subscribe("/cv_camera/image_raw", 1, 
23       &ImageConverter::imageCb, this);

(2)launchファイルでremapする

~/catkin_wa/src/cvTest/launch/image_converter.lauchを以下の内容で作成します。

<?xml version="1.0"?>
<launch>
 <remap from="/camera/image_raw" to="/cv_camera/image_raw"/>
 <node name="image_converter" pkg="CvTest" type="image_converter" />
</launch>
remap タグにより、変換を行ないます。

CMakeLists.txtの修正

~/catkin_ws/src/cvTest/CMakeLists.txt の最後に以下の4行を加えて下さい。

find_package( OpenCV REQUIRED )
include_directories(  ${catkin_INCLUDE_DIRS}  ${OpenCV_INCLUDE_DIRS} )
add_executable(image_converter src/image_converter.cpp)
target_link_libraries(image_converter ${OpenCV_LIBRARIES} ${catkin_LIBRARIES}  )

パッケージをmakeして、実行する。

$ cd ~/catkin_ws
$ catkin_make
エラーが無ければ、以下の手順で実行します。
$ roscore
別のターミナルウィンドウで
$ rosrun cv_camera cv_camera_node
さらに別のターミナルウィンドウで
image_converter.cppを修正した場合は、
$ rosrun cvTest image_converter
launchファイルでremapした場合は、
$ roslaunch cvTest image_converter.launch
次のような画面が表示されればOKです。
Webカメラの画像にOpenCVで合成した、「赤い円」が画面の左上に表示されています。


0 件のコメント:

コメントを投稿