自动驾驶中间件
自动驾驶中间件
- 1. 什么是中间件
- 2. 中间件的分类
- 3. 自动驾驶为什么需要中间件
- 4. 通信中间件
Reference:
- 自动驾驶中间件:量产落地的关键技术
- 通俗易懂的告诉你什么是中间件
对于初入自动驾驶行业的人来说,各色各样的新型传感器、线控系统、芯片域控制器、算法软件似乎是自动驾驶未来实现的重中之重,对于中间件大多数人可能都不太熟悉,有些甚至从未听说过其存在。但中间件却也是极为重要的一环,它一定程度上决定了自动驾驶这件事能不能真正落地。尤其是随着自动驾驶产业化进程的深入,量产纷纷被各家企业提上日程,越来越多人意识到中间件的重要性和必要性。
1. 什么是中间件
维基百科这样定义:中间件是一类提供系统软件和应用软件之间连接、便于软件各部件之间的沟通的软件,应用软件可以借助中间件在不同的技术架构之间共享信息与资源、中间件位于客户机服务器的操作系统之上,管理着计算资源和网络通信。
通过定义我们可以总结判断出:
- 中间件是软件;
- 系统软件和应用软件之间、软件各部件之间;
- 管理客户机与系统软件之间的计算资源和网络通信;
- 中间件为应用软件服务、应用软件为最终用户服务,最终用户并不直接使用中间件。

2. 中间件的分类
基于中间件的功能特点等,中间件可以分为基础中间件、集成中间件和行业领域应用平台。
| 类型名称 | 分类描述 |
|---|---|
| 基础中间件 | 包括交易中间件、消息中间件、应用服务器中间件等,主要用于节点之间、应用于服务器之间的互联互通、交易请求的高效处理,Web应用的构建等,基础中间件产品是构建分布式应用的基础 |
| 集成中间件 | 主要用于异构系统(如不同的数据库系统、业务应用系统等)之间进行资源整合,以实现互联互通、数据共享、业务流程系统统一等功能,并构建灵活可扩展的分布式企业应用 |
| 行业领域应用平台 | 为了满足特定的行业、企业需求,易于快速、方便地的构建应用,而在原有基础中间件、集成中间等的基础之上所开发的中间件,根据所提供的服务不同,行业领域应用平台包括文件交换管理、数据共享交换、支持云计算和物联网的平台中间件等 |
3. 自动驾驶为什么需要中间件
中间件存在的最重要的功能便是通过对计算平台、传感器等资源进行抽象,对算法、子系统、功能采取模块化的管理,并提供统一接口,让开发人员能够专注于各自业务层面的开发,无需了解无关细节,从而极大提升算法开发效率。
对于软件开发者来说,智能驾驶中间件使开发者们无需考虑底层的 OS 内核是什么,也无需考虑硬件环境是什么,即不仅实现了应用软件与 OS 的解耦,也实现了应用软件与硬件的解耦;而后者则确保了数据能够安全实时地传输、资源进行合理的调度。
在自动驾驶领域,中间件的功能涉及到通信、模块升级、任务调度、执行管理,但其最主要的功能还是通信。通信中间件的引入整体上可以帮助开发人员提高工作效率,接下来将聊聊通信中间件:
(比如 ROS 在自动驾驶开发中,属于中间件的层级,本身具有完备的客户端,并且提供了丰富的函数接口,可以很好地适配上下层不同的应用和下层的通信。ROS 属于中间件,但是中间件的概念很泛化,ROS 属于中间件但是不属于通信中间件)
4. 通信中间件
通信中间件非常重要,也是目前各家智能驾驶企业非常关注与重视的方向。目前通信中间件主要有 SOME/IP,DDS 和 MQTT。现阶段,SOME/IP 和 DDS 是自动驾驶上用得最多的两类通信中间件。二者都是面向服务的通信协议,都采用了“以数据为中心”的发布-订阅模式。SOME/IP 在汽车领域深耕的时间比较长,而 DDS 则是一个工业级别的强实时的通信标准。
应用在自动驾驶上,DDS 具备了高度的灵活性和扩展性、实现软硬件解偶、多种 QoS(质量服务策略)、丰富的应用场景等特点,也渐渐被行业人员所了解与接受。事实上,DDS 和 SOME/IP 尽管存在竞争关系,但也是可以共存的。有的主机厂既用了 DDS,也用了 SOME/IP,只是使用的场景不一样——有时候是在一个核上的进程之间进行通信,有时候是核与核之间进行通信,有的时候是域控制器和其他的车载娱乐系统进行通信等等。

