箱庭シナリオPRO|【第3回】esminiの道路20本を、MuJoCoで走らせる ― 4つのレベル


DEVELOPMENT NOTE / 2026.10.19

道路を読む。物理で走る。全部、確かめる。

第1回では、道路をOpenDRIVE、シナリオをOpenSCENARIOとesminiで扱うと決めた理由を書きました。第3回は、その道路が本当に「物理で走れる道路」になるのかを、第2回で作った2号機を走らせて確かめた話です。目標は、esminiに付いてくる見本の道路を、全部MuJoCoで走れるようにすること。まる二日かけて挑みました。

OpenDRIVEの道路をMuJoCoで走らせる4つのレベル(M1〜M4)と、クリア条件(段0〜5)

一度にやると大変なので、4つのレベルに分けた

esminiの見本には、まっすぐな道から、クロソイド曲線、二重線、車線の増減、交差点、信号、片勾配(カント)の付いた周回路まで、20本の道路があります。これを一度に全部やろうとすると、どこで何が壊れているのか分からなくなります。そこで、ゲームのステージのように、4つのレベルに分けました。

  • M1 高速道路を走る:3車線の高速道路と、曲線の多い道路(e6mini)。esminiと位置を照合し、2号機が80・120 km/hで跳ねずに走る。あわせて、試験のしくみ(下のクリア条件)を作る
  • M2 esminiの道路を全部:クロソイド、二重線、車線の種類と増減、高さの変化。CARLAの地図(Town04)も読み込む
  • M3 交差点と信号:交差点の路面を右左折・直進で走り、標識と信号機を置き、信号で止まって青で発進する
  • M4 道路の物理:片勾配のカーブ、タイヤと路面の接触の安定、路面の摩擦(乾いた路面と濡れた路面)、立体交差

役割分担も、レベルを進めながら決めました。道路・車線・経路・信号の「意味」はesminiに聞き、車が走る「物理」はMuJoCoが担う。esminiができることを、箱庭で作り直さない、という方針です。

クリア条件は、かなり厳しくした

「読み込めた」「走った」だけでは、使える道路とは言えません。道路ごとに、どの段まで通ったかで評価しました。正解はesminiの計算か、決めておいた合格の値です。

  • 段0 読める:規格どおりに読めたか。未対応の要素が1つでもあれば失敗にする(黙って近似しない)
  • 段1 幾何:中心線・車線の境界・高さ・幅が、esminiと位置1 cm、向き0.1°以内で一致
  • 段1’ 当たり判定:物理の路面を、道路方向0.5 m・横0.25 mの格子で上から測り、高さの差1 cm、すき間0、継ぎ目の段差5 mm以内
  • 段2 物理:車が跳ねず、浮かず、流されずに走れるか(上下の加速度、浮いている時間、横のずれ)
  • 段3 意味:物理の上の車の位置を、esminiが正しい車線として認識するか。車線の種類・制限速度も一致
  • 段4 筋書き:箱庭で流したシナリオと、esmini単体での流し直しで、出来事の時刻が一致
  • 段5 再現性:何度回しても、同じ因果の流れと同じ結果になる

決めた合格の値は、結果に合わせて緩めない。測った値は、使ったMuJoCoの版と一緒に記録する。途中で、走行の数値を別の版で測っていたことに気づいて測り直したり、検証する側の誤り(境目の測り方)を直して回帰の試験を足したりもしました。

結果:まる二日で、4つのレベルをクリア

esmini 付属の 20 本の道路のうち、19 本が、形と意味の試験(段 0・1・読み込み・1’・3)にすべて合格しました。残る 1 本(straight_500m_signs)は、標識が決める制限速度の照合だけが残っています。走らせる試験(段 2)は代表の道路で、筋書きと再現性(段 4・5)はシナリオのある道路で確かめています。

  • M1(10/14):高速道路とe6miniが段0〜3に合格。e6miniの位置はesminiとの差が最大1.7 mm。割り込みのシナリオが段4・5に合格
  • M2(10/15):対象の18本すべてが、段0・1・読み込み・1’・3に合格
  • M3(10/15):T字路を右左折・直進で走り切り、標識・信号機を置いて、信号で止まって青で発進
  • M4(10/15):片勾配の周回路(velodrome、最大60°)が形と意味の試験(段 0・1・読み込み・1’・3)に合格。片勾配のカーブで車体の傾きが17〜19%小さくなる。乾いた路面(摩擦0.9)と濡れた路面(0.5)で同じシナリオを比べられる。立体交差の上下を、どちらも走れる

