2010年11月6日土曜日

ar_pose (ARToolKitのマーカー認識 in ROS)パッケージを使ってみる

ar_poseパッケージはARToolKitの機能のうち、マーカーの位置姿勢を認識する機能だけを取り出して、TFメッセージを書き出すようにしたCCNY(City University of New York)のパッケージです。

前回はインストールまでやりました。

前回の記事でusb_camパッケージはcamera_infoトピックを発行しないのでどうしよう?
ということを書きましたが、これは古いusb_camパッケージを使っていたからで、
最新のboschのusb_camパッケージではちゃんと対応していました。

http://www.ros.org/wiki/bosch-ros-pkg#bosch_drivers

$ svn export http://bosch-ros-pkg.svn.sourceforge.net/svnroot/bosch-ros-pkg/trunk/stacks/bosch_drivers

のようにしてソフトをダウンロードし、
$ rosmake usb_cam
とすればOKですね。

ar_pose/launch/ar_pose_single.launch
を覗いてみたら、ちゃんとこのusb_camパッケージを使っていましたので、
USBカメラで簡単に試せるようになっています。

1.USBカメラの動作確認

まずはカメラをPCに差してusb_camノードを立ち上げます。
以下のようなusb.launchを用意して、

<launch>
  <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
    <param name="video_device" value="/dev/video0" />
    <param name="image_width" value="640" />
    <param name="image_height" value="480" />
    <param name="pixel_format" value="yuyv" />
    <param name="camera_frame_id" value="usb_cam" />
    <param name="io_method" value="mmap" />
  </node>
</launch>


$ roslaunch usb.launch
するとキャプチャ開始されると思います。

$ rosrun image_view image_view image:=/usb_cam/image_raw
とすると表示されます。されなければ、上記usb.launchの各種設定を見直してください。
確認が終わったらimage_viewは落しちゃっていいです。

動作確認が終わったらusb.launchのほうも一旦落としてください。



2.パターンの印刷
ではまず、
$ roscd artoolkit
して、
build/artoolkit-svn/patterns/pattHiro.pdf
を印刷してください。
↓です。


3.ar_poseの実行

$ roscd ar_pose
launch/ar_pose_single.launch
のusb_camノードの必要なパラメータ(pixel_formatなど)だけ書き換えて、
$ roslaunch ar_pose ar_pose_single.launch
してみましょう。

ほら、簡単でしょう?



ちなみに私の環境ではar_pose_single.launchは以下のような感じです。



<launch>
  <param name="use_sim_time" value="false"/>

        <node pkg="rviz" type="rviz" name="rviz"
          args="-d $(find ar_pose)/launch/live_single.vcg"/>
                  
   <node pkg="tf" type="static_transform_publisher" name="world_to_cam"
     args="1 1 0.3 0 0 0 world ar_marker 10" />

        <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" respawn="false" output="log">
                <param name="video_device" type="string" value="/dev/video0"/>
                <param name="camera_frame_id" type="string" value="usb_cam"/>
                <param name="io_method" type="string" value="mmap"/>
                <param name="image_width" type="int" value="640"/>
                <param name="image_height" type="int" value="480"/>
                <param name="pixel_format" type="string" value="yuyv"/>
                <rosparam param="D">[0.025751483065329935, -0.10530741936574876,-0.0024821434601277623, -0.0031632353637182972, 0.0000]</rosparam>
                <rosparam param="K">[558.70655574536931, 0.0, 316.68428342491319, 0.0, 553.44501004322387, 238.23867473419315, 0.0, 0.0, 1.0]</rosparam>
                <rosparam param="R">[1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]</rosparam>
                <rosparam param="P">[558.70655574536931, 0.0, 316.68428342491319, 0.0, 0.0, 553.44501004322387, 238.23867473419315, 0.0, 0.0, 0.0, 1.0, 0.0]</rosparam>
   </node>
      
        <node name="ar_pose" pkg="ar_pose" type="ar_single" respawn="false" output="screen">
                <param name="marker_pattern" type="string" value="data/patt.hiro"/>
                <param name="marker_width" type="double" value="80.0"/>
                <param name="marker_center_x" type="double" value="0.0"/>
                <param name="marker_center_y" type="double" value="0.0"/>
                <param name="threshold" type="int" value="100"/>
                <param name="use_history" type="bool" value="true"/>
        </node>
</launch>


以上です。あとはTFになっているんで、焼くなり煮るなりなんとでも。。。
カメラパラメータが適当なので、それなりに表示はされていますが、位置はずれていると思います。

次回はキャリブレーションをやってみます。

0 件のコメント:

コメントを投稿