Ark框架机器人学习_Python机器人开发框架_系统学python

最近这些年, 机器人技术于硬件方面有了突出的突破, 不管是DARPA机器人挑战赛, 还是首届那个人形机器人自由搏击表演, 都呈现着让人刮目相看的进步, 可是, 机器人的自主能力仍然明显地落后于机器学习的发展脚步。

致使这一差距出现的关键瓶颈处在软件方面: 当前存在的机器人技术栈学习的门槛相对较高, 依旧在底层开发时大量依靠C/C++, 工具链呈现出分散状况且硬件集成颇为复杂, 比起来, 推动现代人工智能向前发展的生态系统以什么为核心不太明确, 其文档较为完善、使用起来较为便利, 二者构成了鲜明的反差态势。

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

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

系统学python_Python机器人开发框架_Ark框架机器人学习

图 1: Ark 的整体框架

系统学python_Ark框架机器人学习_Python机器人开发框架

图 2: Ark 目前的下载量

Ark 框架概述

要推动具身智能研究向前发展, Ark出现了。这个框架努力和典型机器学习工作流深度融合, 能让用户迅速构建原型,还能把它部署到物理机器人上。它的设计有着三个理念:

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

Ark给出跟广泛推广运用的机器学习库相契合的用户接口, 把机器学习背景下的研究者投身机器人开发的门槛给降低, 对机器人学习系统于成熟度以及标准化层面的欠缺予以弥补。

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

Ark致力于消除模拟环境跟真实系统之间的障碍, 在保障开发阶段安全的同时, 还大幅降低从仿真过渡到实机期间的复杂程度以及错误发生几率。

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

Ark 把一种语言用来当作核心开发语言, 凭借其丰富无比的生态系统以承载快速迭代以及予以实验功能所需养分。与此同时之时不时之间针对像是底层运动控制这类带有频率较高性质之种种特别任务, 同样供给也把提供用于便捷方便不复杂化的 C/C++相关界面以此拓展以扩展能力, 从而保证确保对关键重要不可或缺之各类模块的执行成效效率。

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

Ark 网络

将系统拆分成数据采集模块, 拆分成状态估计模块, 拆分成任务规划与控制等独立模块, 这是机器人软件系统设计的一项基本原则, 如此做可有效提升可维护性和扩展性, 模块化就是这个原则。Ark框架把每个模块实现成独立的进程, 此进程被称为“节点”, 节点之间依靠异步消息通道来通信, 借助灵活的发布/订阅机制达成数据交换。用户能够通过形如/的命名方式去定义通道, 并且动态创建发布端以及订阅端。在LCM类型规范语言领域, 众多消息类型定义于该语言范畴内, 每个需要标识的消息通道均依靠名字以及消息类型来做区分判断。有一种消息类型库, 它借助称呼为 的形式提供给Ark这款工具, 该库当中收纳涵盖了多种各类机器在日常运行时经常会使用的那些类型, 像 或者 这一类的。

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

拥有能轻松集成 C/C++/Java 等底层语言这般特性, 是使用 LCM 的又一优势所在。Ark 节点借助 LCM 消息通道来通信, 凭借标准 LCM 接口, 用其他语言编写的脚本文件也能够开展网络方面的通信工作。对于那种只支持厂商所提供的 C/C++/Java API 的硬件设备, 像是力反馈接口这种, 上述情况就会显得极为有用。用户能够通过达成相应的 LCM 发布/订阅接口, 把设备接入到 Ark之中(这是可行的)。然而, 架构设计是基于 Ark 在仿真与真实环境间进行协调的(后文会讨论), 把 LCM 当作其他语言跟之间的桥梁可不是一直都是最佳选择, 为了这个, Ark 给出一系列的工具以及辅助函数 / 类, 去帮用户把 C/C++ 功能直接封装到。

Ark 还提供以下功能:

观测与动作通道

Ark运用(Gym)样式的接口谋划: reset ()法子回馈起先的观测数值以及环境消息;step ()法子却回馈接下来的观测数据、奖赏、终结/截断标识还有信息字典。每一个环境在起始之时借助一个字典架构各自界定其观测空间跟动作空间所依靠的消息通道: 观测空间经由订阅多个消息通道获得数据, 动作间则经由向指定通道发布指令去操控机器人。各个不同的观测通道, 能够支持不一样的采样频率, 在每一步执行环境的时候, 会自动返回各通道那最新鲜的一条消息。这样的一种设计情况, 让从事研究工作的人员, 可以迅速地进行不同策略输入输出组合的原型化操作, 能够灵活地去适配多种不同的算法以及任务结构。

真实世界与物理仿真

