技术解读丨一文读懂智元机器人自研中间件AimRT 发布时间:2024-09-29 18:28:00

        8月18日,智元 2024 年度发布会上,智元机器人联合创始人彭志辉介绍了一款自研的轻量化、高性能通信框架“AimRT”,并宣布在 9 月底正式开源。今天,智元机器人正式官宣机器人中间件AimRT已上线 ,兑现了其在发布会上的开源承诺。AimRT的源码目前托管在Gitee,并同步镜像至GitHub等主流开源社区,相关文档已上线官网aimrt.org。


        那么这个 AimRT 到底有哪些功能?

        它的设计架构如何?

        跟目前市面上常用的 ROS 有什么区别?

        ……


        今天我们就用一篇文章来揭开它的神秘面纱,先行一步了解一下它的主要特点。







01/

在机器人中间件领域

目前的现状和问题是什么?


        在目前机器人中间件领域,ROS1 以及 ROS2 处于一家独大的地位。ROS 最早在 2010 年发布 1.0 版本,但在后续的发展中暴露出各种问题,最终 ROS 官方于 2017 发布全新 ROS2 的第一个版本,并于 2022 年发布第一个长周期支持版 ROS2 Humble。同时官方也逐渐停止对 ROS1 的维护,全面转向 ROS2。

 

        除了 ROS2,近几年很火的自动驾驶领域也产生了不少中间件,可以在一定程度上复用到机器人领域,例如百度的 Apollo,最早也是基于 ROS 作为底层,但最终放弃 ROS,自研了 CyberRT 作为底层通信组件。不过这些毕竟不是专为机器人领域设计的,在生态、工具链、使用率等方面与 ROS2 还是有较大差距。

 

        但在目前以 ROS2 为主流的机器人中间件领域,也存在不少问题。一个比较突出的点是,ROS2 是为了传统机器人控制领域设计的,对运动控制、Slam 等领域支持的较好,但对面向未来的机器人+ AI、机器人+云等都不太友好。

 

        除此之外,ROS2 较为冗重、官方支持平台较少、迭代较慢、不太稳定等各种问题制约着他的产业落地,很少有量产型产品直接使用 ROS2 作为自身产品的通信框架。



02/

AimRT 到底是什么?


        AimRT 是智元公司于成立之初(2023 年 2 月)就决定要去自行研发的一套通信中间件,目前已经迭代到了 v0.8.0 版本,框架的大部分核心功能都已经开发完成,有较为完善的文档的示例,经过大量测试,在智元公司内部也实际使用了很长时间。

 

        AimRT 的整体定位如下:


• AimRT 是一套用于现代机器人领域的基础运行时框架,基于现代 C++ 开发,轻量易部署,在资源管控、异步编程、部署配置等方面都有更现代化的设计。


• AimRT 致力于整合机器人端侧、边缘端、云端等多种部署场合的研发,服务于现代基于 AI 与云的机器人应用,提供现代且完善的调试、性能分析工具,以及良好的可观测性支持。


• AimRT 还提供全面的插件开发接口,具有高拓展性,兼容 ROS2、Http、Grpc 等传统机器人生态或云服务生态,支持渐进式升级您的存量系统。

 

        AimRT 现阶段不是什么?


• AimRT 并不包括一个庞大的生态,它目前定位还只是一个通信框架,其原生生态建设还需要较长时间。


• AimRT 并不是对某些已有生态、框架的简单替代,它有着强大的兼容性,致力于打通现有的各个生态孤岛,是对已有生态的有力补充。



03/

AimRT 有哪些特点?


        AimRT 具有以下主要特点:


        1. 轻量、易于集成部署:AimRT 非常轻量,约数万行代码,依赖很少,不挑操作系统,易于部署集成。


        2. 设计更现代:AimRT 充分利用后发优势,基于 C++20 开发,在资源管控、异步编程、可观测性等许多方面都吸取了很多更现代、更主流的设计思想。


        3. 插件化设计:AimRT 提供了大量插接点和查询 API,对插件开发友好,可灵活定制插件满足特定需求。


        4. 支持更多底层通信方式:AimRT 的通信层由插件实现,官方支持 ROS2、Zenoh、Http、Grpc、Mqtt 等通信插件,覆盖常见的端、云通信场景。可以实现同一套上层代码,无缝接入多套通信方式。


        5. 对云、AI领域支持较好:AimRT 从上层通信接口、底层通信方式上都对云、AI 领域支持的更好,支持Protobuf 做为接口协议,兼容原生 HTTP、Grpc、Mqtt 等。


        6. 兼容ROS2:AimRT 支持 ROS2 协议和 ROS2 插件,可以和原生 ROS2 模块通信,兼容大部分 ROS2 生态的模块。



04/

AimRT 的设计架构是什么样的?


        目前,AimRT 主要有以下几大核心功能:Configuration、Log、Executor、Parameter、RPC、Channel。

 

        AimRT 提供了一套业务模块方向的接口,让业务开发者来使用这些功能;同时 AimRT 还提供了一套插件开发方向的接口,让插件开发者来增强这些功能。

 

        AimRT 整体架构图如下:


