Ark框架机器人学习_Python机器人开发框架_Python强化学习

在近些年之中, 机器人技术于硬件范畴达成了显著的突破, 不管是DARPA机器人挑战赛, 又或是首届人形机器人自由搏击表演,均呈现出了令人刮目相看的进展。然而, 机器人的自主能力依旧明显地落后于机器学习的发展脚步。

造成这一差距的关键瓶颈处于软件层面, 现有机器人技术栈学习门槛偏高, 依旧大量依靠 C/C++ 开展底层开发, 工具链分散且硬件集成复杂, 相比之下, 推动现代人工智能发展的生态系统以 为核心, 文档完备、易于使用, 两者构成了鲜明对照。

为了应对这些挑战, 有来自华为诺亚方舟实验室的研究者们, 还有来自德国达姆施塔特工业大学、英国伦敦大学学院的研究者们, 还有来自帝国理工学院和牛津大学的研究者们, 他们联合起来推出了Ark, 这是一个基于的机器人开发框架, 它支持快速原型构建, 并且能够便捷地在仿真和真实机器人系统上部署新算法。

Ark跟主流机器学习工作流深度兼容, 它能够从仿真环境当中采集和预处理数据,还能从实际机器人里采集和预处理data, 并且支持使用像ACT等前沿模仿学习方法去进行策略训练。这个框架采用类似Gym风格的主接口展开设计, 极大程度降低了机器学习研究者的上手门槛, 更便于集成与实验。在架构层面上, Ark运用基于网络的节点达成发布/订阅通信机制, 同时还提供C/C++工具用于兼容高性能需求场景。框架之内置, 对 ROS 的原生支持也有, 底层控制、数据工具、可视化、系统辨识、移动底盘导航等那么多个核心模块存在其中, 而且还配备着完整的文档以及实用的示例。

图 1: Ark 的整体框架

图 1: Ark 的整体框架

Python强化学习_Python机器人开发框架_Ark框架机器人学习

图 2: Ark 目前的下载量

Ark 框架概述

具身智能研究发展的推进促使 Ark 出现, 这个框架专注于和典型机器学习工作流深度融合, 借此让用户能够迅速构建原型并把它部署到物理机器人,它遵循着三大理念。

(D1)兼容主流机器学习生态

Ark提供用户接口, 其与广泛使用的机器学习库保持一致, 借此降低机器学习背景研究者参与机器人开发的门槛, 进而弥补机器人学习系统在成熟度与标准化方面所存在的不足。

(D2)支持仿真 - 实机无缝切换

Ark努力去打通模拟环境跟真实系统之间所存在的壁垒, 它在保障开发阶段安全性的同时, 还能显著地降低从仿真迁移至实机这个过程当中的复杂度, 以及错误的发生率。

(D3)以 为中心,兼顾高性能需求

Ark把 作为核心开发语言, 凭借其丰富的生态系统给快速迭代和实验予以支持。并且, 对于高频任务(就像底层运动控制那样), 还提供了便捷的C/C++接口扩展能力, 以此保障关键模块的执行效率。

下文将具体介绍 Ark 的核心功能与实现特点。

Ark 网络

进行机器人软件系统设计时, 有一项基本原则叫模块化: 把系统去拆分为数据采集、状态估计、任务规划与控制等单独模块的话, 能够有效提升可维护性以及扩展性。Ark框架把每个模块都实现成独立进程(叫做“节点”), 节点之间借助异步消息通道来通信, 利用灵活的发布/订阅机制达成数据交换。用户能够通过像/这样的命名方式去定义通道, 还能动态创建发布端与订阅端。我们依照LCM类型规范语言去界定消息类型, 每一个消息通道凭借名称以及消息类型来加以标识, Ark给出名为 的消息类型库, 其涵盖多种机器常用类型, 诸如 或者。

现阶段版本里, Ark运用LCM当作底层通信后端, 其具备轻量化架构, 还有丰富的配套工具, 像日志记录、调试以及内省支持等, 特别适配于机器人系统里的数据记录以及开发调试。与此同时, 网络层被设计成像可插拔的结构那般, 方便于日后扩展, 比如分布式训练与推理论证等复杂的机器学习工作流。

