RockRobot III

它在看你它听得见你它会回应你

idle
感受交互
17 种情绪表情
6 个独立模块
0.5L 掌心大小

核心能力

能听 · 会回应 · 有生命感

一台机器人要让人觉得"活着",只需要三件事:听见你、回应你、让你看见它在感受。其余的一切工程,都是为了这三件事安全、自然、不打断地发生。

听见你

当你开口,它立刻知道。不是等你说完一句话才反应 —— 从你发出第一个音节的瞬间,它就已经在听。静音与起音的边沿,它比你更敏感。

感知模块

回应你

它不只是回答问题。它用声音回应你,同时用表情告诉你 —— 它在思考、在高兴、在为你担心。17 种情绪表情覆盖从平静到兴奋的完整光谱,每一轮对话都有温度。

交互模块

触碰世界

转头、亮灯、判断声音从哪个方向来 —— 身体层为每个动作留了真实的执行入口。它先在双麦拾音通道的电平差里,粗粗反演出声源大概在哪个方位(左 / 中 / 右三档,随起音事件一起上路,没加一条新契约);再把"向左转""看看门口"这类话术归一成一个舵机转向意图、下发到对应角度。感知、认知、执行三模块在这条链上接力,让它的回应不只在屏幕上。整条链已在六真进程仿真侧走通,真麦克风与真舵机尚未上板。不是冰冷的机械臂,是奔着有生命感去设计的小家伙。

执行模块

崩溃不传染

六个模块各自独立运行,一个出了问题,其余照常工作。它不会因为一个功能的故障就彻底沉默。

进程级隔离

安全兜底

即使"大脑"宕机,它的保护机制依然运转。急停、限位、低电关断 —— 这些决策不依赖任何上层模块,在最底层守护。

基座守护

契约不变

模块之间用一份不可变的契约对话。格式只增不改,就像两个人之间的约定 —— 一旦定下,绝不反悔。

契约先行

系统架构

三层分离,互不牵绊

业务在模块里,守护在基座里,硬件差异在 OS 层消化。换一块板只需写一份装配单,不改一行应用代码 —— 这是它能从桌面走到产线的前提。下面 16 个方格每一个都能点:右侧小标签写的是它在 HEAD 的真实状态,点下去会放出这个模块的一条真实主题。

模块层
基座层
硬件层

总线实况 · 点上面任意一个模块

这一跳,走的是哪条主题、哪几个格位

