00001 # Software License Agreement (BSD License) 00002 # 00003 # Copyright (c) 2012, Willow Garage, Inc. 00004 # All rights reserved. 00005 # 00006 # Redistribution and use in source and binary forms, with or without 00007 # modification, are permitted provided that the following conditions 00008 # are met: 00009 # 00010 # * Redistributions of source code must retain the above copyright 00011 # notice, this list of conditions and the following disclaimer. 00012 # * Redistributions in binary form must reproduce the above 00013 # copyright notice, this list of conditions and the following 00014 # disclaimer in the documentation and/or other materials provided 00015 # with the distribution. 00016 # * Neither the name of Willow Garage, Inc. nor the names of its 00017 # contributors may be used to endorse or promote products derived 00018 # from this software without specific prior written permission. 00019 # 00020 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00021 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00022 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 00023 # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 00024 # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 00025 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 00026 # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00027 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 00028 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00029 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 00030 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00031 # POSSIBILITY OF SUCH DAMAGE. 00032 00033 import rospy 00034 import threading 00035 00036 from json import loads, dumps 00037 00038 00039 """ Methods to interact with the param server. Values have to be passed 00040 as JSON in order to facilitate dynamically typed SRV messages """ 00041 00042 # rospy parameter server isn't thread-safe 00043 param_server_lock = threading.RLock() 00044 00045 def set_param(name, value): 00046 d = None 00047 try: 00048 d = loads(value) 00049 except ValueError: 00050 raise Exception("Due to the type flexibility of the ROS parameter server, the value argument to set_param must be a JSON-formatted string.") 00051 with param_server_lock: 00052 rospy.set_param(name, d) 00053 00054 00055 def get_param(name, default): 00056 d = None 00057 if default is not "": 00058 try: 00059 d = loads(default) 00060 except ValueError: 00061 d = default 00062 00063 with param_server_lock: 00064 value = rospy.get_param(name, d) 00065 return dumps(value) 00066 00067 def has_param(name): 00068 with param_server_lock: 00069 return rospy.has_param(name) 00070 00071 00072 def delete_param(name): 00073 with param_server_lock: 00074 if has_param(name): 00075 rospy.delete_param(name) 00076 00077 00078 def search_param(name): 00079 with param_server_lock: 00080 return rospy.search_param(name) 00081 00082 def get_param_names(): 00083 with param_server_lock: 00084 return rospy.get_param_names()