はじめに✨
生成AIツールを活用した、自動運転AIチャレンジへの取り組みを不定期に連載しています。本記事は、GoogleのNotebook LLMを使った音声解説でポッドキャスト配信を行っています。
AIツールを参謀、書記、執事という「役割」に分担し、「AIツール三種の神器」として活用しながら進めています。
前回は、取り組みの中で得た知識をAIと共有する、指南書の作成と書記(AIエディター)の活用について触れました。
今回は、特に参謀(AIチャット)の力を借りながら、AIチャレンジの予選レースで重要なパラメータチューニングを行い、オンラインでのコード提出まで行ってみます。🚗💨
シミュレータのアップデート🆕
8/14に2回目のシミュレータのアップデートがありました
https://github.com/AutomotiveAIChallenge/aichallenge-2025/pull/47
本番の実機レースに近い、車庫からスタートする仕様が変わったようです。
前回セットアップしたシミュレータから最新版に更新してみましたが、古いAWSIMのままだとスタート地点からカートが走行しないようです。AWSIMの更新も必要なようですのでご注意ください。⚠️
AI Challenge2025のROSパッケージ🤖
AIチャレンジの予選では提供されているコードやパラメータをカスタマイズして開発を進めることになっています。
公式サイトでは、AIチャレンジの進め方 がありますが、あまり詳細な解説はないようです。(ここからは謎解きゲームのようになっていますね🕵️♂️)
参謀(GPT5)とともにコードを解析しながら進めていきます。
以下のreference.launch.xmlにコンポーネントとパラメータの情報が含まれており、このURLを伝えて解析してみます。
"このURLのlaunchファイルを解析して、各コンポーネントの機能を表にまとめて"
https://github.com/AutomotiveAIChallenge/aichallenge-2025/blob/main/aichallenge/workspace/src/aichallenge_submit/aichallenge_submit_launch/launch/reference.launch.xml
以下のようなコンポーネントから構成されています。
GNSSとIMUのみで自己位置推定を行い、あらかじめ用意された経路データに沿って走行するシンプルな構成です。
| コンポーネント名 | 機能概要 |
|---|---|
simple_pure_pursuit |
参照軌跡から操舵・加減速を出力する追従制御。input/trajectory と車体状態から AckermannControlCommand を生成。(automotiveaichallenge.github.io, Zenn) |
external_velocity_limit_selector |
外部から与える最高速度制限の選択・配信。smoother と組み合わせて全体速度を絞る。(Qiita) |
vehicle_velocity_converter |
車両速度から twist_with_covariance を生成(自己位置・smoother系への入力整形)。(Qiita) |
imu_corrector |
IMU生データの補正。自己位置推定の前処理。(Qiita) |
gyro_odometer |
IMU+車速からのオドメトリ推定。(Qiita) |
ekf_localizer |
EKF による状態推定(姿勢・速度)。/localization/kinematic_state を生成。(Qiita) |
map_loader |
地図(Lanelet2)のロード/可視化。(Qiita) |
raw_vehicle_cmd_converter |
Autowareの制御指令をアクセル/ブレーキ/操舵量へ変換(車両アダプタ)。実機・シミュの橋渡し。(autowarefoundation.github.io) |
パラメータのチューニング🔧
参謀(GPT5)によると、自作のコンポーネントを作る前に、既存のPlannerアルゴリズムのパラメータを調整して、走りを改善することを目指すのが近道のようです。
では、どのパラメータをいじれば走りが良くなるでしょうか?。
最も簡単で効果が出やすいのは、提出用起動ファイルの中で Pure Pursuit(簡易制御)パラメータ のようです。公式の手引きでも、最初のカスタマイズとしてここを推奨しています。automotiveaichallenge.github.io
はじめに、このパラメーターを調整して、まずは一周できるよう調整してみます。
Pure Pursuitとは🚙
- 車両を経路追従させる古典的な制御アルゴリズムの一つ
- 自車の「後輪中心」から一定距離(lookahead distance)先にある経路上の点(lookahead point)を探し、その点を結ぶ円弧に従うように操舵角を決定する方式。
Pure Pursuitの主要パラメータ 一覧📋
| パラメータ | 概要 / ねらい | 主な効果 | 注意点 |
|---|---|---|---|
use_external_target_vel (bool) |
目標車速を切替:固定値を使うか(true)、Trajectoryの目標速度に従うか(false) | 速度計画を使わない簡易チューニング時は true が手早い | 速度計画(前段)を導入するなら false にするのが基本。(automotiveaichallenge.github.io) |
external_target_vel (m/s) |
use_external_target_vel=true のときに使う目標車速固定値
|
ストレートでの伸び・全体ペースが直接変わる | m/s 指定。use_external_target_vel=false の場合は無効。(automotiveaichallenge.github.io) |
lookahead_gain |
車速に比例した先読み距離のゲイン | 大きいほど応答性↑(敏感)/小さいほど安定傾向 | 大きすぎるとコーナーカットや振動が出やすい。(automotiveaichallenge.github.io) |
lookahead_min_distance (m) |
最低先読み距離(低速時の下限) | 低速域のふらつき抑制 | 大きすぎるとタイトコーナーで外へ膨らみやすい。(automotiveaichallenge.github.io) |
speed_proportional_gain |
速度誤差のPゲイン(加減速のキビキビ感) | 追従性↑/立ち上がり改善 | 上げすぎるとジャーク・ノイズ追随が増える。(automotiveaichallenge.github.io) |
Trajectoryデータの調整🗺️
このPure Pursuitは、あらかじめcsvで用意された経路データ(Trajectory)を追従してステアリングを制御しています。
コースをぶつかることなく周回し、タイムを速くするには、このテーブルの修正が重要そうです。
このテーブルには目標車速データも含まれています。
raceline_cctb_30km_wide.csv
デフォルトの設定では直線、カーブとも目標車速は一定値に設定されています。
Trajectory Editorを使うと細かくチューニングができるようです。
ここでは、超手っ取り早い方法として、今回は、以下のようなプロンプトでChatGPT5に修正してもらいました。
プロンプト例
"これはPure Pursuitの軌跡と目標速度データです。直線のスピードを10%上げて、カーブのスピードを落とすよう修正してください。最初の9個のデータは車庫からの走行で低速に設定しているため、修正しません。元データの列名、列数、データは同一とします。"
経路データの目標車速を曲率に応じた設定に修正したところ、走行が少し安定したようです。
修正したコードのオンライン提出📤
ローカルのシミュレータ上で走行を確認した後、提出の手順に従い、コードを圧縮します。
圧縮したファイルをオンラインのシミュレータにアップロードすると、ソースコードのビルド、シミュレーション走行と結果の評価まで自動で行われます。
提出は一日20回まで行うことができます。
ライブ観戦🎥
オンラインで提出すると、自分のランクが、自動運転AIチャレンジ2025 LIVEに公開されます。
WindowsのWSL環境で、3D描画なしで実行していましたが、オンライン提出後では、自分のカートが走行する様子をドライバー視点の3Dで確認できます。右側の2D画面では、走行軌跡とPlannerが経路の先読みしているポイントを確認できます。
さらに自分の走行だけでなく、他のチームの走行の様子も確認できて、上位チームの走行軌跡や速度を参考にすることができます。
自動運転AIチャレンジ2025 LIVE
さいごに📝
簡単パラメータチューニングを行い、オンラインでのコード提出まで進めました。
あと残り一週間を切ってますね。😥
