【自动驾驶】8. MDC通信架构 + DDS + SOME/IP

2024-06-16 21:18

本文主要是介绍【自动驾驶】8. MDC通信架构 + DDS + SOME/IP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

对于AP框架,感知融合模块中,由于PreFusion通信数据量大,所以采用带宽较大的DDS(Data Distribution Service)通信协议,其余节点传入数据量较小,采用SOME/IP(Scalable Service-Oriented Middleware over IP)通信协议。融合模块与规控模块之间通信为DDS通信协议。规划控制模块内各节点之间均采用能够处理大数据量的DDS通信协议。

DDS主要用于内部通信高性能场景,SOME/IP主要用于与外部部件对接的通信场景,如与Classic AUTOSAR对接。
AP的通信协议分为DDS和SOME/IP。DDS的通讯协议又分为SHM(SHare Memory)和UDP(User Datagram Protocol),SHM为域内通讯协议,UDP为芯片间通讯协议。


节点间的交互情况如下
  • CameraPerception节点从Camera中以SHM通信协议获取图像信息,对图像进行初步处理后,将障碍物列表信息输出给PreFusion节点。
  • RadarPerception节点采用SOME/IP通信协议,通过MCU(Microcontroller Unit)从Radar中获取毫米波雷达信息,并从Gps_localization获取车辆自身状态参数(包括自车位置、车速、航向信息等),对获取到的信息进行初步处理后,将障碍物列表信息输出给FullFusion节点。
  • LidarPerception节点采用SHM通信协议从Lidar中获取激光雷达信息,采用SOME/IP通信协议从Gps_localization获取车辆自身状态参数(包括自车位置、车速、航向信息等),对获取到的信息进行初步处理后,将障碍物列表信息输出给FullFusion节点。
  • PreFusion节点采用SHM通信协议从Lidar中获取激光雷达的信息,采用SHM+UDP通信协议从CameraPerception节点获取障碍物列表信息,以及采用SOME/IP通信协议从Gps_localization节点中获取车辆自身状态参数(包括自车位置、车速、航向信息等),再对获取到的信息进行初步融合,输出新的障碍物列表信息给FullFusion节点。
  • FullFusion节点分别从RadarPerception、LidarPerception和PreFusion节点获取障碍物列表信息,并从Gps_localization获取车辆自身状态参数(包括自车位置、车速、航向信息等),对获取到的信息进行最终的融合,得到可用的障碍物列表信息,然后将该信息输出给BehaviorPlan和MotionPlan节点。
  • MCU采用SOME/IP的通信协议将GPS/IMU、车辆底盘线控系统等信息输出给Vsomeipd节点。MCU接收GPS/IMU传感器信息的方式为串口通讯,接收线控系统信息的方式为CAN总线通讯
  • Gps_localization节点接收GPS/IMU信息,获得车辆自身状态参数(包括自车位置、车速、航向信息等),然后将这些信息输出给MissionPlan、BehaviorPlan、MotionPlan、Transform等节点
  • MissionPlan节点接收GPS/IMU信息,获得自车定位,并按照HMI界面设定的终点、途经点,根据高精度地图信息,规划出一条从起始点到终点的全局路径。然后将该路径以及高精度地图中其他信息发送出去,供其他节点使用。
  • BehaviorPlan节点为行为决策节点。该节点接收周围环境信息(包括GPS/IMU信息、高精度地图信息、周围障碍物信息、车辆自身信息等),经过决策,输出无人车应当执行的行为,并给出行为相关的边界信息,提供给MotionPlan节点进行轨迹规划。
  • MotionPlan节点接收GPS/IMU信息,包括行为决策信息、周围障碍物信息、车辆自身状态信息等,然后根据这些信息规划出一条最优的路径(包含位置坐标和速度信息的曲线),再将最优路径输出给Transform节点。
  • Transform为坐标转换节点。该节点的功能为将MotionPlan节点提供的信息从UTM坐标转换到车辆坐标系,输出给Control节点。
  • Control节点接收Transform节点转换之后的最优路径信息,然后结合车辆自身状态计算车辆横向及纵向的控制量(方向盘转角、油门开度、制动强度等),输出至车辆线控层,由执行器执行相应控制量.
  • Vehicle Abstract节点为车辆抽象节点。下行负责将Control节点发送的控制信号进行转换,并发送至MCU;上行又称为Vehicle Report节点,负责将MCU采集到的车辆状态信息进行转换,并发送至Conctrol、Transform、MotionPlan和BehaviorPlan节点。
  • Vsomeipd是信息传输路由节点,为采用SOME/IP通信协议的节点提供数据转换,如:Vehicle Abstract、GPS Abstract节点采用SOME/IP通讯协议将数据传输给其他节点(GPS_localization也需要通过Vsomeipd节点进行数据转换,在图中为了更好的体现出数据通路没有画出),数据经过一定的方式处理后输出给MCU。
  • Vehicle Abstract节点为车辆抽象层,GPS Abstract节点为GPS抽象层,这两个节点主要负责将Vsomeipd节点输出的相应数据进行解析,输出给其余各节点进行决策规划及控制量的计算。

