车用传感器的数据读取系统及其读取方法与流程

文档序号:18823438发布日期:2019-10-09 01:09阅读:798来源:国知局
车用传感器的数据读取系统及其读取方法与流程

本发明涉及传感器领域,尤其涉及一种车用传感器的数据读取系统及其读取方法。



背景技术:

近年来,智能车辆己经成为世界车辆工程领域研究的热点和汽车工业增长的新动力,很多发达国家都将其纳入到各自重点发展的智能交通系统当中。智能汽车由于自动化程度要求较高,其需要配置较多硬件与软件功能模块,硬件与多个软件功能模块进行配合使用,从而实现真正的汽车智能化。

汽车硬件中,如车载摄像头和雷达是汽车必不可少的硬件设施。车载摄像头是adas系统的主要视觉传感器,也是目前汽车智能化使用量最多的传感器。在自动驾驶中有着举足轻重的地位,就像人的眼睛一样,摄像头结合图像识别技术,能快速识别车辆、行人和交通标志,可以给现阶段的自动驾驶技术提供足够的环境感知保障。其中,汽车智能化的一个明显特点,就是车内的高清显示、触摸屏幕的增加和人机交互的改变。

随着汽车智能化及车联网技术的不断发展,未来汽车座舱电子化系统也朝着更深层次的人机交互方向发展,不断提升驾驶者及乘客的驾驶体验与行车安全。人脸识别、疲劳检测、手势识别、注意力监测及驾驶行为分析都离不开摄像头。通过采用摄像头的视觉识别作为人机交互的重要方式,将带动座舱电子获取更多的新技能,创造更丰富的安全辅助功能。摄像头应用发展趋势之3d影像显示:视频影像能给人类司机提供很多驾车信息,同时也能作为输入信息被用于高度自动驾驶汽车。后视和360度摄像头能让司机更好地了解车子周围的环境状况。

另外,智能汽车标配的硬件如雷达,其在汽车领域应用较为广泛。因此,汽车雷达包括基于不同技术(比如激光、超声波、微波)的各种不同雷达,有着不同的功能(比如发现障碍物、预测碰撞、自适应巡航控制),以及运用不同的工作原理(比如脉冲雷达、fmcw雷达、微波冲击雷达),如测速雷达可以测量车轮的转速来测量出汽车速度。障碍物探测雷达可在无能见度或能见度很差的情况下观察地形,向司机报警从而防止事故。自适应巡航控制能够适应车辆周围的环境,并根据本车与前车的速度与前车保持一个安全速度。防撞雷达,此类雷达能根据车辆当前的方向和速度测量到在车辆前方路上可能引起碰撞的危险障碍物,因此它适用于大气能见度低的情况以及实际判断力不理想(车距太短、速度太高)的情况,它的目的是警告驾驶员要打开气囊或其他制动设备,控制汽车的速度。其他车辆监督和控制雷达,很多其他车辆控制功能,比如车辆识别、定位、车队监督、车站调度、导航、选择行车路线,都可以在雷达的帮助下实现。此类雷达可以放在车上,也可以放在地面上,车辆装载着雷达信标或反射器,并可编码进行车辆识别。还可以设想具有特殊目的的其他机动车雷达,比如控制有轨车辆或游乐场里的游乐车的雷达。

