查看原文
其他

重磅!Apollo Cyber RT与ROS实现信息互联

阿波君 Apollo开发者社区 2022-07-29




随着自动驾驶行业逐步从研发转向量产,业内对可用于量产并能兼容自动驾驶系统的强大框架的需求也在增加。Apollo Cyber RT框架便是为Apollo构建此类框架的第一步,也是第一个专为自动驾驶技术设计的开源框架。Apollo Cyber RT可以为技术开发者直接带来三大助益:加速自动驾驶技术研发进程、提供更为便捷的部署体验、 Apollo Cyber RT系统作为独立运行时框架可以更加轻松构建自动驾驶技术方案。


所以,Apollo虽然最初基于定制的ROS系统,从3.5版本开始就迁移到自研的Cyber RT运行时计算框架。而目前在工业界和学术界,很多自动驾驶团队仍然使用ROS作为的核心计算框架,包括Apollo开发者社区的伙伴Ridecell Auro(Ridecell)



本篇将介绍Ridecell Auro研发的开源Apollo-ROS适配器,能够支持Apollo Cyber RT和ROS之间双向消息通信。




  以下,ENJOY  





总部位于旧金山的Ridecell Auro是移动出行服务软件平台的主要提供商,员工分布在在美国、欧洲和印度。2019年在接触并使用了Apollo开源平台后,认为“这是自动驾驶团队的一个很好的起步平台,有助于加速自动驾驶技术整体发展。”


为了让Apollo开源平台能更好助力以ROS为中间件进行自动驾驶研究的团队,Ridecell Auro研发出Apollo-ROS适配器,并将其开源。Apollo-ROS适配器可以直接在ROS或者现有软件栈中测试Apollo的各种功能和模块,支持Apollo Cyber RT和ROS之间双向消息通信。Ridecell Auro自动驾驶部门联合创始人Srinivas Reddy Aellala表示,“我们希望看到更多研究团队和行业伙伴使用Apollo平台,推动它的发展。”





本次开源Apollo Cyber RT和ROS之间双向消息通信的Apollo-ROS适配器


*请通过以下地址下载Apollo-ROS适配器:     

https://github.com/AuroAi/apollo_ros_bridge


Apollo-ROS适配器提供了预先构建的docker环境,从而实现Apollo Cyber RT和ROS之间双向消息通信。桥接器支持Cyber RT消息和ROS消息之间的双向转换,用户仅需要提供YAML格式的配置文件和以及自定义的回调函数


 ▲Apollo-ROS适配器应用示例:

整个测试包括Apollo端的感知和预测模块与ROS端的其他模块之间的通信


Apollo-ROS适配器的主要组件:

• yaml_defs/*.yaml :配置文件(YAML格式),供用户列出需要转换的CyberRT主题和ROS主题

• launch/*.launch : 启动文件,根据配置文件和参数来启动 Apollo-ROS适配器

• core/cyber_ros_bridge_core.cpp :Apollo-ROS适配器的核心类,包含如何存储Apollo数据和ROS数据,Apollo和ROS消息的回调函数模版,订阅者和发布者等

• core/parse_yaml.cpp : 如何解析配置文件,并初始化Apollo 和ROS主题的数据格式。

• lib/cyber_ros_bridge_lib.hpp : 数学/转换函数等核心库,用于处理新的主题转换功能。其中函数包括坐标系转换,处理坐标系转换,sl-frame和waypoint转换等。

 cyber_ros_bridge_node.cpp : 主执行文件,用于创建cyber RT和ROS节点的句柄,从而启动在两端的消息订阅和发布。


设计选择:

  • 模块化

    Apollo-ROS适配器包含启动文件和配置文件,从而可以根据Apollo不同模块的测试需求,定制相应的消息转换。

    例如:

    配置1:仅运行Apollo的Planner与你自己软件栈中相应模块,对所需的主题进行转换。

    配置2:运行Apollo的Routing + Planner + Prediction和你自己软件栈中相应模块,对所需的主题转换。

  • 可重用的转换函数库

    很多Apollo 主题转换不是简单的一一对应关系。因此,我们研发了可重用的数学函数库,当进行主题转换时,可以用这个函数库方便的处理坐标系转换sl-frame和航点转换等功能。

  • 具有完整依赖库的Docker环境

    我们为Apollo-ROS适配器构建了一个docker环境,在该docker环境中,包括Cyber RT和 ROS core所需要的依赖、Cyber RT消息和ROS消息。Apollo-ROS适配器的节点就运行在该docker容器中。当然,如果用户需要,桥接器也可以在Apollo的docker环境中运行。


github repo我们还介绍了如何扩展Apollo-ROS适配器,以满足你自己项目中消息转换的需求:

*https://github.com/AuroAi/apollo_ros_bridge/blob/master/docs/adding_custom_bridging.md


从apollo接收到的激光雷达点云转换成一个ROS消息并进行发布


上图左边是Cyber RT可视化工具Cyber_visualizer,它可以显示Cyber RT的点云消息;右图 Rviz 显示了ROS的消息。



参考设计文档点击『阅读全文

更多话题讨论、技术交流

可以添加『Apollo小哥哥』为好友

进开发者交流群






您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存