DEVELOPMENT NOTE / 2026.10.19
道路の形はOpenStreetMapから。高さはPLATEAUから。
第2回では高速道路を走る車を作り、第3回では見本の道路を全部走らせました。でも、本当に試したいのは実在の街の道路です。第4回は、OpenStreetMap(OSM)の道路と、PLATEAUの3D都市モデルを組み合わせて、レインボーブリッジを走らせるまでの話です。
OSMの道路は、OpenDRIVEになる。でも、高さがない
OSMの道路は、SUMOのnetconvertでOpenDRIVEに変換できます。車線、交差点のつながり、信号までそろった道路になります。第1回・第3回で作った「OpenDRIVEをMuJoCoの路面にする」流れに、そのまま乗せられます。
ただ、OSMの道路には高さがありません。そのまま作ると、坂も橋もない、真っ平らな街になります。
そこで、ふと思いました。PLATEAUの高さを組み合わせれば、いけるんじゃないか? PLATEAUには、地形の高さ(DEM)も、橋の形もあります。
地面の道路は地形に、橋の道路は橋の床に
- 地面の道路:PLATEAUの地形の高さに載せる。地形の細かなでこぼこはならし、道路の横の傾きも付ける。都庁周辺では、OSMの道路とPLATEAUの建物・地形を重ねた街で、信号で止まって交差点を曲がりました(下の動画。路面の高さの誤差は2.5 mm、実時間)
- 橋の道路:OSMには橋の高さもありません。PLATEAUの橋のモデルには、車が通る床(デッキ)の形があります。そこで、OSMの橋の道路を、PLATEAUの橋の床の高さに合わせて持ち上げました。床が途切れる所では、坂がきつくなりすぎないようにして地面へ下ろします
レインボーブリッジを走る
こうして、レインボーブリッジの2段の橋(上の段は首都高、下の段は一般道)を、それぞれ別の路面として走れる見込みがつきました。
まずは、上の段の道路を走行できるようにしました。
芝浦のループを、下から上る
レインボーブリッジの芝浦側には、ぐるっと一周しながら橋へ上がるループがあります。一般道を時速50 kmで走り、橋の2段の下をくぐって、ループを一周しながら橋の下の段へ上がる(高さ13 m→48 m、約1.3 km)。3回走らせて、路面の高さの誤差は5.5 mm、速さの落ち込みは3.0 %、車線の中心からのずれは0.18 mでした。
ハマりどころ
実在の街のデータは、見本の道路のようには素直ではありませんでした。
- 道路が4,000 kmずれた。変換したデータの位置の基準を、esminiは足し、こちらの変換は足していなかった
- 信号が置かれない。変換で付く信号のIDが文字列で、esminiは整数として読んでいた。IDを振り直した
- 車が逆向きに走る。日本なので「左側通行」の印を付けたら、変換した道路の車線の向きと食い違った
- 交差点に段差ができる。橋やトンネルの層を上下させるとき、変換の道具が隣の道路にも小さな坂を付けていた
どれも、一度分かれば直せるものでした。直したものは変換の道具に組み込み、次の街では最初から避けられるようにしています。
これから
まだ、どの街でもうまくいくわけではありません。高架の道路が変換の途中で落ちてしまう所や、トンネルの扱いが残っています。PLATEAUの街を増やしながら、1つずつ広げていきます。
次回は最終回。ここまで作ったものを、CARLAと同じ道路・同じ台数で比べた結果です。
※ 箱庭シナリオPROは開発中です。製品としての提供範囲・時期は未定です。シミュレーション結果は、実際の車両の走行性能・安全性を保証しません。
※ 地図データ © OpenStreetMap contributors(ODbL)。3D都市モデルはPLATEAUを使っています。OSMからOpenDRIVEへの変換にはSUMOのnetconvertを使っています。
関連:第1回 / 第2回 / 第3回 / 第5回(CARLA比較) / Urban Mobility
