
近年来,机器人技术在硬件领域取得了显著突破 —— 无论是 DARPA 机器人挑战赛,还是首届人形机器人自由搏击表演,都展示了令人瞩目的进展。然而,机器人的自主能力仍明显落后于机器学习的发展步伐。
造成这一差距的关键瓶颈在于软件层面:现有的机器人技术栈学习门槛较高,仍大量依赖 C/C++ 进行底层开发,工具链分散且硬件集成复杂。相比之下,推动现代人工智能发展的生态系统以 Python 为核心,文档完善、易于使用 —— 两者形成了鲜明对比。
为应对这些挑战,来自华为诺亚方舟实验室,德国达姆施塔特工业大学,英国伦敦大学学院,帝国理工学院和牛津大学的研究者们联合推出了 Ark —— 一个基于 Python 的机器人开发框架,支持快速原型构建,并可便捷地在仿真和真实机器人系统上部署新算法。
Ark 与主流机器学习工作流深度兼容,能够从仿真环境或实际机器人中采集和预处理数据,并支持使用如 ACT、Diffusion Policy 等前沿模仿学习方法进行策略训练。该框架采用类似 OpenAI Gym 风格的主接口设计,极大降低了机器学习研究者的上手门槛,便于集成与实验。在架构层面,Ark 使用基于网络的 Python 节点实现发布 / 订阅通信机制,同时也提供 C/C++ 工具以兼容高性能需求场景。框架还内置了对 ROS 的原生支持,包含底层控制、数据工具、可视化、系统辨识、移动底盘导航等多个核心模块,并配备完整的文档与实用示例。

图 1: Ark 的整体框架

论文链接:https://arxiv.org/pdf/2506.21628
代码链接:https://github.com/Robotics-Ark
教程链接:https://arkrobotics.notion.site/Ark-Home-22be053d9c6f8096bcdbefd6276aba61