对于车载摄像头,汽车上车载中控系统等都需要使用,如显示屏需要调用摄像头图像进行显示,人脸识别模块需要调用图像进行人脸识别、手势识别驾驶也需要调用摄像头拍摄的图像进行手势识别,摄像头拍摄的图像需要实时的传送到远端的服务器上。这些较多的硬件、软件等功能模块都需要对摄像头拍摄的图像进行调用。参见附图1所示,其包括车载主机,车载主机上集成有显示屏、人脸识别模块、手势识别模块、姿态识别模块,车载主机上这些模块都需要调用摄像头拍摄的图像,远端监控服务器,这些都需要访问用于对摄像头拍摄的图像进行存储的随机存储器(ram)从而进行图像调用。而由于摄像头是实时采集的图形,其图像采集的过程是动态变化的,存储器用于对摄像头拍摄的图像进行存储,现有技术将用于图像存储的空间分成多段存储器空间,例如,分成5段,摄像头拍摄的图像是从1至5逐渐存储,如此循环。例如,当图像按照顺序存储到空间5时,接着开始下一循环,此时首先对空间1原先存储的图片进行擦除,然后在将新拍摄的图片存储器空间1中,如此循环往复。当显示屏调用摄像头存储器空间1的图像时,人脸识别模块以及其它模块无法调用空间1的图像,必须等待空间1调用完成才能调用空间1的图像,这样实现方式会导致较多的模块不能同时访问空间1的图像,而空间1是一个动态存储的过程,如果数据的访问时间过长,可能在重新访问空间1图像时,其空间1的图像已经被擦除并被新的图像所覆盖,导致较多的进程模块不能同时访问。这样会使得效率低下,一个空间存储器的图像区域不能允许多个不同的功能模块访问。而实时图像又非常重要,对功能模块运算以及决策起着至关重要的作用。例如,在无人驾驶模块计算时,需要实时采集图像进行实时计算进行决策,如果不能采集实时图像,而采集滞后的图像进行决策,进而会导致决策错误,从而发生事故。如当需要采集空间1的图像时,但是此时发现空间3被人脸识别模块调用,此时系统将不能采集空间3的图像,进而采集空间2的图像,这样可能会导致决策错误。

为了有效克服上述现有技术的不能被有效调用或决策错误的现象,一种新的提供一种能够解决多种硬件或者功能模块同时访问同一个存储数据的问题,以便提供系统使用效率以及一些需要实时采集同一时刻的数据进行决策的场景问题的车用传感器的数据读取系统及其读取方法的发明是势在必行的。



技术实现要素:

本发明解决现有技术中存在多个系统功能模块不能同时访问同一传感器,同步实现大容量传输等技术问题。本发明提供一种车用多传感器的多应用进程数据读取装置及其读取方法,其包括:

为解决上述问题,本发明提供了一种车用传感器的数据读取方法,其包括:传感器、网关、车载主机,其所述车载主机包括:共享存储模块、功能模块;所述传感器通过采集数据并基于数据传输总线将数据实时的传给网关,网关将需要共享的数据传送给共享存储模块,需要获取数据的各功能模块从共享存储模块获取数据;所述网关包括车载以太网网关、can网关、most网关中的一种,所述数据传输总线包括车载以太网总线、can总线、most总线、lvds总线中的一种。

所述的车用传感器的数据读取方法,所述的车载以太网网关、can网关、most网关设有协议转化模块,所述协议转化模块被配置为将基于不同标准传输协议的数据进行符合于相应网关传输数据的转化。

所述的车用传感器的数据读取方法,其所述共享存储模块对数据进行管理与存储的过程为:将共享存储模块分为头数据管理块与数据区两部分,所述头部数据管理块包括:索引区,对多个数据块以及读、写指针进行管理;所述数据区包括数据块1至数据块n,用于写入和读出数据,用于数据的动态存储;所述传感器传送的数据经网关将需要共享的数据发送到多个数据块,从数据块1开始存储满后,再存储数据块2直至数据块n;当所有的数据块存储满后,再从数据块1开始进行存储,对原数据1的数据进行擦除,循环存储。

所述的车用传感器的数据读取方法,其所述共享存储模块的数据的读出过程包括:读取数据前,需要读取数据的功能模块要先进行注册获取索引区中的指示给功能模块读取的数据块信息;读取数据时,检查是否有可读数据,如果有,则从数据块中依次读出数据,并在读完后自动转到下一个数据块,如果没有,则阻塞等待;所有功能模块读取数据的进程中,待最后一个功能模块读取完成后,释放该数据块。

所述的车用传感器的数据读取方法,其共享存储模块的数据的写入过程包括:写入前检查是否有空闲数据块,如果有,写入数据,如果没有则阻塞等待;只有在有注册读进程即注册获取了索引区中指示给功能模块读取的数据块信息,才会往数据块中写入数据。

所述的车用传感器的数据读取方法,其如果写入速度大于读取速度,可选模式有两种:第一种为:写入进入阻塞等待;第二种为:设置超时机制,超时后将最慢的读取进程进行注销,移除读取队列,保证其他进程正常读写。