Ark具备的一大能力, 是借助单个配置开关, 在仿真以及真实机器人之间进行切换模拟, 其相应设置为(sim = True/False)。Ark采用分布式节点架构, 将机器人以及传感器, 不管是真实的还是仿真的, 均实现当作独立节点来对待;仿真一端由一份YAML配置予以驱动, 确保仿真和真实系统接口的节点维持一致状态, 进而能够在仿真模拟以及现实部署过程中实现轻松切换。

于仿真后端之处, Ark并非绑定单一的模拟器, 而是去提供后端抽象层, 旨在能够随需进行对接。当下, Ark已然能够支持与, 此后的计划是集成Isaac Sim等;仿真或者现实的切换以及后端的选择, 皆经由YAML配置予以完成, Ark会自动初始化相应的驱动, 以此确保消息模式、通道命名以及执行流程维持一致。

Ark框架机器人学习_系统学python_Python机器人开发框架

图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)等重要指标, 这极大地强化了系统的可观测性以及调试效能。

系统学python_Ark框架机器人学习_Python机器人开发框架

图 3: Ark 可视化调试工具

用例

本节会借助一大串典型用例, 来呈现怎样运用 Ark 迅速搭建常见的机器人学习工作流。全部示例都给出完整代码, 从而方便读者去复现以及实践。

在仿真与现实之间切换

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

我们于300s固定基座机械臂这一对象上, 展开了抓取 - 放置任务的实例验证操作。整个进行该操作的环境, 是经由一份YAML配置文件予以统一指定的, 此配置文件涵盖了物体的初始位置信息、相机与机器人摆放姿态及位置的状况, 还有物理参数内容。观测价值体现在当前关节位置指令方面, 而动作所涵盖的则是目标关节速度。仿真环境以及真实环境所采用的都是同一由人工精心编写而成的专家策略实施控制。在朝着真实机器人进行迁移这个行为的时候, 仅仅只需要去修改一个配置变量sim, Ark呢便在其内部自动地把消息通道从仿真驱动程序转换为物理硬件驱动, 其余的所有代码以及数据结构都不需要进行变更。

Python机器人开发框架_Ark框架机器人学习_系统学python

图4, 是基于统一配置的Ark分布式仿真系统架构, 借助YAML文件来定义机器人、传感器以及组网参数, 达成与真实部署相一致的多节点仿真, 还支持策略的无缝迁移。

模仿学习的数据采集

对模仿学习而言, 通常情况下是需要大规模的高质量演示数据的, 当下常见的采集方式主要涵盖以下两种。

可灵活接入不同类型示教接口, 是因为 Ark 架构高度模块化且有强类型消息通道设置, 这给用户提供了便利。存在一个利用 lcm-tool 的情况, 在这种情况下通过 LCM 来实时记录所有通道里的数据, 记录所产生的结果会到日志文件当中。Ark 里面存着从日志里提取数据并转化为 CSV 格式的工具, 并且它还支持依照环境里已设定的观测与动作通道配置继续使用, 这样就能保证数据格式在采集这一阶段、训练阶段以及最终部署阶段都是完全相同的。

徒手示教:

就拿300s机械臂来说, 操作者能够直接去牵引机械臂, 以此完成目标任务, LCM会同步记录完整的关节轨迹, 还有相应的系统状态。就算在这个示例当中, 相机并没有参与到控制回路, 可它仍然能够用以录制视觉数据, 来供后面做分析。待到演示完成以后, 记录下来的数据既能够被用来进行策略训练, 又能够借助lcm - 进行逐帧回放, 而这放在处理包含人体影像(有可能由此引入视觉偏置)或者复杂物理交互的任务上, 是十分有用的。Ark提供了一键重置服务, 把“重置”操作绑定到键盘按键就是例子, 这样极大方便了连续多个的示教, 也极大方便了系统评估。

遥操作:

在 Ark 中, 支持着多种输入设备, 就像 VR 控制器以及游戏手柄那样, 其中游戏手柄比如有 PS4 手柄, 在一种典型配置情形下, 用户借助 VR 控制器实时发送 6 自由度位姿指令, 而系统经由逆运动学也就是 IK 节点把这些指令转化为关节速度目标, 还有另一种配置是利用手柄直接去控制机械臂末端位姿。整个数据采集流程, 是由一组能够反复使用的 Ark 节点共同来完成的。它涵盖了手柄控制节点, 可以进行相应的操作;有环境转换节点, 能够把手柄信号转变为末端目标;还有 IK 解算节点, 具有把位姿转化成关节指令的作用;另外还有用于发布图像和关节状态的传感器节点, 表示的是这个节点在相关方面的功能。依靠 LCM 具备的强类型以及通道隔离的特质, 在更换相机或者控制器的时候, 并不用去修改其他的模块。采集结束之后, 用户可以借助相同的通道配置, 从日志里面提取出经过标准化处理的数据, 能够直接拿来用于训练。进行操作的人员通过手柄上面的 “X”按钮从而更便捷地保存当下的轨迹, 并且促使机械连接的臂迅速回复到处于中立且平衡的姿态。

Python机器人开发框架_系统学python_Ark框架机器人学习

图5, lcm, 通过记录那些源自多种控制接口的演示, 来达成高效的数据采集。

模仿学习

在这一节当中, 我们呈现了好些实现模仿学习的应用实例, 着重讲解怎样去使用 Ark 开展数据采集、训练以及策略部署工作。我们呈现了两种模仿学习方法: (i) , (ii)ACT, Ark 身为核心基础设施, 给出模块化组件、标准化接口以及实时通信机制, 极大地简化了从数据收集直至策略部署的整个运作流程。

实现与部署示例:

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

Ark框架机器人学习_Python机器人开发框架_系统学python

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

ACT 实现与部署示例:

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

Ark框架机器人学习_Python机器人开发框架_系统学python

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

移动机器人

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

在 Ark 里, 我们达成了一整套完备的移动机器人导航流程, 先是借由遥操作操控机器人运动, 接着借助机载 LiDAR 数据筑造地图, 建图完毕之后, 运用 A* 算法开展全局路径规划, 同时结合距离变换技术保证与障碍物维持安全距, 最后经由 PD 控制器追踪路径点, 生成差速驱动所需的轮速指令!

建图:

Ark给予了一套标明为 “遥操作辅助 SLAM” 的流程, 目的在于达成建图以及定位, 内有两个关键节点, 一是遥操作控制器, 二是概率 SLAM 模块, 这两者凭借消息通道来通信。用户借由遥操作节点传送线速度以及角速度指令, 这些指令经由 Ark 动作通道被发送到底层控制器, 进而转变成左右轮速。此时此刻, LiDAR 数据与控制指令被实时地传输至 SLAM 节点, 用来融合预估机器人位姿并构建地图。我们运用了那种赖以 Rao– 粒子滤波的办法: 每一个粒子都在同一时间去维持位姿估计以及一个占据栅格地图, 栅格概率的取值范围是从 0(代表空闲)一直到 1(意味着占据)。系统的结构呈现出来的样子就如同图 8 所展示的那样。

Python机器人开发框架_Ark框架机器人学习_系统学python

图8展示, Husky机器人, 于厨房环境中, 在用Ark工具给予支持的状况下, 成功切实达到并进行SLAM建图以及导航。

导航:

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

具身智能

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

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

Ark把整个系统分离成感知、语言推理与运动执行等好些个独立的节点, 其中的语言推理节点进一步被包装成一个服务节点, 其会去接收那种结构化的提示词,这里的提示词包含场景观测、可用函数以及任务描述等内容, 之后能返回推理出的结果。在进行得的每一步决策时, 能够称作感知的那个节点会将棋盘状态、图像等观测得到的数据发布到消息通道里, 这些到了消息通道的数据经过整理后, 会通过服务调用这样的方式发送至LLM节点, 进而触发一次策略的生成。

Ark框架机器人学习_Python机器人开发框架_系统学python

图9, Ark框架, 通过集成操作, 赋予Viper机械臂, 国际象棋对弈能力, 将大模型与之相结合。

未来工作和总结

面向未来进行展望, Ark计划着重于两大方向来开展重点发展工作: 其一乃是对强化学习(RL)基础设施予以强化, 借助原生集成以及RLlib等主流框架, 达成对并行环境执行的支持, 进而供应统一的环境抽象接口, 以此达成在仿真与真实机器人之间针对RL策略展开高效训练、评估以及部署;其二是提高高保真仿真能力, 在现有的以及所支持的基础之上, 进一步把域随机化、可微物理等关键特性引入进来, 使策略的鲁棒性以及仿真至现实的迁移效果获得增强, 与此同时与高性能仿真后端进行深度集成, 构建出更为精确、具备可扩展性且功能丰富的模拟环境。

Ark凭借现代化、模块化以及用户友好的架构, 专心致力于在机器人学跟机器学习之间构建高效桥梁, 这既极大程度降低了真实机器人部署的技术门槛, 又维持了面向前沿研究的灵活性与扩展性, 随着仿真性能的提高、RL生态融合的深入和工具链的不断完善, Ark有希望发展成支撑具身智能研究的重要通用平台, 促使机器人学习社区持续向前迈进。

Python机器人开发框架_Ark框架机器人学习_系统学python

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

Logo

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

更多推荐