jd1.png


        例如,上层的业务开发者只需要基于 RPC 接口进行 client 调用,而不用关心底层到底是用什么方式进行的通信。AimRT 官方提供了基于 grpc、http 的 RPC 后端,用户可在运行时进行配置,使各个模块之间在底层通过这些方式进行通信,并且还能够和原生服务通信。当模块部署在同一个进程内,还可以通过 local 后端在进程内通信来加速。

 

        开发者也可以基于插件接口自行实现一个基于其他 RPC 组件的后端(例如 brpc),使得底层通信可以基于新的后端进行,并能够和原生服务进行通信。



05/

AimRT 和 ROS2 的区别和联系?


        在讨论 AimRT 与 ROS2 的详细区别之前,需要明确一下两者的总体定位区别。总的来说,AimRT 是一个通信中间件,而提到 ROS2 时更多的是指整个 ROS2 生态,包括 ROS2 的通信组件 rclcpp/rclpy 和 ROS2 的大量算法包、功能包。AimRT 目前更多的对标 ROS2 的通信组件层,而在生态层面与 ROS2 更多的是一种互补关系。

 

        对于狭义的通信中间件这层,AimRT 与 ROS2 中 rclcpp/rclpy 的区别如下:


jd2.png


        除了以上区别,AimRT 还提供了很多 ROS2 所没有的独特功能,例如执行器管理、协程、过滤器等,官方提供的大量插件也提供了诸如录播包、频率监控、链路追踪等实用功能。

 

        而对于广义的生态这个层面,智元公司后续会开源提供一些 AimRT 算法模块、功能模块,作为原生生态的起点。ROS2 由于发展时间较长,其在生态方面的积累还是非常丰富的。

 

        但 AimRT 插件化的设计带来了强大的兼容能力,加载了 AimRT 官方提供的 ROS2 (Humble)插件的 AimRT 节点可以被认为就是一个 ROS2 节点,可以使用大部分 ROS2 (Humble)的生态,例如 rviz 或 plotjuggler 等。



06/

AimRT 主要面向哪些使用群体?


        AimRT 的适用群体非常广,除了可以在传统机器人领域使用,还能用于 AI、云服务领域,甚至可以拿它写游戏后台!

 

        • 对于传统机器人领域开发者,基于 ROS2 开发运动控制、Slam 等算法模块,你可以引入 AimRT 开发你的新模块,并基于 ROS2 后端与你已有的原生 ROS2 模块通信。


        • 对于AI 领域开发者,基于 Python 或 C++ 开发图像、音频、大模型等算法,你可以直接在你的代码中引入 AimRT 与 ROS2、Mqtt 等节点通信,获取传感器数据或发布结果。


        • 对于云服务后台开发者,基于 Python 或 C++ 开发云服务后台,你可以直接使用 AimRT 开发你的后台微服务,基于 Grpc 或 Http 等后端接收请求或与下游微服务通信。

 

        除此之外,如果:


        • 你是一个大型单体 C++ 软件的开发者,需要一些框架来让你的代码更加模块化;


        • 你是一个厌倦了在不同通信框架的代码间切换,需要一套代码适配不同通信方式;


        • 你是一个新技术尝鲜者,渴望体验更现代的开发范式;


        你都可以尝试使用 AimRT 来满足你的需求,我们也欢迎开发者加入,共同建设 AimRT 的生态。



07/

AimRT 目前还有哪些不足?


        AimRT 作为一个非常新的机器人通信框架,必须要客观的认识到它还有很多不足,还需要时间来发展。以下列出了一些具体的点:


• 在原生生态方面,还需要长时间的积累,虽然 AimRT 的兼容性可以一定程度缓解这方面的问题;

• AimRT 的使用量还是偏小,一些潜藏的问题可能还没有完全暴露;

• AimRT 在工具链方面还有较大提升空间;

• AimRT 的文档、示例等相对于 ROS2 还有一定差距;

• AimRT 在国际化方面还没怎么起步;

• ... ...

 

        相信随着时间的发展,AimRT 一定会逐步解决各种问题,成长为一个优秀的机器人通信框架。



08/

AimRT 后续将会如何发展?


        AimRT 已于 2024 年9月25日正式开源,上线官网aimrt.org和 Github 主页。后续,将继续采取小步快跑迭代的方式,预计2~4个月发布一个新版本,并将在 2024 年底发布 v1.0.0 正式版,届时将在功能、文档、测试等方面都达到一个较为完善的状态。

 

        智元正式开源机器人中间件AimRT,旨在通过开源开放和生态共创,共同推进工业机器智能化以及具身机器人产业创新与发展。通过社区协作,驱动技术创新的快速迭代和创新成果的极致共享,牵引更多企业和开发者参与到机器人生态建设之中,共同营造一个活跃繁荣的生态系统,为AI与机器人技术的深度融合与最终产业落地作出贡献。

 

        我们也欢迎有意愿的开发者加入我们的社区,共同建设 AimRT 框架和生态,具体方式请参考 AimRT 官网aimrt.org的说明。