はじめに
自動運転AIチャレンジ2026でMPC(Model Predictive Control)を調整していると、TrajectoryのCSVを直接編集したくなる場面があります。
しかし、数値だけを見ながらCSVを編集する方法には、次のような難しさがあります。
- 修正した点がコース上のどこにあるのか分かりにくい
- 点の重複や間隔のばらつきに気付きにくい
- headingやcurvatureを手作業で整合させるのが難しい
- 修正前後の差を確認しにくい
- 車体が壁に近づきすぎていないかCSVだけでは判断できない
- 元ファイルを誤って上書きするリスクがある
そこで、Lanelet2 map上でtrajectoryを確認・編集するオフラインGUIツール「Kaleidoscope」を作成しました。
名前は適当につけました。
GitHubリポジトリはこちらです。
Kaleidoscopeは大会運営の公式ツールではありません。本記事に記載する既定値や判定結果も、自動運転AIチャレンジ2026の公式確定仕様を意味しません。
Kaleidoscopeでできること
KaleidoscopeはPython/Tkで実装したオフラインtrajectory editorです。ROS topicやserviceへ接続するROS nodeではありません。
主な機能は次のとおりです。
- trajectory CSVをLanelet2 OSM上へ表示
- trajectory pointの選択と座標編集
- 周回経路/非周回経路の明示
- CSV schema、有限値、点間隔、heading、curvatureなどの検証
- trajectory geometryの正規化
- オフライン速度プロファイルの再生成
- Original/Working/Candidateの比較表示
- occupancy gridを使った壁とのclearance検証
- 車体footprintを考慮した補正候補の生成
- validation後の安全な別名保存
MPC用CSVは、次のcanonical 7列を扱います。
s_m,x_m,y_m,psi_rad,kappa_radpm,vx_mps,ax_mps2
既存のPure Pursuit用8列CSVも形式を分けて検証できますが、本記事ではMPC trajectoryの編集を対象にします。
対応環境
本記事では、自動運転AIチャレンジ2026のリポジトリと運営提供Dockerイメージを使用します。
Kaleidoscopeは、必ず次の位置へ配置してください。
aichallenge/workspace/src/aichallenge_submit/
├── aichallenge_submit_launch/
│ └── map/
│ └── lanelet2_map.osm
└── multi_purpose_mpc_ros/
├── env/
│ └── final_ver3/
│ ├── traj_mincurv.csv
│ ├── occupancy_grid_map.yaml
│ └── occupancy_grid_map.pgm
└── tools/
└── kaleidoscope/
Kaleidoscopeはこの配置を利用して、既定のtrajectory、Lanelet2 map、occupancy gridを探索します。以下の名前や配置を変更した環境は、現時点ではサポート対象外です。
multi_purpose_mpc_rosmulti_purpose_mpc_ros/env/aichallenge_submit_launch- mapおよびtrajectoryファイル
インストール
AI Challengeリポジトリ内のmulti_purpose_mpc_ros/toolsへ移動し、Kaleidoscopeをcloneします。
cd aichallenge/workspace/src/aichallenge_submit/multi_purpose_mpc_ros
mkdir -p tools
cd tools
git clone https://github.com/MasanoriSuda/kaleidoscope.git
ホスト側でvenvを作成したり、pip installを実行したりする必要はありません。本記事ではホストPythonからの直接起動をサポートしません。
起動方法
最初に、ホスト側でAI Challengeリポジトリのルートへ移動します。
cd /path/to/aichallenge-2026
Autoware commandコンテナへ入ります。
make autoware-bash
ここから先はDockerコンテナ内で実行します。
cd /aichallenge/workspace/src/aichallenge_submit/multi_purpose_mpc_ros/tools/kaleidoscope
python3 -m kaleidoscope
引数を省略すると、リポジトリ内の既定MPC trajectoryとLanelet2 mapを自動検出し、周回経路として開きます。
任意のファイルを指定する場合は、次のように起動します。
python3 -m kaleidoscope \
--trajectory ../../env/final_ver3/traj_mincurv.csv \
--osm ../../../aichallenge_submit_launch/map/lanelet2_map.osm \
--circular
使用できる主な引数は次のとおりです。
| 引数 | 内容 |
|---|---|
--trajectory <CSV> |
編集するtrajectory CSV |
--osm <OSM> |
表示に使用するLanelet2 OSM |
--circular |
周回経路として開く |
--open |
非周回経路として開く |
--preset mpc |
MPC用の既定ファイルを使用 |
--preset pure_pursuit |
Pure Pursuit用の既定ファイルを使用 |
基本的な編集手順
1. trajectoryを開く
Open Trajから編集対象のCSVを開きます。周回コースの場合はCircularが有効になっていることを確認します。
周回であることと、CSVの始点・終点が重複していることは別の状態です。経路の用途に合わせて明示してください。
2. 編集前にValidateする
Validateを実行すると、例えば次のような問題を確認できます。
- schemaや列数の不一致
- 空行や不正値
- NaN/Inf
- 重複点や極端に短いsegment
- 不正なarc length
- headingやcurvatureの不整合
- 速度、加速度、横加速度の範囲
問題を選択すると、該当するCSV行やtrajectory上の位置を確認できます。
3. trajectory pointを編集する
点を選択して座標を調整します。MPC用trajectoryのXYを変更すると、次のmetadataは古い状態になります。
s_mpsi_radkappa_radpmvx_mpsax_mps2
XYだけ変更してそのまま保存するのではなく、後述するgeometryと速度情報の再生成を行います。
4. geometryを正規化する
Normalize Geometryでは、重複終端や退化点の処理、再サンプリング、s_m、heading、curvatureの再生成を行います。
処理結果はすぐに編集中データへ反映されず、Candidateとして表示されます。Original/Working/Candidateを比較してから、Apply CandidateまたはDiscardを選択できます。
5. 速度情報を再生成する
Recompute Speedでは、最大速度、前後加速度、最大横加速度などを指定し、curvatureを考慮したオフライン速度プロファイルを生成します。
ただし、ここで生成するvx_mpsとax_mps2はCSV metadataです。現行MPCでは実行時の速度上限処理が優先されるため、CSVを保存しただけで実車・シミュレータの走行速度がそのまま変わるとは限りません。
6. clearanceを確認する
壁との距離を確認する場合は、Vehicle / Margin Settingsでoccupancy-grid YAML、車体寸法、margin、unknown cellの扱いを確認します。
Validate Clearanceを実行すると、trajectory上の車体矩形とpoint間のswept footprintを使って静的なclearanceを検証します。
必要に応じてAdjust Clearanceから補正候補を生成できます。補正後はgeometryと速度metadataの状態を確認し、再度Validateしてから保存します。
Clearanceの
SAFEは、AWSIMや実車での非接触を保証するものではありません。occupancy grid、車体基準点、collider、離散化などの差があるため、最終確認はシミュレータで行ってください。
7. 別名で保存する
最初はSave Asを使用し、元CSVを残してください。
例えば次のような名前にします。
traj_mincurv_edited.csv
traj_mincurv_normalized.csv
traj_mincurv_speed_profiled.csv
保存前には再度Validateを実行します。Kaleidoscopeはvalidation errorやstaleなmetadataが残る場合、保存を停止します。
実際の使用例
Trajectoryを若干外回りにしてみます、元データ(真ん中)との比較ができます

