smach(二)

2023-11-04 07:30
文章标签 smach

本文主要是介绍smach(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://wiki.ros.org/smach/Tutorials/User%20Data

两个状态之间通过数据交流的方式进行状态转移。

#!/usr/bin/env pythonimport rospy
import smach
import smach_ros# define state Foo
class Foo(smach.State):def __init__(self):smach.State.__init__(self, outcomes=['outcome1','outcome2'],input_keys=['foo_counter_in'],output_keys=['foo_counter_out'])def execute(self, userdata):rospy.loginfo('Executing state FOO')if userdata.foo_counter_in < 3:userdata.foo_counter_out = userdata.foo_counter_in + 1return 'outcome1'else:return 'outcome2'# define state Bar
class Bar(smach.State):def __init__(self):smach.State.__init__(self, outcomes=['outcome1'],input_keys=['bar_counter_in'])def execute(self, userdata):rospy.loginfo('Executing state BAR')rospy.loginfo('Counter = %f'%userdata.bar_counter_in)        return 'outcome1'def main():rospy.init_node('smach_example_state_machine')# Create a SMACH state machinesm = smach.StateMachine(outcomes=['outcome4'])sm.userdata.sm_counter = 0# Open the containerwith sm:# Add states to the containersmach.StateMachine.add('FOO', Foo(), transitions={'outcome1':'BAR', 'outcome2':'outcome4'},remapping={'foo_counter_in':'sm_counter', 'foo_counter_out':'sm_counter'})smach.StateMachine.add('BAR', Bar(), transitions={'outcome1':'FOO'},remapping={'bar_counter_in':'sm_counter'})# Execute SMACH planoutcome = sm.execute()if __name__ == '__main__':main()

 

user_data.png

 

这篇关于smach(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/344215

相关文章

基于smach的状态机设计【1】

smach是ros中的一种状态机的功能包,这里面我们将来深入认识一下这个状态机的运行和各种动作的设计过程。 安装samch的相关内容: sudo apt install ros-noetic-executive-smach* 首先我们来看一下官方的例子 去git所有的源码来: git clone https://github.com/lizhiwei0304/ROS_SMACH_TUTOR

ROS smach-----状态之间传递用户数据

1 定义用户数据     有时可能需要给某个状态提供一些输入数据,而且该状态也可能需要输出一些数据给其它状态使用。这些输入和输出数据可以称为userdata 。 class Foo(smach.State):def __init__(self, outcomes=['outcome1', 'outcome2'],input_keys=['foo_input'],output_keys=['

ROS Smach-----状态创建和添加

Smach是状态机的意思,是基于python实现的一个功能强大且易于扩展的库。 smach本质上并不依赖于ROS,可以用于任意python项目,不过在ROS中功能包集executive_smach将smach和ROS很好的集成在了一起,该功能包集还集成了actionlib和smach_viewer(用于可视监控状态机变化,不过目前对于Kinetic版本还没有支持)。     本文主要叙

ROS smach-----创建层级状态机

1 创建几个状态 # State Fooclass Foo(smach.State):def __init__(self, outcomes=['outcome1', 'outcome2'])def execute(self, userdata):return 'outcome1'# State Barclass Bar(smach.State):def __init__(self, out

SMACH专题(二)----Concurrent状态机

Concurrent状态机是一种同时执行多个状态的状态机。如下图所示。状态FOO和BAR同时执行,当两个状态输出的结果同时满足一个组合条件时(FOO输出outcome2,BAR输出outcome1)才会映射到状态CON的输出结果outcome4。 1、简单例子 具体地,实现代码如下: #!/usr/bin/env pythonimport roslib; roslib.load_manife

ros_demo系列——smach

ros_demo系列——smach 此文章用来记录在学习roswiki上smach剩下的坑,后续有机会解决并修改。另外smach是一个功能强大且可扩展的基于python的分层状态机库,其不依赖ros,但是executive_smach提供了很好的ros支持,包括actionlib与Smach viewer 的整合,为机器人任务级的决策的提供了一个比较好的开发工具。 参考资料: http