mjfit
MuJoCo向けの厳密な凸衝突形状:ペグ、穴、ねじ、歯車
ライセンス
MIT
概要
mjfitは、MuJoCoでの組み立てタスク向けに衝突形状を生成するPythonライブラリです。任意の輪郭からペグとその穴を、ボルトとそのナットを、あるいは噛み合う一対の歯車を生成し、それぞれを凸ピースで構成します。これらの凸ピースの和集合がちょうど部品そのものになります。MITのPulkit AgrawalのImprobable AI Labで、論文Blind Precise Assembly: Proprioceptive Sim-to-Real Peg-in-Hole for Diverse Partsのポリシーを学習させるために書かれ、MITライセンスでGitHubに公開されています。
解決する問題は具体的です。MuJoCoは凸形状どうしの衝突しか扱えず、穴は凹形状です。一般的な対処法は、CoACDやV-HACDによる近似凸分解か、メッシュに対するMuJoCoの符号付き距離場(SDF)衝突です。凸分解は組み立てタスクが頼りにするクリアランスそのものを埋めてしまい、SDF衝突は遅いうえに接触を取りこぼします。mjfitは代わりに、穴の周りのプレートを凸のくさびに切り分け、ペグを穴をクリアランス分だけ内側にオフセットしたものとし、ねじ山や歯車の歯を凸の断面形状からスイープして作ります。これにより、ペグのすべての辺が穴の辺からちょうどクリアランス1つ分離れ、MuJoCoはすべてのピースをネイティブに衝突計算できます。曲線は外接する多角形に置き換えられるため、丸穴が図面より小さくなることはありません。
各ジェネレーターはPythonまたはmjfitコマンドラインからMJCF文字列を返し、輪郭や寸法はパラメーターなので、1回の学習で何千もの異なる組立品を扱えます。プロジェクトページでは、論文のポリシーとmjfitの比較をブラウザー上でライブ実行できます。
mjfit には 3 つのジェネレーターがあります。mjfit.peg は穴またはペグのどちらかの輪郭を、頂点のリストまたは mjfit.shapes の形状(円、長方形、スタジアム形、台形、正多角形、星形、任意の多角形、角を丸めたベジェ輪郭、または CSV ファイル)として受け取り、もう一方をクリアランス分だけ正確にオフセットした形状として生成します。オプションで、USB の舌片やコネクターピンのように穴の内側に立つ材料を追加したり(その場合ペグはそれらを囲む中空のシェルになります)、幅の広いグリップ部、最小リム付きの凸形の外板、閉じた穴、固定のペグ質量を加えたりできます。mjfit.thread は、ISO メートル、台形、ACME、角、バットレス、丸線、またはカスタムの歯形から、一条ねじ・多条ねじ、左ねじ・右ねじのボルトとナットを生成します。mjfit.gear は、ヒンジ上にインボリュート歯を持つ平歯車またはかみ合う歯車ペアを、オプションのモーター付きで生成します。各歯は 1 つの凸角柱です。
設定はジェネレーターの引数を記述した YAML ファイルで、パッケージには既製の設定が同梱されています。円、星形、USB-A、USB-C、HDMI、RJ45、D-sub(DB9)、XLR3 のペグ、M10 と M6 のねじと FurnitureBench の脚、いくつかの歯車ペアです。学習用には、mjfit.sample_pegs が 2 つのファミリー(角を丸めたランダムな凸輪郭、または穴の中に最大 3 つの島を持つ基本形状)から再現可能なランダムなアセンブリを生成し、mjfit.grid が多数のアセンブリを名前が衝突しないように 1 つのシーンに配置します。
出力はそのまま使えます。すべての geom は硬い接触を持つデフォルトクラスに属し、ファイルは単体で実行することも、より大きなシーンに取り込むこともでき、USD コンバーターが必要とする場合はメッシュを OBJ ファイルとして書き出せます。リポジトリのベンチマークは、20 µm までのクリアランスを持つ 16 mm の丸ペグまたは角ペグで、mjfit を CoACD、V-HACD、MuJoCo のメッシュ SDF と CPU 上および MuJoCo Warp による GPU 上で比較しており、すべての数値を再現するコマンドも同梱しています。
重要な理由
接触の多い組み立ては、シミュレーションで学習させるのが最も難しいタスクの一つで、難しいのは学習そのものより形状であることが少なくありません。シミュレーション上の穴が実物より小さかったり、粗かったり、遅かったりすれば、それで学習したポリシーは誤ったことを学びます。mjfitは、厳密で高速、かつ手続き的に変化させたペグ、穴、ねじ、歯車を、MuJoCoを使う誰にでもpip installひとつで提供し、GPU上で大規模学習を行うMuJoCo Warpにも対応します。開発のきっかけとなった論文は、それが何を可能にするかを示しています。完全にシミュレーションで学習したブラインド挿入ポリシーが実機のアームに転移し、見たことのない形状のペグを挿入します。
解決する課題
MuJoCoは凸形状どうしの衝突しか扱えないため、穴の開いたプレートは近似するしかありません。凸分解はペグ挿入、ねじ締め、歯車の噛み合いといったタスクが頼りにするクリアランスを塞いでしまい、距離場による衝突は遅く接触を取りこぼします。mjfitは、和集合がちょうど部品になる凸ピースで各部品を構築してクリアランスを保ち、パラメーターから何千もの多様な組立品を生成します。
主なポイント
- 和集合がちょうど部品になる凸ピースから、MuJoCo用のペグと穴、ボルトとナット、噛み合う歯車を構築
- ペグのすべての辺が穴の辺からちょうどクリアランス1つ分離れ、円は外接多角形になるので、穴が図面より小さくなることはない
- リポジトリのベンチマークによると、CPU上でペグと穴はMuJoCoのメッシュSDFより1桁速く、精度は同等以上
- 実在のコネクターや締結部品の設定を同梱:USB-A、USB-C、HDMI、RJ45、D-sub、XLR、M10とM6のねじ、歯車対
- 手続き的サンプリングで、1回の学習用に何千もの再現可能な組立品を生成
- MITの論文Blind Precise Assemblyのために開発され、その挿入ポリシーはシミュレーションから実機のアームへ転移
対象
- MuJoCoやMuJoCo Warpで組み立て、挿入、ねじ締め、歯車の噛み合いのポリシーを学習させる研究者
- 狭く厳密なクリアランスを持つ多様な部品を大量に必要とするロボット学習チーム
- 凹形状の部品で凸分解やSDF衝突の限界に突き当たったシミュレーションエンジニア
- 接触の多いマニピュレーションを学び、既製のコネクターや締結部品のモデルを求める学生
制限事項
- 初期リリース:バージョン0.1.0で、作者1人が保守しており、PyPIではなくGitHubからインストールする
- MuJoCo専用。他のシミュレーターにはメッシュがOBJファイルとして渡るだけで、接触モデルは使えない
- 生成できるのはパラメトリックな部品(ペグと穴、ねじ、平歯車)で、任意のCADモデルではない
- 剛な接触には1 ms以下のタイムステップが必要で、ヒンジ上の歯車にはデフォルトのNewtonソルバーではなくMuJoCoのPGSソルバーが必要
- ねじのくさびはらせんの離散化でわずかに材料を失うため、ねじはその公差の範囲でのみ厳密