图 2: Ark 目前的下载量
Ark 框架概述
为推进具身智能研究的发展,Ark 应运而生。该框架致力于与典型机器学习工作流深度整合,使用户能够快速构建原型并将其部署至物理机器人。其设计秉持三大理念:
(D1)兼容主流机器学习生态
Ark 提供与广泛使用的机器学习库一致的用户接口,降低机器学习背景研究者参与机器人开发的门槛,弥补机器人学习系统在成熟度与标准化方面的不足。
(D2)支持仿真 - 实机无缝切换
Ark 着力打通模拟环境与真实系统之间的壁垒,既保障开发阶段的安全性,也显著降低从仿真迁移到实机过程中的复杂度和错误率。
(D3)以 Python 为中心,兼顾高性能需求
Ark 以 Python 作为核心开发语言,依托其丰富的生态系统支持快速迭代与实验。同时,针对高频任务(如底层运动控制),也提供了便捷的 C/C++ 接口扩展能力,确保关键模块的执行效率。
下文将具体介绍 Ark 的核心功能与实现特点。
Ark 网络
模块化是机器人软件系统设计的一项基本原则:通过将系统拆分为数据采集、状态估计、任务规划与控制等独立模块,可有效提升可维护性和扩展性。Ark 框架将每个模块实现为独立的 Python 进程(称为 “节点”),节点之间通过异步消息通道进行通信,采用灵活的发布 / 订阅机制实现数据交换。用户可通过形如 NODE_NAME/CHANNEL_NAME 的命名方式定义通道,并动态创建发布端和订阅端。我们遵循 LCM 类型规范语言定义消息类型,每个消息通道通过名称和消息类型标识。Ark 提供名为 ark_types 的消息类型库,包含多种机器常用类型(如 joint_state_t 或 transform_t)。
当前版本中,Ark 使用 LCM 作为底层通信后端,其轻量化架构和丰富的配套工具(如日志记录、调试和内省支持)特别适用于机器人系统中的数据记录与开发调试。同时,网络层被设计为可插拔结构,便于未来扩展如分布式训练与推理等复杂机器学习工作流。
使用 LCM 的另一优势是易于集成 C/C++/Java 等底层语言。由于 Ark 节点通过 LCM 消息通道通信,其他语言编写的脚本也可利用标准 LCM 接口进行网络通信。这对于仅支持厂商提供的 C/C++/Java API 的硬件设备(如力反馈接口)非常有用。用户可通过实现相应的 LCM 发布 / 订阅接口将设备接入 Ark。然而,基于 Ark 在仿真与真实环境间协调的架构设计(后文讨论),以 LCM 作为其他语言与 Python 之间的桥梁并非总是最佳选择。为此,Ark 提供一系列工具和辅助函数 / 类,帮助用户直接将 C/C++ 功能封装到 Python。
Ark 还提供以下功能:
Services:为需明确请求 - 响应的操作(如机械臂标定触发)提供支持,基于 LCM 类型系统定义请求与响应结构;
Registry:作为轻量级的网络协调与服务发现枢纽,支持运行时可视化与故障隔离;
Launcher:允许用户在单一 YAML 格式配置文件中定义整个网络,通过一次终端执行自动启动所有指定子进程。
观测与动作通道
Ark 采用 Gymnasium(OpenAI Gym)风格的接口设计:reset () 方法返回初始观测值和环境信息;step () 方法则返回下一步的观测值、奖励、终止 / 截断标志以及信息字典。每个环境在初始化时通过一个字典结构分别定义其观测空间与动作空间所依赖的消息通道:观测空间通过订阅多个消息通道获取数据,动作空间则通过向指定通道发布指令来控制机器人。不同观测通道可支持不同的采样频率,环境在每一步执行时自动返回各通道最新的一条消息。这种设计使研究者能够快速原型化不同的策略输入输出组合,灵活适配多种算法与任务结构。
真实世界与物理仿真
Ark 的一大能力是通过单个配置开关在仿真与真实机器人之间切换(sim = True/False)。Ark 以分布式节点架构把机器人与传感器(无论真实还是仿真)都实现为独立节点;仿真端由一份 YAML 配置驱动,使仿真与真实系统接口的节点保持一致,从而可以在仿真模拟和现实部署中轻松切换。
在仿真后端上,Ark 并不是绑定单一模拟器,而是提供后端抽象层以便按需对接。当前 Ark 已支持 PyBullet 与 MuJoCo,后续计划集成 Isaac Sim 等;仿真 / 现实的切换和后端选择全部通过 YAML 配置完成,Ark 自动初始化相应驱动,保证消息模式、通道命名与执行流程保持一致。

