ARマーカーの作成

概要

 ロボットを自律走行させる場合、自己位置を推定するための処理が必要になります。自己位置推定の方法の一つとして、ARマーカーを利用する方法があります。ARマーカーとは、QRコードのような白黒の画像を認識し、その角度や距離などの見え方から、自己位置推定などに使うためのマーカーです。ARマーカーの画像には、QRコードのように文字列やIDを埋め込むこともできます。ARマーカーの位置を固定し、位置を管理しておけば、1つのARマーカーを認識するだけで、現在位置を推定することができます。
 ここでは、ARマーカーを作成し、GazeboシミュレータのWorldデータとして、設置してみます。
 このページのパッケージのソースは、https://github.com/joe-ash/markerにアップしてあります。
 英語版しかありませんが、下記のGazeboのテクスチャの設定と、SDFのXML仕様と、Materialスクリプトの仕様が参考になります。

ARマーカーの仕様

 ARマーカーのサイズは、10cm四方の正方形とし、厚さ4mmの11cm四方の板の中心にテクスチャとして貼り付けています。ARマーカーのサイズを大きくすれば、遠くからでも認識可能となり、精度も上がります。ただ、広い設置場所が必要になりますし、ARマーカーの一部が見えなくなると認識されなくなるため、状況に応じて大きさは変更することが多いです。ですから、大きめのARマーカーデータを作成しておき、必要に応じて縮小して利用するのが良いと思います。
 ARマーカーは、各種IDのデータを一度作成しておけば、いろいろな箇所で利用することができます。ですから、GazeboシミュレータのWorldファイルで、利用時に設置場所と設置方向とスケールを指定することができるようにしてあります。

ARマーカー画像の作成

 ARマーカーは、実空間では、ARマーカー画像を印刷して、壁や床や天井などに貼り付けます。Gazeboシミュレータでは、ARマーカー画像をテクスチャとして貼り付けます。そのため、最初に、ARマーカー画像を作成します。ARマーカー画像は、ROSのar_track_alvarパッケージのcreateMarkerノードで作成できます。

$ roscore &
$ rosrun ar_track_alvar createMarker -s 10.0 -p

 IDが「0」から「9」までの、10個のARマーカーを作成すると、下記のような画像が生成されます。

 

 作成された10cm四方のARマーカーのサイズは、378pixel x 378pixelです。 このマーカーを切取って、余白を付けて416pixel x 416pixelにすると、11cm四方の正方形の板に張り付ける画像となります。
 このARマーカー画像を、marker000.pngというファイル名で保存します。000の部分は、ARマーカーIDと同じ番号にしておくと管理しやすいです。

SDFによるモデル作成

 ARマーカー画像ができたら、それを貼り付けたモデルデータをSDFで作成します。
 ROSのモデル作成はURDFで行い、Gazeboでも表示することができますが、GazeboのWorld定義では、SDFが推奨されています。各パッケージのモデルファイルは、modelsディレクトリに作成し、Worldファイルからは、includeタグで参照しています。この方法の場合、Worldファイルに定義するときに、scaleタグでARマーカーの大きさを変更することができますし、poseタグでARマーカーの位置と向きを変更することができます。

ファイル構成

GazeboシミュレータでARマーカーを表示

ファイル構成

 Worldファイルとlaunchファイルを作成したら、launchファイルで起動します。

$ roslaunch marker marker.launch

 下記のような画面が表示されます。
 

WebカメラでGazebo上のARマーカーを表示

 Webカメラ付き移動ロボットの作成で作成したロボットのWebカメラで、Gazebo上のARマーカーを表示してみます。cbotのパッケージを参照しますので、cbotのパッケージのビルドが必要です。

 launchファイルを作成したら、起動します。

$ roslaunch marker marker_cbot.launch

 下記のような画面が表示されます。rvizの左下のWebカメラの画像に、ARマーカーが写っているのが見えます。
 


Copyright (C) ASH Joe Masumura