In Silico

シミュレーション・制御・実機

MuJoCo 3.14はなぜ布の接触に貫通しない方式を足したのか

2026/10/3

  • MuJoCo
  • Physical AI
  • ロボット
  • シミュレーション
  • IPC
  • Genesis
  • libuipc
  • flex
  • 布
  • 接触
  • 連続衝突判定
  • barrier
  • ソフト接触
  • 時間刻み
  • 摩擦
  • FEM
  • GPU
  • Minchen Li
  • hinge
  • 拡張ラグランジュ法
  • 厚さ
目次
背景・問い・要点
背景

ロボットに布をたたませたり、つかませたりする動作を、シミュレータの中で学習させたい開発者がいる。その開発者は学習の途中で、布が布自身や台をすり抜けて反対側へ出る場面に出会う。すり抜けた後の状態は現実には起きない。学習はその状態を正しいものとして扱い、現実に起きない布の位置関係から動作の良し悪しを学んでしまう。

すり抜けは、接触の計算の仕方から生じる。シミュレータは、時間刻み(状態を一度に進める時間幅)ごとに物体の位置を更新し、刻みの終わりの位置で、物体どうしが重なっていないかを調べる。多くのシミュレータはこのとき、わずかなめり込みを許し、めり込みの深さに応じた力で押し返す。この扱いをソフト接触(soft contact)と呼ぶ。指先と厚い箱のように厚い物どうしなら、わずかなめり込みは結果をほとんど変えない。

問い

なぜ薄い布では、ソフト接触の計算で布が反対側へ通り抜け、MuJoCo 3.14が足した方式はそれをどう防ぐのか。

要点

めり込みを許す接触の計算ではミリ単位の厚さの布が一つの時間刻みで反対側へ通り抜けうるのに対し、MuJoCo 3.14が貫通しない布の接触のために足した方式は、確定する位置の更新をすべて連続衝突判定で確かめる12。 この方式は、布のような面状の変形体(flex)の接触に掛かる。 通り抜けは、一つの刻みで布が進む距離が、接触を検出する幅(布では厚さ程度)を越えたときに起きる。刻みの終わりの位置だけを調べる判定はその間の交差を見ないが、連続衝突判定(continuous collision detection、CCD)は移動の経路を調べるので、進む距離によらず交差を見つける。この方式が解くのはflexどうしと、flexと静止した形状との接触に限られ、摩擦と厳密な再生に対応しない21。

モデル・例示

二層の布で、一刻みに進む距離と厚さを比べる

※ この節の数値は説明のための仮定で、測定値ではありません。

布を半分にたたむ場面を考える。布の厚さは1 mmで、たたまれて上になる層が、下の層の1 mm上から落ち始めるとする。めり込みを許す計算では、刻みの終わりに二つの層の距離(それぞれの厚さの中心で測る)を測り、1 mm以内なら接触として検出して押し返す、とする。上の層が一つの刻みで進む距離を、0.5 mmと3 mmの二通り置く。

一刻みに進む距離刻みの終わりの距離刻みの終わりだけを見る判定
0.5 mm1 − 0.5 = 0.5 mm(上の層はまだ上)1 mm以内なので検出する
3 mm1 − 3 = −2 mm(上の層が2 mm下)1 mmを越えるので検出しない

3 mm進んだ場合、上の層は下の層を通り過ぎて2 mm下で止まる。刻みの終わりの位置だけを見る判定は、途中で二つの層が交差したことを知らず、次の刻みからは層が入れ替わったまま計算が続く。これが通り抜け(tunneling)である。

移動の経路を調べる判定では、同じ3 mmの移動を、1 mm上の始点から2 mm下の終点までの経路として扱う。経路の途中で距離が1 mmを下回るので、交差が見つかる。見つかったら移動の幅を縮め、交差しない位置で更新を確定する。交差した位置が確定されることはない。

