首页
Python
Java
前端
数据库
Linux
Chatgpt专题
开发者工具箱
cyberrt专题
使用CyberRT写第一个代码, test ok
简介 计算框架是自动驾驶系统中的重中之重,也是整个系统得以高效稳定运行的基础。为了实时地完成感知、决策和执行,系统需要一系列的模块相互紧密配合,高效地执行任务流。由于各种原因,这些模块可能位于不同进程,也可能位于不同机器。这就要求计算框架中具有灵活的、高性能的通信机制。Apollo在3.5版本中推出了Cyber RT替代了原先的ROS。 和ROS & ROS2中类似,Cyber RT中支持
阅读更多...
[c++] 工厂模式 + cyberrt 组件加载器分析
使用对象的时候,可以直接 new 一个,为什么还需要工厂模式 ? 工厂模式属于创建型设计模式,将对象的创建和使用进行解耦,对用户隐藏了创建逻辑。 个人感觉上边的表述并没有说清楚为什么需要使用工厂模式。因为使用 new 创建一个对象的时候,比如 new Object(x, x, x, x),对象创建逻辑在构造函数中实现,逻辑也对用户隐藏了,在一定程度上也实现了解耦。 为什么使用工厂模
阅读更多...
[c++] 单例模式 + cyberrt TimingWheel 单例分析
单例模式要求一个类在一个进程中只能创建一个对象。比如 cyberrt 中的 TimingWheel 类就是单例模式,这个类管理着一个进程内的所有定时器,只需要一个对象就可以。 单例模式的实现有两种方式,懒汉式和饿汉式。懒汉式,当第一次使用的时候才会真正创建这个对象;饿汉式,不管会不会用到这个对象,在进程启动的时候都会创建这个对象,如果一直不使用,那么就会造成资源浪费。饿汉式的缺点是可能造成资源浪
阅读更多...
cyberrt component 实现分析
在自动驾驶系统中,通信是很重要的一个方面。传感器(摄像头,激光雷达,毫米波雷达等)发出来的数据要在多个模块之间(感知,规划,预测,控制)进行流转处理。数据在模块之间的流转即通信,不管是进程内通信,还是一台机器内的多个进程间的通信,还是跨机器的通信。 在通信模型中有两种典型的方式:轮询和中断(事件)。 (1)轮询 轮询,即线程周期性查看数据是不是到来,如果有数据则进行处理,没有数组则这次空
阅读更多...
【Apollo CyberRT】源码分析之 “component” 模块
代码位置 apollo/cyber/component 功能 在自动驾驶系统中,模块(如感知、定位、控制系统等)在 Cyber RT 下以 Component 的形式存在。不同 Component 之间通过 Channel 进行通信。Component 概念不仅解耦了模块,还为将模块拆分为多个子模块提供了灵活性。 Component类是各个组件的基类实现,组件类似与ros里的node,
阅读更多...
CyberRT-共享内存实现
CyberRT共享内存类图 共享内存消息发布 数据用共享内存发布时,首先会创建ShmTransmitter对象,包含两个主要成员segment和notifier,Segment用于创建共享内存(上面绿色部分),Notifer 最终构建ReadableInfo通知给其他进程。 使用哪个ConditionNotifier-> notify或MulticastNotifier->notify,是在
阅读更多...
自动驾驶Apollo源码分析系统,CyberRT篇(一):简述CyberRT框架基础概念
1. CyberRT 是什么? Apollo Cyber RT 是专为自动驾驶场景设计的开源、高性能运行时框架。 基于中心化计算模型,主要价值是提升自动驾驶系统的高并发、低延迟、高吞吐。 Apollo 并不是一开始就使用 CyberRT,在 v3.0 之前用的都是基于 ROS 框架进行开发。但在之前的版本中发现了很多问题,随着 Apollo 的发展,对最高水平的稳健性和性能的需求, Apoll
阅读更多...