2010年1月15日金曜日

USBカメラを使ってOpenCVを試す

アームが動かせるようになったので、今度はカメラで認識させた結果を使ってロボットを動かしたくなります。



シミュレータ上でもカメラを使えるみたいです。
http://www.ros.org/wiki/pr2_simulator/Tutorials/UsingStereoProcessingInSimulation

でもちょっとこのPCでは非力なので、ちょっと不安定でした。

そこで、せっかくなので本物のカメラでためしてみます。

USBカメラ使えないのかな?と思ってwikiを調べたらありました。

http://www.ros.org/wiki/usb_cam

boschさんのリポジトリです。こういう外部のライブラリがすぐ見つかるのもいいですね。

http://bosch-ros-pkg.svn.sourceforge.net/
ここからDLしました。

$ rosdep install usb_cam
$ rosmake usb_cam
してみます。

エラーがでますね。
manifest.xmlが十分じゃないのかな?

エラーメッセージは以下です。
/home/ogutti/ros/pkgs/bosch_drivers/usb_cam/src/libusb_cam/usb_cam.cpp:292: error: ‘avcodec_alloc_frame’ was not declared in this scope

そこで、
$ apt-get install libavcodec-dev
してみました。

さらに、パスがよろしくない(Ubuntu8.10)みたいなので
sudo ln -s /usr/include/ffmpeg /usr/include/libavcodec
sudo ln -s /usr/include/ffmpeg /usr/include/libswscale
しました。
これでビルドできるはず。
(ソースの方いじってもいいかもです。)

さらに、
bosch_drivers/usb_cam/src/usb_cam_node/usb_cam_node.cpp
のオプションをいじります。

ちなみに私の環境(Mac Book Pro/ Ubuntu 8.10 内臓iSight利用)では
pixel_formatをyuyvにしたら動きました。

usb_camノードが/usb_cam/imageにsensor_msgs/Image型のトピックを発行します。


そこで以下にあるサンプルを使って表示してみます。
img_test.cppという名前にしました。

$ img_test image_topic:=/usb_cam/image
としました。(image_topicという名前のトピックを/usb_cam/imageにリマップしています。)


おー、表示されています。
これは結構感動ですね。

iSight -> /dev/video0 -> usb_cam_node -> (/usb_cam/image) -> img_test


という流れです。

これでカメラを使ってロボットを動かすことができそうですね。

0 件のコメント:

コメントを投稿