Skip to content

EmplifAI/g1-kaiwa

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

g1-kaiwa — Unitree G1 オンボード完結型 日本語音声会話アプリ

Unitree G1 の内蔵 Jetson (Orin NX 16GB) だけで動く、日本語の音声会話アプリです。 クラウド通信なし(全モデルがローカル動作)・モーション非連動(安全のため運動系APIは一切呼ばない)。

リモコンの START ボタンを2回押す → ピッ → 話しかける → 本体スピーカーで返答。 「いま何が見える?」のような質問には、頭部カメラ(RealSense)の画像をVLMに渡して答えます。

アーキテクチャ

リモコンSTART二度押し (DDS rt/wirelesscontroller)
   ↓
本体マイク (UDPマルチキャスト 239.168.123.161:5555, 16kHz PCM)
   ↓ エネルギーVADで発話切り出し
whisper.cpp whisper-server (GPU/CUDA, ggml-small) … 音声認識 ≈0.4秒
   ↓
llama.cpp llama-server (GPU/CUDA, Qwen2.5-VL-3B-Instruct Q4_K_M + mmproj)
   … 応答生成(ストリーミング)。視覚系の質問はカメラ画像を添付
   ↓ 文が完成するたび逐次
Open JTalk + Meiボイス … 音声合成 (48kHz→16kHz変換)
   ↓
本体スピーカー (unitree_sdk2 AudioClient.PlayStream, g1_play経由)
  • kaiwa.py — 本体 (Python 3.8 標準ライブラリのみ)
  • g1_play.cpp — I/Oヘルパー (スピーカー再生 / 音量 / STARTボタン検知 / カメラSNAP)。 unitree_sdk2 の example/g1/audio/ に置いてビルドする
  • persona.txt — ロボットの自己認識 (名前・出自など)。編集して systemctl --user restart kaiwa で反映
  • start.sh — 手動起動用
  • systemd/ — 自動起動用ユーザーユニット3つ (loginctl enable-linger と併用)

セットアップ概要 (Jetson 上)

  1. モデル取得 (~/kaiwa/models/):
    • ggml-small.bin (whisper.cpp)
    • Qwen2.5-VL-3B-Instruct-Q4_K_M.gguf + mmproj-Qwen2.5-VL-3B-Instruct-f16.gguf
  2. ビルド:
    • whisper.cpp: cmake -B build_cuda -DGGML_CUDA=ON -DCMAKE_CUDA_ARCHITECTURES=87 && cmake --build build_cuda --target whisper-server
    • llama.cpp: 同様 + -DGGML_CUDA_FA=OFF (CUDA 11.4 では FlashAttention がリンクエラーになるため)
    • g1_play: unitree_sdk2 の example/g1/audio/ に g1_play.cpp を置き、CMakeLists に登録してビルド
  3. TTS: open-jtalk + open-jtalk-mecab-naist-jdic + MMDAgent の Mei ボイス
  4. systemd/*.service~/.config/systemd/user/ に置き、 systemctl --user enable --now kaiwa-llm kaiwa-asr kaiwasudo loginctl enable-linger <user>

既知のハマりどころ

  • Jetson の USB オーディオ (AB13X) は物理未配線。音声I/Oは必ず本体オーディオハブ経由で行う
  • CUDA 11.4 + llama.cpp は -DGGML_CUDA_FA=OFF 必須。その代償として ビジョン処理前に画像を640pxに縮小しないとOOMで落ちる (kaiwa.pysnap() が対応済み)
  • whisper は発話長に関係なく30秒窓を処理するため、CPU では実用にならない。GPU + サーバー常駐が前提
  • TTS (Open JTalk) はアルファベットを読めないので、ペルソナで「英単語を使わず答える」よう指示している

性能実測 (Jetson Orin NX 16GB)

処理 時間
音声認識 (whisper-server GPU) 約0.4秒
テキスト応答 (最初の文まで) 2〜3秒
画像つき応答 約6秒

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages