apollo cyber RT初学

本文介绍了百度自动驾驶团队开发的CyberRT,它在ROS的基础上改进了通信效率和资源管理。CyberRT包括高性能的基础库、通信层的多种机制、数据和计算层的设计,以及组件系统和灵活的调度策略。文章详细阐述了Component的使用、通信原理和调度机制,强调了其模块化、分布式和标准化的特点。

一 初识

ROS无法调度协调,且通信开销大,耗资源。百度自动驾驶团队开发了Cyber RT。

CyberRT从下到上依次为:

基础库:高性能,无锁队列;

通信层:Publish/Subscribe机制,Service/Client机制,服务自发现,自适应的通信机制(共享内存、Socket、进程内);

数据层:数据缓存与融合。多路传感器之间数据需要融合,而且算法可能需要缓存一定的数据。比如典型的仿真应用,不同算法模块之间需要有一个数据桥梁,数据层起到了这个模块间通信的桥梁的作用;

计算层:计算模型,任务以及任务调度;

此外,相比Ros,CyberRT增加了Component组件,组件之间通过 Cyber channel 通信。Cyber RT 中用Message实现模块间通信,其实现基于 protobuf。同时,CyberRT也支持异步计算任务,优化线程使用与系统资源分配,同时支持定义模块拓扑结构的配置文件。

但是CyberRT也存在用户经验少的短板,同时资源也没有Ros全面。

二 组件

早期,没有组件,使用一个公共基类。所有模块都继承此基类。

Component 是 Cyber RT提供的用来构建功能模块的基础类,可以理解为Cyber RT对算法功能模块的封装,配合Component对应的DAG文件,Cyber RT可实现对该功能模块的动态加载。以Apollo为例, Apollo 中所有的模块都由 Component 构建的。

被 Cyber RT加载的 Component 构成了一张去中心化的网络。每一个Component是一个算法功能模块,其依赖关系由对应的配置文件定义,而一个系统是由多个component组成,各个component由其相互间的依赖关系连接在一起,构成一张计算图。

下图是具有3个component,2个channel的简单网络:

2.1 Component 的优点

相较于在 main() 函数中写通信逻辑并编译为单独的可执行文件的方法,Component 有以下优点:

  • 可以通过配置 launch 文件加载到不同进程中,可以弹性部署。
  • 可以通过配置 DAG 文件来修改其中的参数配置,调度策略,Channel 名称。
给定引用内容中未提及 Apollo Cyber RT 实现点云可视化的方法、工具或指南相关信息。不过,通常在 Apollo Cyber RT 里实现点云可视化可以借助以下通用思路与工具: ### 利用 `cyber_visualizer` Apollo Cyber RT 框架自带 `cyber_visualizer` 这一可视化工具,它也许能用于点云数据的可视化。可以通过该工具订阅点云消息主题,从而展示点云数据。示例命令如下: ```bash cyber_visualizer ``` 在 `cyber_visualizer` 界面里,配置订阅的点云消息主题,就能看到点云的可视化效果。 ### 自定义可视化程序 借助 Apollo Cyber RT 的 API 编写自定义的可视化程序。可以使用 Python 或者 C++ 编写程序,订阅点云消息,再利用第三方可视化库(像 PCL Visualizer、Open3D 等)进行点云的可视化。以下是一个简单的 Python 示例: ```python import cyber from modules.perception.proto.pointcloud_pb2 import PointCloud import open3d as o3d import numpy as np def callback(pointcloud_msg): points = [] for point in pointcloud_msg.points: points.append([point.x, point.y, point.z]) points = np.array(points) pcd = o3d.geometry.PointCloud() pcd.points = o3d.utility.Vector3dVector(points) o3d.visualization.draw_geometries([pcd]) if __name__ == '__main__': cyber.init() node = cyber.Node("pointcloud_visualizer") subscriber = node.create_reader("/apollo/sensor/pointcloud", PointCloud, callback) node.spin() cyber.shutdown() ``` ### 借助 RViz 虽然 Apollo Cyber RT 是替代 ROS 的消息中间件,但也能够和 ROS 工具集成。可以把 Apollo Cyber RT 的消息转换为 ROS 消息,然后使用 RViz 进行点云可视化。这需要编写转换程序,将点云数据从 Apollo Cyber RT 消息格式转换为 ROS 的 `sensor_msgs/PointCloud2` 消息格式。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值