この例から、三つの性質が言える。

  1. 通り抜けが起きるかどうかは、一刻みに進む距離と、接触を検出する幅の大小で決まる。進む距離は速さと刻みの長さの積なので、速さを上げるか刻みを長くすると起きやすくなり、物体に厚みを増すと起きにくくなる。時間刻みを細かくする、物体に厚みを持たせる、という通り抜けへの対処は、この大小関係を動かしている。
  2. 移動の経路を調べる判定は、進む距離によらず交差を見つける。見つけたら更新を縮めるので、確定される位置はつねに交差していない。
  3. 一刻みに進む距離が検出の幅より小さい場面では、二つの判定は同じ結果を出す。指先と厚い箱の接触がこの場面である。

MuJoCo 3.14のipcモードは、更新を確定する前に経路を調べる

MuJoCoは、Google DeepMindが開発するオープンソースの物理シミュレータである1。MuJoCoは、布やシートのような変形する物体をflexという要素で表す。2026年9月22日公開の3.14.0は、flexの接触に貫通(物体どうしが重なった状態)を起こさないための実験的な接触モードとして、ipcという設定(フラグ)を加えた1。以下、この設定を有効にした状態をipcモードと呼ぶ。作り手は、確定するすべての位置の更新を連続衝突判定で交差なしと確かめるので、flexの接触は通り抜けないと書く1。この確かめ方で保たれるのは、確定される位置がつねに交差していない、という点である。交差が見つかったときの扱いは、作り手の文書には書かれていない。MuJoCoのソースの注記は、連続衝突判定が許す割合だけ位置を進めると書く3。

ipcの名は、IPC(Incremental Potential Contact)に由来する。IPCは、Minchen Liほかが2020年にACM Transactions on Graphics(SIGGRAPH)で発表した接触の計算方式である4。IPCは各時間刻みで、物体の変形と慣性のエネルギーに接触の条件を合わせた一つの最小化問題を解き、交差しない位置だけを採る。IPCの実装は一般に、位置の更新の候補を連続衝突判定で調べ、交差が見つかれば更新の幅を縮める。IPCの論文は、この方式が材料の値や時間刻みの大きさによらず、交差のない軌道を保つと書く4。

MuJoCoのipcモードは、各刻みで、接触の条件を線形化したうえで一つの最小化問題を解く。IPCの論文は平滑化したbarrier(障壁関数)で解くが4、ipcモードはbarrierを使わない拡張ラグランジュ法で解く1。この拡張ラグランジュ法は、Juntian Zheng、Zhaofeng Luo、Minchen Liが2026年にACM Transactions on Graphicsで発表した、barrierを使わない方式である5。MuJoCoのソースの注記は、この論文を実装の出典として挙げる3。作り手は、このモードが実験的であると明記している2。IPCの論文が書く保証は論文の方式についてのもので、MuJoCoの作り手がこのモードについて挙げる根拠は、確定する更新を連続衝突判定で確かめることである1。

ipcモードが解く接触は、flexどうしと、flexと静止した平面・球・カプセル・箱・メッシュとの接触である2。対応するflexは面状(dim-2)のものである。設定は模型全体に掛かり、対応するflexはすべてこの方式で接触を解く2。動く物体とflexの接触と、剛体どうしの接触は、制約ソルバー(MuJoCoが接触の力を求めてきた従来の解法)が扱う2。ただし剛体もipcモードの刻みの中で進められ、2次元のflexを持たない模型もこの刻みを通る2。2次元のflexを持つ模型では、mj_forward の後の qacc は制約の力を含まない自由飛行の加速度になる2。たたんだ布の層どうしの接触はflexどうしなのでこのモードの対に入るが、動く指と布の接触は入らない。

Genesisは同じ方式をlibuipcに任せ、扱う物体の範囲が違う

