CN111176772B - 用于状态切换的方法、装置以及机器人 - Google Patents

用于状态切换的方法、装置以及机器人 Download PDF

Info

Publication number
CN111176772B
CN111176772B CN201911348853.3A CN201911348853A CN111176772B CN 111176772 B CN111176772 B CN 111176772B CN 201911348853 A CN201911348853 A CN 201911348853A CN 111176772 B CN111176772 B CN 111176772B
Authority
CN
China
Prior art keywords
state
node
state node
chain
switching
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.)
Active
Application number
CN201911348853.3A
Other languages
English (en)
Other versions
CN111176772A (zh
Inventor
窦富宾
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Anker Innovations Co Ltd
Original Assignee
Anker Innovations Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Anker Innovations Co Ltd filed Critical Anker Innovations Co Ltd
Priority to CN201911348853.3A priority Critical patent/CN111176772B/zh
Publication of CN111176772A publication Critical patent/CN111176772A/zh
Application granted granted Critical
Publication of CN111176772B publication Critical patent/CN111176772B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4498Finite state machines

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Mobile Radio Communication Systems (AREA)

Abstract

本发明公开了一种用于状态切换的方法、装置以及机器人。状态机包括树状的多个状态结点,所述多个状态结点包括第一状态结点和第二状态结点,用于状态切换的方法包括:第一状态结点向第二状态结点发出切换请求信令,其中,第一状态结点位于当前状态链上,第二状态结点为第一状态结点与目标状态结点的最近共同祖先状态结点,切换请求信令包括以下任意一个:普通切换信令、压栈切换信令、出栈切换信令;第二状态结点根据切换请求信令,从当前状态链切换至目标状态结点所在的目标状态链。由此,使得结点之间能够通过切换请求信令完成状态切换,能够支持状态的层级扩展且满足嵌套递归处理能力,进而能够应用于复杂的应用场景。

Description

用于状态切换的方法、装置以及机器人
技术领域
本发明涉及机器人领域,更具体地涉及一种用于状态切换的方法、装置以及机器人。
背景技术
机器人状态机是运行在机器人的主控芯片上的一套逻辑处理程序,用于监控机器人的各种运行状态,并结合不同的目标任务,执行各种条件检测、运动控制、状态切换等。机器人从上电开始到关机结束的整个运行生命周期中,存在着各种可能的运行状态,各个状态之间也随时会依据不同的条件或事件发生互相转换的情况。为了应对机器人在运行期间的各种复杂的运行场景,软件必须要有一个顶层的设计,即机器人状态机,来监控机器人的运行,使其不发生混乱。
一个传统状态机模型是由一个状态调度模块和一组状态实例所构成的,如图1所示,其中包括状态调度模块及状态表,且状态表包括状态实例1、状态实例2、…、状态实例N。每一个状态实例反映的是机器人的一个预设的运行场景,它主要包含如下一些要素:机器人此刻是处于什么状态,在此状态下机器人应该处理哪些业务逻辑、应该执行哪些动作、应该检查判断哪些事件或条件,下一周期应该切换到哪一个状态等。状态调度模块的主要功能是在一个时间周期内(如图1中的周期1)选择某一个状态实例(如图1中的状态实例1),并调用此状态实例的接口来执行此状态下的各种逻辑处理,同时还实现了状态之间的切换功能(如图1中从状态实例1切换到状态实例N)。
但是,此种传统状态机因为状态层次比较单一,且不便于实现状态嵌套与递归,因而无法适用于复杂的应用场景,并且对于其他版本的状态机,也存在设计比较复杂、不便维护等各种缺陷。
发明内容
本发明提供了一种用于状态切换的方法、装置以及机器人,能够适用于复杂的应用场景,例如能够进行灵活的状态多层级扩展、具备状态嵌套递归处理能力。
根据本发明的第一方面,提供了一种用于状态切换的方法,状态机包括树状的多个状态结点,所述多个状态结点包括第一状态结点和第二状态结点,所述方法包括:
所述第一状态结点向所述第二状态结点发出切换请求信令,其中,所述第一状态结点位于当前状态链上,所述第二状态结点为所述第一状态结点与目标状态结点的最近共同祖先状态结点,所述切换请求信令包括以下任意一个:普通切换信令、压栈切换信令、出栈切换信令;
所述第二状态结点根据所述切换请求信令,从所述当前状态链切换至所述目标状态结点所在的目标状态链。
在一种实现方式中,所述切换请求信令为普通切换信令,
所述第二状态结点根据所述切换请求信令,从所述当前状态链切换至所述目标状态结点所在的目标状态链,包括:
所述第二状态结点调用其可执行子结点和挂起子结点的退出方法,并由其可执行子结点和挂起子结点调用可执行孙结点和挂起孙结点的退出方法,直至调用叶子状态结点的退出方法;
所述第二状态结点调用所述目标状态结点的进入方法,并调用所述目标状态结点的子状态结点的进入方法,直至调用所述目标状态链的叶子状态结点的进入方法。
在一种实现方式中,所述切换请求信令为压栈切换信令,
所述第二状态结点根据所述切换请求信令,从所述当前状态链切换至所述目标状态结点所在的目标状态链,包括:
所述第二状态结点调用其可执行子结点的挂起方法,并由其可执行子结点调用可执行孙结点的挂起方法,直至调用叶子状态结点的挂起方法;
将所述第二状态结点的所述可执行子结点存入栈空间;
所述第二状态结点调用所述目标状态结点的进入方法,并调用所述目标状态结点的子状态结点的进入方法,直至调用所述目标状态链的叶子状态结点的进入方法。
在一种实现方式中,所述切换请求信令为出栈切换信令,
所述第二状态结点根据所述切换请求信令,从所述当前状态链切换至所述目标状态结点所在的目标状态链,包括:
所述第二状态结点调用其可执行子结点和挂起子结点的退出方法,并由其可执行子结点和挂起子结点调用可执行孙结点和挂起孙结点的退出方法,直至调用叶子状态结点的退出方法;
将位于栈空间的顶部的状态结点弹出,且所述弹出的状态结点为所述目标状态结点;
所述第二状态结点调用所述目标状态结点的恢复方法,并调用所述目标状态结点的子状态结点的恢复方法,直至调用所述目标状态链的叶子状态结点的恢复方法。
在一种实现方式中,还包括:所述第一状态结点向第三状态结点发出选择请求信令,其中所述第三状态结点是所述第二状态结点的后代结点且不是叶子结点;其中,在切换至所述目标状态链时,所述第三状态结点根据所述选择请求信令确定要调用的子结点。
在一种实现方式中,还包括:所述第一状态结点向第四状态结点发出重置请求信令,其中所述第四状态结点位于所述当前状态链上但是不位于所述目标状态链上,且不是叶子结点;其中,在切换至所述目标状态链的过程中,所述第四状态结点根据所述重置请求信令,调用其所有的子结点以及后代结点的退出方法。
在一种实现方式中,所述多个状态结点中有且只有一个根状态结点,所述第一状态结点为所述当前状态链上的叶子状态结点。
在一种实现方式中,在所述发出切换请求信令之后,还包括:从所述第一状态结点返回,直至返回根结点,以结束当前状态链的运行周期。
在一种实现方式中,所述状态机包括逻辑处理部分和数据处理部分,其中,所述逻辑处理部分包括所述多个状态结点。
在一种实现方式中,所述逻辑处理部分用于处理通常的事件处理、参量监控、状态切换;所述数据处理部分用于数据的存取、备份、同步更新以及消息传递。
在一种实现方式中,所述数据处理部分包括第一数据区域和第二数据区域,其中所述第一数据区域用于缓存来自世界模型中的数据,其中所述第二数据区域用于缓存来自所述逻辑处理部分的所述多个状态结点中的各个状态结点的数据。
在一种实现方式中,所述来自世界模型中的数据包括:事件队列、异常标记、传感器数据、机器人速度与位姿、地图、雷达数据、里程数据、路径规划、运动控制数据;所述各个状态结点的数据包括:被监控的状态参量、状态切换请求与目标、状态间的传递参数、状态执行的结果、状态生命周期标记。
根据本发明的第二方面,提供了一种用于状态切换的装置,能够实现前述第一方面或任一实现方式所述的用于状态切换的方法的步骤。
根据本发明的第三方面,提供了一种机器人,包括前述第二方面所述的装置
在一种实现方式中,该机器人为扫地机器人。
由此可见,本发明实施例中的状态机包括树状的多个状态结点,使得结点之间能够通过切换请求信令完成状态切换,能够支持状态的层级扩展且满足嵌套递归处理能力,进而能够应用于复杂的应用场景。
附图说明
通过结合附图对本发明实施例进行更详细的描述,本发明的上述以及其它目的、特征和优势将变得更加明显。附图用来提供对本发明实施例的进一步理解,并且构成说明书的一部分,与本发明实施例一起用于解释本发明,并不构成对本发明的限制。在附图中,相同的参考标号通常代表相同部件或步骤。
图1是传统状态机的一个示意图;
图2是本发明实施例的状态机的一个示意图;
图3是本发明实施例的状态切换的方法的一个示意性流程图;
图4是本发明实施例的一个运行(Run)周期的示意图;
图5是本发明实施例的普通切换(SWITCH)的一个示例;
图6是本发明实施例的进入(Enter)方法的一个示意图;
图7是本发明实施例的普通切换(SWITCH)的另一个示例;
图8是本发明实施例的普通切换(SWITCH)的再一个示例;
图9是本发明实施例的退出(Exit)方法的一个示意图;
图10是本发明实施例的重置(Reset)方法的一个示意图;
图11是本发明实施例的压栈切换(PUSH)的一个示例;
图12是本发明实施例的挂起(Suspend)方法的一个示意图;
图13是本发明实施例的压栈切换(PUSH)的另一个示例;
图14是本发明实施例的出栈切换(POP)的一个示例;
图15是本发明实施例的恢复(Resume)方法的一个示意图;
图16是本发明实施例的出栈切换(POP)的另一个示例;
图17是本发明实施例的第二状态结点处理状态切换的一个示意性过程。
具体实施方式
为了使得本发明的目的、技术方案和优点更为明显,下面将参照附图详细描述根据本发明的示例实施例。显然,所描述的实施例仅仅是本发明的一部分实施例,而不是本发明的全部实施例,应理解,本发明不受这里描述的示例实施例的限制。基于本发明中描述的本发明实施例,本领域技术人员在没有付出创造性劳动的情况下所得到的所有其它实施例都应落入本发明的保护范围之内。
本发明能够应用于智能机器人,或者可以简称为机器人,例如智能音箱、扫地机器人、自移动设备、陪伴机器人、行走机器人等等,机器人从上电开始到关机结束的整个运行生命周期中,存在着各种可能的运行状态,并且各个不同的状态之间能够进行切换。
示例性地,机器人包括处理器,该处理器上可以设置有状态机。或者,机器人的处理器上可以装载有操作系统,在该操作系统中设置有状态机。
本发明实施例中,状态机可以包括逻辑处理和数据处理两个部分(或称为两个子模块)。其中,逻辑处理部分包括树状的多个状态结点,能够用于处理日常的事件处理、参量监控、状态切换、其他控制等业务。数据处理部分能够用于数据的存取、备份、同步更新、消息传递等。
这样,本发明实施例的状态机通过将逻辑处理与数据处理进行分离,能够提高状态机的执行效率。
数据处理部分包括第一数据区域和第二数据区域。第一数据区域可以用于缓存来自世界模型中的数据,一般包括但不限于:事件队列、异常标记、传感器数据、机器人速度与位姿、地图、雷达数据、里程数据、路径规划、运动控制数据等。第二数据区域可以用于缓存来自状态机的逻辑处理部分的各个状态结点的数据,一般包括但不限于:被监控的状态参量、状态切换请求与目标、状态间的传递参数、状态执行的结果、状态生命周期标记等。
逻辑处理部分包括树状的多个状态结点,其中有且只有一个根状态结点。并且每一个状态结点可以表示一个状态类的实例,每一个状态结点均具有唯一的标识符,标识符例如为名称或ID等。每一个状态结点均可以访问数据处理部分中缓存的内容,本发明实施例将数据处理部分设计为共享模式,以方便结点之间交换数据、消息传递等。
其中,多个状态结点中,只有根状态结点对外是可见的,也就是说,外部模块只能访问根状态结点的接口,而无法访问其他状态结点的接口。
多个状态结点中,除根状态结点之外,其他的任何一个状态结点均具有兄弟状态结点,其中兄弟状态结点是指彼此具有同一个父状态结点。也就是说,对于根状态结点之外的任意一个状态结点,均能找到另外的至少一个其他状态结点与其具有相同的父状态结点。换句话说,如果某个状态结点存在子结点,那么该状态结点一定具有至少两个子结点。
参照图2,其中示出了13个状态结点,标识符如各个结点处的字母所示。根状态结点为结点O,表示最顶层的父状态,其用于实现最通用化的状态处理。状态结点A、B和C为兄弟状态结点,它们具有同一个父状态结点O。状态结点D和E为兄弟状态结点,它们具有同一个父状态结点A。状态结点F和G为兄弟状态结点,它们具有同一个父状态结点C。状态结点X、Y和Z为兄弟状态结点,它们具有同一个父状态结点F。状态结点U和V为兄弟状态结点,它们具有同一个父状态结点Z。应当注意的是,图2中的树状结构仅是示意性的,用户可以通过定义等方式增加或减少状态结点的数量并调节树状结构等,本发明对此不限定。
每一个状态结点都继承和实现一个抽象基类,将抽象基类表示为StateNode。举例来说,抽象基类的基本数据结构可以参考定义如下:
Figure BDA0002334143880000071
Figure BDA0002334143880000081
抽象基类包括能够实现以下基类接口函数的一组方法:绑定(bind)、运行(run)、普通切换(switch)、压栈(push)、出栈(pop)、进入(enter)、退出(exit)、挂起(suspend)、恢复(resume)、重置(reset)等等。示例性,可以通过下述表一所示的方法进行抽象基类中的接口定义。
表一
Figure BDA0002334143880000082
Figure BDA0002334143880000091
其中,Bind()可以将两个不同的状态结点进行绑定,且这两个状态结点的关系是父结点和子结点。互相绑定的一对状态结点可以双向查询,这样从任意状态结点出发都可以找到其他的所有状态结点。
应当注意的是,表一所示出的各个方法中,Bind、Switch、Push、Pop方法在基类中实现即可,用户的派生类中不用再实现。而Run、Enter、Exit、Suspend、Resume、Reset方法必须在用户的派生类中实现。
举例来说,针对图2,可以通过如下方式将状态结点进行关联绑定,从而得到如图2中的树状结构:
Figure BDA0002334143880000092
示例性地,也可以定义成员变量,以方便调用,如下表二所示:
表二
Figure BDA0002334143880000093
Figure BDA0002334143880000101
举例来说,可以利用string name_定义各个状态结点的唯一标识或名称,例如参照图2所列出的状态结点O至状态结点U和V。
这样,结合表二的成员变量,将状态结点进行关联绑定的基类Bind方法的参考伪码可以为:
Figure BDA0002334143880000102
类似地,结合表二的成员变量,基类Switch方法的参考伪码可以为:
Figure BDA0002334143880000103
类似地,结合表二的成员变量,基类Push方法的参考伪码可以为:
Figure BDA0002334143880000111
类似地,结合表二的成员变量,基类Pop方法的参考伪码可以为:
Figure BDA0002334143880000112
示例性地,也可以定义一些其他接口的方法,如下表三所示:
表三
Figure BDA0002334143880000113
如前所述,外部模块只能访问根状态结点,也就是说,根状态结点是整个状态机运行的主执行入口,具体地,根状态结点的Run方法是对外的主要接口。根状态结点的Run方法内部调用当前可执行子状态结点的Run方法,如果这个子状态结点不是叶子状态结点,则该子状态结点继续调用它自己的可执行子状态结点的Run方法,一直到叶子状态结点的Run方法为止,这个调用过程即构成了整个状态机运行的主脉络。其中,某一个状态结点可以通过GetCurrentChild()->Run()来调用当前的可执行子状态结点的Run方法。后面还将结合切换过程描述该调用。
应当理解的是,本发明实施例中的接口函数的定义只是示意性地,本领域技术人员可以对其进行修改或变动,也均在本发明的保护范围内。
利用本发明实施例所定义的状态机,能够实现机器人的状态切换。具体地,本发明实施例提供了一种机器人的状态切换的方法,如图3所示,该方法包括:
S110,第一状态结点向第二状态结点发出切换请求信令,其中,第一状态结点位于当前状态链上,第二状态结点为第一状态结点与目标状态结点的最近共同祖先状态结点,切换请求信令包括以下任意一个:普通切换信令、压栈切换信令、出栈切换信令;
S120,第二状态结点根据切换请求信令,从当前状态链切换至目标状态结点所在的目标状态链。
如前所述,状态机包括逻辑处理部分和数据处理部分,其中,逻辑处理部分包括树状的多个状态结点,并且多个状态结点中有且只有一个根状态结点。
具体地,逻辑处理部分可以用于处理通常的事件处理、参量监控、状态切换等;数据处理部分可以用于数据的存取、备份、同步更新以及消息传递等。数据处理部分可以包括第一数据区域和第二数据区域,其中第一数据区域用于缓存来自世界模型中的数据,其中第二数据区域用于缓存来自逻辑处理部分的多个状态结点中的各个状态结点的数据。可选地,来自世界模型中的数据包括但不限于:事件队列、异常标记、传感器数据、机器人速度与位姿、地图、雷达数据、里程数据、路径规划、运动控制数据等;各个状态结点的数据包括但不限于:被监控的状态参量、状态切换请求与目标、状态间的传递参数、状态执行的结果、状态生命周期标记等。
示例性地,第一状态结点位于当前状态链上,且其不是根状态结点。作为一例,该第一状态结点可以具有子结点;作为另一例,该第一状态结点可以为不具有子结点的叶子结点。为了描述的方便,以下实施例假设第一状态结点为叶子结点,但是本领域技术人员可理解,这种假设不构成对本发明实施例的限制。
示例性地,S110中,第一状态结点可以监控是否存在事件触发或者监控是否存在相应的状态参数变化,如果有,则根据事件触发或者根据相应的状态参数变化发出切换请求信令。其中,切换请求信令可以为普通切换信令(Switch)、压栈切换信令(Push)、出栈切换信令(Pop)之一。
本发明实施例中第一状态结点为非根状态结点,其执行监控并依据触发事件或其他触发条件来判断是否需要发出切换请求信令。如此,在状态机的一个运行(Run)周期内,开始于根状态结点(如图2中的O)的Run方法,随后,根状态结点的Run方法内部调用其当前可执行子结点的Run方法,如果该当前可执行子结点不是叶子结点,则继续调用其自己的当前可执行子结点的Run方法,直到叶子结点的Run方法为止,这样的调用过程即构成了整个状态机运行的主脉络。
如图4所示,根状态结点除了调用其当前可执行子结点的Run方法之外,还需要实现其他的逻辑处理,包括:事件的同步更新、数据的同步更新、切换请求的具体处理、事件与异常的处理、条件判断等,当所有以上工作处理完毕后,睡眠一段时间(如20毫秒),睡醒后返回到根状态结点Run方法的开头处重新执行,即根状态结点的Run方法是一个循环处理过程。
如图4所示,根状态结点之外的非叶子状态结点的Run方法除了向下调用它自己的可执行子结点的Run方法外,还要包括:切换请求的具体处理、事件处理、发出新的切换请求等,当所有以上工作处理完毕后,返回到它的父结点上下文。
如图4所示,叶子状态结点的Run方法的处理包括:事件处理、监控状态参量、发出新的切换请求等,当所有以上工作处理完毕后,返回到它的父结点上下文。
其中,对切换请求的处理过程将结合S120在下面进行详细阐述。
本发明实施例中,S110第一状态结点发出切换请求信令与S120第二状态结点处理的过程不属于同一个Run周期。具体地,参照图4,非叶子结点或叶子结点在Run方法过程中,如果发出切换请求,则退回至其父状态结点,进而可以步步退回至根状态结点,从而退出当前的Run周期,再由根状态结点重新进入下一轮的Run周期。然后,在下一轮的Run周期中,接收到切换请求的第二状态结点处理该切换请求,完成状态切换。
另外,第一状态结点发送至第二状态结点的切换请求通过数据缓存来中转,即发出切换请求的第一状态结点须要将切换请求信令和参数存入数据缓存中的数据结构中,在下一轮的Run周期里,接收切换请求的第二状态结点须从数据缓存中获取到相关切换请求后再做处理。
也就是说,S110可以理解为,第一状态结点发出切换请求信令,将该切换请求信令保存至数据缓存,且该切换请求信令对应的参数指示其是发送至第二状态结点的。相应地,S120中,第二状态结点从数据缓存读取数据,如果发现对应的参数是指向第二状态结点的,则获取该切换请求信令并处理切换请求。
作为一种实现方式,切换请求信令可以是普通切换信令。那么,S120可以包括:第二状态结点调用其可执行子结点和挂起子结点(如果有的话)的退出方法,并由其可执行子结点和挂起子结点调用可执行孙结点和挂起孙结点(如果有的话)的退出方法,直至调用叶子状态结点的退出方法;第二状态结点调用目标状态结点的进入方法,并调用目标状态结点的子状态结点的进入方法,直至调用目标状态链的叶子状态结点的进入方法。
可理解,如果第二状态结点不存在挂起子结点,则第二状态结点调用其可执行子结点的退出方法,并由其可执行子结点调用可执行孙结点和挂起孙结(如果有的话)的退出方法,直至调用叶子状态结点的退出方法。如果第二状态结点存在挂起子结点,则第二状态结点调用其可执行子结点和挂起子结点的退出方法,并由其可执行子结点和挂起子结点调用可执行孙结点和挂起孙结点(如果有的话)的退出方法,直至调用叶子状态结点的退出方法。
其中,普通切换信令表示为SWITCH(Target),其中,Target表示目标状态结点。其中,退出方法为如表一中的Exit(),进入方法为如表一中的Enter()。
具体地,如果切换请求信令为SWITCH,则第二状态结点调用其可执行和挂起的(如果有)子结点的Exit方法,再进一步向下调用下一级可执行和挂起的(如果有)子结点的Exit方法,重复相同的工作一直到叶子结点的Exit方法,从而完成从第二状态结点的当前可执行子结点及其子孙结点(包括可执行的和挂起的)的清理和重置工作。在此之后,第二状态结点再调用目标状态结点的Enter方法,再进一步向下调用下一级子结点的Enter方法,重复相同的工作一直到叶子结点,从而完成从目标状态结点到其叶子结点的一条状态链的初始化。最终实现了SWITCH操作,即退出当前状态链(或子树),跳转到目标状态链。
参照图2中的状态机举例来说,如图5所示,假设在当前Run周期的当前状态链为O→A→D,如图意图切换至O→A→E。那么D作为第一状态结点向A发出SWITCH(E),其中E为目标状态结点,第二状态结点A为D和E的最近共同祖先状态结点。其中,切换请求SWITCH(E)通过数据缓存来中转。那么在下一个Run周期中,A首先调用其当前可执行子结点(即D)的Exit方法,由于D为叶子结点,则此之后,A再调用目标状态结点(即E)的Enter方法,由于E为叶子结点,则目标状态链已经构建好,即完成了状态的切换。
可选地,在一个实施例中,S110还可以进一步包括:第一状态结点向第三状态结点发出选择请求信令,其中第三状态结点是第二状态结点的后代结点且不是叶子结点。相应地,S120中在切换至目标状态链时,第三状态结点根据选择请求信令确定要调用的子结点。可理解,第一状态结点可以向若干个第三状态结点分别发出选择请求信令,例如若干个第三状态结点依次为第二状态结点的子结点、第二状态结点的孙结点、…等。
具体地,在切换至目标状态链时,第三状态结点直接根据SELECT调用相应子结点的Enter方法。也就是说,在Enter方法的调用链上,如果存在SELECT请求,则可以选择SELECT所指定的子结点作为要调用的子结点。示例性地,Enter方法的调用链可以如图6所示,其中在本例中,图6中的本结点可以是目标状态结点。
继续参照图2中的状态机举例来说,如图7所示,假设在当前Run周期的当前状态链为O→A→E,如图意图切换至O→C→G。那么E作为第一状态结点向根状态结点O发出SWITCH(C),同时向O的子结点C发出SELECT(G),其中C为目标状态结点,第二状态结点O为E和C的最近共同祖先状态结点,第三状态结点C是第二状态结点O的子结点。其中,切换请求SWITCH(C)和选择请求SELECT(G)通过数据缓存来中转。那么在下一个Run周期中,第二状态结点O首先调用其当前可执行子结点(即A)的Exit方法,由于A不是叶子结点,A继续调用其当前可执行子结点(即E)的Exit方法,由于E是叶子结点,则此之后,第二状态结点O再调用目标状态结点(即C)的Enter方法,由于C有收到SELECT,则C直接调用SELECT指定的G的Enter方法,由于G为叶子结点,则目标状态链已经构建好,即完成了状态的切换。
结合图2的状态机再举例,如图8所示,假设在当前Run周期的当前状态链为O→C→G,如图意图切换至O→C→F→Z→U。那么G作为第一状态结点向C发出SWITCH(F),同时向C的子结点F发出SELECT(Z)以及向F的子结点Z发出SELECT(U),其中F为目标状态结点,第二状态结点C为G和F的最近共同祖先状态结点,第三状态结点包括F和Z,第三状态结点F是第二状态结点O的子结点,第三状态结点Z是第二状态结点O的孙结点。其中,切换请求SWITCH(F)和选择请求SELECT(Z)、SELECT(U)通过数据缓存来中转。那么在下一个Run周期中,第二状态结点C调用其当前可执行子结点(即G)的Exit方法,由于G是叶子结点,则此之后,第二状态结点C再调用目标状态结点(即F)的Enter方法,由于F有收到SELECT,则F直接调用SELECT指定的Z的Enter方法,由于Z有收到SELECT,则Z直接调用SELECT指定的U的Enter方法,由于U为叶子结点,则目标状态链已经构建好,即完成了状态的切换。
可选地,在一个实施例中,S110还可以进一步包括:第一状态结点向第四状态结点发出重置请求信令,其中第四状态结点位于当前状态链上但是不位于目标状态链上,且不是叶子结点。相应地,S120中在切换至目标状态链的过程中,在退出当前状态链时,第四状态结点根据重置请求信令,调用其所有的子结点以及后代结点的退出方法。
具体地,在退出当前状态链时,第四状态结点直接根据RESET,重置以其为顶点的状态子树调用相应子结点的Reset方法。也就是说,在Exit方法的调用链上,如果存在RESET请求,则可以执行Reset方法,重置以第四状态结点为顶点的状态子树,将第四状态结点以及其所有的后代结点清空。并且,一旦执行了Reset方法,则第四状态结点无需再调用其子结点的Exit方法,而是直接返回第四状态结点的父结点。示例性地,Exit方法的调用链可以如图9所示,其中在本例中,图9中的本结点可以是第二状态结点的当前可用子结点。示例性地,Reset方法的调用链可以如图10所示,其中在本例中,图10中的本结点可以是第四状态结点。
其中,如图9中所示,某个状态结点的Exit方法可以先调用当前可执行子结点的Exit()方法,如果栈空间存在挂起的子结点(即栈空间不为空),则继续调用所有挂起的子结点的Exit()方法。最后将该状态结点的栈空间清空,并重置数据缓存,可选地如果该状态结点为非叶子结点还可以恢复默认的子结点。
作为一种实现方式,切换请求信令可以是压栈切换信令。那么,S120可以包括:第二状态结点调用其可执行子结点的挂起方法,并由其可执行子结点调用可执行孙结点的挂起方法,直至调用叶子状态结点的挂起方法;将第二状态结点的可执行子结点存入栈空间;第二状态结点调用目标状态结点的进入方法,并调用目标状态结点的子状态结点的进入方法,直至调用目标状态链的叶子状态结点的进入方法。
其中,压栈切换信令表示为PUSH(Target),其中,Target表示目标状态结点。其中,挂起方法为如表一中的Suspend(),进入方法为如表一中的Enter()。
具体地,如果切换请求信令为PUSH,则第二状态结点首先调用其可执行子结点的Suspend方法,再进一步向下调用下一级可执行子结点的Suspend方法,重复相同的工作一直到叶子结点的Suspend方法,从而完成从第二状态结点的当前可执行子结点到叶子结点的一条状态链的变量保存工作。在此之后,第二状态结点将当前可执行子结点(第一状态结点,或者第二状态结点与第一状态结点之间的结点)存入栈空间,然后第二状态结点再调用目标状态结点的Enter方法,再进一步向下调用下一级子结点的Enter方法,重复相同的工作一直到叶子结点,从而完成从目标状态结点到其叶子结点的一条状态链的初始化。最终实现了PUSH操作,即挂起当前状态链,跳转到目标状态链。
参照图2中的状态机举例来说,如图11所示,假设在当前Run周期的当前状态链为O→C→F→Z→U,如图意图切换(PUSH)至O→C→F→X。那么U作为第一状态结点向F发出PUSH(X),其中X为目标状态结点,第二状态结点F为U和X的最近共同祖先状态结点。其中,切换请求PUSH(X)通过数据缓存来中转。那么在下一个Run周期中,F首先调用其当前可执行子结点(即Z)的Suspend方法,由于Z不是叶子结点,Z继续调用其当前可执行子结点(即U)的Suspend方法,由于U为叶子结点,则此之后,F将其当前可执行子结点Z存入栈空间,将链Z→U挂起(如图11中以虚线方式示出该挂起链);F再调用目标状态结点(即X)的Enter方法,由于X为叶子结点,则目标状态链已经构建好,即完成了状态的切换。示例性地,Suspend方法的调用链可以如图12所示,其中在本例中,图12中的本结点可以是第二状态结点的当前可执行子结点。
可选地,在一个实施例中,S110还可以进一步包括:第一状态结点向第三状态结点发出选择请求信令,其中第三状态结点是第二状态结点的后代结点且不是叶子结点。相应地,S120中在切换至目标状态链时,第三状态结点根据选择请求信令确定要调用的子结点。可理解,第一状态结点可以向若干个第三状态结点分别发出选择请求信令,例如若干个第三状态结点依次为第二状态结点的子结点、第二状态结点的孙结点、…等。
具体地,在切换至目标状态链时,第三状态结点直接根据SELECT调用相应子结点的Enter方法。也就是说,在Enter方法的调用链上,如果存在SELECT请求,则可以选择SELECT所指定的子结点作为要调用的子结点。示例性地,Enter方法的调用链可以如图6所示,其中在本例中,图6中的本结点可以是目标状态结点。
继续参照图2中的状态机举例来说,如图13所示,假设在图11之后,在当前Run周期的当前状态链为O→C→F→X,如图意图切换(PUSH)至O→A→E。那么X作为第一状态结点向根状态结点O发出PUSH(A),同时向O的子结点A发出SELECT(E),其中A为目标状态结点,第二状态结点O为X和E的最近共同祖先状态结点,第三状态结点A是第二状态结点O的子结点。其中,切换请求PUSH(A)和选择请求SELECT(E)通过数据缓存来中转。那么在下一个Run周期中,第二状态结点O首先调用其当前可执行子结点(即C)的Suspend方法,由于C不是叶子结点,C继续调用其当前可执行子结点(即F)的Suspend方法,由于F不是叶子结点,F继续调用其当前可执行子结点(即X)的Suspend方法,由于X为叶子结点,则此之后,O将其当前可执行子结点C存入栈空间,将链C→F→X挂起(如图13中以虚线方式示出该挂起链);则此之后,第二状态结点O再调用目标状态结点(即A)的Enter方法,由于A有收到SELECT,则A直接调用SELECT指定的E的Enter方法,由于E为叶子结点,则目标状态链已经构建好,即完成了状态的切换。应当注意的是,在图11和图13之后,栈空间中存有两个状态链,分别为Z→U和C→F→X,并且后被挂起的状态链C→F→X位于栈空间的顶部。
作为一种实现方式,切换请求信令可以是出栈切换信令。那么,S120可以包括:第二状态结点调用其可执行子结点和挂起子结点(如果有的话)的退出方法,并由其可执行子结点和挂起子结点调用可执行孙结点和挂起孙结点(如果有的话)的退出方法,直至调用叶子状态结点的退出方法;将位于栈空间的顶部的状态结点弹出,且弹出的状态结点为目标状态结点;第二状态结点调用目标状态结点的恢复方法,并调用目标状态结点的子状态结点的恢复方法,直至调用目标状态链的叶子状态结点的恢复方法。
其中,出栈切换信令表示为POP。其中,退出方法为如表一中的Exit(),恢复方法为如表一中的Resume()。
具体地,如果切换请求信令为POP,则第二状态结点调用其可执行和挂起的(如果有)子结点的Exit方法,再进一步向下调用下一级可执行和挂起的(如果有)子结点的Exit方法,重复相同的工作一直到叶子结点的Exit方法,从而完成从第二状态结点的当前可执行子结点及其子孙结点(包括可执行的和挂起的)的清理和重置工作。在此之后,然后第二状态结点将位于栈空间的顶部的子状态结点弹出,再调用该弹出的状态结点的Resume方法,再进一步向下调用下一级子结点的Resume方法,重复相同的工作一直到叶子结点,从而完成从该弹出的状态结点到其叶子结点的一条状态链的状态恢复。最终实现了POP操作,即退出当前状态链,恢复到栈空间中的历史状态链。
参照图2中的状态机举例来说,如图14所示,假设在图13之后,在当前Run周期的当前状态链为O→A→E,如图意图恢复至上一状态链O→C→F→X。那么E作为第一状态结点向O发出POP,第二状态结点O为E和栈空间顶部的状态结点C的最近共同祖先状态结点。其中,切换请求POP通过数据缓存来中转。那么在下一个Run周期中,O调用其当前可执行子结点(即A)的Exit方法,由于A不是叶子结点,A继续调用其当前可执行子结点(即E)的Exit方法,由于E是叶子结点,在此之后,O弹出栈空间顶部的状态结点C,调用C的Resume方法,由于C不是叶子结点,C继续调用栈空间中其子结点(即F)的Resume方法,由于F不是叶子结点,F继续调用栈空间中其子结点(即X)的Resume方法,由于X为叶子结点,则栈空间中的历史状态链已经恢复,即完成了状态的切换。示例性地,Resume方法的调用链可以如图15所示,其中在本例中,图15中的本结点可以是第二状态结点。
这样,在图14之后,栈空间中存储的状态链只剩Z→U。再举例来说,如图16所示,在图14之后,在当前Run周期的当前状态链为O→C→F→X,如图意图恢复至上一状态链O→C→F→Z→U。那么X作为第一状态结点向F发出POP,第二状态结点F为X和栈空间顶部的状态结点Z的最近共同祖先状态结点。其中,切换请求POP通过数据缓存来中转。那么在下一个Run周期中,F调用其当前可执行子结点(即X)的Exit方法,由于X是叶子结点,在此之后,F弹出栈空间顶部的状态结点Z,调用Z的Resume方法,由于Z不是叶子结点,Z继续调用栈空间中其子结点(即U)的Resume方法,由于U为叶子结点,则栈空间中的历史状态链已经恢复,即完成了状态的切换。
可选地,在一个实施例中,S110还可以进一步包括:第一状态结点向第四状态结点发出重置请求信令,其中第四状态结点位于当前状态链上但是不位于目标状态链上,且不是叶子结点。相应地,S120中在切换至目标状态链的过程中,在退出当前状态链时,第四状态结点根据重置请求信令,调用其所有的子结点以及后代结点的退出方法。
具体地,在退出当前状态链时,第四状态结点直接根据RESET,重置以其为顶点的状态子树调用相应子结点的Reset方法。也就是说,在Exit方法的调用链上,如果存在RESET请求,则可以执行Reset方法,重置以第四状态结点为顶点的状态子树,将第四状态结点以及其所有的后代结点清空。并且,一旦执行了Reset方法,则第四状态结点无需再调用其子结点的Exit方法,而是直接返回第四状态结点的父结点。可理解,在根据POP恢复历史状态链时,对当前状态链的退出过程类似于上述根据SWITCH退出当前状态链的过程,这里不再赘述。
这样,如图3所示的本发明实施例的状态切换的过程,由第二状态结点执行状态切换(也称为状态变更)时,其示意性过程可以如图17所示,具体地针对不同类型的切换请求信令,执行不同的表一中的方法,以完成状态切换。
在上面结合图3所描述的状态切换的过程中,所发出的切换请求信令可以为SWITCH或PUSH或POP。可选地还可以包括SELECT和/或RESET,关于信令的具体定义可以如下表四所示。
表四
Figure BDA0002334143880000211
由此可见,通过本发明实施例的状态机的架构设计,能够实现高效运行、分级处理和递归切换。
具体地,本发明实施例的状态机通过将数据处理和逻辑处理分离的设计模式,增加缓存机制,避免了数据的重复拷贝过程,可以大大加快状态机的处理速度,从而提高运行效率。
具体地,本发明实施例的状态机通过状态链的父子调用关系,让每一个层级的状态在一个周期里面都有机会执行,这样的处理方式可以应对复杂的应用场景,理论上这个状态机模型可以灵活地扩展成为任意多的层级。
具体地,切换请求信令可以为PUSH或POP,使得状态链可以被中断多次,并能完全地恢复到最初的状态链上,例如图11、图13、图14、图16的多次状态切换之后恢复至图11的最初状态链,这样的处理方式具有强大的嵌套递归处理能力,可以应对复杂的应用场景。
示例性地,本发明实施例还提供了一种用于状态切换的装置,该装置能够实现前述图3所示的用于状态切换的方法,为避免重复,这里不再赘述。
示例性地,该装置可以包括处理器,处理器可以用于执行:第一状态结点向第二状态结点发出切换请求信令,其中,第一状态结点位于当前状态链上,第二状态结点为第一状态结点与目标状态结点的最近共同祖先状态结点,切换请求信令包括以下任意一个:普通切换信令、压栈切换信令、出栈切换信令;第二状态结点根据切换请求信令,从当前状态链切换至目标状态结点所在的目标状态链。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
另外,本发明实施例还提供了一种机器人,该机器人可以包括用于状态切换的装置,且该装置能够实现前述图3所示的用于状态切换的方法。
示例性地,机器人包括处理器,且该处理器包括用于状态切换的装置。示例性地,机器人可以为扫地机器人、智能音箱、自移动设备、陪伴机器人、行走机器人等。
另外,本发明实施例还提供了一种计算机存储介质,其上存储有计算机程序。当所述计算机程序由处理器执行时,可以实现前述图3所示的用于状态切换的方法的步骤。例如,该计算机存储介质为计算机可读存储介质。
在一个实施例中,所述计算机程序指令在被计算机或处理器运行时使计算机或处理器执行以下步骤:第一状态结点向第二状态结点发出切换请求信令,其中,第一状态结点位于当前状态链上,第二状态结点为第一状态结点与目标状态结点的最近共同祖先状态结点,切换请求信令包括以下任意一个:普通切换信令、压栈切换信令、出栈切换信令;第二状态结点根据切换请求信令,从当前状态链切换至目标状态结点所在的目标状态链。
计算机存储介质例如可以包括智能电话的存储卡、平板电脑的存储部件、个人计算机的硬盘、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器、或者上述存储介质的任意组合。计算机可读存储介质可以是一个或多个计算机可读存储介质的任意组合。
另外,本发明实施例还提供了一种计算机程序产品,其包含指令,当该指令被计算机所执行时,使得计算机执行上述图3中任一所示的用于状态切换的方法的步骤。
由此可见,通过本发明实施例的状态机的架构设计,能够实现高效运行、分级处理和递归切换。具体地,本发明实施例的状态机通过将数据处理和逻辑处理分离的设计模式,增加缓存机制,避免了数据的重复拷贝过程,可以大大加快状态机的处理速度,从而提高运行效率。具体地,本发明实施例的状态机通过状态链的父子调用关系,让每一个层级的状态在一个周期里面都有机会执行,这样的处理方式可以应对复杂的应用场景,理论上这个状态机模型可以灵活地扩展成为任意多的层级。具体地,切换请求信令可以为PUSH或POP,使得状态链可以被中断多次,并能完全地恢复到最初的状态链上,这样的处理方式具有强大的嵌套递归处理能力,可以应对复杂的应用场景。
尽管这里已经参考附图描述了示例实施例,应理解上述示例实施例仅仅是示例性的,并且不意图将本发明的范围限制于此。本领域普通技术人员可以在其中进行各种改变和修改,而不偏离本发明的范围和精神。所有这些改变和修改意在被包括在所附权利要求所要求的本发明的范围之内。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个设备,或一些特征可以忽略,或不执行。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本发明并帮助理解各个发明方面中的一个或多个,在对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该本发明的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如相应的权利要求书所反映的那样,其发明点在于可以用少于某个公开的单个实施例的所有特征的特征来解决相应的技术问题。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域的技术人员可以理解,除了特征之间相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(Digital Signal Processing,DSP)来实现根据本发明实施例的物品分析设备中的一些模块的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
以上所述,仅为本发明的具体实施方式或对具体实施方式的说明,本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。本发明的保护范围应以权利要求的保护范围为准。

Claims (14)

1.一种用于状态切换的方法,其特征在于,状态机包括树状的多个状态结点,所述多个状态结点中有且只有一个根状态结点,所述多个状态结点包括第一状态结点和第二状态结点,且所述第一状态结点不是根状态结点,所述方法包括:
所述第一状态结点向所述第二状态结点发出切换请求信令,其中,所述第一状态结点位于从所述根状态结点到所述第一状态结点的当前状态链上,所述第二状态结点为所述第一状态结点与目标状态结点的最近共同祖先状态结点,所述切换请求信令包括以下任意一个:普通切换信令、压栈切换信令、出栈切换信令;
所述第二状态结点根据所述切换请求信令,从所述当前状态链切换至所述目标状态结点所在的从所述根状态结点到所述目标状态结点的目标状态链。
2.根据权利要求1所述的方法,其特征在于,所述切换请求信令为普通切换信令,
所述第二状态结点根据所述切换请求信令,从所述当前状态链切换至所述目标状态结点所在的目标状态链,包括:
所述第二状态结点调用其可执行子结点和挂起子结点的退出方法,并由其可执行子结点和挂起子结点调用可执行孙结点和挂起孙结点的退出方法,直至调用叶子状态结点的退出方法;
所述第二状态结点调用所述目标状态结点的进入方法,并调用所述目标状态结点的子状态结点的进入方法,直至调用所述目标状态链的叶子状态结点的进入方法。
3.根据权利要求1所述的方法,其特征在于,所述切换请求信令为压栈切换信令,
所述第二状态结点根据所述切换请求信令,从所述当前状态链切换至所述目标状态结点所在的目标状态链,包括:
所述第二状态结点调用其可执行子结点的挂起方法,并由其可执行子结点调用可执行孙结点的挂起方法,直至调用叶子状态结点的挂起方法;
将所述第二状态结点的所述可执行子结点存入栈空间;
所述第二状态结点调用所述目标状态结点的进入方法,并调用所述目标状态结点的子状态结点的进入方法,直至调用所述目标状态链的叶子状态结点的进入方法。
4.根据权利要求1所述的方法,其特征在于,所述切换请求信令为出栈切换信令,
所述第二状态结点根据所述切换请求信令,从所述当前状态链切换至所述目标状态结点所在的目标状态链,包括:
所述第二状态结点调用其可执行子结点和挂起子结点的退出方法,并由其可执行子结点和挂起子结点调用可执行孙结点和挂起孙结点的退出方法,直至调用叶子状态结点的退出方法;
将位于栈空间的顶部的状态结点弹出,且所述弹出的状态结点为所述目标状态结点;
所述第二状态结点调用所述目标状态结点的恢复方法,并调用所述目标状态结点的子状态结点的恢复方法,直至调用所述目标状态链的叶子状态结点的恢复方法。
5.根据权利要求2或3所述的方法,其特征在于,还包括:
所述第一状态结点向第三状态结点发出选择请求信令,其中所述第三状态结点是所述第二状态结点的后代结点且不是叶子结点;
其中,在切换至所述目标状态链时,所述第三状态结点根据所述选择请求信令确定要调用的子结点。
6.根据权利要求2或4所述的方法,其特征在于,还包括:
所述第一状态结点向第四状态结点发出重置请求信令,其中所述第四状态结点位于所述当前状态链上但是不位于所述目标状态链上,且不是叶子结点;
其中,在切换至所述目标状态链的过程中,所述第四状态结点根据所述重置请求信令,调用其所有的子结点以及后代结点的退出方法。
7.根据权利要求1所述的方法,其特征在于,所述第一状态结点为所述当前状态链上的叶子状态结点。
8.根据权利要求1所述的方法,其特征在于,在所述发出切换请求信令之后,还包括:
从所述第一状态结点返回,直至返回根结点,以结束当前状态链的运行周期。
9.根据权利要求1所述的方法,其特征在于,所述状态机包括逻辑处理部分和数据处理部分,其中,所述逻辑处理部分包括所述多个状态结点。
10.根据权利要求9所述的方法,其特征在于,
所述逻辑处理部分用于处理通常的事件处理、参量监控、状态切换;
所述数据处理部分用于数据的存取、备份、同步更新以及消息传递。
11.根据权利要求10所述的方法,其特征在于,所述数据处理部分包括第一数据区域和第二数据区域,其中所述第一数据区域用于缓存来自世界模型中的数据,其中所述第二数据区域用于缓存来自所述逻辑处理部分的所述各个状态结点的数据。
12.根据权利要求11所述的方法,其特征在于,
所述来自世界模型中的数据包括:事件队列、异常标记、传感器数据、机器人速度与位姿、地图、雷达数据、里程数据、路径规划、运动控制数据;
所述各个状态结点的数据包括:被监控的状态参量、状态切换请求与目标、状态间的传递参数、状态执行的结果、状态生命周期标记。
13.一种用于状态切换的装置,其特征在于,所述装置用于实现权利要求1至12中任一项所述的方法。
14.一种机器人,其特征在于,所述机器人包括存储器和处理器,所述处理器包括如权利要求13所述的装置。
CN201911348853.3A 2019-12-24 2019-12-24 用于状态切换的方法、装置以及机器人 Active CN111176772B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911348853.3A CN111176772B (zh) 2019-12-24 2019-12-24 用于状态切换的方法、装置以及机器人

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911348853.3A CN111176772B (zh) 2019-12-24 2019-12-24 用于状态切换的方法、装置以及机器人

Publications (2)

Publication Number Publication Date
CN111176772A CN111176772A (zh) 2020-05-19
CN111176772B true CN111176772B (zh) 2022-07-01

Family

ID=70657941

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911348853.3A Active CN111176772B (zh) 2019-12-24 2019-12-24 用于状态切换的方法、装置以及机器人

Country Status (1)

Country Link
CN (1) CN111176772B (zh)

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2003065191A2 (en) * 2002-02-01 2003-08-07 Concepts Egeria Inc. Method and apparatus for designing, rendering and programming a user interface
CN101251855A (zh) * 2008-03-27 2008-08-27 腾讯科技(深圳)有限公司 一种互联网网页清洗方法、系统及设备
CN101673198A (zh) * 2009-03-06 2010-03-17 华东师范大学 一种验证uml模型中动态行为与时序契约的一致性的方法
CN101771670A (zh) * 2008-12-30 2010-07-07 北京天融信网络安全技术有限公司 多核下子连接并发识别与处理的方法
CN105808265A (zh) * 2016-03-15 2016-07-27 北京神舟智汇科技有限公司 一种行为模型生成方法及系统
CN106528157A (zh) * 2016-11-17 2017-03-22 中山大学 一种基于scxml标准的状态机工作流引擎
CN106990994A (zh) * 2017-03-06 2017-07-28 王铭鑫 树形原子状态机及其控制逻辑接口的实现方法及装置
CN109725916A (zh) * 2017-10-31 2019-05-07 北京国双科技有限公司 流处理的拓扑结构更新系统和方法
CN110580734A (zh) * 2019-09-12 2019-12-17 浙江科澜信息技术有限公司 一种三维场景渲染方法、装置、设备及可读存储介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8489537B2 (en) * 2009-01-26 2013-07-16 Microsoft Corporation Segmenting sequential data with a finite state machine

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2003065191A2 (en) * 2002-02-01 2003-08-07 Concepts Egeria Inc. Method and apparatus for designing, rendering and programming a user interface
CN101251855A (zh) * 2008-03-27 2008-08-27 腾讯科技(深圳)有限公司 一种互联网网页清洗方法、系统及设备
CN101771670A (zh) * 2008-12-30 2010-07-07 北京天融信网络安全技术有限公司 多核下子连接并发识别与处理的方法
CN101673198A (zh) * 2009-03-06 2010-03-17 华东师范大学 一种验证uml模型中动态行为与时序契约的一致性的方法
CN105808265A (zh) * 2016-03-15 2016-07-27 北京神舟智汇科技有限公司 一种行为模型生成方法及系统
CN106528157A (zh) * 2016-11-17 2017-03-22 中山大学 一种基于scxml标准的状态机工作流引擎
CN106990994A (zh) * 2017-03-06 2017-07-28 王铭鑫 树形原子状态机及其控制逻辑接口的实现方法及装置
CN109725916A (zh) * 2017-10-31 2019-05-07 北京国双科技有限公司 流处理的拓扑结构更新系统和方法
CN110580734A (zh) * 2019-09-12 2019-12-17 浙江科澜信息技术有限公司 一种三维场景渲染方法、装置、设备及可读存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
层次状态机在嵌入式用户界面中的应用研究;刘晋;《微计算机应用》;20081115;第29卷(第11期);第91-94页 *

Also Published As

Publication number Publication date
CN111176772A (zh) 2020-05-19

Similar Documents

Publication Publication Date Title
CN109923523B (zh) 计算机系统及用于计算机系统的方法
CN109445802B (zh) 基于容器的私有化Paas平台及其发布应用的方法
CN109819179A (zh) 一种视频剪辑方法和装置
CN100375034C (zh) 在计算机系统中用于对进程进行休眠的方法和系统
CN103765387B (zh) 便携式计算装置中的分布式资源管理
US20120197944A1 (en) System and method for determining an object's lifetime in an object oriented environment
KR101276200B1 (ko) Emf 모델의 동기화 방법 및 시스템
JP2009532758A (ja) ワークフローにおいて継続をモデル化するフレームワーク
CN103530898B (zh) 一种基于3d实时渲染的动画处理方法和系统
CN102103497A (zh) 有限状态机执行装置和方法、在应用中的建立和使用方法
CN112099800B (zh) 代码数据的处理方法、装置和服务器
CN101937372A (zh) 异常处理的方法及装置
CN109189374A (zh) 基于对象引用链的对象构造代码生成方法及系统
CN111443957B (zh) 针对应用卡顿的处理方法、装置和电子设备
CN108345644A (zh) 一种数据处理的方法及装置
CN111176772B (zh) 用于状态切换的方法、装置以及机器人
CN113032119A (zh) 一种任务调度方法、装置、存储介质及电子设备
CN106406997B (zh) 一种定时器调度方法和装置
WO2020248512A1 (zh) 一种构造终端应用行为的运行时模型的方法
CA2600504C (en) Container-level transaction management system and method therefor
JPH0628193A (ja) オブジェクト指向ソフトウエアシステムにおける方法及びシステム
WO2022140880A1 (zh) 有限状态机的控制方法、装置、计算机设备和存储介质
CN111985740A (zh) 任务处理方法与装置
EP1594060A1 (en) Web application for supporting transaction processing
CN111897629B (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