本系列:从 0 到 1 入门智元灵犀 X2 二次开发
本篇要解决的问题:给定一个需求,判断它应该落在端侧还是云端。
灵犀X2是智元机器人发布的搭载情感计算引擎的双足智能交互人形机器人,旗舰版整体具备 30 个自由度,标配 激光雷达、前视双目 RGB 摄像头、RGBD 相机与后视 RGB 摄像头,并配备高算力板 Nvidia Orin NX 计算单元,标配 4G/5G 模块。具备全量的二次开发能力,同时支持灵创平台使用。
一、两条二开路径
智元把二开能力拆成了两套并行、且可以协同的体系。选错路径的代价不是多写几行代码,整个技术方案会拧着走。
| 端侧开发 | 云端开发 | |
|---|---|---|
| 开发框架 | AIMDK(任务编程与扩展框架) | 灵心 AgentSDK(LinkSoul) |
| 代码运行位置 | 机器人本体 | 你的服务器 / 云主机 |
| 通信方式 | ROS 2(service / topic) | WebSocket 长连接 |
| 支持语言 | Python、C++ | Python、Java |
| 核心能力 | 控制、感知、交互 | 语义理解、LLM、TTS |
| 版本 | AIMDK 1.0(接口 v0.8) | AgentSDK v1.4.0 |
一句话概括职责边界:端侧管身体,云端管脑子。
但”管身体 / 管脑子”这种说法容易掩盖真正的判断依据。下面给出可操作的判据。
1 | flowchart TD |
真实系统几乎都会落到”两者协同”:云端负责听懂并决定,端侧负责执行并反馈。第 05 篇专门处理两者的接缝。
二、灵犀 X2 硬件约束
写代码前需要先接受几个硬约束,它们会直接限制程序能做什么。
计算单元。X2 有两套计算单元:标配计算单元,以及面向二开的开发计算单元(Orin NX / RK3588)。二开程序部署在开发计算单元上,通过千兆以太网(RJ45)访问。
⚠️ 硬约束:运控计算单元(PC1,
10.0.1.40)上不可部署二开程序。该单元承担运控等高实时任务,占用其算力会直接影响机器人行走安全。这不是性能建议,是安全边界。
传感器。X2 配备多路传感器(相机、麦克风阵列、触觉等),官方文档给出能力、视场角与参数。注意部分传感器属于选装——写依赖视觉的代码前,先确认目标机器是否装配。
关节活动范围。文档分别给出手臂、腿部、头部、腰部的可保证活动空间。超出范围的关节指令轻则执行失败,重则损伤硬件。动作类程序必须以此为边界。
坐标系。AIMDK 有明确的坐标系约定,所有位姿与导航点位都基于它。导航和位姿相关代码上线前必须先读这一节——否则会出现”坐标数值正确、但机器人朝向反了”这类难以定位的问题。
三、端侧 AIMDK
AIMDK 是智元为二开提供的机器人开放接口与配套工具,基于 ROS 2 Humble。
接口按模块划分:
| 模块 | 内容 |
|---|---|
| 控制模块 | 运动模式切换、走跑控制、MC 控制信号与输入源、预设动作、灵创动作、末端执行器、关节控制 |
| 交互模块 | 语音控制(ASR / TTS / MIC 音频流)、屏幕控制、灯带控制 |
| 感知模块(选装) | 视觉等感知能力 |
| 硬件抽象模块 | 底层硬件统一抽象 |
| 故障与系统管理 | 标注”待发布” |
| 开发者模式 | 开发者相关配置 |
接口命名规范(后续会反复用到):
| 类型 | 前缀 |
|---|---|
| Service | /aimdk_5Fmsgs/srv/ |
| Topic | /aima/ |
| 消息包 | aimdk_msgs |
⚠️ 已知缺陷:ROS 的 service 机制在跨板通信时存在待优化问题。官方明确要求二开时”参考例程添加异常处理、快速重试等保护机制”。
四、云端灵心 AgentSDK
AgentSDK 是对话智能层。程序以 WebSocket 长连接接入灵心开放平台网关,机器人端侧把音频 / 视频 / 文本推给二开程序,处理后回传。
两种交互模式,方向相反:
- 被动交互:机器人发起(音频 / 视频 / 文本)→ 二开程序处理 → 返回结果(ASR / LLM / VLM / TTS)
- 主动交互:二开代码主动发起 → 平台转发 → 机器人响应。v1.4.0 起公开入口收敛为”任务流”,即可编排的多步任务序列
五、系统全景
1 | graph TB |
两条数据流的方向差异,是理解整套体系的关键。
1 | sequenceDiagram |
注意:agent_id 不是机器人硬件编号,是灵心平台上配置的智能体 ID(形如 AGENT_0000001)。机器人在端侧绑定某个智能体后上线,SDK 通过 on_robot_online(agent_id, ...) 收到通知。一个 SDK 实例可以同时服务多个 agent_id——这个设计直接影响状态管理方式,后续会展开讲解。
下一篇进入实操:端侧环境搭建,以及第一个自己写的 AIMDK 节点。