所述的车用传感器的数据读取方法,其在共享存储模块中,数据按照fifo先进先出机制运转以使得数据被实时读取,对数据块的读写管理采用了如下4个指针:开始指针:在数据块中的实际开始位置;结束指针:在数据块中的实际结束位置或用缓冲区长度代替;读指针:存储在数据区中的有效数据的开始位置;写指针:存储在数据区中的有效数据的结尾位置;其中,读指针、写指针用整型值来表示。

所述的车用传感器的数据读取方法,其判断数据区是否有为空闲数据块的方法至少包括如下方法中的一种:在数据块1至数据块n中,确保总是有一个数据块保持未使用状态,数据区最多存入n-1个数据;初始化时读指针和写指针放在相同的位置,如果读写指针指向同一位置,则数据区为空;如果写指针位于读指针的相邻后一个位置,则数据区为满;或,使用数据对数据块被存储数据进行计数,不使用显式的写指针,保持着数据区内存储的数据的计数;记录最后的操作,使用一位记录最后一次操作是读还是写。读写指针值相等情况下,如果最后一次操作为写入,那么数据块是满的;如果最后一次操作为读出,那么数据块是空;或,数据区在初始化时把读指针和写指针放在相同的位置,把读指针和写指针的位置分开预设的距离。

所述的车用传感器的数据读取方法,其还设置有信号量,信号量的变化指示数据块是否能读数据或者写入数据,信号量的值的测试及减1操作应当是原子的:所述信号量的具体使用步骤包括:测试控制资源的信号量,设置信号量的原始值,代表有原始值个进程可以使用该资源;若信号量值>0,则进程可以使用该资源,进程会将信号量值减1,表明它使用了一个资源单位;

当信号量值为0时,则使该功能模块进入休眠状态,直至信号量值>1;如果有功能模块正在休眠状态等待此信号量,则唤醒,其中,信号量原始值是任意一个正值,该值表明有多少个共享资源单位可供共享应用。

所述的车用传感器的数据读取方法,其把读指针设置在数据区的首位置,写指针设置在中间位置:若读指针的位置=写指针的位置,表明读的速度过快,已经无数据可读,须等待新的数据写入;如若(写指针的位置+1)%n=读指针的位置,其中,%表示取模运算,n是数据区的长度,此时,表明写的速度过快,无法继续写入,只能丢弃新到的数据,否则数据区处于可读可写的状态。

所述的车用传感器的数据读取方法,其还包括时钟同步模块、监控模块与数据纠错模块对共享存储模块、传感器、功能模块进行管理与控制;所述时钟同步模块对传感器、功能模块、共存储模块、监控模块以及数据纠错模块之间的时间进行调整,使各时钟保持一致性;所述监控模块用于对数据的读取与写入进行监控,当发现错误信息时,将错误信息发送给数据纠错模块;所述数据纠错模块对出现的数据读取与写入错误进行纠正,当接收到错误信息时,会记录相应的数据块的标记并在所有的功能模块读取完成后使出现错误读取数据的功能模块重新读取数据。

所述的车用传感器的数据读取方法,其数据的写入过程包括:时钟同步模块开始同步对各传感器、各功能模块、监控模块、数据纠错模块的时钟进行同步,初始化头部管理区的参数,负责数据写入的进程则获取相应的参数,通过写环形队列写入数据;其中,系统初始化时,写环形队列包含了所有数据块的索引,负责写入数据的进程写入数据时,访问注册模块中的写环形队列,将要写入的数据拷贝到指定的数据块内,将该数据块索引添加到需要读取该数据块的功能模块的读环形队列中并通过环形队列内的条件变量唤醒读取的功能模块;监控模块对数据写入进行监控并将错误信息发送给错误纠错模块,若错误纠正模块接收到了错误信息,则记录该数据块的编号,将该数据块信息进行丢弃,给负责写入该数据块的进程发送一个重写数据的命令;当重传的数据结束后,则发送到下一个数据到相应的数据块,若错误纠正模块未接收到错误信息,则直接进入发送下一个数据。

