Gemma 4とRaspberry Piでデスクトップコンパニオンロボットをどう作るか
LEGO デスクトップロボット DinoDesk AI は、Raspberry Pi とローカルゲートウェイで Gemma 4 と Gemini Flash を切り替え、カメラなし、ローカル会話はゼロコスト。
日本語
コピー

デスクの上に小さな相棒を置いてみたいと思ったことはないだろうか。レトロゲームのキャラクターが持つ手触りの魅力があり、話し相手になり、デスクのタイマーを見張ってくれ、厄介なバグの整理にも付き合ってくれる——しかもカメラに一日中見張られることもない。
そんな問いから生まれたのが DinoDesk AI、私たちの LEGO Dino AI Companion Robot だ。

同僚の Shama と私は、賢くて低消費電力のデスクロボットを作ることにした。8 ビットの音と映像、そして LEGO Technic の機械構造が持つ懐かしさに、現代的なハイブリッド LLM 切り替えアーキテクチャ(ローカル ↔ クラウド) を組み合わせる。デスク上に Raspberry Pi を置き、ローカル PC でゲートウェイを動かして Gemma 4 と Gemini Flash を同時にぶら下げる——こうしてデスクパートナーが出来上がる。視覚プライバシーは 100%(カメラなし)、ローカルなら即応答でコストゼロ、必要ならクラウドを呼んで深い推論もできる。
以下が DinoDesk AI の設計、配線、プログラミングまでの全舞台裏だ。
1. ハイブリッドな脳:ローカルの Gemma 4 ↔ クラウドの Gemini
AI ハードウェアの相棒を作るとき、最も悩む問題のひとつが「脳をどこに置くか」だ。すべてクラウドで動かせば、何気ない*「今何時?」*の一言ごとに API トークンを消費し、ネットワーク遅延が増え、音声データを外に送ることになる。逆にオンデバイスの小型モデルだけに絞ると、巨大なコードベースに新機能を追加させたり、複雑な話題を説明させたりした瞬間に破綻する。
そこで私たちはハイブリッド LLM アーキテクチャを採用し、ユーザーのメイン PC 上で統合 LLM ゲートウェイ(ルーター) を動かすことにした。デスク上の Raspberry Pi は Wi-Fi 経由で、どのエンジンを使っていてもまったく同じ形式の OpenAI 互換リクエストを送る:
┌─────────────────────────────────────────────────┐
│ [ Main PC / Local Gateway ] │
│ │
│ ┌─────────────────────────────────────────┐ │
│ │ Dynamic Model Router / Switch │ │
│ └────────────────────┬────────────────────┘ │
│ │ │
│ ┌──────────────────┴──────────────────┐ │
│ v v │
│ [ LOCAL ENGINE ] [ CLOUD ENGINE ] │
│ LM Studio / Gemma 4 Gemini Flash / │
│ (Zero Latency, Private) Gemini Live │
└────────────────────────┬────────────────────────┘
│
│ Wi-Fi (Unified OpenAI-Compatible Stream)
v
┌─────────────────────────────────────────────────┐
│ [ DinoDesk AI (RPi) ] │
│ - Pirate Audio LCD & I2S Beep Speaker │
│ - Push Button & Optional Sensors │
└─────────────────────────────────────────────────┘
3 つの知能モード
| モード | 有効なモデル | 強みと主な用途 | 切り替え方法 |
|---|---|---|---|
| 🟢 ローカルモード (デフォルト) | Gemma 4(LM Studio 経由) | コストゼロ、オフライン、完全プライベート。 雑談、デスクのタイマー、ちょっとした状態確認なら初回トークン遅延は約 200 ms。 | Pirate Audio Button X をダブルクリック、静電容量タッチセンサーを 3 秒長押し、または音声コマンド(「クラウドモードに切り替えて」) |
| 🟡 クラウドモード | Gemini Flash / Gemini Live | 強力な推論と複雑な問題解決。 コーディング、複雑な数学、詳しい解説、語学学習向け(初回トークン約 800 ms)。 | 同上 |
| ⚡ 自動ハイブリッドモード | 自動ルーティング | デフォルトはローカルの Gemma 4。複雑度分類器が多段推論のキーワード(「説明して」、「比較して」、「コードを書いて」)を検出すると、リクエストを透過的に Gemini Flash へエスカレーションする。 | システムが自動ルーティング |
自動ハイブリッドモードが問題をクラウドへエスカレーションすると、ロボットのインジケーターは一時的に 🟢 緑の常時点灯 から 🟡 金色の常時点灯 に変わり、応答が終わるまでそのまま維持され、その後緑に戻る——どちらの脳が答えているかが一目でわかる。
2. ハードウェアと触覚の機械構造:LEGO と Pirate Audio の出会い
DinoDesk AI には、冷たいスマートスピーカーではなく、手に取れるおもちゃのような感触を持たせたかった。3D プリントした密閉プラスチックの筐体ではなく、基本の LEGO ブロックと Technic レバー機構でボディを組み上げた。誰でも自分で改造したり修理したりできる。
主要な部品リスト(BOM)
- メインコントローラー: Raspberry Pi + 32GB MicroSD
- ディスプレイ&オーディオ拡張ボード: Pimoroni Pirate Audio Speaker(1.3" 240×240 ST7789 IPS LCD + I2S 1W スピーカー + タクトスイッチ 4 個)
- 赤いボタン: ミニ押しボタンスイッチ。押したときのカチッという音が心地よく、音声入力の開始と停止に使う
- オーディオ入力: コンパクトな USB ミニマイク
- 運動システム: 首の回転と尻尾の揺れを駆動するモーター
ボディ全体を組み上げる前に、Raspberry Pi と簡単な LEGO のセットでロジックを検証した。

物理ボタンによる操作
音声やセンサーのトリガーがあっても、専用のハードウェアボタンがもたらす即座の物理的操作はやはり心地よい:
- Button A(GPIO 5)— キャンセル / ミュート: 現在の応答ストリームを即座に停止し、音声を切り、ロボットを
Idleに戻す。 - Button B(GPIO 6)— 中央へ復帰: すべてのサーボを中央位置にリセットする。現在の状態は中断しない。
- Button X(GPIO 16)— 表情とエンジンの切り替え: シングルクリックで表情を手動で順に切り替え、ダブルクリックで Local ↔ Cloud Mode を切り替える。
- Button Y(GPIO 24)— 尻尾テストと音量: 短押しで尻尾を一度振る動作をトリガーし、機械的な位置合わせを確認する。2 秒長押しで通知音の音量を順に切り替える(
Low → Medium → High → Mute)。
3. 恐竜を生き返らせる:5状態の有限状態マシン
コンパニオンロボットは、目と音と体が一緒に動いて初めて生きているように感じられる。私たちは240×240 LCDの目の表情、8-bitの通知音、モーターの動きを調整するために、5段階の有限状態マシン(FSM) を設計した:
┌──────────┐ button ┌───────────┐ release ┌──────────┐ stream ┌──────────┐
│ Sleeping │──────────> │ Idle │────────────>│Listening │─────────> │ Thinking │
└──────────┘ (wake) └───────────┘ (trigger) └──────────┘ (send) └──────────┘
^ │
│ ┌──────────┐ │
└──────────────│ Speaking │<───────────────────────┘
(done) └──────────┘ (tokens arrive)
| 状態 | 遷移条件 | Pirate Audio LCDの表情 | 8-bit音声フィードバック | モーターの動き(首/しっぽ) |
|---|---|---|---|---|
| 1. 睡眠 | 3分間操作なし、または部屋が暗くなる | (- _ -)目を閉じる+ zzz | 無音(任意で軽いいびき) | モーターは脱力;頭を少し垂れる |
| 2. 待機 | デフォルトの待機状態 | (• •)自発的にまばたき | 時々、起床/まばたきの通知音 | 頭を正面に戻す;首をゆっくり振る |
| 3. 聴取 | ボタン押下またはセンサーがトリガー | (O O)目を見開いて発光 | 「Beep-Boop!」 上がり調子の音 | 頭をユーザー方向に15°傾ける |
| 4. 思考 | 音声を送信済み;ルーターが推論中 | (º º)瞳孔が回転+パターンバッジ | 不規則な計算のカチカチ音(tick-teek-poh) | 首をゆっくり左右に振る |
| 5. 発話 | SSEトークンストリームを受信 | 表情豊かなまばたき+スクロール字幕 | トークンごとに8-bitタイプライター音 | しっぽがテキストの長さに合わせて振れる |
DinoDesk AIを作る過程で気づいたのは、AIはブラウザのタブやクラウドのデータセンターに閉じ込めておく必要はないということだ。Gemma 4のようなオープンモデルにピクセルの目、8-bitの声、くねるLEGOのしっぽを与え、タスクが厳しいときにはGeminiを呼び出せるようにすれば、あなたのデスクは一気に賑やかになる。🦖✨
まだ開発中で、完成にはほど遠い。でも近いうちに、完全実装した音声対話機能を引っ提げて戻ってくる!それまで、ボタンを押すたびに鳴る楽しい8-bitサウンドを楽しんでほしい。Beep-Boop!
リポジトリはこちら:https://github.com/google-gemma/dinodesk-ai-companion/
あなたが何を作るつもりか、コメントで教えてくれるとうれしい。