第3弾 ラズパイAIロボット × AR 統合計画(2025-11)

ちょっと作りたくなりました。まずは計画です。
どこまでできるかはわかりませんが、少しずつ進めていこうと思っています。


1. 概要

Arduino自作ラジコンを起点として、

  • 2モータ差動駆動(スキッドステア)ローバ
  • Raspberry Pi による映像配信・制御ハブ
  • Pixhawk(ArduPilot Rover)による自律走行
  • Meta Quest 3 などによる AR/MR 表示+ヘッドトラッキング/ハンドジェスチャ入力
  • Whisper / Piper / LLM による音声対話・AIアシスト

を段階的に統合し、

「会話できる・ARで見える・自律して走るローバ」

を構築していきます。


2. 足回り方針:2モータ差動駆動(スキッドステア)で統一

最終構成および全フェーズ共通の前提として、

  • 左右独立 2 モータ構成
  • ステアリングは「左右の速度差」で実現
  • ロボットの足回りとしてArduino / RasPi / Pixhawkは、同一ロジックで制御可能にする

3. 統合アーキテクチャ

3.1 構成レイヤ

[ Meta Quest 3 ]
   ├─ AR/MR表示 (OpenXR + Unity)
   ├─ ヘッドトラッキング
   └─ ハンドジェスチャ / UI入力
        │ UDP/WebRTC/TCP
        ▼
[ Raspberry Pi ]
   ├─ 映像配信 (H.264 / WebRTC / UDP)
   ├─ 制御ハブ (ヘッド/操作 → Pixhawk/モータ)
   └─ MAVLink中継 (Pixhawk ↔ Quest/PC)
        │ シリアル/UDP
        ▼
[ Pixhawk (Rover) ]
   ├─ 2モータ差動駆動制御
   ├─ Waypoint / RTL / FailSafe
   └─ Telemetry (MAVLink)
        │
        ▼
[ ローバシャーシ(2モータ) ]

3.2 RC・フェイルセーフ経路

  • S-FHSS (R4SF + Jumper T8SG) は独立系として利用
  • SW等で以下を切替:
    • 「RC直結モード」:受信機 → モータ/Pixhawk RC IN
    • 「自律/遠隔モード」:Pixhawk/RasPi → モータ
  • 通信断時は Pixhawk のフェイルセーフまたは RC で介入可能な構成とする

4. 通信・ネットワーク設計(UDP多重)

4.1 ポート/チャンネル設計(案)

同一 5GHz Wi-Fi ネットワーク上で、多重通信を行う。

用途プロトコル想定ポート送受信元
MAVLink(地上局)UDP14550Pixhawk → Mission Planner / RasPi / Quest
MAVLink(AR表示用)UDP14551Pixhawk → RasPi → Quest
映像ストリームUDP / WebRTC5600–5699RasPi → Quest / PC
ヘッドトラッキングUDP7000Quest → RasPi
操作・モード指令UDP/TCP7001Quest / PC → RasPi
システム監視 / ログUDP/TCP7010RasPi → ログPC等

※実際のポート番号は後で固定化するが、1本のWi-Fiで運用可能とする。

4.2 モード別の通信イメージ

4.2.1 RCモード(手動)

  • 経路:S-FHSS or 自作コントローラ → 受信機 → SW → モータ or Pixhawk
  • 最も安全・確実なモード(フェイルセーフ用途)

4.2.2 遠隔FPVモード(非自律)

  • 操作:Quest / PC → UDP制御(スティック/ジェスチャ)
  • 足回り:RasPi直制御 or Pixhawk MANUALモード
  • 映像:RasPi → WebRTC → Quest
  • S-FHSSは緊急用

4.2.3 自律走行モード

  • Waypoint:Mission Planner or RasPi/Questから Pixhawk に送信
  • Raspi/Pixhawk がローバ制御
  • Quest は HUD(地図+姿勢+バッテリ+映像)表示
  • 必要なら S-FHSS or UI で「停止」「RTL」

5. ヘッドトラッキング仕様(段階移行)