精度命でやったら、どうなったか

最初は、とにかく道路の形を正確に作ることにこだわりました。曲がりや坂を細かく切って、たくさんの凸の板を並べ、元の式との差を数mm以下に抑える。形の試験(段1・1’)はきれいに通りました。

ところが、実際に車を走らせると、板と板の継ぎ目でどかどかと上下する。坂の頂上や交差点では、なぜか速度が出ずに失速する。さらに、MuJoCoの版を替えると、走り方も組み立ての速さもまるで別物になりました。同じ道路・同じ車・同じ運転で比べた結果です。

MuJoCo平らな道坂・交差点組み立て(交差点5つの道路網)
3.12板の継ぎ目でがたつく(上下 2.5 m/s²)失速しない135 秒
3.13なめらか(0.12 m/s²)失速する。T字路の右折で止まり、坂の頂上では時速2 kmまで落ちる135 秒
3.16なめらか(0.10 m/s²)ほぼ失速しない2.6 秒
同じ道路・同じ車・同じ運転でMuJoCoの版だけを替えた比較。3.13で入った接触の計算の変更と、細かく切った路面の組み合わせで失速が起きていた。

原因を追うと、道路の形が悪いのではなく、路面を細かく切りすぎて、1つのタイヤがたくさんの小さな板に同時に触れていたことでした。正確さを上げるほど、タイヤにとっては「でこぼこの多い道」になっていたわけです。坂の頂上を時速80 kmで越える例です。

路面の切り方形の正確さ(高さの誤差)失速1つのタイヤが同時に触れる板瞬間の接触力
細かい0.2 mm11.8 %11 枚車重の52倍
ふつう11.1 mm4.2 %4 枚34倍
形は「細かい」が一番正確。でも走りの確からしさは「ふつう」が上。CARLAのTown04の交差点の右折では、失速が48 %から6 %に減った。

ここで分かったのは、「正確さ」「軽さ」「シミュレーションとしての確からしさ」は別の軸だということです。路面そのものを評価したいなら正確さを、たくさんの車でシナリオを回したいなら軽さと確からしさを取る。どれを取るかは目的しだいなので、路面の切り方を「細かい・ふつう・軽い」から使う人が選べるようにし、シナリオで走らせるときの標準を「ふつう」にしました。MuJoCoは、車と道路の側を3.16に上げています。

重さも同じ話でした。CARLAのTown04は、最初は見た目のファイルが約1 GB、物理のファイルが約530 MBになり、組み立てに49分かかりました。見た目と当たり判定を分け、版を上げ、切り方を見直して、いまは約1.5分です。

すべての道路で物理の正確さを保証したわけではありません。横断の形(OpenDRIVEのshape)は未対応、高速で坂の頂上を越えると少し減速する、路面の摩擦は実際の路面の再現ではない、といった「既知の制限」を、条件と一緒に記録しています。検証した範囲と限界をはっきりさせた、道路シナリオを試すための最初の土台です。

これから

道路づくりの機能はここでいったん止め、シナリオを条件を変えて繰り返し、記録し、比べることに力を移します。次回は、見本ではない実在の街の道路です。OpenStreetMapの道路に、PLATEAUの高さを足したらどうなるか。

※ 箱庭シナリオPROは開発中です。製品としての提供範囲・時期は未定です。シミュレーション結果は、実際の車両の走行性能・安全性を保証しません。
※ OpenDRIVE・OpenSCENARIOはASAM e.V.の標準規格です。esminiはオープンソース(MPL-2.0)で、見本の道路はesminiのリポジトリに含まれるものです。Town04はCARLAの地図です。

関連:第1回(標準規格とOSSの上に) / 第2回(箱庭カー2号機とトラック) / Urban Mobility

次回:第4回 レインボーブリッジ →

← Now Buildingに戻る


トップへ戻る