首页> 中国专利> RTPS的进程通信方法、装置、电子设备及存储介质

RTPS的进程通信方法、装置、电子设备及存储介质

摘要

本申请公开了一种RTPS的进程通信方法及装置,包括:在Xenomai消息队列的状态为发送状态时,建立Xenomai消息队列中第一消息队列对象,设置第一消息队列的大小和端口号,并将申请内存与第一消息队列的尾端相连后,写入消息至第一消息队列,并在结束写入消息后释放第一消息队列;或者,在Xenomai消息队列的状态为接收状态时,建立Xenomai消息队列中第二消息队列对象,并确定接收第二消息队列的端口号,初始化所述第二消息队列,以提取第二消息队列的所有消息,直至第二消息队列为空,并在第二消息队列为空后释放第二消息队列,解决了相关技术中出现的普遍DDS通信延迟的问题,通过引入实时内核取代Linux的内存管理,大大降低因切换带来的时延影响。

著录项

  • 公开/公告号CN112445631A

    专利类型发明专利

  • 公开/公告日2021-03-05

    原文格式PDF

  • 申请/专利权人 广东博智林机器人有限公司;

    申请/专利号CN202011406320.9

  • 申请日2020-12-02

  • 分类号G06F9/54(20060101);

  • 代理机构11201 北京清亦华知识产权代理事务所(普通合伙);

  • 代理人黄玉霞

  • 地址 528311 广东省佛山市顺德区北滘镇碧桂园社区泮浦路1号A1栋2楼A2-05

  • 入库时间 2023-06-19 10:06:57

说明书

技术领域

本申请涉及通信技术领域,特别涉及一种RTPS的进程通信方法、装置、电子设备及存储介质。

背景技术

目前,机器人的操作系统(Robot Operating System,ROS)结合数据分发服务(Data Distribution Service,DDS),以基于实时发布-订阅(Real Time Publish-Subscribe,RTPS)协议支持实时系统的数据发布和订阅。其中,实时发布-订阅协议用域的概念划分通信区间,每个域内可以很多参与者,每个参与者上线后可通过参与者发现协议(Participant Discovery Phase,PDP)和端点发现协议(Endpoint Discovery Phase,EDP)让域内其他在线的参与者进行匹配,匹配后的参与者可通过其内部的订阅者和发布者与其他参与者进行通信。现有的通信协议有用户数据报协议(User Datagram Protocol,UDP)、传输控制协议(Transmission Control Protocol,TCP)和共享内存(Shared Memory,SHM)。

然而,随着机器人的复杂程度增加,导致机器人的操作系统对实时性的要求也越来越高,一旦通信效率无法满足要求,那么机器人的控制精确度将会无法满足要求,使得执行动作出现偏差,甚至导致任务执行失败。因此,相关技术的共享内存通信方式将进程在内存中建立一个共享存储区,并将改共享内存段依附在自身的地址空间,共享内存通信被认为是进程间最快的通信方式,需要说明的是,共享内存通信方式对于实时性要求较高的任务仍然无法满足,亟待解决。

申请内容

本申请提供一种RTPS的进程通信方法、装置、电子设备及存储介质,以解决现有技术中无法满足实时性要求较高的任务等问题。

本申请第一方面实施例提供一种RTPS的进程通信方法,包括以下步骤:

在Xenomai消息队列的状态为发送状态时,建立所述Xenomai消息队列中第一消息队列对象,并确定所述第一消息队列的大小和端口号,并将申请内存与所述第一消息队列的尾端相连后,写入消息至所述第一消息队列,并在结束写入消息后释放所述第一消息队列;或者

在所述Xenomai消息队列的状态为接收状态时,建立所述Xenomai消息队列中第二消息队列对象,并确定接收所述第二消息队列的端口号,初始化所述第二消息队列,以从所述第二消息队列提取预设长度的数据,其中,如果所述第二消息队列首端存在数据包,则从所述数据包提取预设长度的数据;否则,堵塞预设时长或直接返回错误信息,直至所述第二消息队列为空,并在所述第二消息队列为空后释放所述第二消息队列。

