def test_parse_config() -> None: """Sanity check parsing from json string.""" with pytest.raises(ValueError): client.SensorConfig('/') with pytest.raises(ValueError): client.SensorConfig('{ ')
def test_optional_config() -> None: """Check that all fields are optional.""" config = client.SensorConfig() # make sure all the values are empty assert config.azimuth_window is None assert config.lidar_mode is None assert config.multipurpose_io_mode is None assert config.nmea_baud_rate is None assert config.nmea_in_polarity is None assert config.nmea_ignore_valid_char is None assert config.nmea_leap_seconds is None assert config.operating_mode is None assert config.phase_lock_enable is None assert config.phase_lock_offset is None assert config.signal_multiplier is None assert config.sync_pulse_out_pulse_width is None assert config.sync_pulse_out_frequency is None assert config.sync_pulse_in_polarity is None assert config.sync_pulse_out_angle is None assert config.sync_pulse_out_polarity is None assert config.timestamp_mode is None assert config.udp_dest is None assert config.udp_port_imu is None assert config.udp_port_lidar is None
def test_copy_config(complete_config_string: str) -> None: """Check that copy() works.""" config = client.SensorConfig(complete_config_string) config1 = copy(config) assert config1 is not config assert config1 == config
def test_read_config(complete_config_string: str) -> None: """Check reading from and writing to string.""" config = client.SensorConfig(complete_config_string) # read from string # make sure all the values are correct assert config.azimuth_window == (0, 360000) assert config.lidar_mode == client.LidarMode.MODE_1024x10 assert config.multipurpose_io_mode == client.MultipurposeIOMode.MULTIPURPOSE_OFF assert config.nmea_baud_rate == client.NMEABaudRate.BAUD_9600 assert config.nmea_in_polarity == client.Polarity.POLARITY_ACTIVE_HIGH assert config.nmea_ignore_valid_char is False assert config.nmea_leap_seconds == 0 assert config.operating_mode == client.OperatingMode.OPERATING_NORMAL assert config.phase_lock_enable is False assert config.phase_lock_offset == 0 assert config.signal_multiplier == 2 assert config.sync_pulse_out_pulse_width == 10 assert config.sync_pulse_out_frequency == 1 assert config.sync_pulse_in_polarity == client.Polarity.POLARITY_ACTIVE_HIGH assert config.sync_pulse_out_angle == 360 assert config.sync_pulse_out_polarity == client.Polarity.POLARITY_ACTIVE_HIGH assert config.timestamp_mode == client.TimestampMode.TIME_FROM_INTERNAL_OSC assert config.udp_dest == "" assert config.udp_port_imu == 7503 assert config.udp_port_lidar == 7502 # check output of string assert ''.join(str(config).split()) == ''.join( complete_config_string.split())
def test_write_config() -> None: """Check modifying config.""" config = client.SensorConfig() config.azimuth_window = (0, 0) config.lidar_mode = client.LidarMode.MODE_512x10 config.multipurpose_io_mode = client.MultipurposeIOMode.MULTIPURPOSE_INPUT_NMEA_UART config.nmea_baud_rate = client.NMEABaudRate.BAUD_9600 config.nmea_in_polarity = client.Polarity.POLARITY_ACTIVE_LOW config.nmea_ignore_valid_char = True config.nmea_leap_seconds = 20 config.operating_mode = client.OperatingMode.OPERATING_STANDBY config.phase_lock_enable = True config.phase_lock_offset = 180000 config.signal_multiplier = 2 config.sync_pulse_out_pulse_width = 5 config.sync_pulse_out_frequency = 2 config.sync_pulse_in_polarity = client.Polarity.POLARITY_ACTIVE_HIGH config.sync_pulse_out_angle = 300 config.sync_pulse_out_polarity = client.Polarity.POLARITY_ACTIVE_LOW config.timestamp_mode = client.TimestampMode.TIME_FROM_PTP_1588 config.udp_dest = "udp-dest" config.udp_port_imu = 84 config.udp_port_lidar = 3827 with pytest.raises(TypeError): config.lidar_mode = 1 # type: ignore with pytest.raises(TypeError): config.sync_pulse_in_polarity = client.MultipurposeIOMode.MULTIPURPOSE_OFF # type: ignore
def main() -> None: descr = """Visualize pcap or sensor data using simple viz bindings.""" epilog = """When reading data from a sensor, this will autoconfigure the udp destination unless -x is used.""" parser = argparse.ArgumentParser(description=descr, epilog=epilog) required = parser.add_argument_group('one of the following is required') group = required.add_mutually_exclusive_group(required=True) group.add_argument('--sensor', metavar='HOST', help='sensor hostname') group.add_argument('--pcap', metavar='PATH', help='path to pcap file') parser.add_argument('--meta', metavar='PATH', help='path to metadata json') parser.add_argument('--lidar-port', type=int, help='lidar port for sensor') parser.add_argument('-x', '--no-auto-dest', action='store_true', help='do not auto configure udp destination') args = parser.parse_args() if args.sensor: hostname = args.sensor if args.lidar_port or (not args.no_auto_dest): config = client.SensorConfig() if args.lidar_port: config.udp_port_lidar = args.lidar_port print("Configuring sensor...") client.set_config(hostname, config, udp_dest_auto=(not args.no_auto_dest)) config = client.get_config(hostname) print("Initializing...") scans = client.Scans.stream(hostname, config.udp_port_lidar or 7502, complete=False) rate = None elif args.pcap: import ouster.pcap as pcap if args.meta: metadata_path = args.meta else: print("Deducing metadata based on pcap name. " "To provide a different metadata path, use --meta") metadata_path = os.path.splitext(args.pcap)[0] + ".json" with open(metadata_path) as json: info = client.SensorInfo(json.read()) scans = client.Scans(pcap.Pcap(args.pcap, info)) rate = 1.0 SimpleViz(scans.metadata, rate).run(scans)
def test_equality_config(complete_config_string: str) -> None: """Check equality comparisons.""" complete_config_1 = client.SensorConfig(complete_config_string) complete_config_2 = client.SensorConfig(complete_config_string) assert complete_config_1 == complete_config_2 complete_config_2.multipurpose_io_mode = client.MultipurposeIOMode.MULTIPURPOSE_OUTPUT_FROM_PTP_1588 assert complete_config_1 != complete_config_2 partial_config_1 = client.SensorConfig() partial_config_1.nmea_baud_rate = client.NMEABaudRate.BAUD_115200 partial_config_1.operating_mode = client.OperatingMode.OPERATING_STANDBY partial_config_2 = client.SensorConfig() partial_config_2.nmea_baud_rate = client.NMEABaudRate.BAUD_115200 partial_config_2.operating_mode = client.OperatingMode.OPERATING_STANDBY assert partial_config_1 == partial_config_2 partial_config_2.operating_mode = client.OperatingMode.OPERATING_NORMAL assert partial_config_1 != partial_config_2 empty_config_1 = client.SensorConfig() empty_config_2 = client.SensorConfig() assert empty_config_1 == empty_config_2 assert complete_config_1 != empty_config_1 assert complete_config_1 != partial_config_1 assert complete_config_1 != partial_config_2 assert partial_config_1 != empty_config_1 assert partial_config_2 != empty_config_1
def configure_sensor_params(hostname: str) -> None: """Configure sensor params given hostname Args: hostname: hostname of the sensor """ # create empty config config = client.SensorConfig() # set the values that you need: see sensor documentation for param meanings config.operating_mode = client.OperatingMode.OPERATING_NORMAL config.lidar_mode = client.LidarMode.MODE_1024x10 config.udp_port_lidar = 7502 config.udp_port_imu = 7503 # set the config on sensor, using appropriate flags client.set_config(hostname, config, persist=True, udp_dest_auto=True) # if you like, you can view the entire set of parameters config = client.get_config(hostname) print(f"sensor config of {hostname}:\n{config}")
def deprecated_params_config() -> client.SensorConfig: deprecated_params = """ { "udp_ip": "169.254.148.183", "auto_start_flag": 1 }""" return client.SensorConfig(deprecated_params)