gggggraziegrazie

graizegrazieさんのやったこと、学んだことを記録する雑記帳です

ROSを使ったOrbbec Astra Proのキャリブレーション

Astra Proは手頃な価格でかつデプスの有効範囲が長め(8m)なRGB-Dカメラです。このカメラは専用のキャリブレーションツールや、工場出荷時にキャリブレーションが行われている訳ではありません。そのため自分でキャリブレーションツールを探し、キャリブレーションを行なう必要があります。ROSを使う方は、camera_calibrationパッケージ[6]を使うことでキャリブレーションができます。本記事ではAstra ProをROSのパッケージでキャリブレーションするまでの流れを説明します。

Astra Proのノードを立ち上げる

ただ一方で、Orbbec公式のROSパッケージastra_launchに含まれているPro用launchファイルastrapro.launchを立ち上げただけでは、RGB用のtopicが立ち上がらないという問題があります。これはAstra ProのHW上の問題で、depthとRGBが別々のデバイスとして認識されているためです。RGB画像用のノードを、別途usb_camパッケージ等を使って立ち上げる必要があります。ただし皆同じように不便を感じているため、Clearpth Roboticsがlibuvc_rosパッケージを使うことで、Depthノードと同時にRGB用ノードも起動してくれるlaunchファイルを提供しています[1]。なおgit cloneする際は、cloneすべき対象がmasterではなくupstreamブランチなので、"git clone -b upstream https://github.com/clearpathrobotics/ros_astra_launch.git"とする必要がありますのでご注意ください。また[1]のlaunchファイルを使って立ち上げるRGB用ノードは、libucv_cameraパッケージ[2]を使っています。このパッケージを使うにはlibuvcが必要なので、[3]からcloneしてmake & make installしてください。さらにそのまま[1]のastra_pro.launchを実行しても、permissionエラーが出るはずです(私は出ました)。[4]の4.1を参考にpermissionの設定をしてください。RGBカメラのVendor idとProduct idは、lsusbでも調べられますが、[5]に記載してありますので、参考にしてください。

Astra Proのキャリブレーションを行なう

ノードを立ち上げた後は、単純に[6]を参考にキャリブレーションを行ってください。キャリブレーション用のチェスボード画像は、[7]からダウンロードできます。

Astra Proのキャリブレーション結果を反映させる

キャリブレーション結果は、~/.ros/camera_infoに保存されます。ここに保存しただけでは、[1]のlaunchファイルを立ち上げても結果は反映されません。結果を反映させるには、[1]の中のcamera_info_urlの中にURL形式でキャリブレーション結果(Yamlファイル)のパスを記述する必要があります。ただastra_pro.launchの中には、Yamlファイルのパスを共通的に使うためのパラメータrgb_camera_info_urlがあるので、Yamlファイルのパスをの様に記述しましょう。そしてrgb_camera_info_urlの中身を、として反映させましょう。これでastra_pro.launchを立ち上げた時に、libuvc_rosノードがキャリブレーション結果を反映してくれます。正しくファイルが読み込まれた時は、launchファイルの出力に"camera calibration URL: file:///home/username/.ros/camera_info/depth_Astra_Orbbec.yaml"と表示されるはずです。

なおibuvc_rosノードがキャリブレーション結果を元に画像の歪補正をしたtopic(rgb/image_rect_color)を発行するためには、rgb_processingの値をtrueに変える必要があります。必要な場合は変更をお忘れなく。