前言
拆开一台人形机器人,你会看到两块计算板、二十二个关节电机和一堆传感器——但软件上"谁管谁"这件事,官方参数页不会告诉你。
Q1 的答案很有意思:它把机器人的"大脑"物理上分成了两半。管运动的叫运控板(文档里也称呼它"小脑板"),管思考的叫大脑板;而开发者自己那台电脑,是正式架构图里的第三个节点。三台设备没有主从服务器,靠一根局域网里的 FastDDS 总线平权互联。
这篇文章把这三端拆开讲清楚:每块板上跑什么、一条指令怎么在三者之间流转、以及"分家"背后的三个工程取舍。读懂这套架构,你写 SDK 程序时就会知道——每一条消息发给了谁、为什么有的接口快有的慢、控制权什么时候会被抢走。
目录标题
- 前言
- 一、一张官方图:三端各是谁
- 二、运控板:1000Hz 的"小脑"
- 三、大脑板:负责思考的那半边
- 四、开发机:插进机器人的第三台设备
- 五、一条"敬礼"指令的三端之旅
- 六、为什么这么分家:三个架构观察
一、一张官方图:三端各是谁
先看官方《快速入门与集成指南》给出的架构总览(下图依原文重绘):
三端角色(职责描述):
| 端 | 默认 IP | 官方定位 | 上面跑什么 |
|---|---|---|---|
| 运控板(小脑板) | 10.1.1.100 | “机器人的运动控制大脑” | HAL 硬件抽象、MC 运控算法、表情/语音/灯效等基础交互服务 |
| 大脑板 | 10.1.1.101 | “高阶感知与导航大脑” | 核心 AI 算法、感知、规划、供应商程序(如 aimrt_agent) |
| 开发机 | 建议 10.1.1.99 | “外部开发者的主要开发与运行环境” | 你的 SDK 程序、ROS 2 节点、仿真与调试工具 |
三个容易被忽略的细节:
- 没有中枢服务器。三端通过局域网 FastDDS(DDS 协议作为 ROS 2 通信总线)平权互联——开发机上
ros2 topic list能直接看到机器人节点,不需要连任何"网关服务",只需要同一ROS_DOMAIN_ID。 - 同一块板,两个名字。《快速入门》通篇叫"运控板",《接口说明》在相机章节又称它"小脑板"(原文:“默认小脑板:10.1.1.100”)——小脑管运动,大脑管认知,命名逻辑其实很直白。
- 标准模式下你根本连不上。机器人出厂工作在"标准生产模式",该模式下"外部设备无法直接发现机器人节点,网口也无法连接"(官方指南原文)——必须先用手机 APP 切换开发者模式,这是三端架构的第一道门。
二、运控板:1000Hz 的"小脑"
运控板是三端里最"忙"的一块,从《接口说明.md》能数出它的四摊工作:
- HAL硬件抽象层——全身 22 个关节的实时伺服。底层话题
/aima/hal/joint/command以 1000Hz 接收指令,每个关节一组阻抗参数(position / velocity / effort / stiffness / damping),按关节名寻址。文档同时规定了这条通道的"脾气":单帧增量不得超过 0.2rad、退出前必须发一帧 stiffness=0 的阻尼保护帧、低于 100Hz 会触发看门狗。22 个关节的构成(臂 4×2 + 腿 6×2 + 腰 2)与官网参数页完全一致。 - MC** 运控算法——一个 20 态的状态机。** 高层动作不是"直接执行",而是在 PASSIVE / DAMPING / STAND / WALK_RUN / BIPED_WHOLE_BODY_CTRL 等约 20 个状态之间沿拓扑约束切换;三层动作体系(状态机切换、ONNX 神经网络动作、120fps 关键帧/CSV 动作)都终结于这条状态机的调度。
- 基础交互服务。表情播放、TTS 语音合成、灯效这些"低延迟表达"也归运控板管——TTS 的 L1~L10 优先级仲裁矩阵、按 200ms/字估算播报时长的约定,都定义在这块板的服务语义里。
- 媒体外设的出口。头部相机以 RTSP 流对外服务(
rtsp://10.1.1.100:2554/live_head_monocular_centra),音频走 PulseAudio TCP 通道(6001 播放 / 4713 录制)。注意这些 IP 和端口都挂在运控板上——相机和扬声器物理上连的是"小脑"。
三、大脑板:负责思考的那半边
大脑板(10.1.1.101)的官方定位是"高阶感知与导航大脑"。从 SDK 能直接观察到的证据有三处:
- ASR** 语义结果从这来**。语音识别话题
/aima/agent/asr_result(text / event_id / is_final / confidence / language)——原始音频进运控板,理解后的文本从大脑板流出,"听"与"懂"分属两板。 - aimrt_agent 供应商程序。播放机器人自带音频时,文件路径指向
/robot/software/aimrt_agent/bin/cfg/q1/audio——基于 AimRT 框架的 agent 模块部署在大脑板侧,承载官网所说的"接入自研或开源大模型"的交互智能与长期记忆能力(后者为官网产品页表述,SDK 未展开,标记为推测)。 - 板载可独立部署。两块板都开放 SSH 密钥登录和开机自启动配置(
/robot/software/<module>/+ process_manager),文档明确"运控板和大脑板可分别独立配置启动程序"——你的程序可以选择性地只部署到其中一块。
一句话概括分工:运控板保证"动得稳",大脑板负责"想得清"。官网那句"让数字 Agent 获得真实身体",落到架构上就是:大脑板跑你的 Agent,运控板把它的决策变成 1000Hz 的关节电流。
四、开发机:插进机器人的第三台设备
开发机在架构图里不是"外挂",是正式节点。接入要做四件事(均有官方出处):
- 组网:网线直连或同子网,有线网卡建议配 10.1.1.99;
- 切模式:手机 APP 开发者模式(注意官方提示:开启后不再享受维保);
- 权限分层:官方的五层权限架构——运行模式 → 开发方式(API 暂未开放 / ROS 2 默认)→ 开发层级 → 领域 → 原子功能,当前开放的核心是"运动控制-低层运控开发";
- 验证:
ping通两块板后,ros2 node list应能看到机器人侧节点(如/mc_ros2_node)。
还有一个对二开很实际的点:输入源仲裁。运控板同时接收多个控制源(遥控器、APP、VR、你的 SDK 程序),优先级 0~100——内置源 rc/pnc/interaction 为 80、vr 为 70、app_proxy 为 60,而SDK 二开程序分配在 39-20 段。这意味着手机 APP(经 app_proxy)随时能抢走你的控制权;且任一源 1000ms 无心跳即脱锁。写长任务程序时,这是必须内化的规则。
五、一条"敬礼"指令的三端之旅
把前面的静态分工串成动态流程——用笔者上一篇文章制作的"敬礼"动作为例(CSV 轨迹文件,384 帧 @120fps):
时序里最值得咀嚼的是两级判别:第一次回包header.code=0只说明"框架收到了",动作真正开始要看state=RUNNING,成功与否最终看state=SUCCESS(1)加 reason 码——30 个 reason 枚举覆盖了从避障触发(10~13)到起身中不可打断(27)的各种"礼貌拒绝"。跨三端调试时,先分清卡在哪一级,能省掉大半排查时间。
六、为什么这么分家:三个架构观察
观察一:实时性隔离。1000Hz 关节伺服对抖动极其敏感,而 AI 推理负载不可预测。把两者放在不同物理板、不同操作系统调度域里,AI 卡顿不会传导成关节抖动——这是经典嵌入式"实时层与智能层分离"的消费级落地。
观察二:生态即接口。没有私有 SDK 协议、没有网关服务,三端之间就是标准 ROS 2 over FastDDS。这意味着 ROS 2 生态里的一切(导航栈、MoveIt、你的 LLM Agent)都能零适配"插"进这台机器人——开发机之所以是架构节点而非客户端,原因正在于此。
观察三:安全靠分层收口。标准模式网络隔离、开发者模式显式切换、五层权限收敛到"当前仅开放低层运控"、输入源优先级仲裁加心跳脱锁——四道闸门从网络、模式、权限、运行时四个层面圈住了二开风险。对一台进家庭、与儿童互动的 88cm 机器人来说,这个收紧节奏是合理的设计。
三端架构的解读到这里。它给二开者的最大启示也许是:写 Q1 程序时你不是在"调用API",而是把自己的电脑变成了机器人分布式系统里的第三个节点——理解这一点,官方示例里那些 service 名、话题名、状态机约束就都有了来处。
本文全部架构结论出自启元官方资料:《PrimeBot SDK 快速入门与集成指南》《接口说明.md》(SDK v1.0.0.0)与官网产品页/参数页(primebot.com)。
SDK、文档与仿真包下载见启元机器人开发者社区:https://dev.primebot.com/