最近和几个同学做了一个叫「熊导游」(TravelBear)的项目:一台树莓派 4B 上的 AI 景区导览设备。按一下按键,摄像头拍下眼前的展品,定位模块告诉它你在哪,云端大模型生成一段讲解,然后用语音播报出来。
整个流程听起来简单,真要把每一环都做实,还是踩了不少坑。项目开源在 GitHub,这里记录几个最有意思的技术决策。
整体架构
设备端五个模块:定位、识图、LLM、TTS、按键状态机。主程序用有限状态机控制状态流转,trigger() 是按键入口,支持打断——讲解员讲到一半再按一下就能换题。
- 识图:Qwen-VL-Max,置信度低于 0.05 的画面直接丢弃,不让模型瞎编
- LLM:阿里云 qwen-plus,实测 2.4 秒生成 127 字讲解,语速刚好
- TTS:小米 MiMo,云端兜底,实测尾音完整
- ASR:本来想做语音问答,冻结了——设备定位是「一按一讲」,先把核心体验做扎实
最难的问题:展厅里 GPS 不可信
室外定位用的是 NEO-M8N GPS 模块,本地围栏两档判定(景区级宽松、点位级严格),未命中再走高德在线反解兜底。这套方案在室外工作得很好——实测 9 星、HDOP 2.87,准确命中「上海大学(宝山校区)」。
但展厅里完全是另一回事:GPS 会漏进弱 fix,漂移几十米,青铜器和陶瓷的讲解能讲串。
我们的解法是给每个展位布一个 ESP32-C3 的 iBeacon 蓝牙信标,树莓派板载蓝牙扫描 RSSI,中值滤波加阈值过滤后映射到展位。关键是仲裁策略:
BLE 信标新鲜命中无条件最高优先——信标固定在展位的米级物理证据前,GPS(包括点位级)不插嘴;信标信号消失 10 秒后才落回 GPS。
这个策略有 9 条行为测试锁死(test_ble_priority.py),消除了展厅内 GPS 漏入导致的讲解串味。
状态
截至 2026-09-28,硬件全链路已经实测闭环:GNSS 室外定位、BLE 室内定位、识图、LLM、TTS、按键热键、服务锁、打断全部通过真实验收。剩下的是现场工作:信标进馆布点、阈值标定和供电方案。
从「按一下键」到「听见讲解」,全链路延迟压在可接受范围内——对一个靠电池和 4G 跑的设备来说,每一毫秒的云端往返都是省出来的。