请提前规划好Service Interface Id和Service Instance Id,防止发生ID冲突。ID取值范围为101~150。

  • Service Interface:服务接口,定义接口数据类型和通讯协议等,通过不同的Service Interface Id来区别服务接口,该参数需要保证全局唯一。
  • Service Instance :服务实例,由Service Interface实例化而来,通过不同的Service Instance Id来区别通讯的服务实例,该参数需要保证全局唯一。

ARXML是AUTOSAR Adaptive Platform用于生成节点之间相互通信的数据类型(以头文件体现)以及通信规则(以json格式体现)。ARXML主要通过MDC Manifest Configurator工具进行配置。配置前需要规划接收接口、发送接口、通信的数据类型以及通信方式等。

CM(Communication Management)
如果应用实现不需要调用CM(Communication Management)相关的接口代码,则只需要配置Application Manifest、Machine Manifest和System Manifest即可。

在这里插入图片描述


通信方式

CM包含三种通讯方式:Event、Method与Field。

  • Event通讯方式是在服务发现后,从服务端发送数据,由客户端进行接收,单向传输数据。
  • Method通讯方式是先由客户端发送请求,服务端收到请求后会处理客户请求并返回应答。
  • Field通讯方式分为Setter、Getter与Notifier方法。其中Notifier与Event工作模式类似,Getter与Setter与Method方法类似。
    在这里插入图片描述

在这里插入图片描述


在这里插入图片描述


SOME/IP协议通讯注意事项

若应用需要使用SOME/IP方式进行通讯,请注意以下几点:

  • 1.必须先启动someipd,再开启服务端与客户端应用进行通讯,且someipd程序必须先于所有应用程序启动。
    someipd是SOMEIP的后台进程,负责服务发现、数据转发等功能。
    someipd程序的启动需要通过环境变量指定“vsomeip.json”配置文件,可通过如下方式指定:export SOMEIP_CONFIG_FILE=/<文件目录>/vsomeip.json
    然后,运行someipd可执行文件。someipd可执行文件目录为/<deb解压位置>/usr/local/AdaptiveAutoSar/bin
  • 2.关于“vsomeip.json”配置文件的生成,用户可以选择将主机上所有Application的ARXML配置文件全部输入代码生成工具生成,也可以选择手动配置(将各APP单独生成的“vsomeip.json”文件组合,主要组合“vsomeip.json”中services、applications、clients中的内容)。
  • 3.someipd对应配置文件中必须包含该主机对外通讯需要的所有服务信息。
  • 4.一台主机上只允许启动一个someipd。
  • 5.应用于someipd的“vsomeip.json”配置文件必须配置service-Discovery信息。具体配置需要参考配置项。

QoS(Quality of Service)服务质量
在这里插入图片描述

这篇关于【自动驾驶】8. MDC通信架构 + DDS + SOME/IP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1067570

相关文章

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS

linux部署NFS和autofs自动挂载实现过程

《linux部署NFS和autofs自动挂载实现过程》文章介绍了NFS(网络文件系统)和Autofs的原理与配置,NFS通过RPC实现跨系统文件共享,需配置/etc/exports和nfs.conf,... 目录(一)NFS1. 什么是NFS2.NFS守护进程3.RPC服务4. 原理5. 部署5.1安装NF

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

基于Redis自动过期的流处理暂停机制

《基于Redis自动过期的流处理暂停机制》基于Redis自动过期的流处理暂停机制是一种高效、可靠且易于实现的解决方案,防止延时过大的数据影响实时处理自动恢复处理,以避免积压的数据影响实时性,下面就来详... 目录核心思路代码实现1. 初始化Redis连接和键前缀2. 接收数据时检查暂停状态3. 检测到延时过

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我