ArUcoマーカーを3Dプリントする!

はじめに

ロボットナビゲーションをしているとロボットがどの方向を向いているか知りたくなるときがあります. その姿勢推定を可能にしてくれるのがArUcoマーカーで, ロボットに搭載されたカメラでArUcoマーカーを捉えると, その幾何学模様の歪み方から逆算して, カメラやロボットの姿勢を推定することができます. このArUcoマーカーは印刷されたものを平板に貼ることで活用されることが多いですが, 耐久性に不安があります. そこで今回はArUcoマーカーを3Dプリントして, パーツ自体にArUcoマーカーを組み込めないか検証してみました.

準備したもの

ArUcoコード

セットアップ

ROS

ROSをインストールします.

aruco_detect

arucoマーカー認識用のROSパッケージをインストールします.

# install aruco_detect
sudo apt install ros-noetic-fiducials

以下のコマンドで被認識物のarucoマーカーを生成します. PDFファイルが作成されるので, そのファイルを開き, 右クリックをして, PNGファイルとして名前を付けて画像を保存します.

# generate aruco markers
rosrun aruco_detect create_markers.py 100 112 fiducials.pdf

PNG->SVG

Inkspaceを使って生成したコードの拡張子をPNGからSVGへ変換します.

InkspaceでPNGファイルを開き, 下記手順でSVGファイルに変換します.

  1. 画像を左クリック, 画像が点線で囲まれる状態にする
  2. パス->ビットマップのトレースを選択する
  3. 適用
  4. SVGファイルとして名前を付けて保存

PNGからSVGへの変換方法は下記サイトを参考にしました.

3Dモデルの作成

変換したSVGファイルを3Dモデルに挿入して, それを基に凹凸をつけ, コードを作成します.

  1. 挿入->SVGを挿入
  2. 挿入する面を選択
  3. Z角度の数値を変更して,角度を調整
  4. 平面XY尺度指定の数値を変更して, 大きさを調整
  5. 押し出し

3Dモデルが完成したら, プリントします.

着色

ArUcoマーカーの白色部分を塗料で作成しました.

検証

セットアップ

OAK-Dカメラ

セットアップには下記の記事を参考にしてみてください.

ArUcoマーカーの検出

下記コマンドを実行して, カメラでArUcoマーカーを検出できるか検証します.

ArUcoマーカーを検出できると, RViz上のimageではArUcoマーカーが緑色で囲われ, tf情報としてArUcoマーカーが表示されます.

今回3DプリントしたArUcoマーカーはカメラで検出することができました.

# launch rgb_publisher of depthai
roslaunch depthai_examples rgb_publisher.launch

# launch aruco detector
roslaunch aruco_detect aruco_detect.launch camera:=/rgb_publisher/color image:=image transport:=compressed

# slam
roslaunch fiducial_slam fiducial_slam.launch

# visualization
roslaunch fiducial_slam fiducial_rviz.launch

おわりに

今回は平板にArUcoマーカーを3Dプリントしましたが, ロボットやケースの一部としてプリントすることもできると思います. ぜひパーツに3Dプリントしてみてください!