图 2: Ark 使用统一配置文件来实例化反映真实世界部署的分布式模拟系统
机器人与传感器驱动
Ark 虽然在用户接口层面(如类 Gym 的交互方式)提供了标准化的设计,但整个框架在架构上保持了高度的可扩展性。自设计之初,我们就以广泛的机器人及传感器兼容性为目标,致力于支持多样化的硬件生态。与近年出现的某些仅针对特定机型(如 LeRobot、PyRobot)的框架不同,Ark 旨在支持更多的硬件,并通过多种灵活的对接机制实现通用化集成。
Python 驱动接口:
Ark 提供了抽象基类 ComponentDriver,用于统一硬件组件与框架的集成方式。用户在实现具体驱动时,只需继承该类并重写标准抽象方法,例如传感器的 get_data 或机器人的 send_command。每个驱动均可与 Ark 的 “仿真 - 现实” 开关无缝集成,系统会根据全局配置自动将消息路由到真实硬件或对应的仿真节点。
C++ 驱动支持:
在很多实际场景中,仍然需要依赖 C/C++ 实现底层驱动,例如某些设备仅提供原生 C/C++ 接口,或需要高采样率以满足实时控制需求(如足式机器人的步行控制)。为此,Ark 提供基于 pybind11 的 C++ 封装工具,使得仅具备 C++ 接口的硬件也能够以与 Python 驱动一致的方式接入 Ark,在保持性能的同时实现系统一体化。
ROS–Ark 桥接:
目前 ROS 仍是机器人领域应用最广泛的中间件体系,部分机器人(如 ViperX 机械臂)仅提供基于 ROS 的官方接口。为兼容此类系统,Ark 提供专用的 ROS–Ark 桥接驱动,可实现 ROS topic 与 Ark 消息通道之间的双向通信。用户可在不改动原有 ROS 代码的前提下,实现 ROS 与 Ark 的混合运行,这也为从 ROS 逐步迁移至 Ark 提供了平滑过渡路径。根据我们与多家机器人实验室的实际使用反馈,目前桥接器主要支持 ROS 1;对 ROS 2 的支持将根据社区需求进一步评估和推进。
内省与调试工具
机器人系统通常由多个进程构成,模块间耦合复杂,因此一套完善的可视化与调试工具对快速定位和解决问题至关重要。Ark 为此提供了以下核心工具:
Ark Graph:实时显示系统中所有活跃节点、它们发布与订阅的消息通道以及当前可用的服务,帮助用户快速理解系统拓扑和通信关系。
Ark Plot:支持对任意数值型消息通道进行实时绘图,可用于观察变量随时间的变化趋势,例如整定控制参数或诊断传感器数据行为。
Ark Viewer:实时可视化任意基于 LCM 传输的图像消息通道,适用于相机标定、运行监控和图像算法调试。
此外,Ark 选择 LCM 作为通信中间件的另一个重要原因,在于其原生提供的调试与内省工具套件。例如 lcm-spy 能够以图形化方式查看网络中流通的消息,提供类似于 Wireshark 或 tcpdump 的抓包分析体验,用户可以查看各通道的详细统计信息,包括接收消息数量、消息频率(Hz)、网络抖动(ms)等关键指标,极大增强了系统的可观测性与调试效率。

图 3: Ark 可视化调试工具
用例
本节将通过一系列典型用例,展示如何使用 Ark 快速构建常见的机器人学习工作流。所有示例均提供完整代码,以便读者复现和实践。
在仿真与现实之间切换
将训练好的策略部署至真实机器人往往伴随显著的安全与工程化挑战,而许多现有框架缺乏端到端的一体化流程,导致解决方案分散、难以系统化和泛化。Ark 通过一层高度可配置的抽象机制,基于统一的 Python/C++ 驱动架构,实现了从仿真到真实系统的无缝部署。用户只需在完成环境(包括机器人、传感器、物体等)的统一定义后,于配置文件中切换 sim=True/False,即可切换至目标运行环境。
我们在 ViperX 300s 固定基座机械臂上进行了抓取 - 放置任务的实例验证。整个环境通过一份 YAML 配置文件统一指定,包括物体的初始位置、相机与机器人的位姿以及物理参数。观测值为当前关节位置指令,动作为目标关节速度。仿真和真实环境均使用同一人工编写的专家策略进行控制。在向真实机器人迁移时,仅需修改一个配置变量 sim,Ark 便在内部自动将消息通道从仿真驱动程序切换至物理硬件驱动,其余所有代码及数据结构均无需变更。

