通用状态机和ROS中的SMACH状态机

状态机

状态机表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。

有限状态机是由有限的状态及其相互之间的转换构成。而状态转移则表示了当前状态到下一状态的对应关系及转移条件。有限状态机在任何时候都只能处在某一给定的状态。当接收到输入事件时,状态机产生相应的输出,同时也可能伴随着状态的转换。

有限状态机M可以形式化为一个五元组:M=(Q, ∑, δ, q0, F)。有限状态机描述了某个特定对象的所有状态以及转换过程,对象的状态转换是由事件驱动的,对象通过对事件接受的响应来改变当前状态,状态转换图是有限状态机的确切描述方法。

有限状态机包含四个要素,具体如下:

  1. 现态:指状态机当前所处的状态。
  2. 条件:又称为“事件”。当某一条件满足时,将触发响应的事件或执行相应状态的迁移。
  3. 动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,或者仍保持原状态。条件满足时,也可以不执行任何动作,直接迁移到新状态。
  4. 次态:条件满足后要转换到的状态。“次态”是相对于“现态”而言的概念,“次态”一旦被激活,就会成为新的“现态”。

如果我们作进一步的归纳,把“现态”和“次态”统一成“状态”,而忽略“动作”的话,那么状态机有两个基本且关键的要素:状态和迁移条件。
有限状态机的动作迁移图可这样表示:
在这里插入图片描述

为什么要在ROS中使用SMACH?

机器人是以微控制器作为控制核心的,微控制器内嵌程序的运行决定了机器人的动作和行为。倘若没有一个合适的框架,在进行不同应用的机器人程序开发,都需要重新设计程序框架,做大量的修改。这一直是困扰设计人员的难题之一。倘若在明确需求的基础上,将工作任务进行细分,确定各个任务之间的内在联系,在此基础上就可以使用有限状态机模型的思想来知道不同类型机器人控制程序的设计。应用有限状态机实现机器人程序设计,可以理清思路,简化设计过程。

ROS作为面向机器人的操作系统,控制程序设计支持尤为重要,为了提高代码复用,适应不同应用场景的机器人控制要求,有限状态机SMACH应运而生。SMACH提供了机器人任务控制所需的不同状态和状态机容器,使得设计人员在面对特定的机器人控制程序设计时,能够组合不同类型的状态机,不但可提高代码的复用性,同时设计也更加简单和高效。

这里需要说明的是,有限状态机和SMACH中的状态机既有联系又有区别。 在通用有限状态机模型中,事件是状态转移的触发因素,某一事件的状态转移则表示了当前状态到下一状态的对应关系和转移条件。切换到当前状态后,与该状态绑定的动作会执行,执行结束会发生状态转移。转移是指两个状态之间的关系,它又某个事件触发,然后执行特定的动作,然后转移到下一状态。而在SMACH设计中,它是用于描述具有层次结构的机器人高层复杂任务。机器人的复杂任务可以被逐层分解成可执行的子任务,然后用SMACH的状态明确定义这些可执行的子任务,状态之间通过状态转移条件关联,这样就可以用状态机的形式明确表示一个复杂的机器人任务。因此可以看出,SMACH中的状态是对机器人任务执行过程中某一子任务的描述,而状态转移则表示了当前状态到下一状态的对应关系和转移条件,因此当前状态执行结束的情形决定了状态转移方向。

文章转载自:https://blog.csdn.net/JeSuisDavid/article/details/120880348

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值