可选地,还包括:

在确定所述第一消息队列和所述第二消息队列的端口号后,将所述端口号作为通信标识,以与其他进程进行通信。

可选地,还包括:

检测与所述其它进程通信的消息交互方式;

若所述消息交互方式为主机内端点间的消息交互方式,则基于RTPS协议进行基于Xenomai消息队列的实时通信。

可选地,所述基于RTPS协议进行基于Xenomai消息队列的实时通信,包括:通过定位器传输消息,所述定位器由第一至第三字节组成,其中,

第一个字节表示定位器用于单播或组播,如果用于单播,用第一标识表示;否则,用第二标识表示,并且第二个字节和第三个字节合并表示由主机IP地址转换得到的主机ID。

可选地,还包括:

根据所述定位器判断对方的主机ID是否与自身的主机ID是否满足消息交互条件,以在满足所述交互条件时进行实时通信前的匹配。

本申请第二方面实施例提供一种RTPS的进程通信装置,包括:

写入模块,用于在Xenomai消息队列的状态为发送状态时,建立所述Xenomai消息队列中第一消息队列对象,并确定所述第一消息队列的大小和端口号,并将申请内存与所述第一消息队列的尾端相连后,写入消息至所述第一消息队列,并在结束写入消息后释放所述第一消息队列;

提取模块,用于在所述Xenomai消息队列的状态为接收状态时,建立所述Xenomai消息队列中第二消息队列对象,并确定接收所述第二消息队列的端口号,初始化所述第二消息队列,以从所述第二消息队列提取预设长度的数据,其中,如果所述第二消息队列首端存在数据包,则从所述数据包提取预设长度的数据;否则,堵塞预设时长或直接返回错误信息,直至所述第二消息队列为空。

可选地,还包括:

第一通信模块,用于在确定所述第一消息队列和所述第二消息队列的端口号后,将所述端口号作为通信标识,以与其他进程进行通信。

可选地,还包括:

检测模块,用于检测与所述其它进程通信的消息交互方式;

第二通信模块,用于在所述消息交互方式为主机内端点间的消息交互方式时,基于RTPS协议进行基于Xenomai消息队列的实时通信。

本申请第三方面实施例提供一种电子设备,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被设置为用于执行如上述实施例所述的RTPS的进程通信方法。

本申请第四方面实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行如上述实施例所述的RTPS的进程通信方法。

由此,可以检测Xenomai消息队列的状态,并在状态为发送状态时,建立第一消息队列对象,并确定第一消息队列的大小和端口号,并将申请内存连接到第一消息队列的尾端,以写入消息到第一消息队列,并在状态为接收状态时,建立第二消息队列对象,并确定第二消息队列的端口号,以将所有消息读取第二消息队列,从而解决了相关技术中出现的普遍DDS通信延迟的问题,大大降低了因切换带来的时延影响。

本申请附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本申请的实践了解到。

附图说明

本申请上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:

图1为根据本申请实施例提供的一种RTPS的进程通信方法的流程图;

图2为根据本申请一个实施例的消息队列的状态为发送状态时发送过程的流程图;

图3为根据本申请一个实施例的消息队列的状态为接收状态时接收过程的流程图;

图4为根据本申请实施例的RTPS的进程通信装置的方框示意图;

图5为根据本申请实施例的电子设备的方框示意图。

具体实施方式

下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本申请,而不能理解为对本申请的限制。

下面参考附图描述本申请实施例的RTPS的进程通信方法、装置、电子设备及存储介质。

具体而言,图1为本申请实施例所提供的一种RTPS的进程通信方法的流程示意图。该实施例中,该方法用于机器人通信,在Xenomai的堆内存中维护有Xenomai消息队列。

如图1所示,该RTPS的进程通信方法包括以下步骤:

