< >
Home » ROS与Python入门教程 » ROS与Python入门教程-节点初始化和关闭

ROS与Python入门教程-节点初始化和关闭

ROS与Python入门教程-节点初始化和关闭

说明

  • 本节介绍初始化Python节点和关闭节点

初始化

  • 想Python代码工作需要:
    • 配置PYTHONPATH,如果你使用其他包,需要import来导入
    • 初始化ROS节点。

配置PYTHONPATH

  • catkin包利用setup.py来配置PYTHONPATH,详细参考
  • setup.py定义要安装的包和脚本。
  • 安装的包自动添加到PYTHONPATH。
  • 需要使用source下工作空间的devel/setup.sh就可以使用
  • 通常PYTHONPATH变量内容如下:
$ echo $PYTHONPATH
/home/ubu/catkin_ws/devel/lib/python2.7/dist-packages:/opt/ros/indigo/lib/python2.7/dist-packages
  • 通常PYTHONPATH在/opt/ros/indigo/_setup_util.py定义,在setup.sh应用
  • 也可以在用户根目录下.bashrc进行设置。

初始化节点

  • 两个常用初始化方式:
rospy.init_node('my_node_name')

rospy.init_node('my_node_name', anonymous=True)
  • init_node()函数需要提供一个节点名,必须要是唯一的节点名称。
  • 如果不太关心节点的唯一性情况下,可以设置anonymous=True。
  • 函数定义:
rospy.init_node(name, anonymous=False, log_level=rospy.INFO, disable_signals=False) 
  • 参数说明:
    • anonymous=True,这样可以启动多个版本。
    • log_level=rospy.INFO,日志级别。设置默认记录到rosout的信息。
    • disable_signals=False,默认rospy注册信号处理器以便可以使用ctrl+c来退出。下面的情况下,你可以禁止:
      • 不是从python的主线程调用init_node()。python只允许主线程注册信号处理器。
      • 在wxPython或其他GUI工具运行rospy,它们有自己的退出处理。
      • 你希望默认使用自己的信号处理器。

使用命令行的参数

rospy.myargv(argv=sys.argv)
  • 返回sys.argv的副本,并过滤掉映射参数
  • 并赋值到argv数组。

关闭节点

  • 常用的关闭方式:
while not rospy.is_shutdown():
   do some work
  • ... setup callbacks
    rospy.spin()

  • 有多个方法,其中一个节点可以接收到一个关闭请求,所以重要的是,你使用上述两种方法之一,以确保您的程序正确终止。

  • Registering shutdown hooks(注册关闭钩子)

  • rospy.on_shutdown(h),当处理关闭,会调用h函数,h函数不带参数。

  • 这将在实际的关闭发生之前调用,这样您就可以安全地执行服务和参数服务器调用了。

  • 消息不保证被发布。

  • 示例:

def myhook():
  print "shutdown time!"

rospy.on_shutdown(myhook)
  • Manual shutdown (Advanced)(手工关闭,高级)

  • rospy.signal_shutdown(reason),在初始化节点,disable_signals为True时。手工处理:

rospy.signal_shutdown(reason)
  • 初始化节点关闭
  • reason 为关闭理由,字符串内容。

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros与python入门教程