运用 LCM 的另外一个优势在于, 它易于跟 C/C++/Java 这类底层语言相集成。鉴于 Ark 节点借助 LCM 消息通道来通信, 所以用其他语言编写的脚本,也能够凭借标准 LCM 接口去做网络通信。这对于那些只支持厂商所提供的 C/C++/Java API 的硬件设备, 像力反馈接口而言, 是相当有用的。用户能够通过实现相应的 LCM 发布 / 订阅接口, 把设备接入 Ark。然而, 架构设计是基于 Ark 在仿真与真实环境当中进行协调的(后文会讨论), 而把 LCM当作其他语言与之之间的桥梁, 这种情况不是一直属于最佳的选择。所以呢, Arn给出了一系列的工具以及辅助函数或者类, 用来协助用户直接把C/C++ 的功能给封装到。

Ark 还提供以下功能:

观测与动作通道

Ark运用(Gym)风格的接口设计, reset () 方法会返回初始观测值以及环境信息, step () 方法会返回下一步的观测值、奖励、终止 / 截断标志还有信息字典, 每个环境在初始化之时借助一个字典结构分别去定义其观测空间以及动作空间所依赖的消息通道, 观测空间依靠订阅多个消息通道来获取数据, 动作空间是通过向指定通道发布指令从而控制机器人。不同的观测通道, 能够支持不一样的采样频率, 在每一步执行环境的时候, 会自动返回各通道最新的一条消息, 这样的设计, 让研究者可以快速地对不同的策略输入输出组合进行原型化, 能够灵活地适配好多不同的算法以及任务结构。

真实世界与物理仿真

Ark具备的一大能力, 是借助单个配置开关, 在仿真与真实机器人之间进行切换, 其条件为sim = True/False。Ark采用分布式节点架构, 把机器人与传感器在无论真实还是仿真状态下都部署成独立节点。并且, 仿真端由一份YAML配置驱动, 以此让仿真与真实系统接口的节点维持一致, 进而能够在仿真模拟以及现实部署当中轻易切换。

对于仿真后端而言, Ark并非绑定单一模拟器, 而是提供用于按需对接的后端抽象层。当下, Ark已支持与, 后续有着集成Isaac Sim等的计划;仿真与现实间的切换以及后端的选择, 全都是经由YAML配置来达成的, Ark会自动初始化相应驱动, 以此确保消息模式、通道命名跟执行流程维持一致。

图 2: Ark 使用统一配置文件来实例化反映真实世界部署的分布式模拟系统

图2, Ark利用统一配置文件, 去实例化分布式模拟系统, 该系统能反映真实世界部署。

机器人与传感器驱动

虽说 Ark 呢, 它在那种用户接口层面, 就好比类似 Gym 交互方式那类的, 给出了标准化设计, 然后但后面是, 整个框架于架构层面却保持着极高的可扩展性。从设计刚开始的时候起, 咱们就把目标定为啥广泛类别的机器人以及各类传感器能有的那么些兼容性, 一直专心钻研要做到支持好多样式的硬件当中发展起来的生态。跟最近这些年才冒出来的有些只针对特定机型的框架不一样, 像那什么就是比如说之类那些专门针对某种特定机型的框架, Ark 呢它的目标是支持更多硬件, 并且靠着好些灵活多样的对接机制成就通用情况下会被集到一块儿融合那个目的集成。

驱动接口:

Ark给出了抽象基类, 用以统合硬件组件跟框架的集成路径。用户于实现具体驱动之际, 只要继承此类别并重写标准抽象方法, 像传感器的, 或者机器人的。每一个驱动均可同Ark的“仿真 - 现实”开关顺利集成, 系统会依照全局配置自动地把消息导向真实硬件或相应的仿真节点。

C++ 驱动支持:

在诸多实际场景当中, 依旧得依赖C/C++去实现底层驱动, 比如说某些设备只给出原生C/C++接口, 又或者是需要高采样率来满足实时控制需求, 像足式机器人的步行控制这种情况。鉴于此, Ark提供基于的C++封装工具, 这能使得仅拥有C++接口的硬件也可以用与驱动一致的方式接入Ark, 在维持性能期间达成系统一体化。

ROS–Ark 桥接:

当前, ROS依旧是机器人范畴内运用最为普遍的中间件体系, 有部分机器人, 像机械臂, 仅仅给出基于ROS的官方接口。为了能够兼容这类系统, Ark提供专门的ROS–Ark桥接驱动, 它能够达成ROS topic与Ark消息通道相互之间的双向通信。用户可以在不更改原来的ROS代码的状况下, 达成ROS与Ark的混合运行, 这同样为从ROS逐步转移至Ark给予了平滑过渡路径。按照我们跟好多家机器人实验室的实际使用之后的反馈情况来看, 当下桥接器主要是对ROS 1予以支持, 关于对ROS 2的支持会依据社区需求进一步去评估以及推进。