所述的车用传感器的数据读取方法,其数据的读取过程包括:读取数据的功能模块被数据写入后的条件变量唤醒,并从该共享存储空间内的头部管理区中获取一个没有关联其他读取方的读环形队列,功能模块被唤醒后,遍历其读环形队列,根据每个队列项访问指定的数据块,获取其中的数据;当一个数据块内的数据被所有需要读取数据的功能模块获取后,该数据块索引需要重新添加到写环形队列,以供负责数据的写入进程使用;当一个功能模块获取一个数据块中的数据后,该数据块的结构体内设有的计数器自增并判断其值是否等于所有需要读取数据块的功能模块数量:如果相等,则表示所有的需要读取数据的功能模块都获取了该数据块中的数据,该功能模块清除该数据块中的数据并将该数据块的索引添加到写环形队列的末尾;否则,则该功能模块继续访问下一个数据块;在数据的读取过程中,监控模块需要对各功能模块的数据读取进行监控,若错误纠正等待一个预设的时间阈值内没有收到来自监控模块发送的信息,则认为数据读取过程没有错误;当多个功能模块同时访问同一个数据块时,可能会同时对该数据块的结构体中的计数器进行操作。

本发明实施例还提供了一种车用传感器的数据读取系统,其包括:传感器、网关、车载主机,所述传感器通过网关与车载主机电连接;所述车载主机包括共享存储模块、功能模块;所述共享存储模块分别与网关及功能模块相连接;所述网关包括车载以太网网关、can网关、most网关中的一种,所述的数据所述数据传输总线包括车载以太网总线、can总线、most总线、lvds总线中的一种。

所述的车用传感器的数据读取系统,其所述的车载以太网网关、can网关、most网关设有协议转化模块,协议转化模块被配置为将基于不同标准传输协议的数据进行符合于相应网关传输数据的转化。

所述的车用传感器的数据读取系统,其所述共享存储模块包括易失性存储器和非易失性存储器,其中所述易失性存储器中包括ram存储器;所述非易失性存储器中包括ssd存储器。

所述的车用传感器的数据读取系统,其所述共享存储模块包括头数据管理块与数据区;所述头部数据管理块包括多个数据块以及读、写指针的管理;所述数据区则包括数据块1至数据块n,用于写入和读出数据,每个数据块放入一帧或者多帧数据,所述多个数据块主要用于数据的动态存储。

所述的车用传感器的数据读取系统,其在共享存储模块中,数据按照fifo先进先出机制运转以使得数据被实时读取,对数据块的读写管理采用了如下4个指针:开始指针:在数据块中的实际开始位置;结束指针:在数据块中的实际结束位置或用缓冲区长度代替;读指针:存储在数据区中的有效数据的开始位置;写指针:存储在数据区中的有效数据的结尾位置;其中,读指针、写指针可以用整型值来表示。

所述的车用传感器的数据读取系统,其所述头部管理区包括基本信息、数据块结构组,注册模块,条件变量信息,标志位信息,其中注册模块包括写环形队列、读环形队列。

所述的车用传感器的数据读取系统,其还包括时钟同步模块、监控模块与数据纠错模块对共享存储模块、传感器、功能模块进行管理与控制;所述时钟同步模块对传感器、功能模块、共存储模块、监控模块以及数据纠错模块之间的时间进行调整,使各时钟保持一致性;所述监控模块用于对数据的读取与写入进行监控,当发现错误信息时,将错误信息发送给数据纠错模块;所述数据纠错模块对出现的数据读取与写入错误进行纠正,当接收到错误信息时,会记录相应的数据块的标记并在所有的功能模块读取完成后使出现错误读取数据的功能模块重新读取数据。

与现有技术相比,本发明技术方案具有以下有益效果:在数据写入过程中,负责写入的进程只需遍历写环形队列,不需要确认接收方是否接收到数据,降低了收发双方之间的耦合。

附图说明

图1是现有技术的传感器数据运行框架架构示意图;

图2是本发明车用传感器数据读取系统的框架结构示意图;

图3是本发明共享存储模块的运行框架结构示意图;

图4是本发明读指针和写指针的位置关系及状态示意图;

图5是本发明共享存储模块的结构组成示意图;

图6是本发明时钟同步模块、监控模块与数据纠错模块共同的共享存储模块、传感器、功能模块进行管理与控制的框架示意图;

图7是本发明数据的具体写入过程流程示意图;

