📖

Gemini Robotics-ER で動作するサンプルロボットシミュレータを作成

に公開

はじめに

ロボットの内蔵カメラ画像で動作するロボットを、Gemini Robotics-ER を使ってどこまで実用的にできるか試した。

MuJoCo 上の移動ロボットを Qt ダッシュボードで制御し、ER には「見る・考える・計画する」をできるだけ任せた。

シミュレータ上は、上からの俯瞰画像を表示していますが、ERはロボットの先頭のカメラの画像のみ入力として与えた。

誤検出やスタック、速度不足といった実際の課題にどう手を入れたかをまとめました。

Gemini Robotics-ER の概要(簡潔に)

  • 画像からの検出: 2D BBox を 0–1000 の正規化座標で返す。未検出は []。
  • 計画/推論: JSONで単ステップ/マルチステップの指示やマップ推定を返せる。
  • 進捗推定: status/progress/comment を返すことで、停滞検知や再計画に使える。

システム全体像

  • シミュレータ: MuJoCo + 移動ロボット(左右独立駆動)。
  • フロント: Qt ダッシュボードでグローバル/ロボ視点、ログ表示、シーン切替、指示入力。
  • モジュール別役割:
    • Vision: 色を明示したプロンプトで BBox を取得(0–1000正規化)。端寄り巨大 BBox を連続で破棄。未検出連続でスキャンへ。
    • Planner + ER Fallback: Flash プランナーで単ステップ。決定不能なら ER がツールコール型 plan 配列(scan/turn/move_forward/approach/stop)を返す。step_count も受け取って長めの前進を許容。
    • Executor: plan_queue を順次実行。approach は Vision でモーター更新、最小速度下限で「動かない」問題を回避。
    • Progress/Map: ER に進捗推定(停滞なら停止→スキャン)、節目でマップ推定(推定ターゲットをログ)を呼ぶ。
    • ログ: [STATE] に位置/ヨー/モーター/BBox/シーン/プラン情報、[VISION]/[PROMPT]/[RESPONSE], [MAP], [TUNE][approach] をファイル出力。

Gemini Robotics-ER への入力とプロンプト設計

  • Vision: 「ONLY <色> pole」「他色無視」「box_2dlabelを返す」「未検出は []」を明示。
  • Planner (ER fallback):
    • ツール定義(JSON)を渡し、plan 配列を返すよう指示。
    • 「遠くてクリア→少ないステップで move_forward_long(2–3s)」「近く/障害物近→短いステップ」を明示。
    • step_count を返せるようにして意図ステップ数をログ。
  • Progress/Map:
    • 進捗: {"status":"IN_PROGRESS|STALLED|COMPLETED","progress":0..1,"comment":...}
    • マップ: targets/map/robot_pose/reason を返す簡易 JSON。節目のみ呼んでオーバーヘッドを抑制。

チューニングで効いた点

  • 速度アップ: base_speed=8.0、遠距離・中心付近は速度ブースト+ステップ長延長(最大0.45s)。
  • 最小速度の付与: approach で左右モーターに下限を入れ、微小出力で止まる問題を減らした。
  • 誤検出・失視ハンドリング: 端寄り巨大 BBox連続で破棄、未検出連続で強制スキャン、plan_queue クリア。
  • 旋回方向バグ修正: エラー符号を見直し、右にあるターゲットには右に向くように修正。

利用手順

  1. リポジトリ取得
    git clone https://github.com/saotomryo/gemini-er-agentic-dashboard-test.git

  2. 依存インストール(例: Python venv を利用)

    python -m venv .venv
    source .venv/bin/activate   # Windowsは .venv\Scripts\activate
    pip install -r requirements.txt
    
  3. APIキーを設定

    • .envGEMINI_API_KEY=<Your API Key> を記載(または環境変数に設定)。
  4. 起動方法

    • Qt ダッシュボード: python er_dashboard.py
    • デバッグログを出したい場合: ER_DEBUG=1 python er_dashboard.py
  5. 画面上の手順

    • Scene: ドロップダウンでシーンXMLを選択(初期は scenes/scene.xml など)。
    • Instruction: 例) Go to the red pole(英語または日本語でも可)。
    • Start Agent を押すと、プランニング→実行→ビジョン更新→ログ更新のループが始まります。
    • STOP で即停止。
  6. ログ確認

    • logs/run_*.log に状態/プラン/ビジョン/マップなどが出力されます。
    • ER_DEBUG=1 の場合は詳細な [DBG][TUNE][approach] が含まれます。

まだ残る課題と今後

  • 長距離での速度最適化: 連続フレームやBBox増減率を ER に渡して前進時間を推定させる余地あり。
  • カラーミス/誤認識: プロンプト強化済みだが、混色や照明条件での誤検出は依然リスク。ラベル一致や複数フレーム確認で抑制したい。
  • スキャンの短縮/早期終了: 4方向スキャンは長いので、検出したら途中終了する仕組みを入れる予定。
  • 現在はGemini1.5ベースと思われるgemini robotics er 1.5 previewですが、gemini3ベースになればかなり強力な推論で複雑なタスクを実行できるのでは無いか思っている。
  • より複雑なシーンや複数のロボットモデルなども扱えるようにしたい。(シーンについては、プロンプトによる自動生成機能などを作っても良いかも)

まとめ

Gemini Robotics-ER に「見る」「計画する」「進捗評価する」をできるだけ任せ、制御側はセーフティと最小限のチューニングに集中する形に整理した。誤検出・停滞・速度不足といった実際の課題は残るものの、プロンプト設計とログ可視化で繰り返し改善できる手応えを得ている。
今後はより複雑なシーンや複雑な動作が出来るロボットでシミュレーションができるようにしていたい。

https://www.youtube.com/watch?v=hKd4zjAj48w

Discussion