内省与调试工具

机器人系统往往依靠多个进程予以构成, 模块之间耦合状况复杂, 所以一套完备的可视化以及调试工具对于迅速定位还有解决问题来讲非常关键。Ark针对此提供了以下核心工具:

而且,Ark 将 LCM 选作通信中间件的另外一个关键缘由, 是靠其原生给出的调试跟内省工具组。比如 lcm - spy 可以用图形化形式去查看网络里流转的信息, 给出类似于 或者 的抓包解析感受, 使用者能够查看各个通道的详尽统计数据, 涵盖接收消息数目、消息频率(Hz)、网络抖动(ms)等重要指标, 极大地提升了系统的可观测效能和调试成效。

图 3: Ark 可视化调试工具

图 3: Ark 可视化调试工具

用例

紧接着这一章节, 将会借助一连串具有突出代表性的运用案例, 去演示怎样运用 Ark 迅速搭建起普遍常见的机器人学习工作流程。并且, 所有的示例都会给出详尽完备的代码, 从而能够让读者依照这个代码重新塑造案例和进行实质性的操作运用。

在仿真与现实之间切换

把训练好的策略布置到真实机器人身上常常会有着明显的安全以及工程化方面的挑战, 并且好多现有的框架缺少端到端的一体化流程, 致使解决方案零散难以系统化和泛化。Ark借助一层高度可配置的抽象机制, 依据统一的/C++驱动架构, 达成了从仿真到真实系统的无缝部署。用户只要在完成环境(涵盖机器人、传感器、物体等)的统一定义之后, 在配置文件里切换sim=True/False, 就能够切换到目标运行环境。

我们针对 300s 固定基座机械臂, 开展了抓取 - 放置任务的实例验证, 整个环境借助一份 YAML 配置文件予以统一指定, 其中涵盖物体的初始位置、相机与机器人的位姿以及物理参数, 观测值是当前关节位置指令, 动作是目标关节速度, 仿真环境与真实环境均运用同一人工编写的专家策略实施控制。向真实机器人迁移之际, 只需改动一个配置变量sim, Ark便会于内部自行把消息通道从仿真驱动程序切换至物理硬件驱动, 而其余所有代码以及数据结构都无需变动。

Python强化学习_Python机器人开发框架_Ark框架机器人学习

4图: 以统一配置为基础的, 供Ark分布式仿真系统运用的架构构造, 借助YAML文件去规定机器人、传感器以及组网参数, 达成跟真实部署保持一致的多节点仿真, 为策略能够无缝迁移提供支持。

模仿学习的数据采集

对事物进行模仿学习这种行为, 一般而言是需要规模较为宏大的、具备较高质量的演示数据的, 当下比较常见的采集方式主要涵盖以下两种情形:

正因 Ark 具备高度模块化的架构以及强类型消息通道机制之优势, 用户才能够灵活地接入不同种类的示教接口。我们借助 LCM 所提供的 lcm - 工具, 将所有通道的数据实时记录到日志文件之中。Ark 内部设置了从日志里提取数据并转化为 CSV 格式的工具, 并且支持沿用环境里已定义的观测与动作通道配置, 以此保证数据格式在采集、训练以及最终部署阶段全部保持一致。

徒手示教:

拿出 300s 机械臂, 以此作为例子, 通过它可以让操作者用来直接牵引完成任务。机械臂有个叫 LCM 的东西, 它会同步进行运行, 去详细记录关节的轨迹, 以及系统状态的全部情况。在这个例子情况下, 相机虽然没有参与到控制回路里面, 不过它还是能够用于记录下视觉数据, 从而拿给后续去进行详细分析。等到演示结束之后, 所记录下来的数据, 又能够用于策略训练, 还能够通过 lcm - 来进行逐帧回放, 这种情况对于处理包含人体影像, 有可能会引入视觉偏置的, 或者是复杂物理交互的任务, 是特别有作用 的。Ark提供了一键重置服务, 此服务能把一种按特定要求进行的操作, 也就是将“重置”动作这般的操作, 绑定到键位上, 这一状况极大限度地方便好多回不停地进行示教以及对系统开展评估。

遥操作:

