Package rosh
[frames] | no frames]

Source Code for Package rosh

  1  #!/usr/bin/env python 
  2  # Software License Agreement (BSD License) 
  3  # 
  4  # Copyright (c) 2010, Willow Garage, Inc. 
  5  # All rights reserved. 
  6  # 
  7  # Redistribution and use in source and binary forms, with or without 
  8  # modification, are permitted provided that the following conditions 
  9  # are met: 
 10  # 
 11  #  * Redistributions of source code must retain the above copyright 
 12  #    notice, this list of conditions and the following disclaimer. 
 13  #  * Redistributions in binary form must reproduce the above 
 14  #    copyright notice, this list of conditions and the following 
 15  #    disclaimer in the documentation and/or other materials provided 
 16  #    with the distribution. 
 17  #  * Neither the name of Willow Garage, Inc. nor the names of its 
 18  #    contributors may be used to endorse or promote products derived 
 19  #    from this software without specific prior written permission. 
 20  # 
 21  # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
 22  # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
 23  # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
 24  # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
 25  # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
 26  # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
 27  # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
 28  # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
 29  # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
 30  # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
 31  # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
 32  # POSSIBILITY OF SUCH DAMAGE. 
 33  # 
 34  # Revision $Id: __init__.py 11676 2010-10-22 02:06:13Z kwc $ 
 35  """ 
 36  ROS Shell (rosh). 
 37   
 38  Higher-level, interactive scripting environment for ROS. 
 39  """ 
 40   
 41  from __future__ import with_statement 
 42  import roslib; roslib.load_manifest('rosh') 
 43   
 44  import os 
 45  import sys 
 46   
 47  import roslib.packages 
 48  import roslib.rosenv 
 49   
 50  # declare shell globals 
 51   
 52  # These are initialized by rosh.impl.ros_graph but declared here due 
 53  # to get_*() accessors 
 54  nodes = topics = services = parameters = msg = srv = None 
 55   
 56  # - by default, all publishers latch 
 57  latching = True 
 58   
 59  import rosh.plugin 
 60  import rosh.impl.ros_packages 
 61  import rosh.impl.ros_graph 
 62  import rosh.impl.ipy 
 63  import rosh.impl.namespace 
 64   
 65  from rosh.impl.namespace import rostype, info 
 66  from rosh.impl.show import show 
 67  from rosh.impl.props import props 
 68   
 69  # NOTE: this shadows the rosparam module. Is this an issue? 
 70  from rosh.impl.param import rosparam, rosparam_str 
 71   
 72  # client symbols 
 73  from rosh.impl.exceptions import ROSHException 
 74  from rosh.impl.library import findros 
 75  from rosh.impl.bagy import Bagy, MapBagy 
 76  from rosh.impl.bag import Bag 
 77   
 78  from rosh.impl.service import Service 
 79  # from roslaunch.core import Node 
 80   
81 -def kill(obj):
82 if hasattr(obj, '_kill'): 83 obj._kill() 84 elif type(obj) in (list, tuple): 85 for x in obj: 86 kill(x) 87 else: 88 raise ValueError("Not a kill-able object")
89
90 -def load(name, globals_=None):
91 """ 92 Load plugin. This loads the plugin into the rosh global symbol 93 table. If globals_ is specified, plugin symbols will also be 94 loaded into the provided dictionary. Common usage is:: 95 96 load_plugin('plugin_name', globals()) 97 98 @param globals_: global symbol table to additionally load plugin to. 99 @type globals_: dict 100 """ 101 rosh.plugin.load_plugin(name, _plugin_context, globals_)
102 103 _plugin_context = None
104 -def get_default_plugin_context():
105 return _plugin_context
106
107 -def ok():
108 """ 109 @return: True if ok to keep executing, False if script should exit. 110 """ 111 return rosh.impl.ros_graph.ok()
112
113 -def rosh_init():
114 # context is the heart of the rosh namespace logic 115 global _ctx, _rosh_lock 116 117 _ctx = rosh.impl.namespace.Context() 118 119 import threading 120 _rosh_lock = threading.RLock() 121 122 # plugin context is the loading mechanism for ROSH plugins 123 global _plugin_context 124 _plugin_context = rosh.plugin.PluginContext(globals(), _ctx, _rosh_lock) 125 126 # load symbols for ROS packages layer 127 rosh.impl.ros_packages.load_rosh_plugin('rosh.impl.ros_packages', _plugin_context) 128 129 # load symbols for ROS graph layer. Note: graph layer and package 130 # layer are coupled by both msg/srv and roslaunch, which makes 131 # separating rosh less than useful right now. 132 rosh.impl.ros_graph.load_rosh_plugin('rosh.impl.ros_graph', _plugin_context) 133 134 # initialize IPython Magic 135 rosh.impl.ipy.ipy_magic_init()
136 137 # initialize privates 138 139 # lock for member/global initialization 140 _rosh_lock = None 141 # ROSH shared context 142 ctx = None 143