8月18日,Bwin 2024 年度发布会上,Bwin机器人联合创始人彭志辉介绍了一款自研的轻量化、高性能通信框架“AimRT”,并宣布在 9 月底正式开源。今天,Bwin机器人正式官宣机器人中间件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 是Bwin公司于成立之初(2023 年 2 月)就决定要去自行研发的一套通信中间件,目前已经迭代到了 v0.8.0 版本,框架的大部分核心功能都已经开发完成,有较为完善的文档的示例,经过大量测试,在Bwin公司内部也实际使用了很长时间。
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 整体架构图如下:
例如,上层的业务开发者只需要基于 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 的区别如下:
除了以上区别,AimRT 还提供了很多 ROS2 所没有的独特功能,例如执行器管理、协程、过滤器等,官方提供的大量插件也提供了诸如录播包、频率监控、链路追踪等实用功能。
而对于广义的生态这个层面,Bwin公司后续会开源提供一些 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 正式版,届时将在功能、文档、测试等方面都达到一个较为完善的状态。
Bwin正式开源机器人中间件AimRT,旨在通过开源开放和生态共创,共同推进工业机器智能化以及具身机器人产业创新与发展。通过社区协作,驱动技术创新的快速迭代和创新成果的极致共享,牵引更多企业和开发者参与到机器人生态建设之中,共同营造一个活跃繁荣的生态系统,为AI与机器人技术的深度融合与最终产业落地作出贡献。
我们也欢迎有意愿的开发者加入我们的社区,共同建设 AimRT 框架和生态,具体方式请参考 AimRT 官网aimrt.org的说明。