图8是本发明数据的具体读取过程流程示意图;

图9是本发明车用传感器数据读取系统的另一实施例的框架结构示意图;

图10是本发明broad-reach的车载以太网运行示意图。

具体实施方式

为使本发明的上述目的、特征和优点能够更为明显易懂,下面结合附图对本发明的具体实施方式做详细的说明。

本发明提供一种车用多传感器的多应用进程数据读取装置及其读取方法,解决现有技术中存在多个系统功能模块不能同时访问同一传感器,同步实现大容量传输等技术问题,所述车用传感器的数据读取系统其包括:至少一个传感器、网关、车载主机,所述传感器通过网关与车载主机电连接。其中所述车载主机包括共享存储模块、至少两个功能模块。所述共享存储模块分别与车载以太网网关及功能模块相连接。

车载以太网网关、can网关、most网关中的一种,数据传输总线包括车载以太网总线、can总线、most总线、lvds总线中的一种。

车载以太网网关、can网关、most网关设有协议转化模块,协议转化模块被配置为将基于不同标准传输协议的数据进行符合于相应网关传输数据的转化。具体地,如假设传感器1基于can网关总线进行传输、传感器2基于车载以太网总线进行传输,两种基于不同标准协议之间的数据都能够在网关中的协议转化模块进行数据格式之间的转化,可以将他们转化为统一的数据传输格式。如都转化基于标准的以太网传输协议数据格式或者车载以太网传输协议数据格式或can标准传输协议的数据格式。

所述传感器可以为摄像头、雷达、空气传感器、雨刷传感器等各种车用传感器或者其他信息采集设备;

所述功能模块包括硬件或者软件,能够对其获取的数据进行分析处理;

所述共享存储模块可以为易失性存储器和非易失性存储器,其为专门用于存储多个功能模块以及都需要获取的来自传感器的数据,其中所述易失性存储器中,可以为ram存储器;所述非易失性存储器中,可以为ssd存储器。

具体地,所述传感器通过采集数据并基于车载以太网总线将数据实时的传给车载以太网网关,车载以太网网关将需要共享的数据传送给共享存储模块,然后需要获取数据的各功能模块从共享存储模块获取数据。

具体参见附图2,本实施例中,网关采用车载以太网网关,数据传输总线采都采用车载以太网总线,具体如图2所示:传感器1可为摄像头,该摄像头安装在车身外并实时采集车外的图像数据并通过车载以太网总线将所采集的图像数据实时的传输给共享存储模块。

共享存储模块对数据进行管理与存储的过程为:将共享存储模块分为头数据管理块与数据区两部分,所述头部数据管理块至少包括:索引区:含写数据下标、各注册功能模块读数据下标、数据块数量大小等信息。其中头数据管理块主要用于对多个数据块以及读、写指针的管理。所述数据区则包括多个数据块,包括数据块1至数据块n,用于写入和读出数据,每个数据块放入一帧或者多帧视频数据。所述多个数据块主要用于数据的动态存储。上述传感器为摄像头,其传送的数据为图片数据,通过车载以太网总线经车载以太网网关将需要共享的数据实时的发送到多个数据块,数据的存储以此循环的存放,可从数据块1存储满后,在存储数据块2直至数据块n。当数据块存储满后,再开始从数据块1进行存储,此时,须对原数据1的数据进行擦除,以此类推,周而复始的循环。

具体的如附图3所示,本发明采用fifo(firstinputfirstoutput)简单说就是指先进先出对传感器实时采集并存储到共享存储模块中数据进行管理,确保数据按照fifo先进先出机制正常运转;为了能够确保数据能够被实时读取,在共享存储模块中,对数据块的读写管理采用了如下4个指针:

开始指针sp(startpoint)在数据块中的实际开始位置;

结束指针fp(finishpoint):在数据块中的实际结束位置,也可以用缓冲区长度代替;

读指针rp(readpoint)存储在数据区中的有效数据的开始位置(读指针);

写指针wp(writepoint)存储在数据区中的有效数据的结尾位置(写指针)。

读指针、写指针可以用整型值来表示。

共享存储模块的数据的读出过程包括:

