def test_add_filter(): filter = AddFilter() parser = argparse.ArgumentParser('add') filter.add_arguments(parser) args = parser.parse_args( ['-t', '/data', '--type', 'example_interfaces/msg/String', '-v', 'test/data.yaml', '--align-to', '/align']) filter.set_args(None, args) topic_metadata = TopicMetadata( '/align', 'example_interfaces/msg/String', 'cdr') topics = filter.filter_topic(topic_metadata) assert(len(topics) == 2) assert(topics[0].name == '/align') assert(topics[0].type == 'example_interfaces/msg/String') assert(topics[1].name == '/data') assert(topics[1].type == 'example_interfaces/msg/String') msg = String() msg.data = 'align' msgs = filter.filter_msg(('/align', serialize_message(msg), 1)) assert(len(msgs) == 2) (topic0, data0, t0) = msgs[0] (topic1, data1, t1) = msgs[1] assert(topic0 == '/align') assert(topic1 == '/data') assert(t0 == t1) assert(deserialize_message(data0, String).data == 'align') assert(deserialize_message(data1, String).data == 'out')
def create_diagnostics_bag(path): writer = SequentialWriter() storage_options, converter_options = get_rosbag_options(path) writer.open(storage_options, converter_options) topic = TopicMetadata('/diagnostics', 'diagnostic_msgs/msg/DiagnosticArray', 'cdr') writer.create_topic(topic) msg = DiagnosticArray() writer.write('/diagnostics', serialize_message(msg), 1000)
def create_test_bag(path): writer = SequentialWriter() storage_options, converter_options = get_rosbag_options(path) writer.open(storage_options, converter_options) topic = TopicMetadata('/data', 'example_interfaces/msg/String', 'cdr') writer.create_topic(topic) msg = String() msg.data = 'test_start' writer.write('/data', serialize_message(msg), 1000) msg.data = 'test_end' writer.write('/data', serialize_message(msg), CONVERSION_CONSTANT + 2000)
def create_multi_topic_bag(path): writer = SequentialWriter() storage_options = StorageOptions(uri=path, storage_id='sqlite3') converter_options = ConverterOptions( input_serialization_format='cdr', output_serialization_format='cdr') writer.open(storage_options, converter_options) topic = TopicMetadata('/range', 'sensor_msgs/msg/Range', 'cdr') writer.create_topic(topic) topic = TopicMetadata('/diagnostics', 'diagnostic_msgs/msg/KeyValue', 'cdr') writer.create_topic(topic) msg = Range() msg.header.stamp.sec = 0 msg.header.stamp.nanosec = 90 msg.range = 10.0 writer.write('/range', serialize_message(msg), 100) msg = KeyValue() msg.key = 'cpu' msg.value = 'warn' writer.write('/diagnostics', serialize_message(msg), 200)
def test_rename_filter(): filter = RenameFilter() parser = argparse.ArgumentParser('rename') filter.add_arguments(parser) args = parser.parse_args(['-t', '/data', '--name', '/renamed']) filter.set_args(None, args) topic_metadata = TopicMetadata( '/data', 'example_interfaces/msg/String', 'cdr') assert(filter.filter_topic(topic_metadata).name == '/renamed') msg = String() msg.data = 'test' # timestamp within the bag and cut duration bag_msg = ('/data', serialize_message(msg), 1) (topic, _, _) = filter.filter_msg(bag_msg) assert(topic == '/renamed')
def create_day_time_bag(path): writer = SequentialWriter() storage_options, converter_options = get_rosbag_options(path) writer.open(storage_options, converter_options) topic = TopicMetadata('/data', 'example_interfaces/msg/String', 'cdr') writer.create_topic(topic) HOUR_TO_NS = 60 * 60 * CONVERSION_CONSTANT msg = String() msg.data = 'msg0' writer.write('/data', serialize_message(msg), 13 * HOUR_TO_NS - 1000) msg.data = 'msg1' writer.write('/data', serialize_message(msg), 13 * HOUR_TO_NS) msg.data = 'msg2' writer.write('/data', serialize_message(msg), 14 * HOUR_TO_NS) msg.data = 'msg2' writer.write('/data', serialize_message(msg), 14 * HOUR_TO_NS + 1000)
def test_restamp_filter(): filter = RestampFilter() parser = argparse.ArgumentParser('restamp') filter.add_arguments(parser) args = parser.parse_args([]) filter.set_args(None, args) topic_metadata = TopicMetadata( '/data', 'diagnostic_msgs/msg/DiagnosticArray', 'cdr') assert(filter.filter_topic(topic_metadata) == topic_metadata) ns_stamp = 500 * 1000 * 1000 - 100 msg = DiagnosticArray() msg.header.stamp.sec = 0 msg.header.stamp.nanosec = ns_stamp # timestamp within the bag and cut duration bag_msg = ('/data', serialize_message(msg), 500 * 1000 * 1000) (_, _, t) = filter.filter_msg(bag_msg) assert(t == ns_stamp)
def test_reframe_filter(): filter = ReframeFilter() parser = argparse.ArgumentParser('reframe') filter.add_arguments(parser) args = parser.parse_args(['-t', '/data', '--frame', 'frame1']) filter.set_args(None, args) topic_metadata = TopicMetadata( '/data', 'diagnostic_msgs/msg/DiagnosticArray', 'cdr') assert(filter.filter_topic(topic_metadata) == topic_metadata) msg = DiagnosticArray() msg.header.frame_id = 'frame0' msg.header.stamp.sec = 0 msg.header.stamp.nanosec = 1 # timestamp within the bag and cut duration bag_msg = ('/data', serialize_message(msg), 1) (_, data, _) = filter.filter_msg(bag_msg) new_msg = deserialize_message(data, DiagnosticArray) assert(new_msg.header.frame_id == 'frame1')
def test_replace_filter(): filter = ReplaceFilter() parser = argparse.ArgumentParser('replace') filter.add_arguments(parser) args = parser.parse_args(['-t', '/data', '-v', 'test/data.yaml']) filter.set_args(None, args) string_msg = String() string_msg.data = 'in' msg = ('/data', serialize_message(string_msg), 0) with pytest.raises(RuntimeError): # if topic hasn't been found, filter_msg fails with error filter.filter_msg(msg) topic_metadata = TopicMetadata( '/data', 'example_interfaces/msg/String', 'cdr') assert(filter.filter_topic(topic_metadata) == topic_metadata) (topic, result_data, t) = filter.filter_msg(msg) assert(topic == '/data') result_msg = deserialize_message(result_data, String) assert(result_msg.data == 'out') assert(t == 0)