Genesisは、ロボット学習向けのオープンソースの物理シミュレータである6。Genesisは、IPCの計算を自分で実装せず、外部ライブラリlibuipcに任せる。libuipcは、IPCをGPUで実装したライブラリで、香港大学、カーネギーメロン大学、Genesis AIなどの研究者が開発し、著者にはIPCの原論文の著者であるMinchen Liが入る7。本稿がMuJoCoと並べて取り上げるのは、別の作り手がIPCに由来する方式を別の形で組み込み、何を保証し何を外したかを一次資料に書いているからである。

Genesisの剛体の計算と、libuipc側の物体(布、FEMの変形体、剛体)を双方向につなぐ部品が、IPC couplerである。coupler(カップラー)は、二つの計算をつなぐ部品を指す。FEM(有限要素法)は、変形する物体を小さな要素に分けて計算する方法である。GenesisのREADMEは、IPCが布、FEMの変形体、剛体という異なる材料にまたがる、頑健な接触の扱いの統一的な枠組みを与えると書く6。READMEの例は、Franka Pandaのロボットアームが変形する立方体をつかむ場面と、布を操作する場面である6。確認項目には、接触中に物体どうしのめり込みがないことと、Genesisの剛体の動きがIPC側の物体に影響し、その逆も成り立つことが並ぶ6。

libuipcは、剛体、FEMの柔らかい物体、布、糸を一つの場面で扱い、衝突判定、接触の組み立て、線形代数はCUDAで動く8。libuipcのREADMEは、位置の更新を連続衝突判定で調べて縮める手順を、連続衝突判定を使う線探索(line search)として挙げる8。libuipcの開発者は、このライブラリが正確で貫通のない摩擦接触を保証すると書く7。Genesis AIがこの拡張ラグランジュ法による方式(AL-IPC)をlibuipcに取り込んだことも、READMEに書かれている8。確定する位置の更新を連続衝突判定で確かめる点は同じでも、方式が扱う物体の範囲と摩擦の有無は、実装ごとに違う。

MuJoCoは摩擦と厳密な再生に、Genesisは対応環境に制限がある

ipcモードが解く接触には、摩擦が効かない2。この接触は面に垂直な力だけを持ち、関わるflexやgeom(MuJoCoで剛体の形状を表す要素)の摩擦の値は適用されない2。この対に入るのは、布どうしが擦れる場面や、布が静止した台の上を滑る場面である。摩擦が無いのはこの実装の制約で、IPCの原論文は摩擦のモデルを含み4、libuipcの開発者も摩擦接触を扱うと書く7。作り手はモードを実験的と明記しており、この制約が恒久か一時的かは書いていないので、本稿は断定しない。

強化学習で状態を保存して巻き戻す使い方も、ipcモードでは制限される。ipcモードは、接触の乗数(制約を満たすための力の大きさを表す変数)を時間刻みをまたいで保持するが、この乗数は状態の仕様に含まれない。そのため mj_getState と mj_setState は全状態を保存できず、厳密な再生に対応しない1。この点も、作り手は変える予定を書いていない。

模型の尺度と、使える積分器・ソルバーは固定されている。ipcモードは、discrete積分器(MuJoCoの時間積分の方式の一つ)の接触モードで、他の積分器では使えない1。ipcモードは、メートル単位の模型とミリ単位の厚さのflexを前提にし、検出帯を3 mm、表面間の静止すき間を1 mm、収束速度を0.05 m/sに固定している2。ソルバー(最小化問題の解法)はCG(共役勾配法)に限られ、fwdinvとsleepのフラグと併用できず、逆動力学の計算にも対応しない2。作り手はソースの注記で、検出帯などの3つの値を1〜2 msの時間刻みで調整したと書く3。同じ注記は、静止すき間を対ごとのflexの半径から求め、検出帯もそれに従わせることを、今後の作業(TODO)として挙げる3。収束速度と、積分器・ソルバーの制限については、ソースの注記にも変える予定は書かれていない。

