自动驾驶---基于dds/ros的通信中间件

1 背景

        DDS(数据分发服务,Data Distribution Service)和ROS(机器人操作系统,Robot Operating System)是两种在各自领域内具有重要影响的技术。它们是两种不同的中间件,并且在分布式系统、尤其是机器人和自动驾驶车辆的系统中发挥着关键作用。

2 DDS(数据分发服务)

(1)概述

        DDS是一种用于分布式系统高效、可靠、实时数据通信的协议。它采用发布/订阅模式,支持多种数据类型,广泛应用于工业自动化、航空航天、智能交通、医疗和国防等领域。DDS通过分布式发现机制和服务质量(QoS)策略,确保数据传输的实时性和可靠性,并具有广泛的适用性和可扩展性。

(2)核心概念和架构

核心概念

  • Domain:全局数据空间,代表一个通信平面,由Domain ID唯一标识。
  • Domain Participant:代表域内通信的应用程序的本地成员身份。
  • Topic:数据的抽象概念,由TopicName标识,关联相应数据的数据类型。
  • DataWriter:数据写入者,将需要发布的主题数据从应用层写入到DataWriter中。
  • DataReader:数据读取者,从订阅者得到主题数据,随之传给应用层。
  • Publisher:发布者,发布主题数据。
  • Subscriber:订阅者,订阅主题数据。

架构

  • 应用层:使用DDS API在分布式系统中实现通信的用户应用程序。
  • DDS层:DDS通信中间件的稳健实现,允许部署一个或多个DDS域。
  • RTPS层:实施Real-Time Publish-Subscribe protocol(实时发布-订阅协议),以实现与DDS应用程序的互操作性。
  • 传输层:DDS可用于各种传输协议,如UDP、TCP、SHM。

(3)通信流程

        基于DDS的分布式系统中,节点发布自己想要发布的(或想要订阅的)Topic和QoS。DDS网络上已存在的节点收听到这个请求后,与自己的发布订阅情况及QoS标准进行对照。如果新加入节点的Topic信息与自己相关且QoS标准符合要求,则主动与新加入的节点进行通信,将自己的Topic信息发送给新加入节点,并将新加入节点的相应信息注册到本节点上,以便有通信需求时建立点到点连接。

46a7968dbd124fa496aefd2d1cd6e4ef.png

(4)特点
        DDS是一种标准的中间件,用于实时数据通信,特别是在分布式系统中。它由Object Management Group (OMG) 维护,是一种发布-订阅(pub-sub)消息传递模型的实现。DDS的主要特点包括:

  • 实时性:DDS设计用于满足严格的实时性要求,确保数据传输的及时性和可靠性。
  • 可扩展性:DDS能够处理从小型到大型的分布式系统,支持数千个节点的数据分发。DDS允许系统组件(如传感器、控制器等)发布数据而无需知道哪些组件会订阅这些数据,同样,组件可以订阅它们需要的数据而无需知道哪些组件会发布这些数据。这种解耦合的通信模型减少了系统组件之间的依赖性,提高了通信的灵活性和可扩展性。
  • 容错性:DDS提供了数据的持久性和可靠性,即使在网络分区或节点故障的情况下也能保持数据的完整性。
  • 质量服务(QoS):DDS允许开发者为不同类型的数据流指定不同的服务质量参数,如可靠性、传输速率和数据新鲜度。例如,可以设置数据传输的可靠性级别,确保关键数据在网络条件不佳时也能被可靠传输。
  • 数据模型:DDS支持复杂的数据模型,可以定义丰富的数据类型和结构。
  • 安全性:DDS提供了安全特性,包括数据加密和访问控制,以保护数据传输的安全。
  • 分布式架构:DDS支持分布式部署,可以在车辆的不同ECU(电子控制单元)之间实现高效的数据分发,支持大规模分布式系统。
  • 互操作性:DDS标准定义了一套互操作性协议(如RTPS),确保不同厂商的DDS实现能够无缝通信。

        在自动驾驶的实际应用中,DDS可以用于整合来自各种传感器(如雷达、摄像头、激光雷达)的数据,实现环境感知、决策规划以及车辆控制等功能。通过DDS服务,自动驾驶系统能够快速响应环境变化,提供安全、高效的驾驶体验。

