GT7DashboardのJSONデータをC#で解析してみた

GT7Dashboardの不満

※GT7Dashboardの導入方法、詳細について知りたい方は下記リンクを先に確認してください。
GT7 Dashboardでテレメトリーデータを取得

GT7Dashboardの表示では、走行映像とデータを見比べても、映像と対応するデータが何処なのかわかりにくいです。

走行データをリアルタイムでトレースしたい

走行動画と同じスピードで走行データのトレースが出来れば分かりやすそうです。

速度データのトレースアプリを作成

映像と対比して見るためにリアルタイムでデータをトレースするアプリを作成し、トレース映像を記録しました。そのトレース映像を走行映像と同時に流すことで、映像とデータの対比が容易に行えます。

GT7Dashboardの走行データをトレーシング

↑YouTubeリンク(こっちの方が画質が良い)

実際にデータトレースした走行映像を作成

GT7Dashboardのデータ構造

ここからはGT7DashboardのデータをC#で扱うために調べた内容です。

GT7Dashboardのデータ保存機能

取得したテレメトリーデータはjson形式で取得することが出来るので、実際に走行データを保存するとjsonデータでした。

データ構造の解析

実際のデータを見て構造を確認しました。C#でクラス定義した結果です。

internal class GT7DashboardData
{
    [JsonProperty ("title")]
    public string Title { get; set; }

    [JsonProperty("lap_ticks")]
    public int LapTicks { get; private set; }

    [JsonProperty("lap_finish_time")]
    public int LapFinishTime { get; private set; }

    [JsonProperty("lap_live_time")]
    public double LapLiveTime { get; private set; }

    [JsonProperty("total_laps")]
    public int TotalLaps { get; private set; }

    [JsonProperty("number")]
    public double Number { get; private set; }

    [JsonProperty("throttle_and_brake_ticks")]
    public double ThrottleAndBrakeTicks { get; private set; }

    [JsonProperty("no_throttle_and_no_brake_ticks")]
    public double NoThrottleAndNoBrakeTicks { get; private set; }

    [JsonProperty("full_brake_ticks")]
    public double FullBrakeTicks { get; private set; }

    [JsonProperty("full_throttle_ticks")]
    public double FullThrottleTicks { get; private set; }

    [JsonProperty("tires_overheated_ticks")]
    public double TiresOverheatedTicks { get; private set; }

    [JsonProperty("tires_spinning_ticks")]
    public double TiresSpinningTicks { get; private set; }

    [JsonProperty("data_throttle")]
    public List<double> DataThrottle { get; private set; }

    [JsonProperty("data_braking")]
    public List<double> DataBraking { get; private set; }

    [JsonProperty("data_speed")]
    public List<double> DataSpeed { get; private set; }

    [JsonProperty("data_time")]
    public List<double> DataTime { get; private set; }

    [JsonProperty("data_rpm")]
    public List<double> DataRpm { get; private set; }

    [JsonProperty("data_gear")]
    public List<int> DataGear { get; private set; }

    [JsonProperty("data_tires")]
    public List<double> DataTires { get; private set; }

    [JsonProperty("data_position_x")]
    public List<double> DataPositionX { get; private set; }

    [JsonProperty("data_position_y")]
    public List<double> DataPositionY { get; private set; }

    [JsonProperty("data_position_z")]
    public List<double> DataPositionZ { get; private set; }

    [JsonProperty("data_boost")]
    public List<double> DataBoost { get; private set; }

    [JsonProperty("data_rotation_yaw")]
    public List<double> DataRotationYaw { get; private set; }

    [JsonProperty("data_absolute_yaw_rate_per_second")]
    public List<double> DataAbsoluteYawRatePerSecond { get; private set; }

    public GT7DashboardData()
    {

    }

}

このデータクラスを使用すれば、C#で作成したアプリケーションにデータを取り込めます。

 

現状のトレースアプリの問題

データをトレースするために作成したアプリはまだまだ試作段階なので、下記のような問題があります。

トレースの時間が少しずれる

動画では時間軸の移動を200msごとに行っていますが、これは200ms間隔のタイマーで実現しています。使用しているのはSystem.Timers.Timerですが、200ms間隔だとそれなりにズレます。このズレは20秒間隔で補正していますが、補正が入る直前だと0.5秒くらいのズレを確認しました。

表示できるのは速度だけ

まだ作り込んでいないので、速度データのトレースしか出来ません。他のデータを表示するのが簡単ですが、もう少し表示に自由度を持たせたいと思い、まだその他データには手を付けていない状態です。

ラップの比較が難しい

動画では1周目と2周目には2秒ほどのタイム差があります。横軸を時間とした場合、タイムが拮抗していなければラップ毎の挙動を比較出来ないです。実現方法は思いつきませんが、横軸がコース位置であればタイム差があっても挙動の比較が容易になります。

まとめ

GT7のテレメトリーデータの取得と解析は最近始めたばかりなので、これから細々とアプリ作成を行って楽しんでいこうと思います。

車両比較なんかもやりたいですね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

eleven + 17 =