idle

RockRobot III

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

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

核心能力

能听 · 会说 · 有温度

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

听见你

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

感知模块

回应你

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

交互模块

触碰世界

转头、挥手、亮灯 —— 它有真实的物理反馈。每一次动作都有灯效配合,让你看见它在努力理解你的意思。不是冰冷的机械臂,是有生命感的小家伙。

执行模块

崩溃不传染

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

进程级隔离

安全兜底

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

基座守护

契约不变

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

契约先行

情绪表情

17 种表情,每一种都是真的

它不只是在"显示一个图标"。每一个表情都有眼睛的形状、嘴巴的弧度、颜色的温度 —— 就像一个人,高兴的时候眼睛会弯,困的时候眼皮会沉。点击任意一个,英雄区的脸会同步变化。

系统架构

三层分离,互不牵绊

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

模块层
基座层
硬件层

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

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

模块之间零直连:一切经基座转发。选一个模块,下面把它的代表性一跳逐跳放完 —— 主题名取自 contracts/topics.toml(21 条),格位取自 contracts/slots.toml(20 格),消息头是那份冻结的 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 而不是启动失败。换机型裁剪能力面 = 只改这一个文件。

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

    这一步今天走到哪

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

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

    已落盘A/B 分区标签编译期守护:rr_a / rr_b / rr_factory / rr_staging 由 rr-ota 单点产出并与 genimage.cfg 对拍 —— 任何代码路径写不出一个和镜像布局不一致的标签。

    未接线rrd 的启动装配链(读 profile → 探测硬件 → 匹配 → 缺格置 Degraded)还没写。今天的 profile 是被门禁校验的数据,还不是被执行的数据。

    未验证OTA 写侧 rr3-ota-ctl switch 恒拒执行;"断电升级不 brick、坏 slot 自动回滚"目前是设计目标加编译期布局守护,没有任何实板证据。

    未验证目标硬件 Radxa ZERO 3 未采购,板上敞口四件全在:Buildroot 全量构建、串口出 shell、maskrom 实烧、分区容量定型。

    在线体验

    选一句话,看它怎么回应

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

    示例指令

    本轮涉及的模块

      对话轮替

      本轮已完成

      用户说话

      处理链路

        契约依据 真实主题名

          本轮结果 已完成

          这一格换成你的声音

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

          协作生态

          开源共建,多方协作

          洛克三号不是一个人在做。从芯片平台到开源社区,从代码托管到硬件设计,每一个环节都有同行者。

          开发进展

          每一步,都看得见

          M0–M4 已收口:契约冻结、基座守护能跑、音频整链在仿真侧走通、认知模块把对话回路串起来了。下面每一条都区分"代码里有"和"板子上验证过" —— 缺的那一手我们照写。想只看某一类,点上面四枚状态标签。

            设计目标

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

            文档索引

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

            参与共建

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

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