CN116954952A - 一种机器人的自适应混合通信方法、装置、介质及设备 - Google Patents
一种机器人的自适应混合通信方法、装置、介质及设备 Download PDFInfo
- Publication number
- CN116954952A CN116954952A CN202311202661.8A CN202311202661A CN116954952A CN 116954952 A CN116954952 A CN 116954952A CN 202311202661 A CN202311202661 A CN 202311202661A CN 116954952 A CN116954952 A CN 116954952A
- Authority
- CN
- China
- Prior art keywords
- node
- information
- shared memory
- subscriber
- topic
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000004891 communication Methods 0.000 title claims abstract description 80
- 238000000034 method Methods 0.000 title claims abstract description 79
- 230000002441 reversible effect Effects 0.000 claims abstract description 89
- 238000012790 confirmation Methods 0.000 claims abstract description 49
- 230000003044 adaptive effect Effects 0.000 claims description 29
- 238000004590 computer program Methods 0.000 claims description 16
- 230000001360 synchronised effect Effects 0.000 claims description 16
- 238000012544 monitoring process Methods 0.000 claims description 5
- 238000010586 diagram Methods 0.000 description 18
- 230000007246 mechanism Effects 0.000 description 17
- 230000008569 process Effects 0.000 description 11
- 230000005540 biological transmission Effects 0.000 description 10
- 230000006870 function Effects 0.000 description 10
- 238000012545 processing Methods 0.000 description 9
- 230000006872 improvement Effects 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 7
- 230000007717 exclusion Effects 0.000 description 6
- 230000002457 bidirectional effect Effects 0.000 description 4
- 238000011161 development Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 239000000969 carrier Substances 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 229920001296 polysiloxane Polymers 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000001737 promoting effect Effects 0.000 description 1
- 238000012827 research and development Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000010979 ruby Substances 0.000 description 1
- 229910001750 ruby Inorganic materials 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/51—Discovery or management thereof, e.g. service location protocol [SLP] or web services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/12—Protocols specially adapted for proprietary or special-purpose networking environments, e.g. medical networks, sensor networks, networks in vehicles or remote metering networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Medical Informatics (AREA)
- General Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本说明书公开了一种机器人的自适应混合通信方法、装置、介质及设备。所述方法包括:发布者节点通过正向话题发送携带有发布者主机标识的信息,订阅者节点通过反向话题发送携带有订阅者主机标识和订阅者节点标识的信息,若根据订阅者主机标识和发布者主机标识确定发布者节点和订阅者节点在同一主机,发布者节点创建共享内存,并通过正向话题发送携带有订阅者节点标识、共享内存标识、以及发布者主机标识的信息,订阅者节点根据该信息确定能够正确获取共享内存的信息后,通过反向话题发送确认信息,之后关闭反向话题;订阅者节点在接收到确认信息后,将目标数据写入所述共享内存,订阅者节点从共享内存中读取目标数据。
Description
技术领域
本说明书涉及机器人通信技术领域,尤其涉及一种机器人的自适应混合通信方法、装置、介质及设备。
背景技术
随着机器人技术的发展,机器人系统变得越来越复杂,硬件设备、算法模块和功能程序数量激增,导致机器人系统集成难度大、软件复用性差等多种问题,为了解决这些问题,机器人中间件技术得到了广泛的应用,通过提供模块间通信和集成功能,大大简化了机器人软件平台的开发难度,提高了软件的可复用性和可移植性。
然而,现有机器人通信方法的通信延迟较高,实时性较差,无法充分利用机器人系统的软硬件资源,造成严重的资源浪费,并且不满足某些机器人应用对实时性的要求,难以充分满足用户需求。
因此,如何提高机器人系统的通信实时性,充分利用其软硬件资源,从而满足高实时机器人应用的需求,是一个亟待解决的问题。
发明内容
本说明书提供一种机器人的自适应混合通信方法、装置、介质及设备,以部分的解决现有技术存在的上述问题。
本说明书采用下述技术方案:
本说明书提供了一种机器人的自适应混合通信方法,包括:
发布者节点通过正向话题发送携带有发布者主机标识的第一信息,以使订阅者节点在接收到所述第一信息后根据所述主机标识判断是否与所述发布者节点位于同一主机上;
在接收到所述订阅者节点通过反向话题发送的携带有订阅者主机标识和订阅者节点标识的第二信息后,根据所述订阅者主机标识,判断是否与所述订阅者节点位于同一主机上,其中,所述发布者节点预先订阅所述反向话题,所述订阅者节点预先订阅所述正向话题;
若是,根据所述节点标识,创建所述订阅者节点对应的共享内存;
通过所述正向话题发送携带有订阅者节点标识、共享内存标识、以及发布者主机标识的第三信息,以使所述订阅者节点在接收到所述第三信息并根据所述第三信息确定能够正确获取所述共享内存的信息后,通过所述反向话题发送确认信息,并在发送所述确认信息后关闭所述反向话题;
在接收到所述确认信息后,将目标数据写入所述共享内存,以使所述订阅者节点从所述共享内存中读取所述目标数据。
可选地,所述方法还包括:
若所述发布者节点与所述订阅者节点位于不同主机,则通过所述正向话题发送所述目标数据,以使所述订阅者节点根据接收到的所述正向话题获取所述目标数据,并停止发送所述反向话题。
可选地,根据所述节点标识,创建所述订阅者节点对应的共享内存,具体包括:
在所述共享内存中设置互斥信号量;
在接收到所述确认信息后,将目标数据写入所述共享内存,以使所述订阅者节点从所述共享内存中读取所述目标数据,具体包括:
判断所述共享内存中设置的互斥信号量是否为初始值,若是,则向所述共享内存写入所述目标数据,并将所述初始值更新为目标值,以禁止其他节点访问所述共享内存;
在写入完成后,将所述目标值重置为所述初始值。
可选地,所述方法还包括:
判断是否存在位于其他主机上的订阅者节点;
若否,停止通过所述正向话题发送信息。
可选地,所述方法还包括:
按照预设时间间隔,检测所述共享内存中指定区域的信息,若所述指定区域的信息未在预设之间内进行更新,则回收所述共享内存,其中,所述订阅者节点处于在线状态时定期更新所述指定区域的信息。
本说明书提供了一种机器人的自适应混合通信方法,所述方法用于机器人操作系统中的订阅者节点,包括:
订阅者节点通过反向话题发送携带有订阅者主机标识和订阅者节点标识的第二信息;
在接收到发布者节点通过正向话题发送的携带有发布者主机标识的第一信息后,根据所述发布者主机标识,判断是否与所述发布者节点位于同一主机上,其中,所述发布者节点预先订阅所述反向话题,所述订阅者节点预先订阅所述正向话题;
若是,接收所述发布者节点通过所述正向话题发送的携带有订阅者节点标识、共享内存标识、以及发布者主机标识的第三信息,所述第三信息以及所述共享内存标识对应的共享内存是所述发布者节点根据所述订阅者主机标识确定与所述订阅者节点位于同一主机上后发送以及创建的;
根据所述第三信息判断能否正确获取所述共享内存的信息,若是,则通过所述反向话题发送确认信息,以使所述发布者节点在接收到所述确认信息后,将目标数据写入所述共享内存;
从所述共享内存中读取所述目标数据。
可选地,根据所述第三信息判断能否正确获取所述共享内存的信息,具体包括:
在确定所述第三信息中的发布者主机标识与订阅者节点自身的主机标识一致后,判断所述第三信息中的订阅者节点标识与订阅者节点自身的节点标识是否一致;
若一致,从所述共享内存的数据缓存首地址读取第一握手信息;
若能够将所述第一握手信息解析为第一初始字符串,则确定能够正确获取所述共享内存的信息,其中,所述初始字符串是所述发布者节点创建所述共享内存后设置的;
在从所述共享内存中读取所述目标数据之前,所述方法还包括:
判断是否能够从所述共享内存中读取第二握手信息,所述第二握手信息是所述订阅者节点在接收到所述确认信息后写入所述共享内存的;
若是,则关闭所述反向话题,以使所述发布者节点在预设超时时间内没有接收到反向话题后向所述共享内存中写入所述目标数据。
可选地,从所述共享内存中读取所述目标数据,具体包括:
对所述共享内存中设置的同步信号量进行监测,所述同步信号量是所述发布者节点创建所述共享内存后设置的;
若所述同步信号量由初始值更新为目标值,则从所述共享内存中读取所述目标数据,并在读取所述目标数据后将所述同步信号量重置为所述初始值,其中,所述同步信号量是在所述发布者节点向所述共享内存写入数据后由所述初始值更新为所述目标值的。
本说明书提供了一种机器人的自适应混合通信装置,包括:
发送模块,通过正向话题发送携带有发布者主机标识的第一信息,以使订阅者节点在接收到所述第一信息后根据所述主机标识判断是否与所述发布者节点位于同一主机上;
判断模块,在接收到所述订阅者节点通过反向话题发送的携带有订阅者主机标识和订阅者节点标识的第二信息后,根据所述订阅者主机标识,判断是否与所述订阅者节点位于同一主机上,其中,所述发布者节点预先订阅所述反向话题,所述订阅者节点预先订阅所述正向话题;
创建模块,若是,根据所述节点标识,创建所述订阅者节点对应的共享内存;
确认模块,通过所述正向话题发送携带有订阅者节点标识、共享内存标识、以及发布者主机标识的第三信息,以使所述订阅者节点在接收到所述第三信息并根据所述第三信息确定能够正确获取所述共享内存的信息后,通过所述反向话题发送确认信息,并在发送所述确认信息后关闭所述反向话题;
写入模块,在接收到所述确认信息后,将目标数据写入所述共享内存,以使所述订阅者节点从所述共享内存中读取所述目标数据。
本说明书提供了一种机器人的自适应混合通信装置,包括:
发送模块,通过反向话题发送携带有订阅者主机标识和订阅者节点标识的第二信息;
判断模块,在接收到发布者节点通过正向话题发送的携带有发布者主机标识的第一信息后,根据所述发布者主机标识,判断是否与所述发布者节点位于同一主机上,其中,所述发布者节点预先订阅所述反向话题,所述订阅者节点预先订阅所述正向话题;
接收模块,若是,接收所述发布者节点通过所述正向话题发送的携带有订阅者节点标识、共享内存标识、以及发布者主机标识的第三信息,所述第三信息以及所述共享内存标识对应的共享内存是所述发布者节点根据所述订阅者主机标识确定与所述订阅者节点位于同一主机上后发送以及创建的;
确定模块,根据所述第三信息判断能否正确获取所述共享内存的信息,若是,则通过所述反向话题发送确认信息,以使所述发布者节点在接收到所述确认信息后,将目标数据写入所述共享内存;
读取模块,从所述共享内存中读取所述目标数据。本说明书提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述机器人的自适应混合通信方法。
本说明书提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述机器人的自适应混合通信方法。
本说明书采用的上述至少一个技术方案能够达到以下有益效果:
在本说明书提供的机器人的自适应混合通信方法中,本说明书公开了一种机器人的自适应混合通信方法、装置、存储介质及电子设备。所述方法包括:发布者节点通过正向话题发送携带有发布者主机标识的信息,订阅者节点通过反向话题发送的携带有订阅者主机标识和订阅者节点标识的信息,若根据订阅者主机标识和发布者主机标识确定发布者节点和订阅者节点在同一主机,发布者节点创建共享内存,并通过正向话题发送携带有订阅者节点标识、共享内存标识、以及发布者主机标识的信息,订阅者节点根据该信息确定能够正确获取共享内存的信息后,通过反向话题发送确认信息,订阅者节点在接收到确认信息后,将目标数据写入所述共享内存,订阅者节点从共享内存中读取目标数据。
从上述方法可以看出,本方案可以通过正、反两个方向的话题分别发送信息,使得订阅者节点和发布者节点可以根据接收到的信息判断对方是否位于同一主机,进而确定本地通信还是远程通信,这样一来,当二者位于同一主机时可以充分利用机器人系统本身的内存资源,并且提高通信效率,降低传输延迟,保证通信实时性。并且,基于双向话题的节点发现和智能切换策略,能够使发布者和订阅者知晓通信双方的位置情况,自动进行通信方式的切换,提升了系统的使用便利性。
附图说明
此处所说明的附图用来提供对本说明书的进一步理解,构成本说明书的一部分,本说明书的示意性实施例及其说明用于解释本说明书,并不构成对本说明书的不当限定。在附图中:
图1为本说明书中提供的一种机器人的自适应混合通信方法的流程示意图;
图2为本说明书中提供的一种不同主机发布者和订阅者双向话题发现和通信机制示意图;
图3为本说明书中提供的一种同主机发布者订阅者双向话题发现和通信机制示意图;
图4为本说明书中提供的一种机器人操作系统的整体通信架构示意图;
图5为本说明书中提供的一种机器人的自适应混合通信方法的流程示意图;
图6为本说明书提供的一种机器人的自适应混合通信装置的示意图;
图7为本说明书提供的一种机器人的自适应混合通信装置的示意图;
图8为本说明书提供的一种对应于图1或图5的电子设备示意图。
具体实施方式
为使本说明书的目的、技术方案和优点更加清楚,下面将结合本说明书具体实施例及相应的附图对本说明书技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本说明书保护的范围。
以下结合附图,详细说明本说明书各实施例提供的技术方案。
图1为本说明书中提供的一种机器人的自适应混合通信方法的流程示意图,包括以下步骤:
S101:发布者节点通过正向话题发送携带有发布者主机标识的第一信息,以使订阅者节点在接收到所述第一信息后根据所述主机标识判断是否与所述发布者节点位于同一主机上。
S102:在接收到所述订阅者节点通过反向话题发送的携带有订阅者主机标识和订阅者节点标识的第二信息后,根据所述订阅者主机标识,判断是否与所述订阅者节点位于同一主机上,其中,所述发布者节点预先订阅所述反向话题,所述订阅者节点预先订阅所述正向话题。
机器人操作系统(Robot Operating System,ROS)是机器人研究与开发广泛采用的开源中间件。其分布式编程框架通过节点(node)、话题(topic)、服务(service)和参数(parameter)四个概念构建,节点之间通过话题实现消息传递通信。
其中,节点用于表示机器人各功能模块之间进行通信的最小进程,包括加载、处理、调用以及读写等,话题表示各节点进行远程通信时的用于传递信息的载体,并且仅当两个节点之间均订阅同一话题时,这两个节点之间才能够同该话题进行通信。
基于此,本说明书提供了一种机器人的自适应混合通信方法,其中包括基于双向话题的节点发现和智能切换策略,自动确认通信节点双方的位置,自适应地在共享内存通信和远程通信之间进行切换,以达到高效、实时的通信需求。
在机器人操作系统中,发布者节点可以为通过发布的话题发送信息的节点,订阅者可以为通过订阅的话题接收信息的节点,以下将从发布者节点的角度出发,对本说明书提供的一种机器人的自适应混合通信方法进行说明。
在本说明书中,对于每个需要传输的话题(正向话题),均定义一个相应的反向传输话题。例如,对于正向话题(cmd),定义其对应的反向话题(cmd_back),反向话题的消息内容可以包括订阅者主机标识(string sub_host_name)、订阅者节点标识(string node_name)以及确认信号(bool ack)。
正向话题的消息内容除了包括需要传输的数据主体外,还可以包括发布者主机标识(string pub_host_name)、目标订阅者节点标识(string rec_node_name)、共享内存标识(string shared_memory_name),当然也可以根据实现方式的不同包含其它参数信息,如命名信号量等。
其中,发布者节点发布正向话题,订阅反向话题。订阅者节点订阅正向话题,发布反向话题。
在本说明书中,每个正向话题只有一个发布者节点,但是可以有多个订阅者节点,且多个订阅者节点既可以在本地,也可以在远程主机上,发布者节点支持同时通过正向话题和共享内存发送目标数据。
对于每个发布者节点,该发布者节点上线后首先通过正向话题发送第一信息, 第一信息中除了数据主体,字段rec_node_name、shared_memory_name可以设置为空,pub_host_name字段填入发布者主机标识,从而通过正向话题发送携带有发布者主机标识的第一信息。
对于每个订阅者节点,该订阅者节点上线后,持续发送包含自身节点信息的第二信息到反向话题并发布。消息内容包括订阅者节点标识(node_name),订阅者主机标识(sub_host_name)以及确认信号(ack),在本说明书中,ack可以是bool量,初始发送时的值可以设置为false。
在实际应用中,发布者节点或订阅者节点可以通过诸如传输控制协议(TCP,Transmission Control Protocol)、用户数据报协议(UDP,User Datagram Protocol)等网络通讯来发布正向话题或反向话题,当然,也可以通过其他远程通信的方式来进行发送,本说明书对此不做具体限定。
发布者节点接收到反向话题后,可以根据该反向话题所携带第二信息中的sub_host_name字符串(即订阅者主机标识),确定订阅者节点是否与自身在同一主机上,其中,若发布者节点自身的发布者主机标识与订阅者主机标识相同,则说明二者在同一主机上,否则位于不同主机。
同样的,订阅者节点接收到正向话题后,可以根据该正向话题所携带第一信息中的pub_host_name字符串(即发布者主机标识),确定发布者节点是否与自身在同一主机上,其中,若订阅者节点自身的订阅者主机标识与发布者主机标识相同,则说明二者在同一主机上,否则位于不同主机。
S103:若是,根据所述节点标识,创建所述订阅者节点对应的共享内存。
S104:通过所述正向话题发送携带有订阅者节点标识、共享内存标识、以及发布者主机标识的第三信息,以使所述订阅者节点在接收到所述第三信息并根据所述第三信息确定能够正确获取所述共享内存的信息后,通过所述反向话题发送确认信息,并在发送所述确认信息后关闭所述反向话题。
S105:在接收到所述确认信息后,将目标数据写入所述共享内存,以使所述订阅者节点从所述共享内存中读取所述目标数据。
在本说明书中,可以基于正向话题以及反向话题中的信息判断进行本地通信还是远程通信,从而实现在共享内存通信和远程通信之间的智能切换。
具体的,若发布者节点与订阅者节点位于不同主机,二者仍然通过话题进行远程通信,为了便于理解,本说明书提供了一种不同主机发布者和订阅者双向话题发现和通信机制示意图,如图2所示。
图2为本说明书中提供的一种不同主机发布者和订阅者双向话题发现和通信机制示意图。
其中,若发布者节点与订阅者节点位于不同主机,则发布者节点后续继续使用正向话题发送目标数据,订阅者节点根据接收到的正向话题获取该目标数据,并关闭反向话题。
若发布者节点与订阅者节点位于不同主机,二者仍然通过话题进行远程通信,为了便于理解,本说明书提供了一种同主机发布者订阅者双向话题发现和通信机制示意图,如图3所示。
图3为本说明书中提供的一种同主机发布者订阅者双向话题发现和通信机制示意图。
其中,若发布者节点与订阅者节点位于同一主机上,则发布者节点可以为每个订阅者创建各自对应的共享内存,此外,发布者节点还可以在共享内存中创建配套使用的同步信号量和互斥信号量。
在本说明书中,共享内存以结构体方式映射,共享内存结构体中至少包含一个无符号64位整数保存数据长度,一个足够大的字节数组用来保存目标数据序列化字节码,以及两个信号量,一个用于同步,一个用于互斥。此外,根据实现方式的不同,共享内存中还可以包含其它同步机制的变量或多组数据组成的环形缓冲队列。
对于每个订阅者节点对应的共享内存,发布者节点可以在该共享内存块数据缓存中填入一个初始字符串(如订阅者节点名,方便订阅者节点确认内存可读),作为第一初始字符串,然后通过正向话题持续发送包含对应订阅者节点标识、分配的共享内存标识以及发布者主机标识的第三信息,从而通知对应的订阅者节点准备从共享内存获取消息。发布者节点同时通过反向话题等待对应的订阅者节点发送确认信息。
订阅者节点接收到正向话题后,首先判断pub_host_name是否与自身主机标识相同,如果相同,则读取rec_node_name判断是否和自身节点标识一致,如果节点标识也相同,说明该消息确实是发布者节点发送给自身的,则进一步读取第三信息中包含的共享内存标识、信号量标识等信息,并从共享内存数据缓存首地址读取第一握手信息。
在实际应用中,发布者节点通过正向主题发送消息时可以对变长数据进行序列化处理,从而转换为成字节码写入共享内存,因此,本说明书中的第一握手信息可以为经过序列化后的第一初始字符串。
如果订阅者节点成功将第一握手信息解析为发布者节点创建共享内存时所设置的第一初始字符串(即成功对序列化后的第一初始字符串进行反序列化),则通过反向话题持续发送确认信息ack告知发布者节点已正确获取共享内存信息(通过将反向话题中消息的ack设置为true实现),并继续等待读取该共享内存块的内容。
发布者节点接收到确认信息后,可以向共享内存中写入第二握手信息(如共享内存名称),当订阅者节点读取到第二握手信息后,可以判断发布者节点已经收到确认信息,这时订阅者节点可以停止发布反向话题,并等待从共享内存中读取目标数据。
发布者节点在写入第二握手信息后可以设定一个超时时间,在超时时间内没收到订阅者节点的反向话题后,则确认订阅者节点已经收到第二握手信息并进入接收状态。此时发布者开始正式向共享内存中写入目标数据。上述超时时间可以根据实际情况进行设定,本说明书对此不做具体限定。
换句话说,当所有发布者订阅者节点都开始正常收发话题消息后,所有订阅者节点均停止发送反向话题,这样不会额外增加系统通信开销。
发布者在与订阅者多次握手成功后,开始从共享内存持续写入正式发送的目标数据,若此时并没有远程订阅者订阅正向话题,则关闭正向话题,节省带宽。
以上可以称为一种基于正反向话题的握手机制。为了便于理解,本说明书提供了一种机器人操作系统的整体通信架构示意图,如图4所示。
图4为本说明书中提供的一种机器人操作系统的整体通信架构示意图。
其中,对于发布者节点本地(同一主机上)的订阅者节点,二者通过共享内存进行数据读写,而对于发布者节点远端(不同主机上的)订阅者节点,二者通过正向消息主体进行数据通信。
需要说明的是,发布者节点通过共享内存发送的可以是ROS的消息,这些消息可以是变长的,因此发布者需要对消息进行序列化,变成字节码写入共享内存,订阅者从内存读取到字节码,然后进行反序列化,恢复成原来的消息。这可以通过ROS提供的序列化和反序列化库来实现。另外,因为通过共享内存传递的消息是变长的,因此发送时,发布者首先在共享内存结构体的数据长度部分填入数据长度,然后在字节数组部分写入实际序列化字节码。订阅者读取数据时,也是首先读取整个数据长度,然后根据长度从字节数组部分读取序列化字节码,再反序列化成消息结构。
进一步的,在实际应用中,若发布者节点检测到共享内存的使用出现问题(例如共享内存无法访问),则释放原来的共享内存块,新建一个共享内存块,并通过正向话题持续发送新的共享内存信息给对应的订阅者节点,订阅者收到消息后,从新的共享内存地址读取数据,并通过反向话题发送确认信息给发布者,发布者接收到确认后,停止发送正向话题,并从新的共享内存发送消息数据,订阅者从新的共享内存读取到有效数据后,关闭反向话题。
而若订阅者检测到共享内存的使用出现问题,则重新开始发送反向话题,并将ack置为false,发布者节点收到对应订阅者节点的反向话题消息后,释放原来的共享内存块,新建一个共享内存块,并重复前文所述握手确认过程,确认完成后,恢复正常数据收发,如果没有额外的远程订阅者节点,则停止发送正向话题,订阅者节点从新的共享内存读取到有效数据后,关闭反向话题。
如果订阅者与发布者在通过正反向话题握手过程中任何一步出现超时(可以根据设定时间内却没有收到对方的反馈消息来判断),则从握手第一步开始重试,如重试多次仍不成功,则放弃共享内存通信,通过正向话题进行远程通信。
此外,在共享内存中读写数据的过程中,为了保证在订阅者节点读取数据时,发布者节点不能写入数据,以及发布者节点写入数据时,订阅者节点不能读取数据,需要在共享内存中使用互斥机制。
在本说明书中,该互斥机制的实现方式可以有多种,其中,订阅者节点可以通过在共享内存中设置互斥量信号来进行实现,该互斥信号量是一个计数器,可以用来控制多个节点对共享内存的访问,初始值给定为1。当一个节点想要访问共享内存时,它会执行一个"wait"操作来对信号量减1,从而更新为目标值。如果信号量的值在操作之前为目标值(大于0),那么执行相应读写操作。
如果信号量的值在操作之前是0,那么该节点就被阻塞,直到信号量的值大于0。当节点完成对共享内存的访问后,它会执行一个"post"操作来对信号量加1使其重置为初始值,这样一来,另外的节点能够访问共享内存。通过互斥信号量来实现共享内存的读写同步。只需要在每次访问共享内存前执行"wait"操作,访问完成后执行"post"操作,就可以确保任何时候只有一个节点能够访问共享内存。
当然,还可以在共享内存中设置互斥锁来实现上述互斥机制,发布者节点可以在共享内存中创建一个节点间的互斥锁(如pthread的pthread_mutex_t),并设置其为PTHREAD_PROCESS_SHARED以实现节点间的同步。在这种情况下,互斥锁在一个节点中上锁后,其他节点在尝试上锁时会被阻塞,直到原节点解锁,这就实现了对共享内存的互斥访问。
另外,可以在共享内存中设置同步信号量实现收发同步机制,即发布者节点一直往共享内存写入数据,订阅者节点只有在共享内存写入新数据后才读一次,该机制的实现方式可以有多种,其中,发布者节点可以新创建一个专门作为通知的同步信号量,信号量初始为0,当发布者节点向共享内存写入新的消息后,如果信号量为0,就增加信号量的值得到目标值,如果信号量不为零,就不对信号量进行操作。订阅者节点的监控线程在该通知信号量上等待。当信号量的值为目标值1时,线程就会被唤醒,并将新的消息从共享内存读取到接收缓冲区。
当然,发布者节点还可以在共享内存中设置一个标志位,当发布者节点写入新的数据时,就更新这个标志位,订阅者节点通过监控线程监视这个标志位,当标志位有变化时,就读取共享内存数据到缓冲区。
此外,订阅者节点可以在共享内存中创建一个环形队列,然后用一对信号量分别控制写队列和读队列,这样的好处可以防止偶尔的读取抖动导致的数据覆盖丢失。
当然,还可以使用管道、套接字等方法来实现订阅者节点的通知机制,本说明书对此不做具体限定。
订阅者节点中可以创建一个监控线程,这个监控线程会监控共享内存的数据,一旦有新的消息,就从共享内存读取消息到接收缓冲区,接收缓冲区可以用一个队列实现。在节点中定期检查共享内存接收队列大小,如果接收缓冲区有数据,则调用注册的回调函数,从缓冲区读取一条消息并处理。
在某个本地订阅者节点取消订阅后,发布者节点负责回收对应的共享内存块及信号量。这主要通过心跳机制实现。订阅者节点会定期向发布者节点发送信号,当发布者节点超过某个设定阈值时间未接收到订阅者节点的心跳信号,则判定该订阅者节点已经关闭或崩溃,此时发布者节点负责回收对应的共享内存块。该心跳机制可以通过如下方式实现:
基于反向话题的心跳检测:不关闭订阅者的反向话题,还是维持定期发送,这样发布者就可以通过消息作为心跳来判断订阅者的下线。
基于共享内存的心跳检测:在共享内存中设置一个专属区域,订阅者节点定期(例如在读取共享内存的时候)更新该区域内的信息(例如,写入当前时间戳)。发布者节点定期(例如在写入共享内存数据的时候)检查这个区域,如果在一段时间内没有更新(例如,当前时间与最后一次更新时间的差值超过了预设的阈值),则认为相应的订阅者节点已经离线。
以上为从发布者节点的角度,对本说明书中提供的一种机器人的自适应混合通信方法进行说明,为了便于理解,以下将从订阅者节点的角度出发,对本说明书中提供的一种机器人的自适应混合通信方法进行说明,如图5所示。
图5为本说明书中提供的一种机器人的自适应混合通信方法的流程示意图,包括以下步骤:
S501:订阅者节点通过反向话题发送携带有订阅者主机标识和订阅者节点标识的第二信息。
S502:在接收到发布者节点通过正向话题发送的携带有发布者主机标识的第一信息后,根据所述发布者主机标识,判断是否与所述发布者节点位于同一主机上,其中,所述发布者节点预先订阅所述反向话题,所述订阅者节点预先订阅所述正向话题。
发布者节点上线后首先通过正向话题发送携带有发布者主机标识的第一信息,订阅者节点上线后持续发送包含自身节点信息的第二信息到反向话题并发布。
二者根据接收到的主机信息,分别判断是否位于同一主机。
S503:若是,接收所述发布者节点通过所述正向话题发送的携带有订阅者节点标识、共享内存标识、以及发布者主机标识的第三信息,所述第三信息以及所述共享内存标识对应的共享内存是所述发布者节点根据所述订阅者主机标识确定与所述订阅者节点位于同一主机上后发送以及创建的。
S504:根据所述第三信息判断能否正确获取所述共享内存的信息,若是,则通过所述反向话题发送确认信息,并在发送所述确认信息后关闭所述反向话题,以使所述发布者节点在接收到所述确认信息后,将目标数据写入所述共享内存;
S505:从所述共享内存中读取所述目标数据。
若发布者节点与订阅者节点位于不同主机,则发布者继续使用正向话题发送信息,订阅者节点关闭反向话题。
若发布者节点与订阅者节点位于同一主机,则发布者节点创建共享内存并继续向订阅者节点发送第三信息,订阅者节点根据第三信息确定能够正确接收到内存信息后,通过反向话题发送确认信息,发布者节点将目标数据写入共享内存,订阅者节点从共享内存中读取目标数据。
从上述方法可以看出,本方案通过在同一主机的进程间使用共享内存通信,显著降低了通信延迟,提高了数据吞吐量。测试结果显示,同主机节点间通过共享内存方式消息平均收发延迟可以降低到10us以内,大大优于传统的网络通信机制。这种提升的效果特别适用于对实时性和稳定性有严格要求的机器人系统,如工业机器人、人形双足机器人等。
通过实现在共享内存通信和远程通信之间的智能切换,使得通信方式可以根据通信双方的位置自适应地进行选择。这不仅在不同主机间保持了远程的分布式通信特性,也在同一主机内的进程间提供了更高效的通信方式。
由于本方案显著提高了通信效率和实时性,因此可以提升机器人系统的整体性能,特别是对于需要快速响应和处理大量数据的系统,如人形双足机器人、自动驾驶系统等,本发明将具有重要的应用价值。
通过上述效果,本发明实现了一个更高效、更灵活的通信方案,对于推动机器人技术的进一步发展具有重要意义。
以上为本说明书的一个或多个实施机器人的自适应混合通信方法,基于同样的思路,本说明书还提供了相应的机器人的自适应混合通信装置,如图6所示。
图6为本说明书提供的一种机器人的自适应混合通信装置的示意图,包括:
发送模块601,用于通过正向话题发送携带有发布者主机标识的第一信息,以使订阅者节点在接收到所述第一信息后根据所述主机标识判断是否与所述发布者节点位于同一主机上;
判断模块602,用于在接收到所述订阅者节点通过反向话题发送的携带有订阅者主机标识和订阅者节点标识的第二信息后,根据所述订阅者主机标识,判断是否与所述订阅者节点位于同一主机上,其中,所述发布者节点预先订阅所述反向话题,所述订阅者节点预先订阅所述正向话题;
创建模块603,用于若是,根据所述节点标识,创建所述订阅者节点对应的共享内存;
确认模块604,用于通过所述正向话题发送携带有订阅者节点标识、共享内存标识、以及发布者主机标识的第三信息,以使所述订阅者节点在接收到所述第三信息并根据所述第三信息确定能够正确获取所述共享内存的信息后,通过所述反向话题发送确认信息,并在发送所述确认信息后关闭所述反向话题;
写入模块605,用于在接收到所述确认信息后,将目标数据写入所述共享内存,以使所述订阅者节点从所述共享内存中读取所述目标数据。
可选地,所述判断模块602还用于,若所述发布者节点与所述订阅者节点位于不同主机,则通过所述正向话题发送所述目标数据,以使所述订阅者节点根据接收到的所述正向话题获取所述目标数据,并停止发送所述反向话题。
可选地,所述创建模块603具体用于,在所述共享内存中设置互斥信号量;
所述写入模块605具体用于,判断所述共享内存中设置的互斥信号量是否为初始值,若是,则向所述共享内存写入所述目标数据,并将所述初始值更新为目标值,以禁止其他节点访问所述共享内存;在写入完成后,将所述目标值重置为所述初始值。
可选地,所述写入模块605还用于,判断是否存在位于其他主机上的订阅者节点;若否,停止通过所述正向话题发送信息。
可选地,所述写入模块605还用于,按照预设时间间隔,检测所述共享内存中指定区域的信息,若所述指定区域的信息未在预设之间内进行更新,则回收所述共享内存,其中,所述订阅者节点处于在线状态时定期更新所述指定区域的信息。
图7为本说明书提供的一种机器人的自适应混合通信装置的示意图,包括:
发送模块701,用于通过反向话题发送携带有订阅者主机标识和订阅者节点标识的第二信息;
判断模块702,用于在接收到发布者节点通过正向话题发送的携带有发布者主机标识的第一信息后,根据所述发布者主机标识,判断是否与所述发布者节点位于同一主机上,其中,所述发布者节点预先订阅所述反向话题,所述订阅者节点预先订阅所述正向话题;
接收模块703,用于若是,接收所述发布者节点通过所述正向话题发送的携带有订阅者节点标识、共享内存标识、以及发布者主机标识的第三信息,所述第三信息以及所述共享内存标识对应的共享内存是所述发布者节点根据所述订阅者主机标识确定与所述订阅者节点位于同一主机上后发送以及创建的;
确定模块704,用于根据所述第三信息判断能否正确获取所述共享内存的信息,若是,则通过所述反向话题发送确认信息,并在发送所述确认信息后关闭所述反向话题,以使所述发布者节点在接收到所述确认信息后,将目标数据写入所述共享内存;
读取模块705,用于从所述共享内存中读取所述目标数据。
可选地,所述确定模块704具体用于,在确定所述第三信息中的发布者主机标识与订阅者节点自身的主机标识一致后,判断所述第三信息中的订阅者节点标识与订阅者节点自身的节点标识是否一致;若一致,从所述共享内存的数据缓存首地址读取第一握手信息;若能够将所述第一握手信息解析为第一初始字符串,则确定能够正确获取所述共享内存的信息,其中,所述初始字符串是所述发布者节点创建所述共享内存后设置的;
在从所述共享内存中读取所述目标数据之前,所述判断模块702还用于:判断是否能够从所述共享内存中读取第二握手信息,所述第二握手信息是所述订阅者节点在接收到所述确认信息后写入所述共享内存的;若是,则关闭所述反向话题,以使所述发布者节点在预设超时时间内没有接收到反向话题后向所述共享内存中写入所述目标数据。
可选地,所述读取模块具体用于,对所述共享内存中设置的同步信号量进行监测,所述同步信号量是所述发布者节点创建所述共享内存后设置的;若所述同步信号量由初始值更新为目标值,则从所述共享内存中读取所述目标数据,并在读取所述目标数据后将所述同步信号量重置为所述初始值,其中,所述同步信号量是在所述发布者节点向所述共享内存写入数据后由所述初始值更新为所述目标值的。
本说明书还提供了一种计算机可读存储介质,该存储介质存储有计算机程序,计算机程序可用于执行上述图1提供的一种机器人的自适应混合通信方法。
本说明书还提供了图8所示的一种对应于图1的电子设备的示意结构图。如图8所述,在硬件层面,该电子设备包括处理器、内部总线、网络接口、内存以及非易失性存储器,当然还可能包括其他业务所需要的硬件。处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,以实现上述图1所述的机器人的自适应混合通信方法。当然,除了软件实现方式之外,本说明书并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(ProgrammableLogic Device, PLD)(例如现场可编程门阵列(Field Programmable Gate Array,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(HardwareDescription Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(AdvancedBoolean Expression Language)、AHDL(Altera Hardware Description Language)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(JavaHardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(Ruby HardwareDescription Language)等,目前最普遍使用的是VHDL(Very-High-Speed IntegratedCircuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20 以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本说明书的实施例可提供为方法、系统、或计算机程序产品。因此,本说明书可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本说明书可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书是参照根据本说明书实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本说明书的实施例可提供为方法、系统或计算机程序产品。因此,本说明书可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本说明书的实施例而已,并不用于限制本说明书。对于本领域技术人员来说,本说明书可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本说明书的权利要求范围之内。
Claims (12)
1.一种机器人的自适应混合通信方法,其特征在于,所述方法用于机器人操作系统中的发布者节点,包括:
发布者节点通过正向话题发送携带有发布者主机标识的第一信息,以使订阅者节点在接收到所述第一信息后根据所述主机标识判断是否与所述发布者节点位于同一主机上;
在接收到所述订阅者节点通过反向话题发送的携带有订阅者主机标识和订阅者节点标识的第二信息后,根据所述订阅者主机标识,判断是否与所述订阅者节点位于同一主机上,其中,所述发布者节点预先订阅所述反向话题,所述订阅者节点预先订阅所述正向话题;
若是,根据所述节点标识,创建所述订阅者节点对应的共享内存;
通过所述正向话题发送携带有订阅者节点标识、共享内存标识、以及发布者主机标识的第三信息,以使所述订阅者节点在接收到所述第三信息并根据所述第三信息确定能够正确获取所述共享内存的信息后,通过所述反向话题发送确认信息,并在发送所述确认信息后关闭所述反向话题;
在接收到所述确认信息后,将目标数据写入所述共享内存,以使所述订阅者节点从所述共享内存中读取所述目标数据。
2.如权利要求1所述的方法,其特征在于,所述方法还包括:
若所述发布者节点与所述订阅者节点位于不同主机,则通过所述正向话题发送所述目标数据,以使所述订阅者节点根据接收到的所述正向话题获取所述目标数据,并停止发送所述反向话题。
3.如权利要求1所述的方法,其特征在于,根据所述节点标识,创建所述订阅者节点对应的共享内存,具体包括:
在所述共享内存中设置互斥信号量;
在接收到所述确认信息后,将目标数据写入所述共享内存,以使所述订阅者节点从所述共享内存中读取所述目标数据,具体包括:
判断所述共享内存中设置的互斥信号量是否为初始值,若是,则向所述共享内存写入所述目标数据,并将所述初始值更新为目标值,以禁止其他节点访问所述共享内存;
在写入完成后,将所述目标值重置为所述初始值。
4.如权利要求1所述的方法,其特征在于,所述方法还包括:
判断是否存在位于其他主机上的订阅者节点;
若否,停止通过所述正向话题发送信息。
5.如权利要求1所述的方法,其特征在于,所述方法还包括:
按照预设时间间隔,检测所述共享内存中指定区域的信息,若所述指定区域的信息未在预设时间内进行更新,则回收所述共享内存,其中,所述订阅者节点处于在线状态时定期更新所述指定区域的信息。
6.一种机器人的自适应混合通信方法,其特征在于,所述方法用于机器人操作系统中的订阅者节点,包括:
订阅者节点通过反向话题发送携带有订阅者主机标识和订阅者节点标识的第二信息;
在接收到发布者节点通过正向话题发送的携带有发布者主机标识的第一信息后,根据所述发布者主机标识,判断是否与所述发布者节点位于同一主机上,其中,所述发布者节点预先订阅所述反向话题,所述订阅者节点预先订阅所述正向话题;
若是,接收所述发布者节点通过所述正向话题发送的携带有订阅者节点标识、共享内存标识、以及发布者主机标识的第三信息,所述第三信息以及所述共享内存标识对应的共享内存是所述发布者节点根据所述订阅者主机标识确定与所述订阅者节点位于同一主机上后发送以及创建的;
根据所述第三信息判断能否正确获取所述共享内存的信息,若是,则通过所述反向话题发送确认信息,并在发送所述确认信息后关闭所述反向话题,以使所述发布者节点在接收到所述确认信息后,将目标数据写入所述共享内存;
从所述共享内存中读取所述目标数据。
7.如权利要求6所述的方法,其特征在于,根据所述第三信息判断能否正确获取所述共享内存的信息,具体包括:
在确定所述第三信息中的发布者主机标识与订阅者节点自身的主机标识一致后,判断所述第三信息中的订阅者节点标识与订阅者节点自身的节点标识是否一致;
若一致,从所述共享内存的数据缓存首地址读取第一握手信息;
若能够将所述第一握手信息解析为第一初始字符串,则确定能够正确获取所述共享内存的信息,其中,所述初始字符串是所述发布者节点创建所述共享内存后设置的;
在从所述共享内存中读取所述目标数据之前,所述方法还包括:
判断是否能够从所述共享内存中读取第二握手信息,所述第二握手信息是所述订阅者节点在接收到所述确认信息后写入所述共享内存的;
若是,则关闭所述反向话题,以使所述发布者节点在预设超时时间内没有接收到反向话题后向所述共享内存中写入所述目标数据。
8.如权利要求6所述的方法,其特征在于,从所述共享内存中读取所述目标数据,具体包括:
对所述共享内存中设置的同步信号量进行监测,所述同步信号量是所述发布者节点创建所述共享内存后设置的;
若所述同步信号量由初始值更新为目标值,则从所述共享内存中读取所述目标数据,并在读取所述目标数据后将所述同步信号量重置为所述初始值,其中,所述同步信号量是在所述发布者节点向所述共享内存写入数据后由所述初始值更新为所述目标值的。
9.一种机器人的自适应混合通信装置,其特征在于,包括:
发送模块,通过正向话题发送携带有发布者主机标识的第一信息,以使订阅者节点在接收到所述第一信息后根据所述主机标识判断是否与发布者节点位于同一主机上;
判断模块,在接收到所述订阅者节点通过反向话题发送的携带有订阅者主机标识和订阅者节点标识的第二信息后,根据所述订阅者主机标识,判断是否与所述订阅者节点位于同一主机上,其中,所述发布者节点预先订阅所述反向话题,所述订阅者节点预先订阅所述正向话题;
创建模块,若是,根据所述节点标识,创建所述订阅者节点对应的共享内存;
确认模块,通过所述正向话题发送携带有订阅者节点标识、共享内存标识、以及发布者主机标识的第三信息,以使所述订阅者节点在接收到所述第三信息并根据所述第三信息确定能够正确获取所述共享内存的信息后,通过所述反向话题发送确认信息,并在发送所述确认信息后关闭所述反向话题;
写入模块,在接收到所述确认信息后,将目标数据写入所述共享内存,以使所述订阅者节点从所述共享内存中读取所述目标数据。
10.一种机器人的自适应混合通信装置,其特征在于,包括:
发送模块,通过反向话题发送携带有订阅者主机标识和订阅者节点标识的第二信息;
判断模块,在接收到发布者节点通过正向话题发送的携带有发布者主机标识的第一信息后,根据所述发布者主机标识,判断是否与所述发布者节点位于同一主机上,其中,所述发布者节点预先订阅所述反向话题,所述订阅者节点预先订阅所述正向话题;
接收模块,若是,接收所述发布者节点通过所述正向话题发送的携带有订阅者节点标识、共享内存标识、以及发布者主机标识的第三信息,所述第三信息以及所述共享内存标识对应的共享内存是所述发布者节点根据所述订阅者主机标识确定与所述订阅者节点位于同一主机上后发送以及创建的;
确定模块,根据所述第三信息判断能否正确获取所述共享内存的信息,若是,则通过所述反向话题发送确认信息,并在发送所述确认信息后关闭所述反向话题,以使所述发布者节点在接收到所述确认信息后,将目标数据写入所述共享内存;
读取模块,从所述共享内存中读取所述目标数据。
11.一种计算机可读存储介质,其特征在于,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述权利要求1~8任一项所述的方法。
12.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现上述权利要求1~8任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311202661.8A CN116954952B (zh) | 2023-09-18 | 2023-09-18 | 一种机器人的自适应混合通信方法、装置、介质及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311202661.8A CN116954952B (zh) | 2023-09-18 | 2023-09-18 | 一种机器人的自适应混合通信方法、装置、介质及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116954952A true CN116954952A (zh) | 2023-10-27 |
CN116954952B CN116954952B (zh) | 2024-01-09 |
Family
ID=88462340
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311202661.8A Active CN116954952B (zh) | 2023-09-18 | 2023-09-18 | 一种机器人的自适应混合通信方法、装置、介质及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116954952B (zh) |
Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060047666A1 (en) * | 2004-08-28 | 2006-03-02 | Bedi Bharat V | Control of publish/subscribe messaging |
US20070294366A1 (en) * | 2006-06-16 | 2007-12-20 | Microsoft Corporation | Data Synchronization and Sharing Relationships |
US20150026681A1 (en) * | 2013-06-28 | 2015-01-22 | Huawei Technologies Co., Ltd. | Virtual Switching Method, Related Apparatus, and Computer System |
CN106021000A (zh) * | 2016-06-02 | 2016-10-12 | 北京百度网讯科技有限公司 | 用于机器人操作系统的共享内存管理方法和装置 |
CN109151006A (zh) * | 2018-08-08 | 2019-01-04 | 中国电子科技集团公司第二十八研究所 | 一种以数据为中心的分布式实时会话管理方法 |
CN109766199A (zh) * | 2018-12-29 | 2019-05-17 | 歌尔股份有限公司 | 一种机器人操作系统中的节点通信方法和装置 |
CN110071860A (zh) * | 2019-04-01 | 2019-07-30 | 深圳前海达闼云端智能科技有限公司 | 机器人通信方法、机器人通信系统及机器人 |
CN112783667A (zh) * | 2020-12-10 | 2021-05-11 | 中国科学院深圳先进技术研究院 | 基于虚拟环境的内存共享系统及方法 |
CN113098747A (zh) * | 2021-04-28 | 2021-07-09 | 卡斯柯信号有限公司 | 一种面向智慧轨交系统的实时软总线实现方法 |
CN113452600A (zh) * | 2021-06-10 | 2021-09-28 | 绿盟科技集团股份有限公司 | 跨地域的消息通信方法、装置、电子设备和存储介质 |
US20220155992A1 (en) * | 2020-11-13 | 2022-05-19 | Argo AI, LLC | Methods and systems for memory management in a publish and subscribe system |
US20220345852A1 (en) * | 2021-04-23 | 2022-10-27 | Verizon Patent And Licensing Inc. | Publish and subscribe communication system |
CN115706694A (zh) * | 2021-08-04 | 2023-02-17 | 日本电产三协株式会社 | 通信系统及机器人 |
CN115964195A (zh) * | 2022-12-27 | 2023-04-14 | 嬴彻星创智能科技(上海)有限公司 | Dds主题的进程通信方式配置方法及装置 |
CN116633955A (zh) * | 2022-02-14 | 2023-08-22 | 魔门塔(苏州)科技有限公司 | 通信方法、装置、车辆、介质及设备 |
-
2023
- 2023-09-18 CN CN202311202661.8A patent/CN116954952B/zh active Active
Patent Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060047666A1 (en) * | 2004-08-28 | 2006-03-02 | Bedi Bharat V | Control of publish/subscribe messaging |
US20070294366A1 (en) * | 2006-06-16 | 2007-12-20 | Microsoft Corporation | Data Synchronization and Sharing Relationships |
US20150026681A1 (en) * | 2013-06-28 | 2015-01-22 | Huawei Technologies Co., Ltd. | Virtual Switching Method, Related Apparatus, and Computer System |
CN106021000A (zh) * | 2016-06-02 | 2016-10-12 | 北京百度网讯科技有限公司 | 用于机器人操作系统的共享内存管理方法和装置 |
CN109151006A (zh) * | 2018-08-08 | 2019-01-04 | 中国电子科技集团公司第二十八研究所 | 一种以数据为中心的分布式实时会话管理方法 |
CN109766199A (zh) * | 2018-12-29 | 2019-05-17 | 歌尔股份有限公司 | 一种机器人操作系统中的节点通信方法和装置 |
CN110071860A (zh) * | 2019-04-01 | 2019-07-30 | 深圳前海达闼云端智能科技有限公司 | 机器人通信方法、机器人通信系统及机器人 |
US20220155992A1 (en) * | 2020-11-13 | 2022-05-19 | Argo AI, LLC | Methods and systems for memory management in a publish and subscribe system |
CN112783667A (zh) * | 2020-12-10 | 2021-05-11 | 中国科学院深圳先进技术研究院 | 基于虚拟环境的内存共享系统及方法 |
US20220345852A1 (en) * | 2021-04-23 | 2022-10-27 | Verizon Patent And Licensing Inc. | Publish and subscribe communication system |
CN113098747A (zh) * | 2021-04-28 | 2021-07-09 | 卡斯柯信号有限公司 | 一种面向智慧轨交系统的实时软总线实现方法 |
CN113452600A (zh) * | 2021-06-10 | 2021-09-28 | 绿盟科技集团股份有限公司 | 跨地域的消息通信方法、装置、电子设备和存储介质 |
CN115706694A (zh) * | 2021-08-04 | 2023-02-17 | 日本电产三协株式会社 | 通信系统及机器人 |
CN116633955A (zh) * | 2022-02-14 | 2023-08-22 | 魔门塔(苏州)科技有限公司 | 通信方法、装置、车辆、介质及设备 |
CN115964195A (zh) * | 2022-12-27 | 2023-04-14 | 嬴彻星创智能科技(上海)有限公司 | Dds主题的进程通信方式配置方法及装置 |
Non-Patent Citations (6)
Title |
---|
SIMON PICKARTZ等: "A Locality-Aware Communication Layer for Virtualized Clusters", HIGH PERFORMANCE COMPUTING * |
冯国良;谷青范;: "基于DDS的实时中间件的研究与设计", 航空电子技术, no. 03 * |
刘晨璐;乔磊;彭飞;徐建;曹海宁;: "基于发布订阅的进程间通信设计与实现", 空间控制技术与应用, no. 03 * |
吴成富;欧峰;陈怀民;王亮;: "基于组播技术的共享内存网络设计与实现", 测控技术, no. 10 * |
曹万华;谢蓓;吴海昕;程雄;: "基于DDS的发布/订阅中间件设计", 计算机工程, no. 18 * |
王皓;王欣然;过其峰;李宇;杨建旭;: "一种基于共享内存的消息总线设计与实现", 电子科技, no. 09 * |
Also Published As
Publication number | Publication date |
---|---|
CN116954952B (zh) | 2024-01-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107392611B (zh) | 一种发送交易信息和共识验证的方法及装置 | |
CN108647104B (zh) | 请求处理方法、服务器及计算机可读存储介质 | |
EP3531618B1 (en) | Method and device for broadcasting messages | |
CN108628688B (zh) | 一种消息处理方法、装置及设备 | |
CN112749023B (zh) | 一种信息的处理方法、装置、设备及系统 | |
CN114679457B (zh) | 一种区块链中的节点分组方法及区块链节点 | |
CN114143140A (zh) | 一种数据传输系统、方法、存储介质及电子设备 | |
CN109478148B (zh) | 基于工作流程的对象析构 | |
CN116405554B (zh) | 一种网络通信的方法、装置、存储介质及电子设备 | |
CN116954952B (zh) | 一种机器人的自适应混合通信方法、装置、介质及设备 | |
CN110659017B (zh) | 一种外部请求处理方法及相关装置 | |
CN110109718B (zh) | 一种应用程序接口调用方法及装置 | |
CN114979260B (zh) | 一种基于协议的通信方法、装置、电子设备和存储介质 | |
EP4318236A1 (en) | Management method and system for computing node | |
CN116069792A (zh) | 一种数据库容灾系统、方法、装置、存储介质及电子设备 | |
Makpangou et al. | The SOS object-oriented communication service | |
CN117033005B (zh) | 一种无死锁路由方法、装置、存储介质及电子设备 | |
CN113810167B (zh) | 一种分布式系统的时序控制与同步方法 | |
CN111010349B (zh) | 针对首屏的传输加速方法及装置 | |
CN116820430B (zh) | 异步读写方法、装置、计算机设备及存储介质 | |
CN117093161B (zh) | 一种基于光收发芯片的内存管理系统、方法、介质及设备 | |
US8484235B2 (en) | Dynamically switching the serialization method of a data structure | |
CN115174587A (zh) | 一种数据传输系统、方法及装置 | |
CN117608818A (zh) | 多线程数据处理方法、装置、设备及介质 | |
CN114500331A (zh) | 一种数据补发方法、装置及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |