RoadManager eXtension - esminiのRoadManagerライブラリを拡張し、Pythonから簡単に使えるようにしたラッパーライブラリ
esmini_rmxは、esminiのRoadManagerライブラリを拡張し、以下の機能を提供します:
- RoadNetwork API - トポロジー解析、ジャンクション接続情報、座標変換
- Python Wrapper - RoadManagerとRoadNetworkの両方をPythonから簡単に利用
- 拡張機能 - ジャンクション角度計算、レーン情報取得など
- 🗺️ 道路ネットワークのトポロジー解析
- 🔄 座標変換(世界座標 ↔ 道路座標)
- 🚦 ジャンクション接続情報と角度計算
- 📏 レーンサンプリングと情報取得
- 📍 Position Object管理(作成/削除/コピー)
- 🚗 道路上での位置設定と移動
- 📊 レーン情報(幅、タイプ、速度制限)
- 🛣️ ジャンクションナビゲーション
# リポジトリをクローン
git clone https://github.com/yourusername/esmini_rmx.git
cd esmini_rmx
# ビルド
powershell -ExecutionPolicy Bypass -File .\build_rmx.ps1from esmini_rmx import RoadNetwork
from esmini_rmx.rmlib import RoadManager
import math
# RoadNetwork - 高水準API
with RoadNetwork("map.xodr") as net:
road_ids = net.get_road_ids()
conns = net.get_junction_connecting_roads(junction_id=1)
for road_id, angle in conns:
print(f"Road {road_id}: {angle * 180 / math.pi:.1f}°")
# RoadManager - 低水準API
rm = RoadManager()
rm.init("map.xodr")
pos = rm.create_position()
rm.set_road_position(pos, road_id=1, s=10.0, t=0.0)
# 重要: 負の距離で前進!
rm.position_move_forward(pos, -20.0, math.pi) # 20m直進
rm.close()- CMake 3.15以上
- Visual Studio 2019以上(Windows)
- Python 3.7以上(Pythonラッパー使用時)
esmini_rmx/
├── src/ # C++ソースコード
│ └── esminiRMXLib.cpp # RoadNetwork実装
├── include/ # ヘッダーファイル
│ └── esminiRMXLib.hpp # RoadNetwork API
├── pywrapper/ # Pythonラッパー
│ ├── esmini_rmx/ # Pythonパッケージ
│ └── examples/ # サンプルコード
├── test/ # C++ユニットテスト
├── script/ # 検証スクリプト
├── docs/ # ドキュメント
└── dist/ # リリースパッケージ
距離パラメータの符号はレーンの向きと交通規則によって異なります:
右側通行の道路の場合:
- 負のレーン(Lane -1など、右側): 正の距離でs座標が増加(道路の進行方向)
- 正のレーン(Lane +1など、左側): 正の距離でs座標が減少(道路の逆方向)
左側通行の道路の場合:
- 負のレーン(Lane -1など、左側): 正の距離でs座標が増加(道路の進行方向)
- 正のレーン(Lane +1など、右側): 正の距離でs座標が減少(道路の逆方向)
これは、OpenDRIVEでは正のレーンが道路のs座標とは逆方向に進むためです(対向車線を表現)。
推奨: レーンの向きに関わらず一貫した動作を得るには、現在のレーンIDと移動したい方向を考慮してください。
π/2(90°) = 右折π(180°) = 直進3π/2(270°) = 左折-1= ランダム選択
- ✅ 10個の新規API関数を追加
- Position管理:
delete_position,copy_position,get_number_of_positions - Position設定:
set_lane_position,set_s - 情報取得:
get_speed_limit,get_lane_width,get_lane_type,get_road_number_of_lanes,get_id_of_road_from_index
- Position管理:
- ✅ 包括的なドキュメント
- ✅ 角度規約の明確化
- ✅ 距離パラメータの警告
# C++ユニットテスト
cd build/Release
.\unit_tests.exe
# Pythonテスト
python script/test_rmlib_extensions.pyリリース用パッケージはdist/ディレクトリに含まれています:
- DLLファイル(
bin/) - Pythonパッケージ(
python/) - ドキュメント(
docs/) - サンプルコード(
examples/)
詳細はdist/README.mdを参照してください。
TBD
このプロジェクトはesminiをベースにしています。
Issue報告やPull Requestを歓迎します。