aptpod Tech Blog

株式会社アプトポッドのテクノロジーブログです

BlenderでURDFを作成してみた

aptpod Advent Calendar 2024 12月4日の記事です。

デザインチームの上野です。 近年、デジタルツインの普及に伴い、建設機械や製造業でROSを用いて3Dモデルを扱う事例が増加しています。

そこで今回はROSで用いられる3DモデルのURDFについて0からBlenderを使って作成してみた流れをまとめたいと思います。

URDFとは

URDF (Unified Robot Description Format)とは、ロボットの構造を記述するためのXMLのフォーマットです。 ロボットの各パーツの座標や向き、質量などが全てを数値化して記述されています。

Phobosとは

Phobosは、Blender向けのオープンソースアドオンで、ROS用ロボットモデルをエクスポートする機能を提供します。URDFに加えて、SDFやSMURFといった形式でのエクスポートも可能です。

3Dモデルを作成しエクスポートしてみる

今回は手順の概要を理解するため、以下のような簡易モデルを作成し、それに設定を加えていきます。

それでは早速進めていきます。

アドオンのインストール

1.ダウンロード 以下のリンクからZipファイルをダウンロードしてください。

github.com

2.アドオンのインポート

Blenderのプリファレンスからアドオンをインストールします。

  1. インストールを押し先ほどDLしたZIPファイルを選択。
  2. Phobosのアドオンが表示されるのでチェックをいれる。

この後一度Blenderを再起動するとよいです。

モデリング

アドオンがインポートできたのでここからモデリングを進めていきたいと思います。

モデリング時に各パーツの中心座標の位置にジョイントができるのであらかじめ向きを意識して作成しておくと良いと思います。

モデリングが完成したら各メッシュのPhobos Typeを「Visual」に設定します。 メッシュを選択→プロパティの[Phobos Type] →[Visual]に変更

ジョイントの設定

モデルが用意できたらそれぞれのパーツにジョイントを設置していきます。 メッシュ選択後「kinematics」>「Create Link(s)」を押します。 オプションから位置を「Selected Object」にすることでパーツの原点にジョイントが自動的に移動します。

また「Parent Objects」にチェックを入れることでオブジェクトが自動的にジョイントの子供になります。

各パーツジョイントを設置し終わったら階層を整理します。

対象2つ選択後、Ctrl+Pを押すことでペアレントメニューが表示されるので「ボーン相対」を選択しどんどん親子関係を整理していきましょう。

以下のように親子関係を整理しました。

今度は各ジョイントの設定をしていきます。

ジョイントを選択後「Define Joint(s)」を押すことでジョイントの形状が変化し、ロボットの細かい制御の値などが編集できるようになります。

例えばロボットの首の部分に旋回用のJoint Typeを設定し、Lower/Upperの値を変更することで左右首を振り切らないようにできます。

コリジョンの設定

衝突判定用のコリジョンを設定します。

メッシュを選択した後「Create Collision Object(s)」を押すことで衝突反転用のメッシュが追加されます。オプションから形状を変化したり、個別でスケールなどの微調整を行えます。

慣性の設定

メッシュを選択した後「Create Inertials」を押すことで慣性の値を設定することができます。

モーターの追加

稼働させるジョイントを選択して「Add Motor」を押すと設定するモーターの詳細が設定できるようになります。

マテリアルについて

マテリアルはスペキュラーBSDFまたはプリンシパルBSDFの使用を推奨しています。

テクスチャがある場合出力をBSDFノードのベースカラーにイメージテクスチャノードを追加する必要があります(ノーマルマップも同様)。

エクスポートされた形式 (URDF、SDF、SMURF など) でサポートされているプロパティと、それをロードするプログラムによって異なる場合があるので結果は確認してください。

エクスポート

赤枠の部分で出力の設定をした後Export Modelを押すと指定したパスに自動的に出力されます。

モデルの確認方法

以下のURLにアクセスし、URDFフォルダをドラッグ&ドロップすると、Webブラウザ上でもモデルを確認できます。

gkjohnson.github.io

以上でBlenderを用いたURDFの作成してみたになります。

結構複雑そうな処理を簡単にモデルに実装できるので是非試してみてください。

まだまだ制御できることはたくさんありそうなので引き続き研究していきたいと思います。