自作のロボットをシミュレーターに送ろうとした時、URDFファイルやMJCFファイルへの変換は避けて通れません。しかし、URDF出力に対応したCADソフトは一部に限られ、また出力できたとしてもテキストエディタで修正する必要があったりします。
そこで以前 URDF kitchenというURDF作成を強力に補助するGUIツールを作成したのですが、この度大幅なアップデートを行いました。
githubのURLはこちらです。すぐに使えます。
この記事ではアップデートした差分を扱っていきますので、基本的な使い方や概要については前回の記事をご覧ください。
バージョンアップのトピック
AIコーディングの力と地道な人力バグフィックス作業により、デラックスなシステムキッチンにリフォームされました。大きな変更点を列挙します。
MuJoCo用のMJCF形式での出力に対応
作成したモデルをURDFだけではなくMuJoCo用のMJCFファイルとして出力できるようになりました。
シーンファイルと一緒に出力されるので、すぐにMuJoCoビューワーで結果を表示することができます。
MESHファイルとして .stl に加え .dae, .obj に対応
MuJoCoのMESH(3Dモデル)として標準的に使われている.objファイルに対応しました。
urdf_kitche_MeshSourcerでは、フォルダのMESHファイルをまとめて.stl, .dae, .objに相互変換できる機能もついています。
コライダーの設定に対応
従来はコライダー(衝突判定領域)としてSTLをそのまま使うタイプでした。MESHをそのまま使うとシミュレータの負担が大きくなり、負担軽減のためにはプリミティブと呼ばれるシンプルな形状で近似することが望まれます。
そこで、MeshSourcerではBOXやSphere, Cylinder, Capsuleといったプリミティブ方式のコライダーをGUIで直感的に設定し出力できるようにしました。XML形式で出力されたコライダーはAssemblerの一括インポートで自動読み込みされます。
斜め関節に対応
これまでは90度単位の関節にのみ対応していましたが、関節の接続角度を自由に設定できるようしました。手作業での修正を省けます。
ジョイントのパラメータ設定に対応
慣性テンソルの自動計算や簡易対角化のほか、ジョイントの基本特性も設定できるようになり、形状以外の動作もシミュレーターで再現しやすくなりました。また全ジョイントの特性を一斉に書き換える機能もつけました。
右半身の自動組立機能を導入
前作はPartsEditorで左半身を設定することで、右半身のミラーを自動生成することができました。
今回はさらにAssemblerでの右半身自動組立に対応しました。
左半身だけ組み立てればあとは自動となりますので、作業負担は前作の約半分です。
Launcherを追加、各ツールの横連携も強化
LauncherからMeshSourcer,PartsEditor,Assemblerを起動できるようにしました。
さらにPartsEditorで開いたMeshをそのままMeshSoucerで開き直して編集したり、Assemblerから開いて編集できるようにもしました。
URDF、SDF、MJCFファイルの読み込み機能を追加
これはおまけ機能なのですが、GitHubなどで公開されている既存のURDF、SDF、MJCFをAssemblerで読み込み、ノード化して調整することができます。
他のソフトでURDFを出力したけどうまくいっていないので微修正したい、という場合にも使えるかもしれません。
閉リンクなどの完全再現はできていませんが、GitHubで公開されている既存のほどんどのファイルを読み込むことができます。
その他の細かいけど修正点
・Assemblerのノードパネルをグリットにスナップするようにしました。
・Assemblerで未接続のパネルをグレーで表示するようにしました。
・Assemblerでイナーシャの簡易チェックができるようにしました。
・カラーピッカーを共通化して使いやすくしました。
・Import部分のコードを分離して、Assemblerの起動を早くしました。
・他にもなにかあったかも...
URDF kitchen の使い方差分
操作についての前回の記事の差分です。
STEP 1 : 仕入れ・仕込み "Mesh Sourcer"
対応3Dモデル形式が増えたことで、STL SourcerからMesh Sourcerに名前が変わりました。
右側にメニューが増えています。
Origin Coordinates
操作方法は前回同様で、基本的なキーアサインも3Dビューに表示されています。
「Target Marker Position」にチェックを入れてマーカーを操作することで、MESHの原点を再設定できます。また、WASDキーで画面を回転させてから「Set Front as X」を押すことで、座標軸を入れ替えることができます。変更が決定したら「Save」でMESHを上書き保存します。
この時、「Clean Mesh」にチェックが入っていると、MESHデータを整えて軽量化します。
Collider Design
Boxなど簡単な形状のコライダーを作成できる機能です。
「Show Collider」にチェックをいれると、ざっくりFitしたコライダー形状が水色で表示されます。Typeのプルダウンで他の形状を選ぶことができます。
Positionにチェックが入っているとコライダーの領域をカーソルで移動できます。
その下のSize(Radius)にチェックが入っていると、カーソルで横幅、縦幅などを調整できます。
Rotationにチェックを入れると、カーソル左右で画面に対して回転させることができます。
Rough FitボタンはMESHに合わせてざっくりと形を設定します。
コライダーの形状が決まったらExport ColliderでMESHと同じディレクトリに出力します。
Batch Mesh Converter
指定したディレクトリの中のMESHのファイル形式を一括変換します。
入力、出力の形式をラジオボタンで選択し、「Select Directory and Convert」ボタンでディレクトリを選択すれば変換が始まります。
Clean Meshをチェックしておくと、MESHデータを整理して軽量化します。
STEP 2 : 調理 "Parts Editor"
3Dモデルに接続点をマークしていくParts Editorの操作には大きな変更点はありませんが、若干の改訂があります。
Calculate
Volume, Density, Mass, Center of Mass について、「Calculate」ボタンで自動計算します。この時、チェックを入れた項目を固定値、与件として他を計算しますので、通常はMass(重量)とCenter of Mass(重心)をチェックし、イナーシャを算出します。
この時、Zero-off diagにチェックを入れて計算すると、簡易的な対角化(Ixy=Iyz=Izx=0)を行い、パラメータをシンプルにします。対角化はロボット制御ではメジャーな操作のようです。
Angle(deg) も今回から導入したパラメータです。
現在編集しているオブジェクトは親ノードに対して自身の原点を中心に回転しますが、その回転角度のオフセットを設定することができます。
例えば肩関節や股関節を垂直や水平ではなく斜めに取り付ける場合などに該当します。
URDF kitchenだけを使う場合にはあまり気にしなくてよいことですが、URDFやMJCFを書いたことのある方は混乱されると思いますので補足します。
PartsEditorやAssemblerにはMESHに紐づくノードしかなく、jointが独立していません。jointが持つパラメータは親ノードと子ノードに分かれて属し、座標は親ノード、アクチュエーターとしてのパラメータは子ノードにそれぞれ属します。
接続角度については親ノード子ノードで共有され、どちらからでも設定が可能になっています。
これはプラモデルのようにパチパチと接続していくURDF KitchenのUIの都合によります。
他はおおむね前回のバージョンと同じです。
MeshSourcerボタンを押すと、PartsEditorで開いているMESHをMeshSourcerで開き、調整することができます。調整した場合はMeshSourcerでSave、PartsEditorでImport MeshもしくはReloadしてください。
中心のパーツと左半身のパーツの設定が終わったら、例のごとく「Batch Mirror "l_" to "r_" Meshes and XMLs」のボタンを押せば、右半身が自動生成されます。
STEP 3 : 盛り付け "Assembler"
設定が完了したパーツをグラフィカルなノードで組み立てていく工程です。
「Import XMLs」ボタンを押し、先ほどまでの設定ファイルを入れた「meshes」ディレクトリを指定します。
MESHデータと各種XMLデータが読み込まれ、ノードに自動で割り当てられていきます。
出現したノードは淡いグレーです。これは未接続であることを示し、親ノードに接続されることで濃いグレーに変わります。
中央および左半身のノードを順番通りに接続し、画面の中で整理して並べてください。
Node Inspector
ノードをダブルクリックすると詳細な設定画面になります。
-
Massless Decoration
チェックを入れると、MESHが質量やパラメータを持たない飾りとなります。 -
Hide Mesh
チェックを入れると、出力時に無効なノードとなります。 -
Zero off-diag
前述同様、簡易的な対角化を行い、慣性テンソルのパラメータをシンプルにします。 -
Min Angle(deg), Max Angle(deg)
回転角度のリミットを設定できます。 -
Effort,Damping, Stiffness,Velocity, Margin, Armature, Frictionloss
アクチュエータの各種パラメータです。現状は、位置サーボのみ想定しているため、無効となるパラメータもあります。 -
Colliders
MeshSoucerで設定したCollider用のXMLファイルもしくはMESHファイルを設定できます。コライダーは複数設定することもできます。 -
Out_x
子ノードを接続するためのアウトポートです。255個まで増やすことができます。
左半身の設定が終わったところで 「Build r_ from l_」というボタンを押すと、右半身が一気に接続 されます。この作業は大変ラクになりました。
次に 「Check Inertia」 ボタンを押します。ここでエラーがあった場合は判定できますので、ノードを開いて再計算するなどで対応します。(イナーシャにエラーがあるとMuJoCoで読み込めなくなります)
作業の途中のファイルは 「Save Project」 ボタンで保存できます。こまめな保存をお勧めします。
「Load Project」で作業を復旧できます。
最後に、 「Export URDF」「Export MJCF」 でURDFやMJCFを出力します。
MJCFの出力時にはファイル名の他、ベースリンクの地面からの高さを入力できます。MuJoCoでモデルが地面に埋まった状態で始まるとモデルが上空へ弾き飛ばされますので、ここで適切な値を設定しておきます。
また、アームロボットなどロボットを地面に固定する場合には、Fix Base to Groundをチェックします。
出力が完了したら、ビューアーやMuJoCoビューアーなどで動作確認をしてください。
Import URDF, IMPORT MJCF
今回のおまけであり目玉の一つである、URDF、SDF、MJCFのインポート機能です。
使いかたはシンプルで、該当の.urdfファイルやMJCFの.xmlファイルを選択して読み込み、ノードパネルに展開することができます。
GitHubなどで公開されているほどんとのURDF, MJCFを読み込むことができます。AIコーディングとはいえ、つくるのにはかなり苦労しました。パラメータなどは正しく反映できないかもしれず、今後、要望と時間があれば対応していきます。
最後に
Pythonで書かれているので、お手元でAIコーディングでバグを修正したり、使いやすいように機能を拡張したりするのもアリかと思います。
デジタルでプラモデルを作ったり新しい楽しみ方もできると思いますので、ぜひ使ってみてください。
前回の記事