模块之间零直连:一切经基座转发。选一个模块,下面把它的代表性一跳逐跳放完 —— 主题名取自 contracts/topics.toml(28 条),格位取自 contracts/slots.toml(21 格),消息头是那份冻结的 128B 契约。

    设计原则

    • 模块之间零直连,只通过事件总线对话
    • 高频控制闭环留在本地,不占用总线带宽
    • 守护逻辑在基座,不依赖任何业务模块
    • 换板不改代码,换 OS 不改模块

    硬件参数

    • SoC:RK3566(Rockchip,ADR-0001 选型)
    • 体积约束:约 0.5L,掌心大小
    • 待机功耗目标:< 1W
    • 音频:16kHz / 单声道 / 16bit PCM 采集

    换一块板,全部动作写在两份数据文件里

    "三层分离"真正兑现的地方在这里。rock3 把"这台机器人有什么"从代码里抽出来,落成两份纯数据:能力格坐标系 contracts/slots.toml 声明整机所有能力位,装配单 profiles/<机型>.toml 把格位绑到具体模块。任何"需要改 rock3 代码才能换板"的现状,都按待修的泛化欠账处理 —— 这是架构文档写死的判据,不是宣传语。

    1. 白拿上游发行版 —— Debian / Armbian / Alpine,能跑标准 rootfs 的板直接进下一步。发行版覆盖不到时切保底轨 Buildroot,base/os 的 defconfig + genimage 出冻结镜像。双轨之间没有第三轨:Yocto 后期再评估。

    2. rock3 本体就这么多:rrd + HAL 后端 + contracts/ + 安装器,deb 为主形态一次装完。六个模块另走 OCI 镜像 —— OCI 只是分发格式,rrd 始终是模块生命周期的唯一所有者,不引容器编排层。

    3. [os] 选轨,[bindings] 把身体层与认知层格位绑到模块,[faces] 裁剪每个模块在本机型启用的能力面。启动时 rrd 读 profile + 探测硬件(device-tree、sysfs、ALSA 枚举)做匹配,缺格置 Degraded 而不是启动失败。换机型裁剪能力面 = 只改这一个文件。

    21能力格
    base 5 · body 12 · cognition 4
    16装配单绑定
    default / distro 机:格位 → 模块
    6能力面裁剪
    每模块在本机型启用的格
    4查册门用例
    装错格位 CI 直接判红

    这一步今天走到哪

    已落盘坐标系与装配单在 HEAD 有实体:contracts/slots.toml(21 格,只增不改、不留空格)+ profiles/default.toml 与 profiles/distro.toml(各 16 条绑定 / 6 张能力面,纯数据零逻辑,不写启动序)。

    已落盘查册门契约守护:基础层 5 格与 base_capabilities 白名单逐条钉死等价(第二份白名单不存在)、21 格 (name, layer) 形状 pin、模块 manifest 的 provides / depends 双侧查册、default 与 distro 两份装配单同时对表 slots。

    已接线rrd 的启动装配链已落地:--profile 装机正门读装配单、探测硬件、按 faces 决定起谁,缺格逐格点名 fail-closed(不带病起,也不连坐下游)。今天的 profile 已经是被执行的数据,不只是被门禁校验的数据。

    过桥板已实测基座 payload 层在树莓派(aarch64 / Debian 13)真板跑通:dpkg -i 装进 deb、postinst 自启、六个模块全 running、denied_publish = 0、sudo reboot 后自恢复 —— "不改一行应用代码,换一块 Layer 0 完全不同的板"这一句,此刻有真板证据。

    板上敞口真硬件外设仍是敞口:ALSA 采集回放、GPIO / PWM 舵机与继电器、真电池与链路、显示点阵的真后端都还是 Unsupported,麦克风 / 舵机 / 显示件未采购。上一行"过桥板已实测"测的是基座与模块生命周期,不是外设动作。

    未验证保底轨 Buildroot 未做全量构建、目标硬件 Radxa ZERO 3 未采购;OTA 写侧 rr3-ota-ctl switch 恒拒执行,"断电不 brick、坏 slot 自动回滚"目前是设计目标加编译期布局守护,没有任何实板证据。

    在线体验

    选一句话,看它怎么回应

    每一条指令背后,是一条从感知到执行的完整链路。选一条试试 —— 面板会同步展示它经过的模块、对应的主题与完成状态。

    示例指令

    本轮涉及的模块

      对话轮替

      本轮已完成

      用户说话

      处理链路

        契约依据 真实主题名

          本轮结果 已完成

          这一格换成你的声音

          音频只在这一个标签页里分析:WebAudio 的 AnalyserNode 每 60ms 取一次时域采样算峰值,不录音、不落盘、不上传,关掉开关就断开采集。它验证的是「声音能驱动表情」这条交互,不代表板上那条 16kHz / 单声道 / 16bit PCM 采集链路 —— 那条只在仿真侧跑过,板上录音从未发生。

          协作生态

          开源共建,多方协作

          洛克三号从第一行代码起就是共建的。芯片平台、开源社区、代码托管、硬件设计 —— 每一环都已经有在场的同行者,也把位置留给下一位。

          开发进展

          每一步,都看得见

          M0–M5 已收口:契约冻结、基座守护能跑、音频整链在仿真侧走通、认知模块把对话回路串起来了,执行 / 连接 / 电源三模块也在仿真侧各就各位;换板这句话更硬了一点 —— 基座 payload 已在过桥真板装起来跑通。下面每一条都区分"代码里有"和"板子上验证过" —— 缺的那一手我们照写。想只看某一类,点上面四枚状态标签。

            设计目标

            • 不拆机烧录,换板不需要烧录器
            • 基座能力 day-one:注册、看门狗、OTA、工厂恢复
            • 第一版即含电源管理,待机功耗目标 < 1W
            • 断电升级不 brick,坏 slot 自动回滚

            文档索引

            • docs/architecture/目标架构:分层、模块模型、HAL、IPC、数据流
            • contracts/字节级唯一事实源:消息头偏移表与冻结枚举
            • docs/process/adr/17 份架构决策记录
            • docs/process/conventions.md开发规约:分支、提交、检查步骤

            参与共建

            Issue 是第一入口。我们欢迎每一个认真的建议、每一行有测试的代码。

            许可协议筹备中,正式发布前请勿直接复用代码。