def dump_sequence(self, output_path, seq_id): sink = DirectorySource(output_path) writer = XVIZGLBWriter(sink, image_encoding='JPEG', use_xviz_extension=False) writer.write_message(self.get_metadata(seq_id)) for frame_idx in trange(self._loader.sequence_sizes[seq_id]): builder = XVIZBuilder(self._metadata, update_type=StateUpdate.UpdateType.SNAPSHOT) idx_tuple = (seq_id, frame_idx) timestamp = self._loader.timestamp(idx_tuple) / 1e6 self.add_pose(builder, idx_tuple, timestamp) self.add_lidars(builder, idx_tuple) self.add_cameras(builder, idx_tuple) self.add_objects(builder, idx_tuple) builder.time_series("/vehicle/autonomy_state")\ .timestamp(timestamp)\ .value("autonomous") data = builder.get_message() writer.write_message(data) writer.close()
class TestTimeSeriesBuilder(unittest.TestCase): def setUp(self): self.builder = XVIZBuilder() setup_pose(self.builder) def test_null(self): builder = XVIZTimeSeriesBuilder(None) data = builder.stream('/test').get_data() assert not data def test_single_entry(self): self.builder = XVIZBuilder() setup_pose(self.builder) self.builder.time_series('/test')\ .timestamp(20.)\ .value(1.) expected = [{ 'timestamp': 20., 'streams': ['/test'], 'values': { 'doubles': [1.] } }] data = self.builder.get_data().to_object() assert json.dumps(data['time_series'], sort_keys=True) == json.dumps(expected, sort_keys=True) def test_multiple_entries(self): self.builder.time_series('/test')\ .timestamp(20.)\ .value(1.) self.builder.time_series('/foo')\ .timestamp(20.)\ .value(2.) expected = [{ 'timestamp': 20., 'streams': ['/test', '/foo'], 'values': { 'doubles': [1., 2.] } }] data = self.builder.get_data().to_object() assert json.dumps(data['time_series'], sort_keys=True) == json.dumps(expected, sort_keys=True)