BM1688 AI 推理可视化方案实战:从选型到部署的完整记录
·
核心场景:通过网页浏览器实时查看 BM1688 开发板的 AI 推理效果(包括摄像头画面与检测框叠加),实现免登录即开即用的工业级可视化方案
🔍 一、项目目标
实现平板浏览器与 BM1688 的无缝交互体验:
- 硬件层
- 平板连接 BM1688 WiFi 热点(
10.42.0.1)
- 平板连接 BM1688 WiFi 热点(
- 应用层
- 浏览器访问
http://板子IP:9000 - 实时显示三大要素:
- 摄像头画面(待实现)
- AI 目标检测框叠加
- 系统指标(CPU/NPU 使用率、温度、帧率)
- 浏览器访问
⚙️ 二、需求全景图
| 关键维度 | 要求 |
|---|---|
| 前端可视化 | 浏览器免登录访问,移动端友好 |
| 数据来源 | BM1688 NPU 推理结果 + ROS 扩展(点云/IMU) |
| 数据格式 | Protobuf + MCAP 容器(兼容 ROS2) |
| 数据传输 | WebSocket 长连接通信 |
| 开源要求 | Apache 2.0 协议,持续维护 |
| 跨平台 | 可迁移至 Jetson/RK3588/树莓派 |
🧩 三、框架选型生死局
| 方案 | 协议 | 免登陆 | 体积 | 致命问题 |
|---|---|---|---|---|
| ✅ Lichtblick | Apache 2.0 | 支持 | ~3MB | BMW 官方维护 |
| ❌ Foxglove Studio | BUSL-1.1 | 需账户 | ~5MB | 商业协议限制 |
| ❌ Frigate | MIT | 支持 | ~5MB | 专注 NVR 场景 |
| ❌ 自研 Canvas | 自定义 | 支持 | ~200KB | 开发成本过高 |
敲黑板:Lichtblick 作为 Foxglove 的 Apache 2.0 开源分支,完美保留核心功能的同时避开商业协议限制
🌐 四、数据流架构(全链路解析)
flowchart LR
subgraph BM1688
NPU[NPU推理 C++]-->Node[Node.js server.js]
end
subgraph 平板浏览器
Browser[Lichtblick]-->WS[WebSocket]
end
Node-.->|HTTP 9000\n静态文件|Browser
Node==>|WS 8765\n/detections\n/metrics|Browser
协议栈详解:
- 物理层:WiFi 热点
10.42.0.1 - 传输层:WebSocket 端口
8765 - 应用层:
foxglove.CompressedImage:后续图像传输- JSON encoding:当前 mock 数据格式
- Protobuf(预留):体积减少 48%
🔧 五、开发实操手册
环境:BM1688 ARM64 / Node.js v18.20 / 内存可用 538MB
5.1 技术栈组合拳
"dependencies": {
"@foxglove/ws-protocol": "^0.8.0",
"express": "^4.21.0",
"protobufjs": "^7.4.0",
"ws": "^8.18.0"
}
5.2 死亡踩坑实录
- 手动拼帧头:二进制数据截断 → ❌
- Rosbridge 协议:版本不兼容 → ❌
- 裸文本 WebSocket:协议不匹配 → ❌
- ✅ 官方方案:FoxgloveServer 一键对接 → 🚀
5.3 核心代码(server.js)
const foxglove = new FoxgloveServer({ name: "BM1688 AI Server" });
const wss = new WebSocketServer({
port: 8765,
handleProtocols: protocols => foxglove.handleProtocols(protocols) // 协议协商关键
});
wss.on("connection", (conn) => {
foxglove.handleConnection(conn);
});
// 注册数据通道(JSON模式)
foxglove.addChannel({
topic: "/detections",
encoding: "json"
});
🎯 六、成果展示与规划
6.1 已上线功能
| 功能 | 状态 | 效果 |
|---|---|---|
| 前端加载 | ✅ | 3秒内完成渲染 |
| WebSocket 连接 | ✅ | 平均延迟 < 100ms |
| /detections 通道 | ✅ | 随机检测框动态刷新 |
| /metrics 通道 | ✅ | CPU/NPU 曲线图 |
6.2 性能优化演进表
| 指标 | 当前(JSON) | 目标(Protobuf) | 降幅 |
|---|---|---|---|
| CPU 占用 | 11.8% | 6.2% | ⬇️ 47% |
| 带宽 | 127KB/s | 68KB/s | ⬇️ 48% |
6.3 避坑指南(血泪总结)
Upgrade Required错误
→ 确保浏览器使用http://ip:9000初始化而非直连 WS- JSON Schema 解析崩溃
→ 补充schemaEncoding: "jsonschema" - 二进制帧错误
→ 弃用手动拼装,改用foxglove.sendMessage()
🚀 七、未来扩展路线
gantt
title 项目里程碑
section 核心功能
摄像头画面推流 :active, p0, 2026-06-15, 3d
YOLO 模型对接 :active, p0, 2026-06-20, 5d
section 性能优化
Protobuf编码切换 : p1, 2026-07-01, 3d
MCAP录制系统 : p1, 2026-07-05, 4d
Github项目地址:https://github.com/lichtblick-suite/lichtblick
开源协议:Apache 2.0
开发箴言:能用官方库就别再造轮子! 💪
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)