グランツーリスモ7(GT7)では、走行中の車速やアクセル、ブレーキ、エンジン回転数などのテレメトリーデータを外部のPCで取得できることをご存じでしょうか。
実は、特別な計測機器を用意しなくても、PS5とPCがあれば走行データを取得できます。
この記事では、GT7のテレメトリーをどのような仕組みで取得できるのか、また、取得に使用するPythonライブラリ「gt-telem」について紹介します。
1. GT7のテレメトリーは取得できる?
結論から言うと、GT7のテレメトリーデータはリアルタイムで取得できます。
GT7には、車両の走行状態をネットワーク経由で外部に送信する仕組みがあります。
この仕組みを利用すると、GT7から送信される走行データを、PCで約60Hz(1秒間に約60回)の頻度で受信できます。
取得できる主な情報は以下のとおりです。
| 分類 | 主なデータ |
|---|---|
| 車両状態 | 車速、エンジン回転数、ギア |
| ドライバー操作 | アクセル、ブレーキ |
| 車両運動 | 位置、速度ベクトル、車両姿勢、角速度 |
| タイヤ・足回り | 各輪の回転速度、サスペンション関連情報 |
| その他 | 燃料残量、ラップタイムなど |
なお、取得できるのはGT7が外部に送信しているデータに限られます。ゲーム内部で使われているすべての情報を取得できるわけではありません。
2. どのような仕組みで取得するのか?
GT7のテレメトリーは、UDP(User Datagram Protocol) という通信方式を使って送信されます。
UDPはネットワーク通信方式の一つで、TCPとは異なり、データの到着確認や再送を標準では行いません。
通信処理が比較的シンプルなため、GT7のように連続した走行状態を送信する用途に適しています。
通信の流れは次のとおりです。
PCからPS5に定期的にハートビートと呼ばれる信号を送信すると、GT7がテレメトリーデータを返す仕組みです。
送られてくるデータはSalsa20という方式で暗号化されているため、そのままでは各信号の値を読み取れません。
そこで、受信したデータを復号し、バイナリデータを解析する処理が必要になります。
ただし、これらを自分で一から実装する必要はありません。
3. Pythonライブラリ「gt-telem」とは?
GT7のテレメトリーデータを取得する方法の一つが、オープンソースのPythonライブラリ「gt-telem」を使うことです。
gt-telem
GitHub:RaceCrewAI/gt-telem
gt-telemは、Gran Turismoシリーズのテレメトリーを取得するためのPythonライブラリです。
主に次の処理を担当してくれます。
- PS5とのUDP通信
- テレメトリーデータの受信
- Salsa20による暗号化データの復号
- バイナリデータの解析
- Pythonから扱いやすいオブジェクトへの変換
つまり、通信プロトコルの詳細を意識せず、Pythonから走行データを扱える ようになります。
例えば、受信したテレメトリーから車速やエンジン回転数などを取り出し、Pythonのプログラムで処理できます。
私自身もgt-telemを使用しており、PS5から受信した走行データをCSVファイルとして保存するツールを開発しています。
4. データ取得に必要なもの
基本的には、以下の環境があれば始められます。
| 必要なもの | 用途 |
|---|---|
| PS5とGT7 | テレメトリーの送信元 |
| PC | データの受信・保存 |
| Python 3.10以上 | 受信プログラムの実行 |
| gt-telem | 通信・復号・データ解析 |
PS5とPCは、互いに通信できる同一ネットワークに接続します。
GT7側で特別なソフトウェアをインストールする必要はありません。また、通常の受信では、テレメトリー送信を有効にするための専用設定も不要です。GT7を起動してコースに出た状態で、PC側からハートビートを送信して受信します。
Python環境が準備できていれば、gt-telemは次のコマンドでインストールできます。
pip install gt-telem
gt-telemのGitHubリポジトリには使用方法やサンプルコードも公開されているため、Pythonの基本的な知識があれば、比較的簡単にデータ取得を試すことができます。
5. 知っておきたい注意点
GT7のテレメトリー取得には、いくつか注意点があります。
まず、今回紹介した方法は、GT7の公式な公開APIを利用するものではありません。コミュニティによって解析された通信仕様を利用しています。
そのため、ゲームのアップデートによって通信仕様や取得できる信号が変わる可能性があります。
また、テレメトリーは走行中に約60Hzで送信されますが、UDP通信ではパケットの到着が保証されないため、データの欠損が発生する可能性もあります。PCで常に毎秒60件を受信できるという保証ではありません。
さらに、信号によっては物理的な意味や単位が十分に明らかになっていないものもあります。
取得したデータを利用する際は、こうした制約を理解しておくことが重要です。
まとめ
GT7では、PS5からネットワーク経由でテレメトリーデータを取得できます。
Pythonのオープンソースライブラリ「gt-telem」を利用すれば、UDP通信や暗号化データの復号を自分で実装することなく、走行データを取得できます。
GT7のテレメトリー取得は、専用の計測機器がなくても、PS5とPC、Pythonがあれば試せる技術です。
興味のある方は、まずgt-telemのGitHubリポジトリを確認してみてください。