[Documentation] [TitleIndex] [WordIndex

(!) Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags.

查看状态机(ROS)

Description: 本教程向你展示如何使用smach查看器,这是一种简单的工具,可以监视状态机并对状态之间的数据流进行内省。

Tutorial Level: BEGINNER

这就是你要调试运行的SMACH状态机的原因:

smach_viewer.png

SMACH查看器显示了你(子)状态机中的所有状态的图形表示、状态之间可能的转换、当前的活动状态和用户数据的当前值。SMACH查看器甚至允许你设置状态机的初始状态。本教程教你如何开始使用SMACH查看器。

创建内省服务器

SMACH容器可以提供一个调试接口(通过ROS),它允许开发人员对状态机进行充分的内省。SMACH查看器可以使用这个调试接口来可视化和与你的状态机交互。要将此调试接口添加到状态机,请在代码中添加以下行:

   1 # First you create a state machine sm
   2 # .....
   3 # Creating of state machine sm finished
   4 
   5 # Create and start the introspection server
   6 sis = smach_ros.IntrospectionServer('server_name', sm, '/SM_ROOT')
   7 sis.start()
   8 
   9 # Execute the state machine
  10 outcome = sm.execute()
  11 
  12 # Wait for ctrl-c to stop the application
  13 rospy.spin()
  14 sis.stop()

对于内省服务器的更多信息,查看API文档.

如果有任何新内容出现,smach查看器将自动遍历"sm"的子容器,并向其中每个容器添加ros挂钩。因此,你只需要将一个内省服务器连接到顶层状态机,而不是将其连接到子状态机。在实例化了内省服务器之后,它将为发布一组话题,这些话题的名称是由在构造函数上给它的服务器名追加的。在本例中,有三个话题将被发布:

前两个通过"server_name"话题,发布了关于SMACH容器服务结构和状态,其中包括频率和事件信息。第三个是通过ROS设置SMACH树的配置的话题。

"SM_ROOT"参数仅用于可视化,并强制嵌套不同的服务器。

运行SMACH查看器

在你的ROS系统中运行一个或多个内省服务器后,你可以使用以下方法启动smach查看器:

  rosrun smach_viewer smach_viewer.py

查看器将自动连接到所有运行的内省服务器。


2020-01-18 12:32