图 4: 基于统一配置的 Ark 分布式仿真系统架构,通过 YAML 文件定义机器人、传感器及组网参数,实现与真实部署一致的多节点仿真,支持策略无缝迁移
模仿学习的数据采集
模仿学习通常需要大规模的高质量演示数据,目前常见的采集方式主要包括以下两种:
徒手示教(Kinesthetic Teaching):操作者直接通过物理引导机械臂完成动作任务。这种方式直观自然,但存在设备安全与人员操作风险;
遥操作(Teleoperation):通过 VR 头显与手柄、游戏手柄等设备,在安全距离外对机器人进行控制。该方法避免了直接接触,但可能受限于视觉反馈质量和运动映射准确性,对操作者技能有一定要求。
得益于 Ark 高度模块化的架构和强类型消息通道机制,用户可以灵活接入不同类型的示教接口。我们利用 LCM 提供的 lcm-logger 工具实时记录所有通道的数据至日志文件。Ark 内置从日志中提取数据并转换为 CSV 格式的工具,并支持沿用环境中已定义的观测与动作通道配置,从而确保数据格式在采集、训练与最终部署阶段完全一致。
徒手示教:
以 ViperX 300s 机械臂为例,操作者可直接牵引机械臂完成目标任务,LCM 同步记录完整的关节轨迹与系统状态。尽管在该示例中相机未参与控制回路,但仍可用于录制视觉数据以供后续分析。演示结束后,记录的数据既可用于策略训练,也可通过 lcm-logplayer 进行逐帧回放,这对于处理包含人体影像(可能引入视觉偏置)或复杂物理交互的任务尤为有用。Ark 还提供了一键重置服务,例如将 “重置” 操作绑定至键盘按键,极大方便了连续多次示教与系统评估。
遥操作:
Ark 支持多种输入设备,如 VR 控制器与游戏手柄(如 PS4 手柄)。在一种典型配置中,用户通过 VR 控制器实时发送 6 自由度位姿指令,系统通过逆运动学(IK)节点将其转化为关节速度目标;另一种配置则使用手柄直接控制机械臂末端位姿。整个数据采集流程由一系列可复用的 Ark 节点协同完成,包括手柄控制节点、环境转换节点(将手柄信号转为末端目标)、IK 解算节点(将位姿转为关节指令),以及用于发布图像和关节状态的传感器节点。凭借 LCM 强类型和通道隔离的特性,更换相机或控制器时无需修改其他模块。采集完成后,用户可使用相同的通道配置从日志中提取标准化数据,直接用于训练。操作者还可通过手柄的 “X” 键快捷保存当前轨迹并触发机械臂复位至中立姿态。

图 5: lcm-logger 通过记录来自多种控制接口的演示实现高效的数据采集
模仿学习
在本节中,我们展示了若干实现模仿学习的应用案例,重点介绍如何使用 Ark 进行数据采集、训练和策略部署。我们将展示了两种模仿学习方法:(i)Diffusion Policy,(ii)ACT,Ark 作为核心基础设施,提供模块化组件、标准化接口和实时通信机制,显著简化了从数据收集到策略部署的整个流程。
Diffusion Policy 实现与部署示例:
我们在 ViperX 300s 机械臂与 Intel RealSense RGB 相机上完成了推动任务(pushing)Diffusion Policy 实验。该任务的观测空间包括机器人关节位置及连续的 RGB 图像流,动作空间为关节位置指令。在部署阶段,系统完全复用了数据采集时的架构:仅将原本的 “手柄控制节点” 替换为 “策略节点”。该策略节点从观测通道读取图像和关节状态,并通过同一动作通道发布目标末端位姿。由于执行通路与采集阶段保持一致,用户无需修改任何底层基础设施即可直接验证学习到的策略。

图 6: Viper X 300s 机械臂执行扩散策略的连续动作序列
ACT 实现与部署示例:
除扩散策略外,我们还基于 OpenPyro-A1 人形机器人平台实现了 ACT 方法的示例。通过 VR 设备进行遥操作,收集了包括 “衣服整理” 与 “物体接力” 在内的多类任务数据。通过训练得到的策略能够生成精细且包含丰富接触交互的操作行为,展现出较强的泛化与实物操作能力。

图 7: OpenPyro 使用 ACT 策略执行衣服整理和物体接力任务
移动机器人
许多现实任务(如设备巡检)要求机器人能够在环境中自主移动至多个目标点。实现该能力需同时解决两个问题:构建环境地图(建图)并在地图中实时定位自身(定位),这一过程合称为同步定位与建图(SLAM)。当地图构建完成且定位稳定可靠后,机器人即可通过路径规划算法实现导航。
我们在 Ark 中实现了一套完整的移动机器人导航流程:首先通过遥操作控制机器人运动,并利用机载 LiDAR 数据构建地图;建图完成后,使用 A* 算法进行全局路径规划,并结合距离变换技术确保与障碍物保持安全距离;最后通过 PD 控制器跟踪路径点,生成差速驱动所需的轮速指令。
建图:
为实现建图与定位,Ark 提供了一套 “遥操作辅助 SLAM” 流程,包含两个核心节点:遥操作控制器与概率 SLAM 模块,两者通过消息通道通信。用户通过遥操作节点发送线速度和角速度指令,这些指令经 Ark 动作通道发送至底层控制器,转换为左右轮速。同时,LiDAR 数据与控制指令被实时发送至 SLAM 节点,用于融合估计机器人位姿并构建地图。我们采用基于 Rao–Blackwellized 粒子滤波的 FastSLAM 方法:每个粒子同时维护位姿估计和一个占据栅格地图,栅格概率取值从 0(空闲)到 1(占据)。系统结构如图 8 所示。