在步骤S101中,在Xenomai消息队列的状态为发送状态时,建立Xenomai消息队列中第一消息队列对象,并确定第一消息队列的大小和端口号,并将申请内存与第一消息队列的尾端相连后,写入消息至第一消息队列,并在结束写入消息后释放第一消息队列。

可以理解的是,Xenomai消息队列的状态包括接收状态和发送状态,因此本申请实施例就可以对Xenomai消息队列的状态进行检测。

需要说明的是,目前最常用的DDS通信方式是基于UDP和TCP这类网络协议,而网络协议更适用于主机间的通信。当网络协议应用在单个主机内的通信时,消息的格式需要服从协议的规定,而且消息内还需要包含多余的协议内容,造成了不必要的数据格式化等操作和无用数据的传输。

因此,本申请实施例需要在现有的RTPS协议中添加一种通信机制,这个机制是基于Xenomai的一种进程间通信方法实现的。上述的进程间通信方法是通过在Xenomai的堆内存中维护一个消息队列,进程可以通过该消息队列发送和获取数据。

消息队列可以提供一种同步通信方式,保证每次只有一个进程在访问一个消息队列,即当两个进程访问同一个消息队列的时候,后一个进程可选择堵塞等待直到另一个进程结束访问,或者选择不堵塞等待,返回访问失败。如果进程选择堵塞等待可以指定一个等待时间,当超出等待时间时,则返回访问失败。

具体而言,如图2所示,在检测到Xenomai消息队列的状态为发送状态时,主要包括以下步骤:

S201,新建第一消息队列对象,并初始化所有第一消息队列的配置为初始值。

S202,预先设定整个第一消息队列可能会占用的空间,该内存空间只用于接收数据,发送消息过程不会使用,并设置第一消息队列的大小和端口号。

S203,初始化第一消息队列过程中,会根据设定的消息队列大小从Xenomai内存分配内存空间;注册端口号的映射信息。

S204,开始写入第一消息队列。

S205,判断是否结束写入第一消息队列,如果是,执行步骤S206,否则,执行步骤S204。

S206,结束。

需要说明的是,本申请实施例的发送进程可以申请分配一块内存并根据接收进程的端口号,即在步骤S203之后,本申请实施例还可以将内存链接到接收进程的第一消息队列的尾端,并将数据写入该内存中;发送进程结束,数据写入和其他操作后释放第一消息队列和相关资源。

在步骤S102中,在Xenomai消息队列的状态为接收状态时,建立Xenomai消息队列中第二消息队列对象,并确定接收第二消息队列的端口号,初始化第二消息队列,以从第二消息队列提取预设长度的数据,其中,如果第二消息队列首端存在数据包,则从数据包提取预设长度的数据;否则,堵塞预设时长或直接返回错误信息,直至第二消息队列为空,并在第二消息队列为空后释放第二消息队列。

具体而言,如图3所示,在检测到Xenomai消息队列的状态为接收状态时,主要包括以下步骤:

S301,新建第二消息队列对象,并初始化所有第二消息队列的配置为初始值。

S302,预先设定整个第二消息队列可能会占用的空间;设置接收消息队列的端口号。

S303,初始化第二消息队列过程中,会根据设定的第二消息队列大小从Xenomai内存分配内存空间;注册端口号的映射信息。

S304,开始读取第二消息队列。

S305,判断第二消息队列是否为空,如果是,执行步骤S306,否则,执行步骤S304。

S306,结束。

需要说明的是,本申请实施例的接收进程可以从第二消息队列读取自定义长度的数据,如果第二消息队列首端存在数据包,则从该数据包读取自定义长度的数据,若自定义长度大于数据包大小,则读取数据包大小的数据;如果第二消息队列首端不存在数据包,则堵塞指定时长或直接返回错误信息。接收进程结束,数据读取和其他操作后释放消息队列和相关资源。

可选地,在一些实施例中,还包括:在确定第一消息队列和第二消息队列消息队列的端口号后,将端口号作为通信标识,以与其他进程进行通信。

可以理解的是,每个消息队列都由一个唯一的端口号标识,进程可以通过这个端口号或者自定义的命名与其他进程形成通信绑定。

