zoukankan      html  css  js  c++  java
  • SMACH专题(三)----几种State类型

      状态机提供了若干种状态,包括了Generic StateCBStateSimpleActionState (ROS)ServiceState (ROS)MonitorState (ROS)。下面分别介绍它们的用法和例子。

    一、CBState回调状态

      将一个函数封装成状态,这种状态成为回调状态。这种函数非类中的函数,而是一般的函数。下面是一个例子:

     1 #!/usr/bin/env python
     2 # license removed for brevity
     3 
     4 import rospy
     5 from std_msgs.msg import String
     6 import math
     7 import random
     8 from smach import CBState, StateMachine
     9 from smach_ros import IntrospectionServer
    10 import smach
    11 
    12 @smach.cb_interface(
    13                 output_keys=['xyz'],
    14                 outcomes=['outcome1','outcome2'])
    15 def fun_cb(ud,x0, x, y, z):
    16     '''
    17     callback function, which is called in CBState way, it seems to be used by
    18     function, but the class'funtion
    19     '''
    20     #x0 is the value of  cb_args=[10], equal to 10
    21     dist = math.sqrt(x0*x0+x*x+y*y+z*z+100*random.random())
    22     ud.xyz = dist
    23     if dist > 10:
    24         return 'outcome1'
    25     else:
    26         return 'outcome2'
    27         
    28 class Test_CbState():
    29     def __init__(self):
    30         rospy.init_node('smach_example_callback_state')
    31         self.sample_name = "cbstate"  
    32     
    33     def test(self):
    34         '''
    35         test Callback State Machine
    36         '''
    37         self.sm = StateMachine(outcomes = ['outcome3'])
    38         with self.sm:
    39             StateMachine.add('Test_CB',CBState(fun_cb,
    40                                                cb_args=[10],
    41                                                cb_kwargs={'x':1,'y':2,'z':3}),
    42                                                {'outcome1':'outcome3','outcome2':'Test_CB'})
    43         sis = IntrospectionServer('test_cb_state', self.sm, '/SM_ROOT')
    44         sis.start()
    45         
    46         self.sm.execute('Test_CB')
    47         
    48         rospy.spin()
    49         sis.stop()
    50         
    51 if __name__ == '__main__':
    52     '''
    53     main funtion
    54     '''
    55     test_sm_cbstate = Test_CbState()
    56     test_sm_cbstate.test()
    57             

      状态图,如下图所示:

      参考资料:

        [1]. CBState

  • 相关阅读:
    一些你不知道的js特性【一】
    webpack打包优化实践
    prerender-spa-plugin预渲染踩坑
    前端学习中你必须了解的几张图
    fis3打包中的一些注意事项
    js中的运算符优先级
    Vivado安装教程
    ISE14.7使用教程(一个完整工程的建立)
    如何高效的编写Verilog HDL——进阶版
    Vivado 2017封装自定义IP Core
  • 原文地址:https://www.cnblogs.com/cv-pr/p/5177225.html
Copyright © 2011-2022 走看看