(5)应用

        DDS在工业自动化、航空航天、智能交通、医疗和国防等领域有广泛应用。例如,在工业自动化领域,DDS被用于工厂自动化和过程控制系统中,确保传感器数据、控制指令等数据的快速、准确传输;在航空航天领域,DDS对于飞行控制系统和导航系统的实时数据通信至关重要。

        DDS是一种以数据为中心的通信模型,它在实时系统中的数据分发和可靠通信方面发挥着重要作用。DDS在汽车领域的应用逐渐增多,特别是在自动驾驶技术的发展中。例如,DDS被用于车载软件的通信中间件开发中,它能够实现低延迟、高可靠、高实时性的数据融合服务,有助于降低软件的耦合性、复杂性,提高软件的模块化特性。DDS在车辆上的部署可以采用不同的形式,包括直接部署在操作系统上,或者集成在AUTOSAR AP平台上,以及面向资源受限设备的轻量化版本部署。例如,DDS在奥迪、大众等多家OEM厂商的智能驾驶、泊车充电、仿真测试平台等场景中得到应用,国内的造车新势力如小鹏汽车也已经将DDS技术应用到量产车型上 。

#include <string>  struct MyData {  int id;  std::string message;  
};  // 注意:在真实DDS应用中,你需要使用DDS工具从IDL生成类型。// 伪代码,具体API取决于DDS实现  
void initializeDDS() {  // 创建域参与者  DDS::DomainParticipantFactory_var dpf = DDS::TheDomainParticipantFactoryWithArgs(0);  DDS::DomainParticipant_var participant = dpf->create_participant(DDS::DOMAIN_ID_DEFAULT,  DDS::PARTICIPANT_QOS_DEFAULT, NULL, DDS::STATUS_MASK_NONE);  // 其余初始化代码(如创建发布者/订阅者、话题等)  
}void publisherFunction() {  // 假设初始化DDS的代码已经执行  // 创建发布者  DDS::Publisher_var publisher = participant->create_publisher(DDS::PUBLISHER_QOS_DEFAULT, NULL, DDS::STATUS_MASK_NONE);  // 省略:定义话题、数据写入器等  // 发送数据  while (true) {  MyData data = {1, "Hello DDS!"};  // 写入数据到DDS(此处省略具体实现,需要类型支持等)  }  
}void subscriberFunction() {  // 假设初始化DDS的代码已经执行  // 创建订阅者  DDS::Subscriber_var subscriber = participant->create_subscriber(DDS::SUBSCRIBER_QOS_DEFAULT, NULL, DDS::STATUS_MASK_NONE);  // 定义话题、数据类型、数据读取器等  // 读取数据  while (true) {  // 等待并读取数据(此处省略具体实现)  // 处理接收到的MyData数据  }  
}int main() {  initializeDDS();  // 启动发布者和订阅者(通常在多线程环境中)  std::thread publisherThread(publisherFunction);  std::thread subscriberThread(subscriberFunction);  // 等待线程结束(或运行直到被外部信号中断)  publisherThread.join();  subscriberThread.join();  // 清理DDS资源  // 注意:清理代码取决于DDS实现的具体API  return 0;  
}

3 ROS(机器人操作系统)

(1)概述

        ROS是一个专为机器人软件开发所设计的开源元级操作系统(后操作系统),提供类似于操作系统的服务,包括硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间消息传递、程序发行包管理等。ROS的运行架构是一种使用ROS通信模块实现模块间P2P的松耦合网络连接的处理架构。

(2)核心概念和架构

核心概念

  • 节点(Nodes):ROS中的基本运行单元,每个节点负责执行一个特定的任务。
  • 主题(Topics):节点之间进行异步通信的机制,节点可以发布数据到主题,其他节点可以订阅该主题以获取数据。
  • 服务(Services):提供同步通信机制,节点可以提供某个特定的服务,其他节点可以请求该服务。
  • 参数服务器(Parameter Server):用于存储系统中的参数和配置信息,节点可以从参数服务器获取参数或写入参数。

架构

  • roscore:ROS系统的核心组件,提供ROS Master及其他关键服务。
  • 节点通信:通过ROS Master进行协调,节点启动时向ROS Master注册,报告自己能够发布和订阅的主题以及提供的服务。

(3)通信机制

        ROS支持多种通信机制,包括基于服务的同步RPC(远程过程调用)通信、基于Topic的异步数据流通信以及参数服务器上的数据存储。这些机制共同构成了ROS的分布式处理框架。

406db4349cb0401097479cd896b8d265.png

(4)主要特性

  • 开源性:ROS的源代码、文档和相关资源都可以在互联网上免费获取。
  • 模块化设计:通过将机器人软件系统划分为独立的、可重用的组件,提高了系统的可维护性和可扩展性。
  • 实时通信:ROS使用基于话题(topics)的发布-订阅模型进行节点之间的通信,类似于DDS。
  • 工具和算法:ROS提供了一套丰富的工具和算法库,用于机器人感知、导航、操作和交互。
  • 硬件抽象:ROS提供了硬件抽象层,使得开发者可以专注于算法开发,而不必关心底层硬件细节。
  • 模拟和可视化:ROS集成了多种模拟器和可视化工具,方便开发者测试和调试机器人程序。
  • 多语言支持:ROS支持多种编程语言,如C++、Python等,使得开发者可以根据自己的偏好和项目需求选择最合适的语言。
  • 大型社区:ROS拥有一个庞大且活跃的开发者社区,为新手提供了学习资源,为专业开发者提供了交流和合作的平台。