可选地,在一些实施例中,还包括:检测与其它进程通信的消息交互方式;若消息交互方式为主机内端点间的消息交互方式,则基于RTPS协议进行基于Xenomai消息队列的实时通信。

可以理解的是,本申请实施例可以按照RTPS协议中描述,创建域参与者的时候,8个默认的内置端点会同时被创建,其中,6个内置端点会被用于上述的动态发现协议PDP和EDP的信息数据的发送和接收。除了默认的内置端点,另外还有一个端点被创建,该端点在发现过程结束后用于真正的用户数据的发送或者接收。

上述的端点间的消息交互可能发生在不同的主机间或者一个主机内。RTPS协议定义了三种传输模块。其中,网络通信协议UDP和TCP可以用于主机间或主机内的消息交互,而共享内存通信可用于主机内的消息交互。本申请提出新的消息传输模块,将上述的基于Xenomai消息队列的实时通信方法用于RTPS协议中的主机内的端点间的消息交互。

其中,为完成主机内的端点间的消息交互,本申请实施例对新的消息传输模块定义如下:

构建消息传输模块时,默认配置定位器类型为消息队列定位器,传输数据大小最大为16384KB,端口容量为32,心跳包超时时间为1000毫秒;

初始化消息传输模块时,新建消息队列对象,根据构建传输模块时的配置信息设置消息队列的大小和端口号;

打开消息传输模块的消息接收通道时,构建消息接收对象并在消息接收对象的线程函数中启动消息队列的读取消息操作;

打开消息传输模块的消息发送通道时,根据发现过程得到的对方的端口号构建消息发送对象,并在消息发送对象的线程函数中启动消息队列的发送消息操作,包括申请一块内存链接在对方消息队列尾端和对内存写入消息。

可选地,在一些实施例中,基于RTPS协议进行基于Xenomai消息队列的实时通信,包括:通过定位器传输消息,定位器由第一至第三字节组成,其中,第一个字节表示定位器用于单播或组播,如果用于单播,用第一标识表示;否则,用第二标识表示,并且第二个字节和第三个字节合并表示由主机IP地址转换得到的主机ID。

可以理解的是,按照RTPS协议中描述,每一种消息传输模块都需要有对应的定位器,例如UDP的定位器由IP地址和端口号组成。

假设上述RTPS的消息队列通信方式的定位器由三个字节组成:第一个字节表示定位器用于单播或组播。如果用于单播,用‘U’表示;否则,用‘M’表示;第二个字节和第三个字节合并表示由主机IP地址转换得到的主机ID,主机ID由两个字节组成,定位器的第二个字节表示主机ID的第一个字节,定位器的第三个字节表示主机ID的第二个字节;

进一步地,在一些实施例中,还包括:根据定位器判断对方的主机ID是否与自身的主机ID是否满足消息交互条件,以在满足交互条件时进行实时通信前的匹配。

根据本申请实施例提出的RTPS的进程通信方法,可以检测Xenomai消息队列的状态,并在状态为发送状态时,建立第一消息队列对象,并确定第一消息队列的大小和端口号,并将申请内存连接到接收第一消息队列的尾端,以将所有消息写入第一消息队列,并在状态为接收状态时,建立第二消息队列对象,并确定接收第二消息队列的端口号,以提取所第二消息队列的消息,直至第二消息队列为空,从而解决了相关技术中出现的普遍DDS通信延迟的问题,大大降低了因切换带来的时延影响。

其次参照附图描述根据本申请实施例提出的RTPS的进程通信装置。

图4是本申请实施例的RTPS的进程通信装置的方框示意图。该实施例中,该装置用于机器人通信,在Xenomai的堆内存中维护有Xenomai消息队列。

如图4所示,该RTPS的进程通信装置10包括:写入模块100和提取模块200。

其中,写入模块100用于在Xenomai消息队列的状态为发送状态时,建立Xenomai消息队列中第一消息队列对象,并确定第一消息队列的大小和端口号,并将申请内存与第一消息队列的尾端相连后,写入消息至第一消息队列,并在结束写入消息后释放所述第一消息队列;

