37 Top-level library routines we expose to the end-user
40 from __future__
import with_statement
42 from builtins
import int
45 import roslib.packages
52 Find ROS resource inside of a package.
54 @param pkg: ROS package name
56 @param resource: resource filename
59 val = roslib.packages.find_resource(pkg, resource)
63 raise rospy.ROSException(
"cannot find resource")
67 def __init__(self, filename):
68 self.filename = filename
69 self._fp = open(filename,
'w')
71 def append(self, msg):
75 if self._fp
is not None:
81 if isinstance(obj, roslib.message.Message):
90 Load single message from YAML dictionary representation.
92 @param type_: Message class
93 @type type_: class (Message subclass)
94 @param filename: Name of YAML file
98 if yaml_str.strip() ==
'':
101 msg_dict = yaml.load(yaml_str)
102 if not isinstance(msg_dict, dict):
104 raise ValueError(
"yaml file [%s] does not contain a dictionary" % filename)
106 raise ValueError(
"yaml string does not contain a dictionary")
108 roslib.message.fill_message_args(m, [msg_dict])
114 Load single message from YAML dictionary representation.
116 @param type_: Message class
117 @type type_: class (Message subclass)
118 @param filename: Name of YAML file
121 with open(filename,
'r')
as f:
127 Load messages from YAML list-of-dictionaries representation.
129 @param type_: Message class
130 @type type_: class (Message subclass)
131 @param filename: Name of YAML file
135 yaml_doc = yaml.load(yaml_str)
137 for msg_dict
in yaml_doc:
138 if not isinstance(msg_dict, dict):
140 raise ValueError(
"yaml file [%s] does not contain a list of dictionaries" % filename)
142 raise ValueError(
"yaml string does not contain a list of dictionaries")
144 roslib.message.fill_message_args(m, msg_dict)
151 Load messages from YAML list-of-dictionaries representation.
153 @param type_: Message class
154 @type type_: class (Message subclass)
155 @param filename: Name of YAML file
158 with open(filename,
'r')
as f:
164 convert value to YAML representation
165 @param val: to convert to string representation. Most likely a Message.
167 @param indent: indentation
169 @param time_offset: if not None, time fields will be displayed
170 as deltas from time_offset
171 @type time_offset: Time
173 if type(msg)
in [int, float, str, bool]:
176 elif isinstance(msg, rospy.Time)
or isinstance(msg, rospy.Duration):
177 if time_offset
is not None and isinstance(msg, rospy.Time):
178 msg = msg-time_offset
180 return '\n%ssecs: %s\n%snsecs: %s' % (indent, msg.secs, indent, msg.nsecs)
182 elif type(msg)
in [list, tuple]:
185 return str(list(msg))
187 if type(msg0)
in [int, float, str, bool]
or \
188 isinstance(msg0, rospy.Time)
or isinstance(msg0, rospy.Duration)
or \
189 isinstance(msg0, list)
or isinstance(msg0, tuple):
191 return str(list(msg))
193 indent = indent +
' '
194 return "["+
','.join([roslib.message.strify_message(v, indent, time_offset)
for v
in msg])+
"]"
195 elif isinstance(msg, rospy.Message):
198 '\n'.join([
'%s%s: %s' % (
199 indent, f, roslib.message.strify_message(getattr(msg, f),
' ' + indent, time_offset))
for f
in msg.__slots__])
200 return '\n'.join([
'%s%s: %s' % (indent, f, roslib.message.strify_message(getattr(msg, f),
' ' + indent, time_offset))
for f
in msg.__slots__])