(6)应用

        ROS在机器人领域有广泛应用,包括工业机器人、移动机器人、无人机等。制造商和研究机构利用ROS构建自动化系统,提高了生产线的灵活性和生产效率。同时,ROS还提供了丰富的导航、避障和路径规划工具,使得开发者能够轻松构建具有自主导航能力的机器人系统。

        ROS是一个开源的机器人软件平台,它提供了一套完整的工具集合,使得机器人开发者可以更加便捷地进行机器人软件开发。ROS的应用案例非常广泛,包括但不限于以下几个领域:

  • 工业自动化:ROS可以应用于工业自动化领域,如机器人装配、物流搬运等。
  • 农业领域:ROS在农业机器人、智能农业等方面有所应用。
  • 医疗领域:ROS被用于开发机器人手术、康复机器人等医疗设备。
  • 家庭服务机器人:ROS在智能家居、智能家电等服务机器人领域有所应用。
  • 娱乐领域:ROS也被应用于娱乐领域,如机器人足球、机器人游戏等。

        ROS的模块化设计、多语言支持、大量的工具和库以及社区支持,使其成为机器人开发的重要工具。例如,美国NASA基于ROS开发的Robonaut 2已经在国际空间站里工作,百度Apollo无人车的底层也是基于ROS开发的 。

4 总结

        DDS和ROS都是分布式系统中的关键技术,但它们服务于不同的目的。DDS更侧重于数据分发和实时通信,而ROS提供了一个完整的机器人软件开发框架。在实际应用中,可以根据系统的需求和特性选择合适的技术。例如,DDS可能更适合于需要严格实时性和可靠性的自动驾驶车辆,而ROS可能更适合于需要灵活性和模块化的机器人研究项目。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/57180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

源代码加密技术的一大新方向!

在当今这个信息爆炸的时代&#xff0c;企业所面临的数据安全挑战日益严峻。传统的文档加密方法已经无法满足日益复杂的安全需求。幸运的是&#xff0c;SDC沙盒加密系统以其革命性的安全理念和先进技术&#xff0c;为企业提供了一个更可靠、更高效的数据保护方案。 传统加密方案…

MySQL-16.DQL-分页查询

一.DQL-分页查询 -- 分页查询 -- 1. 从 起始索引0 开始查询员工数据&#xff0c;每页展示5条记录 select * from tb_emp limit 0,5; -- 2.查询 第1页 员工数据&#xff0c;每页展示5条记录 select * from tb_emp limit 0,5; -- 3.查询 第2页 员工数据&#xff0c;每页展示5条记…

【Kenel】基于 QEMU 的 Linux 内核编译和安装

文章目录 安装虚拟机系统共享目录编译内核卸载内核参考资料 本文主要记录个人做存储系统研究时&#xff0c;在 QEMU 环境下编译和安装 Linux 内核的过程 安装虚拟机系统 之前在 利用 RocksDB ZenFS 测试 ZNS 的环境搭建和使用 给出过借助 VNC 进行图形化安装的步骤&#xff…

利用Pix4D和ArcGIS计算植被盖度

除了水文分析和沟道形态分析之外&#xff0c;在实际工作中还要计算植被盖度&#xff01; 植被盖度&#xff0c;也称为植被覆盖率或植物覆盖度&#xff0c;是指某一地表面积上植物冠层垂直投影面积占该地表面积的比例。它通常以百分比的形式表示&#xff0c;是描述地表植被状况的…

mapbox没有token/token失效,地图闪烁后变空白,报错Error: A valid Mapbox access token is required to use Mapbox GL JS.

目录 mapbox没有token/token失效&#xff0c;地图闪烁后空白&#xff0c;报错Error: A valid Mapbox access token is required to use Mapbox GL JS. 一、问题描述 二、mapbox去除token验证 1、找到mapbox-gl文件夹 2、找到mapbox-gl.js文件 3、找到对应位置并修改 4、清…

uploads-labs靶场刷题记录

Pass-01 尝试上传一句话木马 1.php: <?php eval($_POST[cmd]);?>发现设置了白名单且抓包没有记录&#xff0c;说明在前端进行的拦截&#xff08;可以禁用前端的JS从而绕过拦截&#xff0c;达到直接上传木马的目的&#xff09;。 将一句话木马文件加上.jpg后缀1.php.jp…

nodejs 实现docker 精简可视化控制

地址 https://github.com/xiaobaidadada/filecat 说明 使用react 和nodejs 实现的非常轻量的服务docker管理。

ArchLinux VSCode 1.94.2无法安装or更新解决办法