5.1 フェーズ2〜3:Arduinoヘッドトラッカー継続

  • 構成:
    • ヘッド側:Arduino nano+ MPU6050 + nRF24
    • ローバ側:Arduino / RasPi + nRF24受信
  • インターフェース:
    • head_yaw, head_pitch, reset_flag
  • ドリフト対策:
    • reset_flag 受信時に現在値をゼロ点として再定義

これを 「共通IF:head_yaw / head_pitch」 として定義しておく。

5.2 フェーズ4〜5:Questヘッドトラッキングへの移行

  • ソース:Meta Quest 3 の 6DoF姿勢
  • Questアプリで:
    • Yaw/Pitch を算出して head_yaw / head_pitch として UDP送信(ポート7000)
    • 「センター」UI or ジェスチャ → resetコマンド送信
  • ローバ側(RasPi/Pixhawk制御側)は、Arduino時代と同じロジックで扱えるようにする。

6. 映像伝送選択肢

6.1 正式採用(第一候補)

Raspberry Pi カメラ → H.264 → Wi-Fi配信

  • 形式:GStreamer / WebRTC / RTSP over UDP
  • 利点:
    • デジタル映像のため AR/MR へのオーバーレイが容易
    • 録画・解析・配信との親和性が高い
    • 同一ネットワーク上で MAVLink / 制御と統合管理可能

6.2 サブ選択肢(補完)

  • 5.8GHzアナログVTX+ゴーグル
    • 超低遅延・信頼性高いが、統合性が低い
    • デバッグ・遅延比較用として利用
  • ROTG02 + Quest UVC入力(DJIドローンからの映像を受信したいという期待もある)
    • 実験的選択肢。再現性・互換性に難あるかも
    • 正式仕様の中核には据えないが期待はある

7. Phase別 実装ToDo一覧

Phase 1:Arduino差動駆動版(既存整理+改良)

  • スキッドステア対応シャーシ(2モータ)での制御確認
  • Arduino+L298Nで左右モータ差動制御ロジック実装
  • ヘッドトラッキング(Arduino+nRF24)の仕様を head_yaw/pitch IF として整理

Phase 2:Raspberry Pi 制御版

  • RasPiから2モータ差動駆動(GPIO + モータドライバ)
  • RasPiカメラ/USBカメラ → H.264配信(UDP/WebRTC)
  • Arduinoヘッドトラッカーからのデータを RasPi で受信し、カメラサーボ制御
  • UDPポート設計の暫定版を実機に反映

Phase 3:AI音声・対話統合

  • RasPi or 外部PCで Whisper / Piper / LLM 実行環境構築
  • 「音声コマンド → モード切替/速度指令」IF設計
  • ログ・対話履歴をターミナル or WebUIで確認できるようにする

Phase 4:Pixhawk統合(Rover)

  • Pixhawk をローバモード+スキッドステア設定
  • RasPi ↔ Pixhawk 間で MAVLink中継(シリアル↔UDP)
  • Mission Planner からの制御と RasPi からの制御の役割分担を明確化
  • フェイルセーフ(通信断時の停止/RTL)確認

Phase 5:Meta Quest 3 AR/MR 統合

  • Unity(OpenXR)で MR UI:映像+地図+HUD の3ペイン構成
  • Questヘッドトラッキング → UDP(7000) → RasPi → カメラサーボ
  • ハンドジェスチャ/UI操作 → モード切替・E-STOP実装
  • MAVLinkステータスをHUD表示(速度・バッテリ・モード等)

Phase 6:洗練・展開

  • Quest 4等への移行(OpenXR準拠で互換確保)
  • 教材・展示向けドキュメント化
  • 公開用リポジトリ/ブログ連載の整理

8. メモ・設計ポリシー

  • すべてのフェーズで「再現性」「段階的移行」「安全(RCフェイルセーフ)」を重視
  • インターフェースは可能な限り固定:
    • throttle / steer / left / right
    • head_yaw / head_pitch / reset
    • mode / estop
  • 物理は変わっても、論理は変えない設計を目指す
  • S-FHSSは「最後の物理リモコン」として残す(人間がいつでも奪える系統)
タイトルとURLをコピーしました