🏎

Code Interpreter で自動運転レースのデータ解析をしてみた (1)

2023/07/21に公開

はじめに

Virtual Motorsport Lab Inc. (VML) でプロダクト開発をしている @danchinocto です。この記事は、第2回 Generative AI 勉強会 関西での発表内容をまとめ直したものです。

Code Interpreter とは

OpenAI ChatGPT の Plus ユーザが使える公式プラグインで、2023年7月上旬にリリースされました。
https://openai.com/blog/chatgpt-plugins#code-interpreter

VML選手権シーズンα

現在、 VML で試験的に運営している自動運転レースです。シミュレータ上でレーシングカーを開発し、決められたサーキットを走行します。ラップは全3周を完走しなければならず、順位はファステストラップによって決まります。

上位3チームの走行動画です。第1戦は、経路計画 + フィードバック制御での開発競争が行われました。
https://youtu.be/-vqmdKTSTIQ

自動運転レースのデータ解析

概要

今回は、Code Interpreter プラグインを使って自動運転レースの走行ログを解析しました。 ChatGPT への指示にはできるだけ自然言語を使うという方針で、日本語でどこまでできるかを試しました。また、プロンプトエンジニアリングの観点はそこまで考慮していません。

VML選手権シーズンαの第1戦上位3チームのデータを使い、以下の項目について実験しました。

  1. 前処理
  2. 可視化
  3. パフォーマンス評価
  4. 高度な解析 (オーバーステア・アンダーステア)

本記事では、2. 可視化までの結果をまとめています。

0. Code Interpreter のデモ

ファイルを添付して会話を送信すると、 Code Interpreter が中に含まれるデータを読み込み、会話内容に応じた処理をします。
https://youtu.be/kPKrQT5aCS4

複数のデータを zip ファイルにまとめて渡すことができます。そして、データについて詳細な指示がなくても、ヘッダー情報を使いながら中身を推測してくれます。賢い!

1. データの前処理

元々のログデータは、ラップ3周分のデータがまとめて保存されています。これを、ラップごとに分割する処理をお願いしました。車両がスタート・ゴールラインを通過したタイミングを計算し、その結果に基づいてデータを分割してもらいました。

試行錯誤が必要でしたが、分割できました。

最終的には、最初のスタート・ゴールラインの通過だけを判定し、残りは時間ベースの分割にしてもらいました (セクター分けがうまくいかず、途中で断念しました)。

セクターのラベリングもやってもらいました。

表示領域を変えたいときなど、指示に応じてその都度プロットし直してくれるのも、地味に便利です。下図は、ヨーレートとステアリング入力を比較しようと、いい感じの可視化を模索している様子です。プロンプトは意訳です。

2. 可視化

分割後のデータを、さまざまな要求に応じてプロットしてもらいました。まずは、走行軌跡の可視化です (0.のデモ動画と同じ内容です)。

出力されたのがこちら。

期待と違っていたので、以下の点を修正してもらいました。

  • 3つの車両の走行軌跡を、ラップごとにまとめてプロットする (わかりやすい色の組み合わせを使う)
  • コースの境界が一部切れているので、閉曲線としてプロットする
  • 縦軸と横軸は等倍にする

何回かやり取りをして、最終的には要求通りの図を出力してもらえました。車両ごとのライン取りが比較しやすくなりました!

※ ChatGPT は、ラップごとに分けて3枚の図を出力しました。上図はそれらを横に並べて表示しています。

次に、各種データのプロットもお願いしてみます。

少し期待と違っていたので、指示をし直します。

さらに要求を追加していきます。

ざっくり説明でしたが、ちゃんと意図を汲み取ってくれました。賢い。

色や軸を調整する会話を経て、最終的に以下の図を出力してもらえました。

結構いい感じの図ができたので、次は車両同士の比較がしやすいように可視化してもらいます。

実際、リアルレースで使われているツールでは、上図のようにデータを重ねてデータを見ていくそうです。同様のことが Code Interpreter を使うことで実現できてしまいました!

まとめ

Code Interpreter プラグインを使い、自動運転レースのデータを可視化できました。たまに不十分なこともありますが、自然言語の指示に応じて適切にプロットしてくれます。期待通りに可視化してもらうには、ラップの分割やセクターのラベル付けなど、データの前処理をが重要だと思います。しかし、これらの前処理も ChatGPT がやってくれるので、自分で細かいことを考える必要がありません。Code Interpreter は、とても強力なツールだと感じました。

次の記事では、さらに高度な分析まで試した結果をまとめようと思います。

Discussion