能听 · 会说 · 会动
一台桌面机器人要成立的三件事:感知环境、给出回应、产生物理反馈。每件事背后各有一条系统约束,让它们安全地成立 —— 而不是 demo 完就散。
能听
麦克风阵列采集
会说
识别文本以事件上行,回复文本走请求面播放,同时切换表情与灯效,一轮结束回到 idle。表情取值已冻结为 idle / blink / talk / think / happy。
会动
舵机与电机的角度、时限指令走 JSON-RPC 事务面(低于 100Hz);反射闭环留在模块本地,永不占用总线,只有异常或饱和才以通告形式上报。
崩溃隔离
六个模块各是独立进程,一个崩溃不带走整机;模块之间禁止直连,只依赖"能力名"而不依赖具体模块。
ADR-0002 · v0.0.1 已落六模块结构与基座 crate安全兜底
急停、限位与低电保护放在基座而不是模块里:即使认知模块崩溃或未注册,守护进程仍直接执行保护动作。
架构文档 §7.3 · 横切关注点全部下沉 base契约先行
线格式采用 Airy IPC 的 128 字节定长头,全小端、packed 无填充;配一份 golden 字节向量与主题所有权表,字段只增不改。
ADR-0006 · 脚手架自检与契约测试强制桌面上的三种角色
不只是"能跑 demo" —— 日常交互、故障降级、无板开发,三个场景分别回答:它在你桌上做什么、出问题怎么办、没有硬件怎么参与。
桌面上的一天
说一句话:VAD 给出起音边沿,识别文本以事件上行,认知模块编排一次回复,交互模块播放并切到 talk 表情,一轮结束回 idle。想看它动一下:舵机角度与时限走事务面,灯效作为可见反馈。
链路随 M3–M5断网与故障时
WiFi 只是可选链路:链路状态以事件上行,各模块据此做降级判断。电源摘要与低压关断是本地决策,急停与限位逻辑在基座——即使认知模块崩溃仍会执行保护动作。
降级策略随 M2没有板子也能参与
同一份契约被 Rust 基座与 Python 认知模块消费:改格式必须先改契约,且只增不改。脚手架能生成合规模块骨架,模拟工具产出模拟拾音流,运维命令面已定下。
当前可跑三层 · 模块到固件
业务全在模块里,横切关注点在基座里,可烧录性在 OS 层里 —— 三层之间只有接口,没有耦合。v0.0.1 交付的是目录骨架、HAL trait 与契约;此图为目标架构。
| 模块 | 职责 |
|---|---|
| rr3-sense | 感知:麦克风阵列、环境传感器、IMU |
| rr3-brain | 认知:ASR / LLM / TTS 编排(Python),唯一编排者 |
| rr3-interact | 交互:表情屏、TTS 播放、拾音状态机 |
| rr3-act | 执行:舵机 / 电机、反射环宿主进程 |
| rr3-power | 电源:电池、充电、低压关断兜底 |
| rr3-connect | 连接:WiFi 链路、云端会话 |
| rr3-runtime | 基座守护进程 rrd:注册、健康、系统广播 |
| 层 | 频率 | 承载 |
|---|---|---|
| 反射环 | 1k–10kHz | 不进总线,模块进程内本地闭环 |
| 实时控制面 | 100Hz–1kHz | A-IPC over 共享内存 + ZEROCOPY / URGENT |
| 事务面 | <100Hz | A-IPC over UDS + JSON-RPC |
128 字节消息头
Rust 基座与 Python 认知模块对同一份文件编解码 —— 改格式必须先改契约,且只增不改。点击字段查看它的宽度、偏移与裁定依据。
5 种 payload 类型 · 新增只能追加在 0x0006 之后
| 类型 | 值 | 用途 |
|---|
兼容性测试覆盖 · 诚实标注哪些断言真的跑过
UDS 套接字路径 /var/run/rock3-ipc.sock,可用 RR3_BUS_PATH 覆盖;UDS 是 M2 唯一实现,shm 随 M5,TCP 预留。
21 条已登记主题
一个主题只有一个 owner,命名规范为 <owner>/<域>/<事件>。计数被契约测试硬 pin —— 删主题、改 kind 都会让门禁变红,而不是靠人记得。
类型
所属模块
| 主题 | kind | 稳定级 | 说明 |
|---|
注册表实际分布:request 7 / event 8 / stream 3 / notification 3,合计 21 条主题、7 个 owner。STREAM 类主题在 v0.0.1 仅登记、不实现传输。
切换示例指令
选一条指令,面板会同步展示它经过的模块链路、对应的真实主题与完成状态。所有主题名摘自 contracts/topics.toml,不是编出来的。
示例指令 · 演示数据
本轮涉及的模块
用户说话
处理链路
契约依据 真实主题名
本轮结果 ✓ 已完成
里程碑路线
v0.0.1 交付骨架与契约:模块与 CLI 只有结构,没有实现。入口打印自述后退出 —— 总线接入随 M2、采集与驱动随 M3–M5,每一步都有可验证的交付物。
硬性目标 · 设计目标,尚未实测
- 任意开发板不拆机烧录(maskrom 路线),换板不需要烧录器
- 基座能力 day-one:模块注册、看门狗、A/B OTA、工厂恢复
- 第一版即含电源管理,待机功耗目标 <1W
- 断电升级不 brick,坏 slot 自动回滚
文档索引 · 站内不外链仓库内容,以下为文件路径
docs/architecture/architecture.md目标架构:分层、模块模型、HAL、IPC、数据流、里程碑与风险contracts/envelope.schema.json字节级唯一事实源:偏移表与冻结枚举contracts/topics.toml主题所有权注册表docs/adr/ADR-0001 ~ ADR-0007 决策记录docs/architecture/conventions.md开发规约:分支、提交、检查步骤与完成定义legacy/README.mdESP32 在编固件(冻结区)
参与共建
Issue 是第一入口。分支与提交遵循开发规约,涉及决策的提交须引用 ADR 编号;命名以 naming.md 为唯一权威,规约检查以 tools/ci/check.sh 为唯一入口。
许可协议仍在筹备中,正式发布前请勿直接复用代码。
- 示例指令("今天天气怎么样"等)为演示文本,不代表已实机跑通的对话效果。
- 处理链路的调用顺序、耗时、表情切换与"本轮已完成"状态是演示编排;真实实现随 M2–M4 落地。
- 主题名、kind、稳定级与职责说明摘自
contracts/topics.toml;消息头字段与兼容性测试覆盖摘自contracts/envelope.schema.json;分层、控制面与里程碑摘自架构文档 §7.4 / §10。 - "硬性目标"一节全部是设计目标,本页不提供任何性能实测数据、用户规模或第三方背书。
- 品牌字标按官方图复刻为 CSS/SVG 排版,项目尚无矢量 logo 源文件;页面不包含登录、支付、数据库与数据收集功能。