27 Existing ros_comm hz tests anaylyzes a single topic at a time;
28 This script analyzes multiple topics in a Bag.
37 from docutils.nodes
import topic
42 """ Return a list of topics stored in this bag """
43 bag = rosbag.Bag(bag_name,
'r')
44 return bag.get_type_and_topic_info()[1].keys()
47 """ Generates a sequence of messages in the topic from the bag """
48 bag = rosbag.Bag(bag_name,
'r')
49 for top, msg, time
in bag.read_messages():
56 yield t.to_sec(), m.header.stamp.to_sec()
63 Analyzes message interval for a particular topic.
66 bag_name = name +
".bag"
67 bag_path = os.path.expanduser(
"~") +
"/.ros/" + bag_name
73 ts_arr_ = [[bag_ts, msg_ts, bag_ts - msg_ts]
for bag_ts, msg_ts
in ts_gen]
76 print(
"Topic: {}: Insufficient data: {} samples".format(topic, len(ts_arr_)))
80 ts_arr = np.array(ts_arr_)
84 d_mean = np.mean(d_arr)
85 d_max = np.max( d_arr)
86 d_std = np.std( d_arr)
90 int_arr = np.diff(ts_arr[:,:-1], axis = ROWS)
93 int_mean = np.mean(int_arr, axis = ROWS)
94 int_max = np.amax(int_arr, axis = ROWS)
95 int_std = np.std( int_arr, axis = ROWS)
99 print(
"topic: '{}', exp interval= {}. samples= {}: ".format(topic, exp_int, len(ts_arr_)))
100 print(
" mean, max, stdev")
101 print(
" Bag Recording interval: {}, {}, {}".format(int_mean[BAG], int_max[BAG], int_std[BAG]))
102 print(
" Message publish interval: {}, {}, {}".format(int_mean[MSG], int_max[MSG], int_std[MSG]))
103 print(
" Bag Rec - Message Pub Delta: {}, {}, {}".format(d_mean, d_max, d_std))
107 topic_filename = topic.replace(
"/",
"_")
108 np.savetxt(name +
"." + topic_filename +
".csv", int_arr, delimiter=
",")
112 Topic configuration; refer to std_init_commands.yaml.
114 NS =
"/novatel/oem7/"
121 NS +
"bestgnsspos": 1.0,
123 NS +
"terrastarinfo": 1.0,
124 NS +
"terrastarstatus": 1.0,
126 NS +
"corrimu": 0.01,
129 NS +
"insstdev": 1.0,
139 Tests message frequency.
140 Analyzes message intervals based on Message timestamp and Bag recording timestamp.
143 for topic
in topic_config: