Python机器人开发框架_Ark框架机器人学习_Python策略

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

引发这一差距的极具决定性的限制因素在于软件方面, 当前存在如此情形, 现有的机器人技术栈具备较高的学习难度门槛, 现阶段仍旧在比较大的程度上依赖 C/C++ 来开展底层开发工作, 其工具链呈现出分散的状态, 并且硬件集成十分复杂。与之相对比的状况是, 发挥推进现代人工智能发展作用的生态系统是以其为核心要点的, 该生态系统的文档完备, 而且易于进行使用 , 上述的这两者之间形成了极为显著的鲜明对比。

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

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

Python机器人开发框架_Ark框架机器人学习_Python策略

图 1: Ark 的整体框架

Python机器人开发框架_Python策略_Ark框架机器人学习

图 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 将 LCM 选作通信中间件的另外一个要紧理由, 是因其原生给出的调试跟内省工具套件。比如说, lcm - spy 能够凭借图形化方式去察看网络里流通的消息, 给出类似于 或者 的抓包剖析感受, 用户能够查看各个通道的详尽统计数据, 涵盖接收消息数量、消息频率(Hz)、网络抖动(ms)等关键指标, 极大地提升了系统的可观测性与调试效率。

Python策略_Ark框架机器人学习_Python机器人开发框架

图 3: Ark 可视化调试工具

用例

此节 gonna 借一串典型用例, 去呈示怎样用 Ark 迅速搭建平常的机器人学习工作流。全部示例都给出完备代码, 从而让读者去复现以及实践。

在仿真与现实之间切换

将训练好的策略布置到真实机器人上常常会伴随着明显的安全以及工程化方面的挑战, 并且许多现有的框架缺少端到端的一体化流程, 这就造成了解决方案分散, 难以进行系统化以及泛化。Ark借助一层具有高度可配置性的抽象机制, 基于统一的/C++驱动架构, 达成了从仿真到真实系统的无缝式部署。用户只要在完成环境统一定义后, 这里的环境包含机器人、传感器、物体等, 在配置文件中把sim=True/False进行切换, 便能够切换到目标运行环境。

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

Python策略_Ark框架机器人学习_Python机器人开发框架

图4, 呈现的是基于统一配置构建的Ark分布式仿真系统架构, 借助YAML文件对机器人、传感器以及组网参数予以定义, 达成了与真实部署相契合的多节点仿真, 并且支持策略能够进行无缝迁移。

模仿学习的数据采集

从事模仿学习, 通常来讲是需要大规模的高质量演示数据的, 这种类型的数据, 目前常见的采集方式主要涵盖以下两种方式:

因为 Ark 具有高度模块化的架构以及强类型消息通道的机制, 用户能够灵活地接入不同类别的示教接口。 那里边是用 LCM给出的 lcm.工具, 把每个通道的数据实时记录到日志文件里。 Ark 里头所内置的把那些从日志中提取出来的数据转换为CSV格式形式的工具, 还支撑依着环境里已经定义好的观测与动作通道配置, 这样以便去确定数据的格式在采集、那训练以及最终部署的阶段皆完全相同。

徒手示教:

以300s机械臂作为例子, 操作者能够直接牵引机械臂去把目标任务给完成, LCM会同步记录下完整的关节轨迹以及系统状态。虽然在这个示例之中相机没有参与控制回路, 不过依旧能够用来录制视觉数据来供后续进行分析。在演示结束之后, 记录下来的数据既能够用于策略训练, 又能够通过lcm -进行逐帧回放, 这对于处理有包含人体影像(有可能会引入视觉偏置)或者复杂物理交互的任务而言是特别有用的。Ark提供了一键重置服务, 比如说, 把“重置”操作和键盘按键绑定在一起, 这极大地便利了连续多次的示教以及系统评估。

遥操作:

Ark可支持多种输入设备, 像是VR控制器以及游戏手柄, 比如PS4手柄。在一种典型的配置里, 用户借由VR控制器实时发送6自由度位姿指令, 系统经由逆运动学IK节点把它转化为关节速度目标, 另一种配置是使用手柄直接控制机械臂末端位姿。一系列可复用的 Ark 节点协同把整个数据采集流程完成, 其中有手柄控制节点, 还有环境转换节点, 该节点能把手柄信号转为末端目标, 以及 IK 解算节点, 将位姿转成关节指令, 另外还有用于发布图像和关节状态的传感器节点。依靠 LCM 强类型以及通道隔离的特性, 更换相机或者控制器时别的模块不用修改。采集结束后, 用户能够使用相同的通道配置从日志内提取标准化数据, 直接拿来训练。操作者能够借助手柄的“X”键, 迅速地保存当下的轨迹, 并且促使机械臂复位, 使其到达中立姿态。

Python机器人开发框架_Python策略_Ark框架机器人学习

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

模仿学习

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

实现与部署示例:

在300秒的机械臂以及Intel RGB相机之上, 我们完成了推动任务相关的实验, 那, 什么任务呢是推动这个任务, 它的观测空间把机器人关节位置以及连续的RGB图像流包含了, 而动作空间是关节位置指令。在部署阶段的时候, 系统把数据采集时的架构完全进行了复用: 仅仅是将原本的“手柄控制节点”变换成了“策略节点”。这个策略节点从观测通道那儿读取图像还有关节状态, 并且经由同一动作通道发布目标末端位姿。因执行通路跟采集阶段维持一样, 故而用户不用去更改任何底层基础设施就能直接去验证学习得来的策略。

Python策略_Python机器人开发框架_Ark框架机器人学习

图6,Viper X 300s具有机械臂, 其能够执行扩散策略, 有着连续动作序列。

ACT 实现与部署示例:

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

Python策略_Python机器人开发框架_Ark框架机器人学习

图 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当作高层策略选择器用于集成到机器人的控制回路之中, 就是这种情况。

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

Ark把整个系统分离成感知、语言推理以及运动执行这些多个独立的节点。它被包装成一个服务节点, 会接收结构化提示词, 有着里面的场景观测、可用函数和任务描述这些内容, 然后返回推理结果。在每一步决策当中, 感知节点会把棋盘状态、图像等观测数据发布到消息通道, 经过整理以后,通过服务调用发送到LLM节点, 并且触发一次策略生成。

Python机器人开发框架_Python策略_Ark框架机器人学习

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

未来工作和总结

预想将来, Ark规划着重开展两大取向: 其一为 强化强化学习(RL)基础架构, 借由原生整合以及RLlib等主流架构, 去支撑并行环境实施, 并且给出统一的环境具象接口, 达成在模拟与真切机器人之间高效地训练、评测以及布署RL策略;其二是提高高保真模拟能力, 于现有的以及所给予的支撑之上, 另外引入域随机化、可微分物理等关键特质, 强化策略的稳健性以及模拟到实际的转移成效, 与此同时和高性能模拟后端深度整合, 打造更精准、可拓展并且功能充沛的模拟环境。

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

Python机器人开发框架_Python策略_Ark框架机器人学习

表1, 涉及Ark跟同类框架功能方面的对比, 其中红色圆圈表明那个框架对该特性并不支持。

Logo

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

更多推荐