此方法参考了这篇博客https://www.debugpoint.com/failed-connect-raw-githubusercontent-com-port-443/#google_vignette 某一次paru后&#xff0c;一直报错503什么的&#xff0c;在archlinux官网看到pacman安装的是个Open VSX版本的&#xff0c;是Arch官方的版本&#xff0c;…

Centos7搭建minio对象存储服务器

Centos7搭建minio对象存储服务器 安装二进制程序配置服务文件 安装二进制程序 参考&#xff1a;https://segmentfault.com/q/1010000042181876 minio中国版&#xff1a;https://www.minio.org.cn/download.shtml#/linux # 下载二进制程序 wget https://dl.min.io/server/min…

从MySQL到OceanBase离线数据迁移的实践

本文作者&#xff1a;玉璁&#xff0c;OceanBase 生态产品技术专家。工作十余年&#xff0c;一直在基础架构与中间件领域从事研发工作。现负责OceanBase离线导数产品工具的研发工作&#xff0c;致力于为 OceanBase 建设一套完善的生态工具体系。 背景介绍 在互联网与云数据库技…

R实验——logistic回归、LDA、QDAKNN

数据集介绍&#xff1a; mpg&#xff0c;miles per gallon即油耗&#xff0c;这个数据集来自卡内基梅隆大学维护的StatLib库。1983年美国统计协会博览会使用了该数据集。这个数据集是对StatLib库中提供的数据集稍加修改的版本。根据Ross Quinlan(1993)在预测属性“mpg”中的使…

【Linux报错】为什么“userdel 某用户”,这个用户还存在于家目录中?

你删除一个用户&#xff0c;却在 /home/ 家目录下还看到该用户家目录文件&#xff0c;是因为&#xff1a; 使用 userdel 命令来删除一个用户&#xff1a;默认情况下&#xff0c;该用户的主目录&#xff08;通常位于/home/username&#xff09;不会被自动删除。这是因为userdel有…

超硬核!大模型算法岗面试必问100题,我说的,不信就来看看

大模型算法岗常见面试题100道 *一、基础篇* 1、目前主流的开源模型体系有哪些&#xff1f; Transformer体系&#xff1a;由Google提出的Transformer 模型及其变体&#xff0c;如BERT、GPT 等。PyTorch Lightning&#xff1a;一个基于PyTorch的轻量级深度学习框架&#xff0c;…

如何将 Docker 镜像的 tar 文件迁移到另一台服务器并运行容器

实验室项目共建人&#xff1a;周凌飞、武正乔、杨霄汉 特别鸣谢&#xff1a;bilibili 博主 老韩一米九、一堂 杨国帅 提供设备部署以及上线指导 本博客部分内容由kimi生成&#xff0c;鸣谢&#xff1a;吴润生 迭代生成式AI提示词思考模型 在 Docker 容器化的世界里&#xf…

开源限流组件分析(三):golang-time/rate

文章目录 本系列前言提供获取令牌的API数据结构基础方法tokensFromDurationdurationFromTokensadvance 获取令牌方法reverseN其他系列API 令人费解的CancelAt是bug吗 取消后无法唤醒其他请求 本系列 开源限流组件分析&#xff08;一&#xff09;&#xff1a;juju/ratelimit开源…

Java之继承抽象类用法实例(三十一)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

git命令笔记(速查速查)

git命令功能总结 1.创建git的本地仓库2. 配置本地仓库(name和email地址)3. 工作区、版本库、暂存区、对象区3.1 add, commit3.2 打印提交日志3.2 修改文件 4.版本回退&#xff08;git reset&#xff09;5. 撤销修改&#xff08;在push之前撤销&#xff09;6.删除版本库中的文件…

SSM框架学习(七、MyBatis-Plus高级用法:最优化持久层开发)

目录 一、MyBatis-Plus快速入门 1.简介 2.快速入门 二、MyBatis-Plus核心功能 1.基于Mapper接口CRUD &#xff08;1&#xff09;Insert 方法 &#xff08;2&#xff09;Delete方法 &#xff08;3&#xff09;Update 方法 &#xff08;4&#xff09;Select方法 2.基于Serv…

Chrome DevTools 三: Performance 性能面板扩展—— 性能优化

Performance 性能 &#xff08;一&#xff09;性能指标 首次内容绘制 (First Contentful Paint&#xff0c;FCP)&#xff1a; 任意内容在页面上完成渲染的时间 最大内容绘制 (Largest Contentful Paint&#xff0c;LCP)&#xff1a; 最大内容在页面上完成渲染的时间 第一字节…

283.移动零

目录 题目解法解释&#xff1a; .reverse()怎么用的&#xff1f;Char 13: error: no matching function for call to reverse 什么是双指针&#xff1f;双指针的常见类型&#xff1a;总结&#xff1a; 题目 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末…