Ark能支持好些种输入设备, 像是VR控制器, 还有游戏手柄, 比如说PS4手柄, 在一种典型的配置情形里, 用户借由VR控制器去实时发送6自由度位姿指令, 系统借助逆运动学也就是IK节点把它转变成关节速度目标, 另外一种配置方式却是运用手柄直接对机械臂末端位姿加以控制。完成整个数据采集流程, 是靠一系列能够复用的 Ark 节点协同达成的, 其中有手柄控制节点, 还有环境转换节点, 这个节点能把手柄信号转成末端目标;还有 IK 解算节点, 它会把位姿转成关节指令, 另外还有传感器节点, 其作用是发布图像和关节状态。因为 LCM 具备强类型以及通道隔离的特性, 在更换相机或者控制器的时候, 并不需要去修改其他模块。采集工作结束之后, 用户能够运用相同的通道配置, 从日志里面提取出标准化数据, 直接用来进行训练。当前轨迹能够被操作者借助手柄的“X”键进行快捷保存, 并且机械臂可由于此操作而被触发复位, 从而使其回到中立姿态。

图 5: lcm-logger 通过记录来自多种控制接口的演示实现高效的数据采集

图5, lcm, 通过记录来自各种控制接口 的演示 来实现高效的数据采集。

模仿学习

在这特定的节当中, 我们呈现了好些实现模仿学习的应用实例, 突出介绍怎样运用 Ark 来开展数据收集、展开训练以及进行策略部署 , 我们展现了两种呈现模仿学习的办法: (i) , (ii)ACT , Ark 作为关键的基础设施 , 给出模块化的组件 、标准化的接口以及实时的通信机制 , 极大地简化了从数据搜集直至策略部署的整个流程进程。

实现与部署示例:

我们于300s机械臂以及Intel RGB相机之上, 完成了有着推动任务的实验, 该任务的观测空间涵盖机器人关节位置以及连续的RGB图像流, 动作空间是关节位置指令。在部署阶段, 系统完全复用了数据采集时的架构, 仅仅是把原本的“手柄控制节点”替换成“策略节点”, 该策略节点从观测通道读取图像和关节状态, 并且通过同一动作通道发布目标末端位姿。因执行通路跟采集阶段维持一样, 故用户不用去修改任何底层基础设施就能直接验证所学习到的策略。

图 6: Viper X 300s 机械臂执行扩散策略的连续动作序列

图6, Viper X 300s机械臂, 执行扩散策略, 呈现连续动作序列。

ACT 实现与部署示例:

除了扩散策略之外, 我们还在 -A1 人形机器人平台之上实现了 ACT 方法的示例, 借助 VR 设备开展遥操作, 收集了涵盖 “衣服整理” 以及 “物体接力” 等多类任务的数据, 经由训练所得的策略能够生成精细且具备丰富接触交互的操作行为, 展现出较强的泛化以及实物操作能力。

图 7: OpenPyro 使用 ACT 策略执行衣服整理和物体接力任务

图 7: 使用 ACT 策略执行衣服整理和物体接力任务

移动机器人

好些现实任务, 像设备巡检这类, 要求机器人是能够在环境当中自主地移动到多个目标点。而要实现这个能力, 需要同时去解决两个问题, 一个是构建环境地图, 也就是建图, 另一个是在地图里实时定位自身, 也就是定位, 这一整个过程合起来叫做同步定位与建图也就是SLAM。当地图构建完毕并且定位稳定可靠之后, 机器人就能够通过路径规划算法达成导航。

我们于 Ark 里达成了一项整套的移动机器人导航流程, 首先借由遥操作操控机器人行进, 且凭借机载 LiDAR 数据构筑地图, 建图完毕之后, 运用 A* 算法开展全局路径规划, 并且联合距离变换技术保障与障碍物维持安全距离, 最终经由 PD 控制器追踪路径点, 生成差速驱动所需的轮速指令。

建图:

Ark提供了一套流程, 这套流程是为了实现建图跟定位的, 它叫做“遥操作辅助SLAM”流程, 该流程具备两个核心节点, 一个是遥操作控制器, 另一个是概率SLAM模块, 这两个核心节点通过消息通道来通信。用户借助遥操作节点去发送线速度以及角速度指令, 这些指令经由Ark动作通道发送到底层控制器那里, 进而转换为左右轮速。与此同时, LiDAR数据和控制指令会被实时发送到SLAM节点, 以此用于融合估计机器人位姿并且构建地图。我们运用了有关于 Rao– 粒子滤波这样一种方式: 也就是每个粒子同步去维持位姿估计以及一个占据栅格地图, 并且栅格概率的取值范围是从 0(代表空闲)一直到 1(代表占据)。系统的结构呈现出来是如图 8 所示的样子。

