CN115617543A - 一种基于iros的话题消息订阅和处理方法 - Google Patents
一种基于iros的话题消息订阅和处理方法 Download PDFInfo
- Publication number
- CN115617543A CN115617543A CN202211250849.5A CN202211250849A CN115617543A CN 115617543 A CN115617543 A CN 115617543A CN 202211250849 A CN202211250849 A CN 202211250849A CN 115617543 A CN115617543 A CN 115617543A
- Authority
- CN
- China
- Prior art keywords
- message
- thread
- iros
- subscription
- processing
- 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.)
- Pending
Links
Images
Classifications
-
- 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
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5011—Pool
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Between Computers (AREA)
Abstract
一种基于IROS的话题消息订阅和处理方法,IROS中默认采用多线程机制处理话题消息,每个订阅者维护一个线程,各线程对消息的订阅和处理相互独立,当需要各订阅者收到的消息按时序进行统一处理时,就需要寻求新的话题消息订阅和处理方法。实现当节点需要订阅多个话题时,可以将不同话题的消息按时序放入统一的消息队列,从而实现消息的顺序执行。
Description
技术领域
本发明涉及智能机器人操作系统技术领域,具体涉及一种基于IROS的话题消息订阅和处理方法。
背景技术
智能机器人操作系统(Intelligent Robot Operating System,IROS)是一个次级操作系统,运行在Linux系统之上,提供包括硬件抽象描述、程序间消息通信、程序包管理等标准化的开发接口和数据处理流程。
在IROS系统中,所有任务的执行都是通过信息交互的形式完成的,信息的交互的方式包括话题、服务和参数三种,所有交互都是是通过IROS通信API实现的。三种交互方式中,尤以话题应用最为广泛,IROS中默认采用多线程机制处理话题消息,每个订阅者维护一个线程,各线程对消息的订阅和处理相互独立,当需要各订阅者收到的消息按时序进行统一处理时,就需要寻求新的话题消息订阅和处理方法。
发明内容
本发明为了克服以上技术的不足,提供了一种可以将不同话题的消息按时序放入统一的消息队列,从而实现消息的顺序执行的方法。
本发明克服其技术问题所采用的技术方案是:
一种基于IROS的话题消息订阅和处理方法,包括如下步骤:
a)建立一个IROS节点,该IROS节点包括多个订阅者Subscriber,每个订阅者Subscriber订阅一个话题Topic,利用回调函数的模式对订阅者Subscriber接收到的消息进行处理;
b)当消息处理线程见识到消息队列中存入新的消息对象时,调用该消息对象的处理函数对消息本体进行处理。
进一步的,步骤a)包括如下步骤:
a-1)建立统一的订阅线程池,启动IROS节点,在IROS节点启动时初始化订阅线程池,初始化订阅线程池时为每一个订阅者分配一个独立线程和信号量,信号量为false,线程处于等待状态,当信号量为true时独立线程进行消息接收;
a-2)初始化消息队列,等待消息压入;
a-3)通过SingleThreadSpin()函数启动消息接收,依次将订阅线程池中的信号量置为true,信号量为true的订阅线程查询本线程对应的话题中是否存在新消息,如果存在,将消息和处理函数封装成待处理消息对象并放入消息队列。
进一步的,步骤b)包括如下步骤:
b-1)启动IROS节点,初始化消息处理线程,该线程对消息队列进行周期性查询;
b-2)当查询到消息队列不为空时,通过front()接口,从消息队列获取头部消息对象,分析消息对象,获取消息对象的处理函数和消息本体;
b-3)调佣消息对象的处理函数对消息体进行处理;
b-4)处理完毕后,通过调用pop()接口,将该消息对象从消息队列删除;
b-5)当消息队列中还存在其它消息对象时,返回执行步骤b-2),如果不存在其它消息对象时,进入周期性查询。
本发明的有益效果是:IROS中默认采用多线程机制处理话题消息,每个订阅者维护一个线程,各线程对消息的订阅和处理相互独立,当需要各订阅者收到的消息按时序进行统一处理时,就需要寻求新的话题消息订阅和处理方法。实现当节点需要订阅多个话题时,可以将不同话题的消息按时序放入统一的消息队列,从而实现消息的顺序执行。
附图说明
图1为本发明的方法流程图;
图2为本发明的话题消息订阅流程图;
图3为本发明的话题消息处理流程图。
具体实施方式
下面结合附图1、附图2、附图3对本发明做进一步说明。
如附图1所示,一种基于IROS的话题消息订阅和处理方法,实现当节点需要订阅多个话题时,可以将不同话题的消息按时序放入统一的消息队列,从而实现消息的顺序执行。包括如下步骤:
a)建立一个IROS节点,该IROS节点包括多个订阅者Subscriber,每个订阅者Subscriber订阅一个话题Topic,利用回调函数的模式对订阅者Subscriber接收到的消息进行处理。
b)当消息处理线程见识到消息队列中存入新的消息对象时,调用该消息对象的处理函数对消息本体进行处理。
实现当节点需要订阅多个话题时,可以将不同话题的消息按时序放入统一的消息队列,从而实现消息的顺序执行。节点启动时,首先要初始化订阅线程池,线程池中为每一个订阅者分配一个独立线程和信号量,默认信号量为false,线程处于等待状态,当信号量为true时线程进行消息接收;同时初始消息队列,消息队列中存储由消息体和对应的消息处理函数组成的对象;最后创建独立的消息处理线程,监视消息队列。当节点启动完毕进行消息接收时,依次将订阅线程池中的信号量置为true,信号量为true的订阅线程查询本线程对应的话题中是否存在新消息,若存在,将消息体和处理函数封装成待处理消息对象,放入消息队列;当消息处理线程监视到消息队列中存入新的消息对象时,调用该消息对象的处理函数对消息体进行处理。
在IROS系统中,所有任务的执行都是通过信息交互的形式完成的,信息的交互的方式包括话题、服务和参数三种,所有交互都是是通过IROS通信API实现的。三种交互方式中,尤以话题应用最为广泛,IROS中默认采用多线程机制处理话题消息,每个订阅者维护一个线程,各线程对消息的订阅和处理相互独立,当需要各订阅者收到的消息按时序进行统一处理时,就需要寻求新的话题消息订阅和处理方法。
实施例1:
如附图2所示,步骤a)包括如下步骤:
a-1)建立统一的订阅线程池,启动IROS节点,在IROS节点启动时初始化订阅线程池,初始化订阅线程池时为每一个订阅者分配一个独立线程和信号量,信号量为false,线程处于等待状态,当信号量为true时独立线程进行消息接收。独立线程根据信号量变化,从相应的的监视话题中查询是否有最新的消息。当存在最新消息时,获取最新消息进行反序列化,并将反序列化后的消息实体和消息处理函数封装成待处理消息对象,放入消息队列。
a-2)初始化消息队列,等待消息压入。消息队列用来存放订阅线程从话题中查询到的最新消息和消息的处理函数,从话题获取到的字节序消息要经过反序列化函数转成消息处理函数可以识别的类型,然后将该消息类型和回调函数封装成消息对象,压入消息队列。该消息对象只能从队列尾部压入,从队列头部获取,从而保证消息处理的时序。
a-3)通过SingleThreadSpin()函数启动消息接收,依次将订阅线程池中的信号量置为true,信号量为true的订阅线程查询本线程对应的话题中是否存在新消息,如果存在,将消息和处理函数封装成待处理消息对象并放入消息队列。
该方法的实现需要节点启动时创建独立的消息处理线程,监视消息队列。当消息处理线程监视到消息队列中存入新的消息对象时,调用该消息对象的处理函数对消息体进行处理。
实施例2:
如附图3所示,步骤b)包括如下步骤:
b-1)启动IROS节点,初始化消息处理线程,该线程对消息队列进行周期性查询。
b-2)当查询到消息队列不为空时,通过front()接口,从消息队列获取头部消息对象,分析消息对象,获取消息对象的处理函数和消息本体。
b-3)调佣消息对象的处理函数对消息体进行处理。
b-4)处理完毕后,通过调用pop()接口,将该消息对象从消息队列删除。
b-5)当消息队列中还存在其它消息对象时,返回执行步骤b-2),如果不存在其它消息对象时,进入周期性查询。
该方法的实现需要注意订阅线程将消息压入消息队列时和消息处理线程将消息从消息队列删除时都要对消息队列进行锁定,从而避免数据竞争导致消息队列被破坏。
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (3)
1.一种基于IROS的话题消息订阅和处理方法,其特征在于,包括如下步骤:
a)建立一个IROS节点,该IROS节点包括多个订阅者Subscriber,每个订阅者Subscriber订阅一个话题Topic,利用回调函数的模式对订阅者Subscriber接收到的消息进行处理;
b)当消息处理线程见识到消息队列中存入新的消息对象时,调用该消息对象的处理函数对消息本体进行处理。
2.根据权利要求1所述的基于IROS的话题消息订阅和处理方法,其特征在于,步骤a)包括如下步骤:
a-1)建立统一的订阅线程池,启动IROS节点,在IROS节点启动时初始化订阅线程池,初始化订阅线程池时为每一个订阅者分配一个独立线程和信号量,信号量为false,线程处于等待状态,当信号量为true时独立线程进行消息接收;
a-2)初始化消息队列,等待消息压入;
a-3)通过SingleThreadSpin()函数启动消息接收,依次将订阅线程池中的信号量置为true,信号量为true的订阅线程查询本线程对应的话题中是否存在新消息,如果存在,将消息和处理函数封装成待处理消息对象并放入消息队列。
3.根据权利要求2所述的基于IROS的话题消息订阅和处理方法,其特征在于,步骤b)包括如下步骤:
b-1)启动IROS节点,初始化消息处理线程,该线程对消息队列进行周期性查询;
b-2)当查询到消息队列不为空时,通过front()接口,从消息队列获取头部消息对象,分析消息对象,获取消息对象的处理函数和消息本体;
b-3)调佣消息对象的处理函数对消息体进行处理;
b-4)处理完毕后,通过调用pop()接口,将该消息对象从消息队列删除;
b-5)当消息队列中还存在其它消息对象时,返回执行步骤b-2),如果不存在其它消息对象时,进入周期性查询。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211250849.5A CN115617543A (zh) | 2022-10-13 | 2022-10-13 | 一种基于iros的话题消息订阅和处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211250849.5A CN115617543A (zh) | 2022-10-13 | 2022-10-13 | 一种基于iros的话题消息订阅和处理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115617543A true CN115617543A (zh) | 2023-01-17 |
Family
ID=84862450
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211250849.5A Pending CN115617543A (zh) | 2022-10-13 | 2022-10-13 | 一种基于iros的话题消息订阅和处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115617543A (zh) |
-
2022
- 2022-10-13 CN CN202211250849.5A patent/CN115617543A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100421797B1 (ko) | 내부실행스레드관리시스템및그의방법 | |
CN105472042B (zh) | Web端控制的消息中间件系统及其数据传送方法 | |
US6557046B1 (en) | Method and system for providing an event system infrastructure | |
US8195757B2 (en) | Method, apparatus and computer program for controlling retention of publications | |
US6182119B1 (en) | Dynamically configurable filtered dispatch notification system | |
US7546613B2 (en) | Methods and systems for efficient queue propagation using a single protocol-based remote procedure call to stream a batch of messages | |
CN111212085B (zh) | 物联网平台同步调用的方法、物联网系统和网络设备 | |
US8984530B2 (en) | Queued message dispatch | |
CN106598751B (zh) | 通过事件总线分发事件的方法及系统 | |
CN107623731B (zh) | 一种任务调度方法、客户端、服务集群及系统 | |
CN108008950B (zh) | 一种用户界面更新的实现方法及装置 | |
US7640549B2 (en) | System and method for efficiently exchanging data among processes | |
CN110990142A (zh) | 并发任务处理方法、装置、计算机设备和存储介质 | |
CN112463400A (zh) | 一种基于共享内存的实时数据分发方法及装置 | |
CN111026768A (zh) | 一种可实现数据快速装载的数据同步方法和装置 | |
EP1989892A1 (en) | Communication server with a service logic execution environment | |
CN112099975A (zh) | 一种消息处理方法及系统、存储介质 | |
CN111984849A (zh) | 一种信息查询方法、装置、设备及介质 | |
CN109062650B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN114706695A (zh) | 一种适用于Android应用内的数据总线设计方法 | |
CN115617543A (zh) | 一种基于iros的话题消息订阅和处理方法 | |
CN107391274B (zh) | 离线消息的处理方法及装置 | |
CN112241418B (zh) | 分布式数据库预处理方法及代理层、系统、存储介质 | |
CN113296898B (zh) | 异步任务处理方法、装置、电子设备和存储介质 | |
CN109408248B (zh) | 一种Linux下线程间通信系统 |
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 |