图 8:Husky 机器人在 Ark 工具支持下于厨房环境实现 SLAM 建图与导航
导航:
在已知地图且能可靠定位的基础上,机器人可进行运动规划。我们集成 A* 算法作为全局规划器。规划器接收目标点位置和 SLAM 生成的占据栅格地图。首先通过阈值将地图二值化,再计算距离变换图以获取每个栅格到最近障碍物的距离,确保路径满足 “半车宽 + 安全裕量” 的避障要求。A* 输出一条平滑的避障路径,表示为一系列笛卡尔路标点 (x,y),并按设定分辨率进行下采样以提高执行效率。控制子系统根据实时位姿和路径点序列逐点跟踪:先调整机器人朝向,再沿直线移动至当前路标,进入容差范围后自动切换下一目标。最终输出线速度和角速度,并转换为差速驱动的轮速指令。
具身智能
大语言模型(LLM)与视觉 - 语言模型(VLM)显著提升了机器人的高层推理能力。Ark 凭借其模块化设计与 Python 优先的架构,天然适合将 LLM/VLM 作为高层策略选择器集成到机器人控制回路中。
我们在 Viper 机械臂上构建了一个基于 LLM 的智能体系统(图 9),采用 DeepSeek-R1 作为底层模型,遵循 “代码即策略(code-as-policy)” 范式:将 “抓取”“按位置放置”“移除物体” 等操作封装为可参数化的策略函数。这些函数组成策略库供 LLM 调用,模型根据任务上下文从库中选择合适技能并生成代码执行。
Ark 将整个系统解耦为感知、语言推理与运动执行等多个独立节点。DeepSeek 被封装为一个服务节点,接收结构化提示词(包含场景观测、可用函数和任务描述)并返回推理结果。每一步决策中,感知节点将棋盘状态、图像等观测数据发布到消息通道,经整理后通过服务调用发送至 LLM 节点,触发一次策略生成。

图 9:Ark 框架通过集成 DeepSeek 大模型赋予 Viper 机械臂国际象棋对弈能力
未来工作和总结
展望未来,Ark 计划重点发展两大方向:一是强化强化学习(RL)基础设施,通过原生集成 Stable Baselines3 和 RLlib 等主流框架,支持并行环境执行,并提供统一的环境抽象接口,实现在仿真与真实机器人之间高效训练、评估和部署 RL 策略;二是提升高保真仿真能力,在现有 PyBullet 和 MuJoCo 支持的基础上,进一步引入域随机化、可微物理等关键特性,增强策略的鲁棒性和仿真到现实的迁移效果,同时与高性能仿真后端深度集成,构建更精确、可扩展且功能丰富的模拟环境。
Ark 以现代化、模块化和用户友好的架构,致力于在机器人学与机器学习之间建立高效桥梁:既大幅降低了真实机器人部署的技术门槛,又保持了面向前沿研究的灵活性与扩展性。随着仿真性能的提升、RL 生态融合的深化以及工具链的持续完善,Ark 有望发展成为支撑具身智能研究的重要通用平台,推动机器人学习社区不断向前迈进。

表 1:Ark 与同类框架的功能对比,红色圆圈表示该框架不支持该特性
© THE END
转载请联系本公众号获得授权
投稿或寻求报道:liyazhou@jiqizhixin.com