读取数据前,每个需要读取数据的功能模块需要先进行注册获取索引区中指示各功能模块读取的数据块信息。具体地,例如:索引区中包括含写数据下标、各注册功能模块读数据下标、数据块数量大小。假设功能模块的id,经过注册后索引区中读数据下标和写数据下标出现有该功能模块的id,带有该功能模块的读和写id的数据块能够提供给该功能模块进行读取数据;

读取数据时,检查是否有可读数据,如果有,则从数据块中依次读出数据,并在读完后自动索引到下一个数据块,如果没有,则阻塞等待;

当所有功能模块读取数据的进程中,等最后一个功能模块读取完成后,释放该数据块。

共享存储模块的数据的写入过程包括:

写入前检查是否有空闲数据块,如果有,写入数据,如果没有则阻塞等待。

只有在有注册读进程即注册获取了独立读索引识别号,才会往数据块中写入数据。

如果写入速度大于读取速度,可选模式有两种:

第一种为:写入进入阻塞等待;

第二种为:设置超时机制,超时后将最慢的读取进程进行注销,移除读取队列,保证其他进程正常读写。

判断数据区是否有为空闲数据块采用如下方法:

数据区是满或是空,都有可能出现读指针与写指针指向同一位置。为此采用了如下判断方法:

方法1:

在数据块1至数据块n中,确保总是有一个数据块保持未使用状态。数据区最多存入n-1个数据(n为数据块的个数)。初始化时读指针和写指针放在相同的位置。如果读写指针指向同一位置,则数据区为空。如果写指针位于读指针的相邻后一个位置,则数据区为满。没读完/写完一个数据,读/写指针就会加1,指向下一个待读/写的位置,由于只有一个进程(如摄像头拍摄的图片的传感器)写入数据,而读数据存在多个功能模块,数据的读取需要等待所有的功能模块对数据进行读取完成后才能进行写入数据。为此,本发明引入信号量的概念,通过设置信号量的变化指示数据块是否能读数据或者写入数据,确保读和写不发生冲突。信号量的值的测试及减1操作还应当是原子的。

所述信号量的具体使用过程如下:

测试控制资源的信号量,如信号量为5,代表有5个进程可以使用该资源。

若信号量>0,则进程可以使用该资源。此种情况下,进程会将信号量值减1,表明它使用了一个资源单位。若原始值为5,一个功能模块使用完成后,则减1,此时信号量值变为4。

当信号量值为0时,则使该功能模块进入休眠状态,直至信号量值>1。如果有功能模块正在休眠状态等待此信号量,则唤醒它们。

另外,为了正确的实现信号量,信号量值的测试及减1操作还应当是原子的。为此,信号量通常是在内核中实现的。内核是指大多数操作系统的核心部分。它由操作系统中用于管理存储器、文件、外设和系统资源的那些部分组成。操作系统内核通常运行进程,并提供进程间的通信。

车载主机都会安装操作系统,会有内核,并不依附于我们功能模块。依附车载主机的操作系统。一般而言,信号量初值可以是任意一个正值,该值表明有多少个共享资源单位可供共享应用。

方法2:

使用数据对数据块被存储数据进行计数,不使用显式的写指针,而是保持着数据区内存储的数据的计数。测试数据区是空是满非常简单;对性能影响可以忽略,在读写操作都需要修改这个存储数据计数,对于多线程访问数据区需要并发控制。读/写计数用两个有符号整型变量分别保存写入、读出数据区的数据数量。其差值就是数据区中尚未被处理的有效数据的数量。这种方法的优点是读线程、写线程互不干扰。记录最后的操作,使用一位记录最后一次操作是读还是写。读写指针值相等情况下,如果最后一次操作为写入,那么数据块是满的;如果最后一次操作为读出,那么数据块是空。在读写操作共享一个标志位,多线程时需要并发控制。

方法3:

