自动驾驶中间件
文章平均质量分 89
自动驾驶中间件
王燕龙hope
linux 学习者
展开
-
[c++] 单例模式 + cyberrt TimingWheel 单例分析
单例模式要求一个类在一个进程中只能创建一个对象。比如 cyberrt 中的 TimingWheel 类就是单例模式,这个类管理着一个进程内的所有定时器,只需要一个对象就可以。单例模式的实现有两种方式,懒汉式和饿汉式。懒汉式,当第一次使用的时候才会真正创建这个对象;饿汉式,不管会不会用到这个对象,在进程启动的时候都会创建这个对象,如果一直不使用,那么就会造成资源浪费。饿汉式的缺点是可能造成资源浪费,但是对性能友好,因为在进程启动的时候就直接创建了,需要使用的时候可以直接拿来使用;懒汉式反之。原创 2024-02-24 15:46:57 · 760 阅读 · 0 评论 -
[c++] 工厂模式 + cyberrt 组件加载器分析
cyberrt 加载运行组件的时候,首先要加载用户的动态库。动态库的加载通过类 ClassLoader 来完成。(1)动态库加载函数 dlopen()底层动态库的加载是通过函数 dlopen() 完成。dlopen() 可以直接传动态库的名字,比如 libcamera.so,也可以传动态库的路径,比如 /ads/lib/libcamera.so。原创 2024-02-24 21:16:03 · 1136 阅读 · 0 评论 -
cyberrt 中 timer 实现原理以及 bug 修复
cyberrt 是百度开源的智驾中间件,主要功能是通信和调度。timer 是cyberrt 中的一个基础模块,提供了定时器功能。cyberrt 中的定时器完全是自己造轮子,没有基于 posix timer 或者其它第三方库提供的 timer。本人在工作中移植了 cyberrt 中的 timer,在使用过程中也遇到并修复了两个 bug。本文首先记录 cyberrt 中 timer 的实现原理,然后再记录使用时遇到的问题。原创 2024-01-31 21:00:36 · 980 阅读 · 0 评论 -
cyberrt component 实现分析
在自动驾驶系统中,通信是很重要的一个方面。传感器(摄像头,激光雷达,毫米波雷达等)发出来的数据要在多个模块之间(感知,规划,预测,控制)进行流转处理。数据在模块之间的流转即通信,不管是进程内通信,还是一台机器内的多个进程间的通信,还是跨机器的通信。在通信模型中有两种典型的方式:轮询和中断(事件)。(1)轮询轮询,即线程周期性查看数据是不是到来,如果有数据则进行处理,没有数组则这次空转。dpdk 中就使用了轮的方式来接收数据;linux 网卡驱动中,也存在轮询的方式进行收包。(2)中断(事件)原创 2024-02-19 11:25:28 · 958 阅读 · 1 评论