ここでは、備忘録として、Raspiからのカメラ映像をMeta Quest3ゴーグルで扱う手順について示します。PC上でのQuest3ミラー開発環境を立ち上げます。
ユーザ登録 → PCでQuest3画面のミラー表示(簡易フロー)
Meta開発者登録(1回だけ)
- ブラウザでアクセス
👉 https://developers.meta.com/horizon - 既存のMetaアカウントでログイン
- 組織(チーム)を1つ作成
- 名前は任意(例:
Personal XR Lab) - 課金・公開なし
- 名前は任意(例:
✅ これで「開発者フラグ」が有効化
Questスマホアプリ(Meta Horizon)設定
- スマホの Meta Horizon アプリ を起動
- デバイス → Meta Quest 3
- ヘッドセットの設定
- 開発者モード → ON
- Quest 3 を 再起動
✅ Questが「開発者としてPC接続可能」になる
PCに Meta Quest Developer Hub(MQDH)を入れる
- ダウンロード
👉 https://developers.meta.com/horizon/downloads - Meta Quest Developer Hub(Windows)をインストール
- 同じ Metaアカウントでログイン
Quest 3 をPCにUSB接続
- Quest 3 と PC を USB-Cで接続
- Quest内に表示されるダイアログ
USBデバッグを許可しますか?- 「常にこのコンピューターから許可」にチェック
- 許可
✅ MQDHでデバイスが Active 表示になる
MQDHで画面ミラー開始
- MQDH 左メニュー → Device Manager
- Meta Quest 3(Active) を選択
- 画面下部 Device Actions
- 👉 Cast device → Start casting
🎉 Quest 3で見ているMR/AR画面がPCに表示
Incorrect runtime表示は無視してOKConnect(Link)は使わない
この状態でできること
- パススルー映像の確認
- WebRTC(RasPiカメラ)映像の確認
- AR合成結果の確認
- 遅延・位置ズレ・追従方式の評価
- Unityを使わずに事前検証
Wifi接続方法
- Quest と PC が 同一LAN
- MQDH で ADB over Wi-Fi を有効化
- その後 Cast device
- PC再起動後は再度USB接続をしてからwifi有効化が必要(仕様のようです)
動作確認(Raspiチャットボット+カメラ映像出力)
Raspi環境にて起動スクリプトを作成しました。
初期値をconfig.ymlで読み込みます。
各venv仮想環境でyamlを使えるようにしてください。(pip install pyyaml)
#config.yml
WS_URL: "ws://192.168.0.8:8765"
ARECORD_DEVICE: "hw:1,0"
ALSA_DEVICE: "plughw:1,0"
動作モード確認
ondemand => performance
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
ondemand
echo "performance" | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
PC側で、pc_ws_stt_wevrtcvad_ollama_tts_raspi.py を実行してください。
その後、Raspiにて、
start_robot.sh
を実行
以下は起動スクリプトのソースコードです。(start_robot.sh)
Raspiにて、SST, TTS, VideoCaptureを一発で起動します。
#!/bin/bash
BASE_DIR=~/Robot
VOICE_DIR=$BASE_DIR/VoiceChat
VIDEO_DIR=$BASE_DIR/VideoCapture
CONFIG_FILE=$VOICE_DIR/config.yml
echo "=============================="
echo " Robot Auto Startup Script"
echo "=============================="
#echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
# ==============================
# 1. config.yml チェック
# ==============================
if [ -f "$CONFIG_FILE" ]; then
echo "config.yml found."
echo "Skipping configuration input."
echo "Current config:"
cat $CONFIG_FILE
else
echo "config.yml not found. Creating new one..."
# ==============================
# 1. PC IP入力
# ==============================
read -p "Enter PC IP Address (example 192.168.0.7): " PC_IP
WS_URL="ws://${PC_IP}:8765"
# ==============================
# 2. Audio Device 自動検出
# ==============================
echo ""
echo "Detecting audio devices..."
arecord -l
echo ""
read -p "Enter card number (example 0): " CARD
read -p "Enter device number (example 0): " DEVICE
ARECORD_DEVICE="hw:${CARD},${DEVICE}"
ALSA_DEVICE="plughw:${CARD},${DEVICE}"
# ==============================
# 3. config.yml 作成
# ==============================
echo ""
echo "Generating config.yml..."
cat <<EOF > $CONFIG_FILE
WS_URL: "$WS_URL"
ARECORD_DEVICE: "$ARECORD_DEVICE"
ALSA_DEVICE: "$ALSA_DEVICE"
EOF
echo "config.yml created:"
cat $CONFIG_FILE
fi
echo ""
read -p "Continue to start SST? (y/n): " CONFIRM
if [ "$CONFIRM" != "y" ]; then
exit 0
fi
# ==============================
# 4. SST 起動
# ==============================
echo "Starting SST..."
lxterminal -e bash -c "
source ~/venv_audio/bin/activate
cd $VOICE_DIR
python raspi_audio_sender_arecord2.py
exec bash
"
sleep 2
echo ""
read -p "Continue to start TTS? (y/n): " CONFIRM
if [ "$CONFIRM" != "y" ]; then
exit 0
fi
# ==============================
# 5. TTS 起動
# ==============================
echo "Starting TTS..."
lxterminal -e bash -c "
source ~/venv_audio/bin/activate
cd $VOICE_DIR
uvicorn speak_server:app --host 0.0.0.0 --port 5005
exec bash
"
sleep 2
echo ""
read -p "Continue to start Video Capture? (y/n): " CONFIRM
if [ "$CONFIRM" != "y" ]; then
exit 0
fi
# ==============================
# 6. Video Capture 起動
# ==============================
echo "Starting Video Capture..."
lxterminal -e bash -c "
source ~/webrtc-env/bin/activate
cd $VIDEO_DIR
echo \"-----------------------------------\"
echo \"Raspberry Pi IP Address:\"
hostname -I | awk '{print $1}'
echo \"-----------------------------------\"
python server.py
exec bash
"
echo ""
echo "All systems started."
PC or Quest3ゴーグルで ブラウザーを開いて:
http://192.168.x.xx:8080
- 「接続開始」ボタンを押す
- 1〜2秒でカメラ映像が出るはずです
- ブラウザを 全画面表示 にして出力するとFPV表示になります。
- MQDHで画面ミラー開始
といった感じです。
