Lite3 Nav2 ルートテスト

Newton 上の DeepRobotics Lite3 四足歩行ロボットで、記録したルートを Nav2 で走行させるテスト

デモはこちら。注:登録が必要です。 コードはこちら

概要

Lite3 は DeepRobotics 製の四足歩行ロボットです。SDK はこちらで公開されていますが、このデモでは独自のフォークを使用します。このフォークは、/cmd_vel を関節指令に変換する歩行コントローラを提供します。

このデモでは、rviz 上で artefacts-route レコーダーを使って記録したルートに沿って、Nav2 が Lite3 を走行させます。シミュレーション世界は、ルートの地図を押し出して生成します。テストはロボットがすべてのウェイポイントに到達することを検証し、歩行速度でパラメータ化して、Lite3 がどれだけ速くルートを追従できるかを確認します。

このプロジェクトは以下を使用して実行されます:

  • Newton(シミュレータ)、Lite3 と 2D LiDAR 付き
  • ROS 2 Jazzy と Nav2(ナビゲーション)、経路追従コントローラは Regulated Pure Pursuit
  • pytest(テストの記述)
  • artefacts-toolkit-navigation(ルートの記録、世界の生成、ルートの走行)
  • Artefacts(テストの自動化と結果のレビュー)

ルートの記録

ルートとは、地図上の開始姿勢と順序付きのウェイポイントのリストです。RViz 上で手動で一度だけ記録します:

artefacts-route record --map src/nav2_demo/maps/depot.yaml

地図を表示した RViz が開きます。2D Pose Estimate でロボットのスポーン(開始)位置を設定し、Publish Point でウェイポイントを順に追加します。ターミナルで Enter を押すと、ルートが routes/ 以下に保存されます(--name でファイル名を指定できます)。テストは常に最後に記録されたルート(.latest として保存)を走行します。

このデモで使用するルートは Nav2 の depot 地図上のもので、ウェイポイントは 3 つ、歩行距離は約 9 m、最初の 2 つのウェイポイントで 90 度の旋回があります。

format_version: 1
name: 2026-10-20_09-57-23
recorded_at: '2026-10-20T00:58:12+00:00'
ros_distro: jazzy
frame_id: map
map:
  file: src/nav2_demo/maps/depot.yaml
  sha256: 8cd5c8d2cbeaf406d6d5312958cd70b64764726e4acd08ec57b9b5348f2a4544
initial_pose: {x: 9.7662, y: -6.3585, yaw: 0.0}
waypoints:
  - {x: 12.4948, y: -6.4473, yaw: 1.5278}
  - {x: 12.6235, y: -3.4588, yaw: -3.1244}
  - {x: 9.8225, y: -3.507, yaw: -3.1244}

テストの記述

テストファイル test_route.py は、モジュールスコープの pytest フィクスチャの中でルートを一度だけ走行させます。このフィクスチャは:

  1. ルートを読み込む:load_route() で最後に記録されたルートを読み込みます。
  2. 世界を生成する:map_to_world() でルートの地図から 2D 地図を 3D シーンに押し出します。世界は実行のたびに新しく生成され、実行結果と一緒にアップロードされます。
  3. シミュレータを起動する:route_launch_args() で開始姿勢をシミュレータの --set オーバーライドに変換し、Lite3 をルートの開始姿勢にスポーンします。追従カメラと俯瞰ビューの 2 台のカメラが動画を記録します。
  4. 歩行コントローラと Nav2 を起動する:シミュレータの時計が進み始めたら、ルートの地図上で起動します。Nav2 はロボットが立ち上がってから起動します。
  5. ルートを走行する:follow_route() でウェイポイントを Nav2 に送り、各ウェイポイントに到達したか、どれだけ近づいたか、リカバリーが(あれば)何回必要だったかを報告します。
  6. アップロード用のデータを作成する:成否にかかわらず、オドメトリの軌跡を CSV で、3 つのチャート、metrics.json を出力します。