目前在多数企业中,由于 SOME/IP 本身就是为汽车行业制定的通信标准,因此 SOME/IP 在之前的使用率会稍微高一些,DDS 也是近两年才慢慢被多家的造车新势力和传统主机厂所采纳。但从趋势来看,未来,DDS 的市场占有率较于SOME/IP是具备明显优势的。
相关文章:
自动驾驶中间件
自动驾驶中间件 1. 什么是中间件2. 中间件的分类3. 自动驾驶为什么需要中间件4. 通信中间件 Reference: 自动驾驶中间件:量产落地的关键技术通俗易懂的告诉你什么是中间件 对于初入自动驾驶行业的人来说,各色各样的新型传感器、线控系统、芯…...
鲲鹏920(ARM64)移植javacpp
JavaCPP JavaCPP 使得Java 应用可以在高效的访问本地C++方法,JavaCPP底层使用了JNI技术,可以广泛的用在Java SE应用中(也包括安卓),以下两个特性是JavaCPP的关键,稍后咱们会用到: 提供一些注解,将Java代码映射为C++代码提供一个jar,用java -jar命令可以将C++代码转为…...
python打包exe实用版
pyinstaller模块用于将python项目打包成exe文件,以方便地在没有安装python环境的机器上运行。该模块使用 pip install pyinstaller 安装即可。 参数命令含义-Dpyinstaller -D demo.py默认选项。除了主程序demo.exe外,还会在在dist文件夹中生成很多依赖文…...
什么是反向代理(Reverse Proxy)?解释反向代理的作用和常见应用。
1、什么是反向代理(Reverse Proxy)?解释反向代理的作用和常见应用。 反向代理是一种代理服务器模型,它位于客户端和后端服务器之间。它允许将请求转发到后端服务器,并将响应返回给客户端。反向代理的主要作用如下&…...
算法通关村第十二关——不简单的字符串转换问题
前言 字符串是我们在日常开发中最常处理的数据,虽然它本身不是一种数据结构,但是由于其可以包含所有信息,所以通常作为数据的一种形式出现,由于不同语言创建和管理字符串的方式也各有差异,因此针对不同语言特征又产生…...
PROSOFT PTQ-PDPMV1网络接口模块
通信接口:PROSOFT PTQ-PDPMV1 网络接口模块通常配备了多种通信接口,以便与不同类型的设备和网络进行通信。常见的接口包括以太网、串行端口(如RS-232和RS-485)、Profibus、DeviceNet 等。 协议支持:该模块通常支持多种…...
力扣(LeetCode)算法_C++——稀疏矩阵的乘法
给定两个 稀疏矩阵 :大小为 m x k 的稀疏矩阵 mat1 和大小为 k x n 的稀疏矩阵 mat2 ,返回 mat1 x mat2 的结果。你可以假设乘法总是可能的。 示例 1: 输入:mat1 [[1,0,0],[-1,0,3]], mat2 [[7,0,0],[0,0,0],[0,0,1]] 输出&am…...
华为云API人脸识别服务FRS的感知力—偷偷藏不住的你
云服务、API、SDK,调试,查看,我都行 阅读短文您可以学习到:人工智能AI人脸的识别、检测、搜索、比对 1、IntelliJ IDEA 之API插件介绍 API插件支持 VS Code IDE、IntelliJ IDEA等平台、以及华为云自研 CodeArts IDE,…...
产品技术体系
产品,是一个企业或公司针对市场客户推出的一系列相关的功能或者服务,为对应的客户解决实际问题,进而产生对应的商业、社会价值。有了这些实际的价值,企业就会获得相应的利益或者利润回报。正常来讲,这应该是一个良性的…...
Docker从认识到实践再到底层原理(二-3)|LXC容器
前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…...
[运维|docker] ubuntu镜像更新时报E: Problem executing scripts APT::Update::Post-Invoke错误
参考文献 docker-ce在ubuntu:22.04进行apt update时报错E: Problem executing scripts APT::Update::Post-Invoke 详细报错信息 E: Problem executing scripts APT::Update::Post-Invoke rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/c…...
计算机网络的故事——HTTP首部
HTTP首部 在HTTP协议通信交互中使用的首部字段。不限于RFC2616中定义的47种首部字段,还有Cookie、setCookie和Content-Disposition等 HTTP 首部字段将定义成缓存代理和非缓存代理的行为,分成 2 种类型。端到端首部和逐跳首部...
js农历与阳历转换使用笔记
1、新建utils/dateChange.js /*** 1900-2100区间内的公历、农历互转* charset UTF-8* Author jiangjiazhi* 公历转农历:calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0]* 农历转公历:calendar.lunar2solar(1987,09,10); //[…...
苹果与芯片巨头Arm达成20年新合作协议,将继续采用芯片技术
9月6日消息,据外媒报道,芯片设计巨头Arm宣布在当地时间周二提交给美国证券交易委员会(SEC)的最新IPO文件中,透露与苹果达成了一项长达20年的新合作协议,加深了双方之间的合作关系。 报道称,虽然…...
Linux下systemd深入指南:如何优化Java服务管理与开机自启配置
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...
PMOS阵列(PMOS阵列代替)
pmos阵列没有找到,不过高压侧驱动芯片倒是可以使用VN340SP Datasheet - VN340SP-E & VN340SP-33-E - Quad high-side smart power solid-state relayhttps://www.st.com/resource/en/datasheet/vn340sp-33-e.pdf VN340SP-E - 四通道高侧智能功率固态继电器 - 意…...
Linux常见指令
1、ls指令 语法: ls [选项][目录或文件] 功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。 常用选项: -a 列出目录下的所有文件,包括以 . 开头的隐含文件-l 列出…...
让开发回归简单模式-组件封装
对于工作年限不长的程序员来说,知识储备是非常关键的。在开发中各种技术的应用已经非常普遍了,例如常见的各种ORM,各种中间件如Redis,MQ等等,又如WebApi路由配置等等,对于常常做开发的程序员来说,都是小事&…...
LED显示屏安全亮度参数设置方法和防护
随着LED显示屏应用领域越来越广,但其高亮度造成的光污染,常受到的人们的诟病。为了更好的避免光污染,我整理了一些关于LED显示安全亮度参数设置方法和安全防护措施。你知道LED广告牌是如何工作的吗? 设置LED显示屏的安全亮度参数和…...
数据库sql--关于计算方圆5公里点位编写
当我们计算两个地球上任意两点之间的距离时,可以使用Haversine公式。 下面是每个函数和数值的详细解释: RADIANS(target_latitude):将目标纬度值转换为弧度制。这是因为Haversine公式以弧度为单位计算角度。RADIANS(latitude):将…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...
Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解
文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一:HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二:Floyd 快慢指针法(…...
