我们如何用 Gemma 4 和树莓派打造桌面陪伴机器人

LEGO 桌面机器人 DinoDesk AI 用树莓派加本地网关,在 Gemma 4 与 Gemini Flash 间切换,无摄像头、本地对话零成本。

中文
复制
题图:像素风的乐高小恐龙机器人,屏幕上画着眼睛和笑脸,尾巴翘起,头顶两个 Google 标志的气泡,桌上放着书本、喇叭和一块树莓派电路板

你是否想过在桌上摆一个小伙伴——它有复古游戏角色的手感魅力,能陪你聊天、帮你盯着桌面计时器,或者陪你一起梳理某个棘手的 bug——而且没有摄像头整天盯着你?

这个问题催生了 DinoDesk AI:我们的 LEGO Dino AI Companion Robot。

dinodesk

我和同事 Shama 决定做一台聪明、低功耗的桌面机器人:把 8 位音画和 LEGO Technic 机械结构带来的怀旧感,和现代的混合 LLM 切换架构(本地 ↔ 云端) 结合起来。桌面上放一台 Raspberry Pi,本地 PC 上跑一个网关,同时挂着 Gemma 4Gemini Flash——这样一个桌面伙伴就成型了:100% 视觉隐私(没有摄像头)、零成本的本地即时对话,需要时还能调用云端做深度推理。

下面是 DinoDesk AI 从设计、接线到编程的完整幕后过程。


1. 混合大脑:本地 Gemma 4 ↔ 云端 Gemini

做 AI 硬件伴侣时最纠结的问题之一,就是大脑放在哪。全部跑在云端,那么每一句随口问的*“现在几点了?”*都要消耗 API token、增加网络延迟,还得把语音数据传出去。反过来,如果严格限制在设备上的小模型,一旦你让它在一个庞大的代码库里加个新功能,或者解释一个复杂话题,它立刻就撑不住了。

所以我们决定做一套混合 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               │
 └─────────────────────────────────────────────────┘

三种智能模式

模式启用的模型优势与主要用途切换方式
🟢 本地模式 (默认)Gemma 4(通过 LM Studio)零成本、离线、100% 私密。 闲聊、桌面计时、快速查状态时首 token 延迟约 200 ms。双击 Pirate Audio Button X、在电容触摸传感器上长按 3 秒,或用语音指令(“切换到云端模式”
🟡 云端模式Gemini Flash / Gemini Live强推理与复杂问题求解。 适合写代码、复杂数学、深入讲解或语言辅导(首 token 约 800 ms)。同上
⚡ 自动混合模式自动路由默认走本地的 Gemma 4。当复杂度分类器检测到多步推理关键词(“解释”“比较”“写代码”)时,会透明地把请求升级到 Gemini Flash系统自动路由

当 Auto-Hybrid Mode 将问题升级至云端时,机器人的指示灯会暂时从 🟢 常亮绿色 变为 🟡 常亮金色,并持续整个响应过程,随后恢复绿色——这样你一眼就能看出是哪个大脑在回答。


2. 硬件与触觉机械结构:LEGO 遇上 Pirate Audio

我们希望 DinoDesk AI 摸起来像一件实体玩具,而不是一台冷冰冰的智能音箱。我们没有用 3D 打印一个封闭的塑料外壳,而是用 基础 LEGO 积木和 Technic 杠杆机构 搭出机身,这样谁都能自己改装或维修。

核心物料清单(BOM)

  1. 主控: Raspberry Pi + 32GB MicroSD
  2. 显示与音频扩展板: Pimoroni Pirate Audio Speaker(1.3" 240×240 ST7789 IPS LCD + I2S 1W 扬声器 + 4 个轻触按键)
  3. 红色按钮: 一个迷你按键开关,按下时那声清脆的咔哒声很解压,用来开始或停止语音采集
  4. 音频输入: 紧凑型 USB Mini Microphone
  5. 运动系统: 驱动颈部转动和尾巴摇摆的电机

在搭建完整机身之前,我先用 Raspberry Pi 和一套简单的 LEGO 验证了逻辑。

早期原型 1 早期原型 2

物理按键控制

即便有语音和传感器触发,专用硬件按键带来的即时物理控制依然很舒服:

  • 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 状态有限状态机

陪伴机器人只有眼睛、声音和身体一起动起来,才让人觉得它是活的。我们设计了一个 5 阶段的有限状态机(FSM),用来协调 240×240 LCD 的眼睛表情、8-bit 提示音和电机动作:

┌──────────┐  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 token 流表情丰富的眨眼 + 滚动字幕每个 token 一声 8-bit 打字机提示音尾巴随文本长度同步摆动

做 DinoDesk AI 的过程让我们意识到,AI 不必被困在浏览器标签页或云端数据中心里。当你给 Gemma 4 这样的开放模型配上一对像素眼睛、一副 8-bit 嗓子、一条会扭的 LEGO 尾巴,还能在任务吃紧时调用 Gemini,你的桌面一下子就热闹多了。🦖✨

它还在开发中,离完善还有距离,但很快我会带着完整实现的语音对话功能回来!在那之前,请先享受每次按下按钮时那些有趣的 8-bit 音效。Beep-Boop!

在这里克隆仓库:https://github.com/google-gemma/dinodesk-ai-companion/

也欢迎留言说说你打算做点什么。

来源: Cozy Corner Future← 返回首页