提取模块200用于在Xenomai消息队列的状态为接收状态时,建立Xenomai消息队列中第二消息队列对象,并确定接收第二消息队列的端口号,初始化所述第二消息队列,以从所述第二消息队列提取预设长度的数据,其中,如果所述第二消息队列首端存在数据包,则从所述数据包提取预设长度的数据;否则,堵塞预设时长或直接返回错误信息,直至第二消息队列为空,并在所述第二消息队列为空后释放所述第二消息队列。

可选地,在一些实施例中,上述的RTPS的进程通信装置10,还包括:第一通信模块,用于在确定第一消息队列和第二消息队列的端口号后,将端口号作为通信标识,以与其他进程进行通信。

可选地,在一些实施例中,上述的RTPS的进程通信装置10,还包括:

检测模块,用于检测与其它进程通信的消息交互方式;

第二通信模块,用于在消息交互方式为主机内端点间的消息交互方式时,基于RTPS协议进行基于Xenomai消息队列的实时通信。

可选地,在一些实施例中,所述第二通信模块,具体用于:通过定位器传输消息,所述定位器由第一至第三字节组成,其中,

第一个字节表示定位器用于单播或组播,如果用于单播,用第一标识表示;否则,用第二标识表示,并且第二个字节和第三个字节合并表示由主机IP地址转换得到的主机ID。

需要说明的是,前述对RTPS的进程通信方法实施例的解释说明也适用于该实施例的RTPS的进程通信装置,此处不再赘述。

根据本申请实施例提出的RTPS的进程通信装置,可以检测Xenomai消息队列的状态,并在状态为发送状态时,建立第一消息队列对象,并确定第一消息队列的大小和端口号,并将申请内存连接到第一消息队列的尾端,以写入消息到第一消息队列,并在状态为接收状态时,建立第二消息队列对象,并确定第二消息队列的端口号,以将所有消息读取第二消息队列,直至第二消息队列为空,从而解决了相关技术中出现的普遍DDS通信延迟的问题,大大降低了因切换带来的时延影响。

图5为本申请实施例提供的电子设备的结构示意图。该电子设备可以包括:

存储器1201、处理器1202及存储在存储器1201上并可在处理器1202上运行的计算机程序。

处理器1202执行程序时实现上述实施例中提供的RTPS的进程通信方法。

进一步地,电子设备还包括:

通信接口1203,用于存储器1201和处理器1202之间的通信。

存储器1201,用于存放可在处理器1202上运行的计算机程序。

存储器1201可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。

如果存储器1201、处理器1202和通信接口1203独立实现,则通信接口1203、存储器1201和处理器1202可以通过总线相互连接并完成相互间的通信。总线可以是工业标准体系结构(Industry Standard Architecture,简称为ISA)总线、外部设备互连(PeripheralComponent,简称为PCI)总线或扩展工业标准体系结构(Extended Industry StandardArchitecture,简称为EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

可选的,在具体实现上,如果存储器1201、处理器1202及通信接口1203,集成在一块芯片上实现,则存储器1201、处理器1202及通信接口1203可以通过内部接口完成相互间的通信。

处理器1202可能是一个中央处理器(Central Processing Unit,简称为CPU),或者是特定集成电路(Application Specific Integrated Circuit,简称为ASIC),或者是被配置成实施本申请实施例的一个或多个集成电路。

本实施例还提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如上的RTPS的进程通信方法。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或N个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。

此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本申请的描述中,“N个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。

流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更N个用于实现定制逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本申请的实施例所属技术领域的技术人员所理解。

在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或N个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。

应当理解,本申请的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,N个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。如,如果用硬件来实现和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。

本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。

此外,在本申请各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。

上述提到的存储介质可以是只读存储器,磁盘或光盘等。尽管上面已经示出和描述了本申请的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对上述实施例进行变化、修改、替换和变型。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号