5 つのテストが、ナビゲーションツールキットのアサーションヘルパーを使って RouteResult を検証します:

def test_route_completed(run):
    try:
        assert_route_completed(run.result)
    except AssertionError as error:
        pytest.fail(f'{error}\n--- nav log ---\n{run.harness.control_log_tail(40)}')


def test_each_waypoint_reached(run):
    assert_each_waypoint_reached(run.result, tolerance_m=WAYPOINT_TOLERANCE_M)  # 0.5 m


def test_final_pose(run):
    assert_final_pose(run.result, max_pos_error_m=MAX_FINAL_ERROR_M)  # 0.5 m


def test_min_clearance(run):
    assert_min_clearance(run.result, MIN_CLEARANCE_M)  # 0.2 m from the lidar, roughly the body's half width


def test_max_recoveries(run):
    assert_max_recoveries(run.result, MAX_RECOVERIES)  # 2

artefacts.yaml ファイル

project: artefacts-demos/lite3-navigation-demo
version: 0.1.0

jobs:
  test-nav2-route:
    type: test
    timeout: 15 # minutes
    runtime:
      framework: other
      simulator: newton

    scenarios:
      defaults:
        metrics: metrics.json
        params:
          headless: false  # false shows the Newton viewer
          rviz: true  # true also opens Nav2's RViz view
          linear_vel: [0.2, 0.3, 0.4]  # m/s, one run per value (velocity_smoother caps at 0.4)
      settings:
        - name: nav2_route
          pytest_file: src/nav2_demo/test/test_route.py

上記のポイント:

  • テストは linear_vel の値ごとに 1 回、計 3 回実行されます。この値は Nav2 の FollowPath コントローラが要求する速度を設定します。
  • metrics.json はアップロードされ、Artefacts ダッシュボードに表示されます。
  • pytest_file は Artefacts にテストファイルの場所を指定します。

詳細はシナリオ設定を参照してください。

結果

ジョブはシナリオを linear_vel ごとに 1 回、計 3 回実行します。以下のスクリーンショットではすべて成功しています。上部のチャートは各実行の duration_s をプロットしたもので、Lite3 は 0.2 m/s で約 52 秒、0.3 m/s で約 40 秒、0.4 m/s で約 32 秒でルートを歩行しています。

実行を展開すると、メトリクスと 5 つのテスト結果が並んで表示されます。Compare Runs では 3 つの速度を横に並べて比較できます。0.2 m/s では、Lite3 は 3 つのウェイポイントすべてに到達し、最終ウェイポイントから 0.23 m の位置で停止し、最も近い壁からは常に 0.35 m 以上離れていました:

ルートの完走

ウェイポイントごとのチャートは、各ウェイポイントにどれだけ近づいたかと、そこに至るまでの壁との最小クリアランスを示します:

地図上の経路

経路チャートは、ロボットのオドメトリ軌跡と Nav2 の計画経路を地図に重ねて表示し、ルートと実際に走行した経路を比較できます:

動画

シミュレータは各実行について、追従カメラと俯瞰ビューの 2 本の動画を記録します:

追従カメラ 俯瞰ビュー

テスト後に利用できるデータ

テストが実行のアップロードディレクトリ(ARTEFACTS_SCENARIO_UPLOAD_DIR)に書き込んだものはすべて Artefacts ダッシュボードにアップロードされます。

  • 地図から押し出した世界(MJCF)とシミュレータの設定
  • ルート結果(YAML)
  • 2 本の動画:追従カメラと俯瞰ビュー
  • オドメトリの軌跡(CSV)
  • HTML のチャート:地図上の経路、速度の時間変化、ウェイポイントごとの数値
  • メトリクス(json 形式)
  • シミュレータと Nav2 起動のログ

Artefacts Toolkit ヘルパー

このプロジェクトでは、Artefacts Toolkit から以下のヘルパーを使用しました:

最終更新 21.10.2026: Lite3 navigation (#159) (ddb0e93)