Code Interpreter で自動運転レースのデータ解析をしてみた (1)
はじめに
Virtual Motorsport Lab Inc. (VML) でプロダクト開発をしている @danchinocto です。この記事は、第2回 Generative AI 勉強会 関西での発表内容をまとめ直したものです。
Code Interpreter とは
OpenAI ChatGPT の Plus ユーザが使える公式プラグインで、2023年7月上旬にリリースされました。
VML選手権シーズンα
現在、 VML で試験的に運営している自動運転レースです。シミュレータ上でレーシングカーを開発し、決められたサーキットを走行します。ラップは全3周を完走しなければならず、順位はファステストラップによって決まります。
上位3チームの走行動画です。第1戦は、経路計画 + フィードバック制御での開発競争が行われました。
自動運転レースのデータ解析
概要
今回は、Code Interpreter プラグインを使って自動運転レースの走行ログを解析しました。 ChatGPT への指示にはできるだけ自然言語を使うという方針で、日本語でどこまでできるかを試しました。また、プロンプトエンジニアリングの観点はそこまで考慮していません。
VML選手権シーズンαの第1戦上位3チームのデータを使い、以下の項目について実験しました。
- 前処理
- 可視化
- パフォーマンス評価
- 高度な解析 (オーバーステア・アンダーステア)
本記事では、2. 可視化までの結果をまとめています。
0. Code Interpreter のデモ
ファイルを添付して会話を送信すると、 Code Interpreter が中に含まれるデータを読み込み、会話内容に応じた処理をします。
複数のデータを zip ファイルにまとめて渡すことができます。そして、データについて詳細な指示がなくても、ヘッダー情報を使いながら中身を推測してくれます。賢い!
1. データの前処理
元々のログデータは、ラップ3周分のデータがまとめて保存されています。これを、ラップごとに分割する処理をお願いしました。車両がスタート・ゴールラインを通過したタイミングを計算し、その結果に基づいてデータを分割してもらいました。
試行錯誤が必要でしたが、分割できました。
最終的には、最初のスタート・ゴールラインの通過だけを判定し、残りは時間ベースの分割にしてもらいました (セクター分けがうまくいかず、途中で断念しました)。
セクターのラベリングもやってもらいました。
表示領域を変えたいときなど、指示に応じてその都度プロットし直してくれるのも、地味に便利です。下図は、ヨーレートとステアリング入力を比較しようと、いい感じの可視化を模索している様子です。プロンプトは意訳です。
2. 可視化
分割後のデータを、さまざまな要求に応じてプロットしてもらいました。まずは、走行軌跡の可視化です (0.のデモ動画と同じ内容です)。
出力されたのがこちら。
期待と違っていたので、以下の点を修正してもらいました。
- 3つの車両の走行軌跡を、ラップごとにまとめてプロットする (わかりやすい色の組み合わせを使う)
- コースの境界が一部切れているので、閉曲線としてプロットする
- 縦軸と横軸は等倍にする
何回かやり取りをして、最終的には要求通りの図を出力してもらえました。車両ごとのライン取りが比較しやすくなりました!
※ ChatGPT は、ラップごとに分けて3枚の図を出力しました。上図はそれらを横に並べて表示しています。
次に、各種データのプロットもお願いしてみます。
少し期待と違っていたので、指示をし直します。
さらに要求を追加していきます。
ざっくり説明でしたが、ちゃんと意図を汲み取ってくれました。賢い。
色や軸を調整する会話を経て、最終的に以下の図を出力してもらえました。
結構いい感じの図ができたので、次は車両同士の比較がしやすいように可視化してもらいます。
実際、リアルレースで使われているツールでは、上図のようにデータを重ねてデータを見ていくそうです。同様のことが Code Interpreter を使うことで実現できてしまいました!
まとめ
Code Interpreter プラグインを使い、自動運転レースのデータを可視化できました。たまに不十分なこともありますが、自然言語の指示に応じて適切にプロットしてくれます。期待通りに可視化してもらうには、ラップの分割やセクターのラベル付けなど、データの前処理をが重要だと思います。しかし、これらの前処理も ChatGPT がやってくれるので、自分で細かいことを考える必要がありません。Code Interpreter は、とても強力なツールだと感じました。
次の記事では、さらに高度な分析まで試した結果をまとめようと思います。
Discussion