Log run

ログ走行は実際の走行時の走行データをログ走行ファイルとして保存し、保存したログ走行ファイルから走行を再現する機能です。

ログ走行の用途

ログ走行ファイルによる走行の再現は様々なケースで役立ちます。

テスト走行時の不具合の再現

テスト走行時のログ走行ファイルを保存しておくことで走行時に発生した不具合を後日改めて再現、解析することができます。

オートリルートの確認

デモ走行ではルート通りに走行してしまうためリルートが行われません。ログ走行によりルートを外れることでリルート動作を確認することができます。

踏切案内、一時停止案内、合流案内、右左折専用レーン案内、オービス案内

ルートがない場合にも行われる案内のため、デモ走行では確認ができない場合がありますが、ログ走行により対象道路を走行することで確認することができます。

並走道路の切り替え確認

デモ走行ではルート通りに走行してしまうため並走道路の切り替えを行うことができません。並走道路がある道路をログ走行することで確認することができます。

トンネルモードの確認

デモ走行ではトンネル内でもルート通り走行してしまうためトンネルモードの確認ができません。ログ走行によりトンネルモードの動作を確認することができます。

ルートアドバイザー

デモ走行ではルートを変更することがないためルートアドバイザーによる新ルート情報は提供されません。ログ走行によりルートアドバイザーの動作を確認することができます。

ログ走行ファイルの作成方法

Navi.setLogSaveEnabledにtrueを渡すことで以後の走行データがログ走行ファイルに保存されます。これから走る道路の走行ログを作成したい場合は出発前に走行ログの保存を開始して下さい。

ログ走行ファイルは端末のアプリ固有ストレージ領域に保存され、保存場所は以下の通りです。

/storage/emulated/0/Android/data/アプリのパッケージ名/files

ログ走行ファイルはNavi.setLogSaveEnabledをtrueにした時点の時刻を含んだファイル名で作成されるため、falseからtrueに変更する度に別のファイルが新たに作成されます。

ログ走行の開始・終了

保存されたログ走行ファイルをNavi.startLogRunで読み込むことでログ走行を行うことができます。 Navi.stopLogRunでログ走行を停止します。

Navi.startLogRunの引数でログ走行ファイルのパスを渡すため、ファイルを置く場所は任意です。

ログ走行ファイルのサンプル

各種動作確認用のログ走行ファイルのサンプルです。

・踏切案内
・一時停止案内
・合流案内
・右左折専用レーン案内
・オービス案内
・トンネルモードの確認

ルートアドバイザーの動作確認

SDKでは5分間隔でルートアドバイザーでの推奨ルート有無の確認を行なっており、また一定の走行条件を満たす必要があるため、ルートアドバイザーによる推奨ルートの提案はそれほど頻度高く発生するものではありません。

このようにルートアドバイザーの動作を確認するためには時間が掛かってしまうため、SDKでは以下のようなルートアドバイザーのテスト用機能を提供しています。

  • 推奨ルート有無の確認周期(デフォルト5分)の変更
  • 推奨ルートの探索条件設定

これらの機能を利用して効率的にルートアドバイザーの動作を確認することが可能です。

ルートアドバイザー動作確認手順

大まかなルートアドバイザー動作の確認手順は以下の通りとなります。

  1. 有料道を含むルートを探索し案内を開始します。
  2. Navi.command()で推奨ルート有無の確認周期と推奨ルートの探索条件設定を変更します。
    • 確認周期を短くすることで推奨ルートが提案されやすくなります。
    • 探索条件を一般道のみとすることで推奨ルートが提案されやすくなります。
  3. ログ走行を開始します
注意:

Navi.command()はSDKのデバッグ用関数のためリリースアプリでは呼び出さないようにして下さい。

サンプルコードは以下の通りです。

RoutePlan routePlan = new RoutePlan();
routePlan.setStartPoint(new GeoCoordinate(35.932524, 139.471761)); // パイオニア川越工場
routePlan.setEndPoint(new GeoCoordinate(35.748514, 139.615793)); // 練馬IC出口付近

RouteOptions options = new RouteOptions();
options.setRouteID(1);

List<RouteOptions> optionList = new ArrayList<>();
optionList.add(options);
routePlan.setMultiRouteOptions(optionList);

// ルート探索
Navi.getInstance().calculateRoute(routePlan, new CalcRouteListener() {
    @Override
    public void onCompleted(ErrorCode errorCode, CalcRouteResult calcRouteResult) {

        if (errorCode == CalcRouteListener.ErrorCode.NONE) {
            Navi.getInstance().startGuidance(new StartGuidanceListener() {
                @Override
                public void onCompleted(ErrorCode errorCodeOfStartGuidance, GuidePointResult guidePointResult) {
                    if (errorCodeOfStartGuidance == StartGuidanceListener.ErrorCode.NONE) {
                    }
                }
            });
        } else {
            // ルート探索失敗
        }
    }
});

// 推奨ルート有無の確認周期を5分から1分に変更
Integer[] args1 = new Integer[]{60};
if (Navi.getInstance().command("setRouteAdvisorInterval", args1) == false) {
    // 実行失敗
}
// 推奨ルートの探索条件設定(有料道を使わないルートを推奨)
Boolean[] args2 = new Boolean[]{false};
if (Navi.getInstance().command("setRouteAdvisorUseToll", args2) == false) {
    // 実行失敗
}

String path = getApplicationContext().getExternalFilesDir(null).getAbsolutePath() + "/RouteAdvisorTest.json"; // 走行ログファイルを置いたパス
if (Navi.getInstance().startLogRun(path)) {
    // ログ走行開始成功
}
else {
    // ログ走行開始失敗
}