布を固定する先にも制限がある。flexの頂点を固定できる先は、静止した物体か、slide関節(直線に沿って動く関節)だけでたどれる物体に限られ、その鎖にhinge(回転)・ball(球面)・free(自由)の関節が入るとエラーになる2。hingeの関節の先にある物体には、布の頂点を固定できない。

連続衝突判定が位置を最後まで進めきれない刻みでは、ipcモードは動きの一部だけを確定し、警告を出す3。時間は刻みの分だけ進むので、この症状はスローモーションのように見えると、作り手は書く3。

libuipcの保証にも前提がある。libuipcのREADMEは、貫通しない保証が正しい初期形状と、衝突判定と求解の各ステップの成功に依存すると書く8。呼び出しが終わったことを物理的な正確さの証明として扱わず、診断を確かめるよう求めている8。Genesisの例が対応する環境は、LinuxまたはWindowsのx86 CPUとNvidiaのGPUに限られ、READMEはその末尾に “for now”(当面)を付ける6。解消の時期は書いていない。

出典8件
  1. Google DeepMind「MuJoCo 3.14.0」release notes, 2026-09-22. https://github.com/google-deepmind/mujoco/releases/tag/3.14.0 — ipc フラグを実験的な接触モードとして加え、確定する更新をすべて連続衝突判定で確かめるが、摩擦が無く厳密な再生に対応しないこと。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9

  2. MuJoCo「XML Reference, option/flag ipc」(2026-09-30 取得). https://mujoco.readthedocs.io/en/stable/XMLreference.html#option-flag-ipc — 解く接触の対、摩擦なし、CG 限定、固定した検出帯などの値、布を固定できる先の制限を明記した仕様。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13

  3. MuJoCo 3.14.0「src/engine/engine_ipc.c」(2026-10-03 取得). https://github.com/google-deepmind/mujoco/blob/3.14.0/src/engine/engine_ipc.c — 連続衝突判定が許す分だけ進める手順、1〜2 ms の刻みで調整した値と今後の作業、進めきれない刻みの警告を書いた注記。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6

  4. Li ほか「Incremental Potential Contact: Intersection- and Inversion-free Large Deformation Dynamics」ACM Trans. Graph. 39, 2020. https://ipc-sim.github.io/ — 交差のない軌道の保証、barrier の解法、摩擦のモデル。PDF: https://ipc-sim.github.io/file/IPC-paper-350ppi.pdf ↩ ↩2 ↩3 ↩4

  5. Zheng ほか「Robust and Efficient Penetration-Free Elastodynamics without Barriers」ACM Trans. Graph. 45(5), 2026. https://arxiv.org/abs/2512.12151 — ipc モードが実装の出典とする、barrier を使わない拡張ラグランジュ法。掲載版: https://doi.org/10.1145/3811035 ↩

  6. Genesis「IPC examples」README(2026-09-30 取得). https://github.com/Genesis-Embodied-AI/Genesis/blob/main/examples/ipc/README.md — 布・FEM・剛体にまたがる IPC の接触と双方向の結合の例、x86 CPU と Nvidia GPU に当面限る対応環境。 ↩ ↩2 ↩3 ↩4 ↩5

  7. Kemeng Huang ほか「libuipc: library of unified incremental potential contact」(2026-09-30 取得). https://spirimirror.github.io/libuipc-web/ — 貫通のない摩擦接触を保証するという開発者の記述と、Minchen Li を含む著者・所属。 ↩ ↩2 ↩3

  8. libuipc README(2026-09-30 取得). https://github.com/spiriMirror/libuipc — CUDA で動く連続衝突判定つき線探索、貫通しない保証が初期形状と各ステップの成功に依存すること、Genesis AI による AL-IPC の統合。 ↩ ↩2 ↩3 ↩4 ↩5

この記事はAIが執筆しています。内容には誤りが含まれる可能性があります。ご注意ください。