数据区在初始化时把读指针和写指针放在相同的位置。这种初始化方法不能解决处于不同时钟控制的功能模块的时钟抖动问题,考虑到时钟抖动带来的数据读写的时刻不确定,把读指针和写指针的位置分开一定的距离。具体地说,如附图4所示,把读指针设置在循环缓冲区的首位置,写指针设置在中间位置(具体见附图4(a)所示)。用rp表示读指针,用wp表示写指针。如果rp的位置=wp的位置,表明读的速度过快,已经无数据可读,必须等待新的数据写入(具体见附图4(b)所示);如果(写指针的位置+1)%n=读指针的位置(%表示取模运算,n是数据区的长度),表明写的速度过快,无法继续写入,只能丢弃新到的数据(具体见附图4(c)所示);否则数据区处于可读可写的状态(具体见附图4(d)所示)。一般情况下(大规模测试数据也表明)不同中断的时钟只存在抖动,而没有采样频率的差异,因而不会出现循环缓冲区“满”或者“空”的情况。循环数据区的长度需谨慎选择。为了能处理时钟抖动比较严重的系统,最好采用长度比较大的数据区,这样可以尽可能减缓时钟抖动的影响,但是数据区长度越大意味着输入输出之间的延时也越大;具体的,对于采样率为8000hz的系统循环数据区长度设为8比较合适。

具体地,需要说明的是,本发明所有的实施例中,写指针的位置和读指针的位置具体指的是写指针指向数据区的位置,读指针指向数据区的位置。

参见附图6所示,共享存储模块可以分为头部管理区和数据区,其中头部管理区至少包括基本信息、数据块结构组,注册模块,条件变量信息,标志位信息等,数据区分为多个数据块,如数据块1至数据块n。

头部管理区是该共享内存空间的核心,其至少包括基本信息、注册模块,条件变量信息、标志位信息,数据块结构组,其中注册模块包括写环形队列、读环形队列。数据区分成多个数据块,用于存储器数据。头部管理区中,基本信息包含了该共享内存空间的信息,如共享内存空间的大小、数据块的大小等。在本实施中,数据的写入只允许一个功能模块(传感器)负责,因此,头部管理区在注册模块中只创建一个写环形队列,负责数据写入。但数据的存在着多个读取的功能模块(如:显示屏、人脸识别),因此注册模块中创建了多个读环形队列,负责对写入的数据读取。在共享存储空间内,每个数据块由一个结构体实例表示,所有数据块结构体的实例统一维护在数据块结构体数组内中。读写环形队列内,每个队列项保存对应数据块结构体实例在数据块结构体数组中的索引。在对环形队列操作时,通过每个队列项的索引值,在数据块结构体数组中找到对应数据块结构体实例,从而访问对应的数据块。这样一方面可以方便多个进程同时访问所有结构体实例;另一方面,当系统中存在多个功能模块读取时,能够有效降低读写环形队列的占用空间。每个数据块指向共享内存空间中的一段连续空间,保存该需要传输的数据。

参见附图7所示,在数据的写入或者读取过程中,由于涉及到较多传感器与较多功能模块的传输数据、写入数据、读取数据,其会存在较多的问题,如数据包丢失、数据的读写存在错误的情况,另外,较多的传感器与功能模块之间可能分处于不同的时钟操控制,时钟之间可能存在着时间不一致的情况,这样会传感器与功能模块之间的写入数据、读取数据之间不匹配情况。为此,引入了时钟同步模块、监控模块与数据纠错模块共同的共享存储模块、传感器、功能模块进行管理与控制。

时钟同步模块基于gptp时间同步协议,对传感器1至n,功能模块1至n,共存储模块、监控模块以及数据纠错模块之间的时间进行不断的调整,使各时钟保持一致性。监控模块用于对数据的读取与写入进行监控,当发现错误信息时,将错误信息发送给数据纠错模块,数据纠错模块对出现的数据读取与写入错误进行纠正,当接收到错误信息时,会记录相应的数据块的标记并在所有的功能模块读取完成后使出现错误读取数据的功能模块重新读取数据。

数据的具体写入过程参见图7所示,具体地,开始时,时钟同步模块开始同步对各传感器、各功能模块、监控模块、数据纠错模块的时钟进行同步,初始化头部管理区基本信息、注册模块,条件变量信息、标志信息,数据块结构组等参数,然后负责数据写入的进程则获取相应的参数,然后通过写环形队列写入数据。系统初始化时,写环形队列包含了所有数据块的索引。负责写入数据的进程写入数据时,访问注册模块中的写环形队列:将要写入的数据拷贝到指定的数据块内,将该数据块索引添加到需要读取该数据块的功能模块的读环形队列中并通过环形队列内的条件变量唤醒读取的功能模块。监控模块对数据写入进行监控并将错误信息发送给错误纠错模块。若错误纠正模块接收到了错误信息,则记录该数据块的编号,将该数据块信息进行丢弃,给负责写入该数据块的进程发送一个重写数据的命令。当重传的数据结束后,则发送到下一个数据到相应的数据块。若错误纠正模块未接收到了错误信息,则直接进入发送下一个数据。在数据写入过程中,负责写入的进程只需遍历写环形队列,不需要确认接收方是否接收到数据,降低了收发双方之间的耦合。