图 8:Husky 机器人在 Ark 工具支持下于厨房环境实现 SLAM 建图与导航

图8, Husky机器人, 在Ark工具的支持之下, 于厨房环境当中, 实现了SLAM建图以及导航。

导航:

处于已知地图且能获得可靠定位的情形中, 机器人能够开展运动规划。我们把 A* 算法整合起来当作全局规划器。规划器收接目标点位置以及 SLAM 生成的占据栅格地图。首先借助阈值对地图实施二值化, 接着计算距离变换图, 以此来取得每个栅格到最近障碍物的距离, 保证路径符合“半车宽 + 安全裕量”的避障要求。A* 输出一条平滑的避障路径, 将其表示成一系列笛卡尔路标点 (x,y), 并依照设定分辨率进行下采样, 从而提升执行效率。控制子系统依据实时位姿以及路径点序列依序进行逐点跟踪操作: 起先对机器人的朝向予以调整, 随后沿着直线朝着当前路标行进, 在成功进入容差范围之后会自动切换到下一个目标。最终输出线速度与角速度, 并且将其转化为差速驱动的轮速指令。

具身智能

大语言模型也就是LLM, 还有视觉 - 语言模型也就是VLM, 它们显著地提升了机器人的高层推理能力。Ark依靠其模块化设计与优先的架构, 天然就适合把LLM/VLM当作高层策略选择器, 集成到机器人控制回路当中。

我们于 Viper 机械臂上, 构建了一个智能体系统, 此系统基于 LLM, (图 9), 采用 -R1 当作底层模型, 依从 “代码即策略(code-as-)” 范式, 把 “抓取”“按位置放置”“移除物体” 等方面的操作, 封装成可参数化的策略函数, 这些函数构成策略库, 以供 LLM 进行调用, 模型依据任务上下文, 从库中挑选合适技能, 进而生成代码去执行。

整个系统里, Ark把它解耦成很多独立节点, 像感知节点, 语言推理节点以跟运动执行节点等等。其中一个节点被封装之后成为服务节点, 它会接受那种结构化提示词, 这里面有场景观测、可用函数相关内容还有任务描述这些, 最后返回推理结果。在每回做决策的时候, 感知节点会把棋盘状态、图像之类观测数据发布去消息通道, 经过整理之后, 通过服务调用这样子发送到LLM节点那儿, 然后触发一次策略生成。

图 9:Ark 框架通过集成 DeepSeek 大模型赋予 Viper 机械臂国际象棋对弈能力

图9, Ark框架, 通过集成, 大模型, 赋予Viper机械臂, 国际象棋对弈能力。

未来工作和总结

展望今后将来, Ark计划着重重点聚焦展开发扬两大主要方向: 其一呢是尽力加强强化学习也就是RL的根基设施建设, 借助经过原生集成以及如同RLlib这般的一类主流框架方式途径, 去支撑保障并行环境能够顺利执行运作, 进而还得额外提供给出一种整齐统一的环境抽象化接口, 最终达成实现在仿真跟真实这个机器人装置身上之间能够有效高效地进行训练、评测评估以及布置部署RL策略;其二则是努力提高提升高保真仿真的能力水平, 在既有的已然存在的以及又可得的支撑予以援助的基础之上条件前提下情况之中环境里,更进一步地再引进引入像是域随机化、可微物理等至关重要的关键特性要领, 从而增强强化策略的稳固强健本质性能质性以及仿真迈向现实的转移转变效果成效, 与此同时并且与此同时还得与高性能仿真后端深入深度地去进行集成融合, 构建搭建起更为精准精确、能够扩展扩充而且功能丰富多样的模拟环境场景。

Ark凭借现代化、模块化以及用户友好的架构, 着力于在机器人学跟机器学习之间搭建起高效的桥梁, 它有着大幅降低真实机器人部署技术门槛的成效, 还保持着面向前沿研究的灵活性与扩展性。随着仿真性能得以提升, RL生态融合不断深化, 以及工具链持续完善, Ark有希望发展成支撑具身智能研究的重要通用平台, 进而推动机器人学习社区持续向前迈进。

表 1:Ark 与同类框架的功能对比,红色圆圈表示该框架不支持该特性

表 1 展示的是, Ark 跟以同类相称的框架在功能方面的对比情况, 其中红色的圆圈所代表的意思是, 该框架对该特性并不具备支持的能力。

Python强化学习_Ark框架机器人学习_Python机器人开发框架

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