smach

容器与状态

容器

状态机一般说就是一个容器, 包含了各种状态, 以及各种状态之间的轮转。
当然一个状态机容器又可以是一个状态,这就是所谓的层级、分层。

状态

状态名字一般大写
状态都需要继承smach.State, 并实现State.excute()
状态的结果在__init__(self, outcomes=[’’,’’,’’]), 列举出来, 结果一般是字符串表示

指定用户数据

状态的输入和输出数据称为userdata, 可以认为是个map结构体, 键值区分输入和输出, 定义在 input_keys, output_keys
input_keys列表列出了一个状态需要运行的所有输入. input_keys 显式声明了userdata所有字符串字段, 只能读取, 不能写入.
output_keys列表列出了一个状态提供的所有输出.

连接用户数据

不同状态转换时, 关联前后状态的输入输出, 需要使用名称映射连接用户数据字段,那么你可以将这两个用户数据端口连接在一起, 以便允许状态之间传递数据.
关键字为 remapping={‘key_before_output’:‘key_after_input’, ‘’:’’}
每个状态机容器也是一个状态。因此,你可以通过将状态机容器添加到另一个状态机容器中来搭建状态机
状态机容器的结果用红色标记
Smach附带了一个完整的预先实现的状态库,比如

  • StateMachine: 生成状态机容器
  • Concurrence: 可以并行运行多个状态的状态机
  • Sequence: 一种状态机,它使执行一组状态的顺序变得容易

smach & ros

&topic - MonitorState

&service - ServiceState

&actuib - SimpleActionState

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值