数据的具体读取过程参见附图8所示:首先读取数据的功能模块被数据写入后的条件变量唤醒,并从该共享存储空间内的头部管理区中获取一个没有关联其他读取方的读环形队列。功能模块被唤醒后,遍历自己的读环形队列,根据每个队列项访问指定的数据块,获取其中的数据。当一个数据块内的数据被所有需要读取数据的功能模块获取后,该数据块索引需要重新添加到写环形队列,以供负责数据的写入进程使用。为了确保需要读取的功能模块能够获取数据后才能该数据块进行释放,本实施例采用了引用计数的方法,当一个功能模块获取一个数据块中的数据后,该数据块的结构体内的计数器就自增并判断其值是否等于所有需要读取数据块的功能模块数量:如果相等,则表示所有的需要读取数据的功能模块都获取了该数据块中的数据,于是该功能模块清除该数据块中的数据并将该数据块的索引添加到写环形队列的末尾;若没有,则该功能模块继续访问下一个数据块。在数据的读取过程中,可能会出错,监控模块需要对各功能模块的数据读取进行监控,若有错误信息发生,则需要错误信息发送给错误纠正模块,错误纠正模块则记录该功能模块的信息,将终止该功能模块对数据的读取,等待所有正常的功能模块读取完数据后在按照出错的顺序依次的重新读取功能模块的信息。此处,若错误纠正等待一个预设的时间阈值内没有收到来自监控模块发送的信息,则认为数据读取过程没有错误。当多个功能模块同时访问同一个数据块时,可能会同时对该数据块的结构体中的计数器进行操作。为了解决多个接收方并行互斥的问题,本实施每个功能模块通过原子操作函数sync_fetch_and_add等对该计数器进行操作。这时,操作系统通过锁住前端总线(fsb),阻止其他处理器对该计数器进行原子操作。在实际工程中,为了避免因为异常导致一个接收方不能及时释放该计数器的信号量,其他功能模块进入“死等”的情况发生,监控模块监控到到异常时,立即终止该异常的功能模块释放其所占资源。

具体地,本发明中传感器为摄像头和雷达,功能模块包括显示屏、人脸识别模块、手势识别模块、姿态识别模块。具体的,摄像头通过拍摄图像并将图像基于车载以太网总线传输到车载以太网网关,后车载以太网网关将数据实时传输到共享存储器模块,如显示屏需要调用图像进行实时显示,人脸识别模块需要调用图像进行人脸识别,手势识别模块需要调用图像进行手势识别,姿态识别模块也需要调用图像进行姿态识别,功能模块还可以包括自动驾驶模块等。另外,远端的监控服务器也要调用摄像头的图像进行显示。

参照附图10所示,本发明采用基于broad-reach的车载以太网传输,该方案利用单对非屏蔽双绞线电缆和标准以太网phy组件组成车内以太网互连网络,可实现100mbps速率全双工数据传输,phy与上层mac之间连接采用标准的mii接口。此互连网络除可传输数据外,还支持poe功能,即双绞线在传输数据的同时还可以为连接终端供电,省去了终端外接电源,降低了供电的复杂度。

相比于传送的摄像头采用lvds,broadr-reach互连方案优势显著。lvds线缆为了满足汽车电磁辐射和温度的严格要求,需要有很厚的屏蔽层,同时连接器也比较大和复杂。而broadr-reach方案采用的单对非屏蔽双绞线较之lvds线缆,不仅能实现同样的功能,且减少了互连成本。

本发明虽然已以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以利用上述揭示的方法和技术内容对本发明技术方案做出可能的变动和修改,因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化及修饰,均属于本发明技术方案的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1