などなど
GUIが表示されない場合
python3 -m kaleidoscopeはDockerコンテナ内で実行します。ホスト上で実行すると、Python依存関係が不足して次のようなエラーになることがあります。
ModuleNotFoundError: No module named 'defusedxml'
この場合、ホストへパッケージを追加するのではなく、make autoware-bashでコンテナへ入っているか確認してください。
コンテナ内で実行してもGUIが表示されない場合は、ホスト側で次を確認します。
export XAUTHORITY=~/.Xauthority
./setup.bash doctor
DISPLAYまたはXAUTHORITYに警告が出る場合は、doctorの案内に従ってX11設定を修正し、もう一度コンテナへ入ります。
安全に使うための注意
- 元CSVを最初から上書きせず、別名で保存する
- Validateのerrorを残したまま保存しない
- clearanceの結果だけで壁接触しないと判断しない
- 生成したtrajectoryはC++ validatorでも確認する
- AWSIMで最初のヘアピンと1周を確認する
- 実車へ適用する前にシミュレータで検証する
- 2026公式仕様として未確認の値を確定値として扱わない
Kaleidoscopeはtrajectory編集時の見落としを減らすための補助ツールです。最終的な走行安全性や評価互換性を保証するものではありません。
まとめ
Kaleidoscopeを使うと、MPC trajectoryをCSVの数値だけで編集する場合と比べて、次の作業を一つのGUIで進められます。
- Lanelet2 map上でのtrajectory確認
- geometryの編集と正規化
- 修正前後の比較
- 速度metadataの生成
- occupancy gridによるclearance確認
- validation付きの安全な保存
起動手順は次の2段階です。
# ホスト
make autoware-bash
# Dockerコンテナ内
cd /aichallenge/workspace/src/aichallenge_submit/multi_purpose_mpc_ros/tools/kaleidoscope
python3 -m kaleidoscope
それではいい夏を!


