Source code for ouster.sdk.examples.zone_monitor_example

import os
import argparse
from ouster.sdk.open_source import open_source
import numpy as np


[docs]def create_stl_zone_set(data_dir, zip_path, sensor_info): # [doc-stag-stl-zone-set] from ouster.sdk.zone_monitor import Zone, ZoneSet, ZoneMode, Stl, \ CoordinateFrame, ZoneSetOutputFilter # Define a zone from STL file stl_0 = Stl(os.path.join(data_dir, "0.stl")) stl_0.coordinate_frame = CoordinateFrame.BODY zone_0 = Zone() zone_0.stl = stl_0 zone_0.point_count = 10 zone_0.frame_count = 1 zone_0.mode = ZoneMode.OCCUPANCY # Define another zone from STL file stl_1 = Stl(os.path.join(data_dir, "1.stl")) stl_1.coordinate_frame = CoordinateFrame.BODY zone_1 = Zone() zone_1.stl = stl_1 zone_1.point_count = 20 zone_1.frame_count = 2 zone_1.mode = ZoneMode.VACANCY # Create a zone set and add the zones zone_set = ZoneSet() zone_set.sensor_to_body_transform = np.eye(4) zone_set.zones = {0: zone_0, 1: zone_1} zone_set.power_on_live_ids = [0, 1] # Print the JSON representation of the zone set print(zone_set.to_json(ZoneSetOutputFilter.STL)) # Write out the zone set to a zip file zone_set.save(zip_path, ZoneSetOutputFilter.STL)
# [doc-etag-stl-zone-set]
[docs]def create_zrb_zone_set(data_dir, zip_path, sensor_info): # [doc-stag-zrb-zone-set] from ouster.sdk.zone_monitor import Zone, ZoneSet, ZoneMode, Zrb, Stl, \ CoordinateFrame, ZoneSetOutputFilter sensor_to_body_transform = np.eye(4) # Define a zone from a pair of images zrb = Zrb() zrb.near_range_mm = 10_000 * np.ones((sensor_info.h, sensor_info.w), np.uint32) zrb.far_range_mm = 100_000 * np.ones((sensor_info.h, sensor_info.w), np.uint32) zrb.serial_number = sensor_info.sn zrb.beam_to_lidar_transform = sensor_info.beam_to_lidar_transform zrb.lidar_to_sensor_transform = sensor_info.lidar_to_sensor_transform zrb.sensor_to_body_transform = sensor_to_body_transform zone_0 = Zone() zone_0.point_count = 100 zone_0.frame_count = 1 zone_0.mode = ZoneMode.OCCUPANCY zone_0.zrb = zrb # Create a second zone from an STL file zone_1 = Zone() stl_1 = Stl(os.path.join(data_dir, "1.stl")) zone_1.stl = stl_1 zone_1.stl.coordinate_frame = CoordinateFrame.BODY zone_1.point_count = 10 zone_1.frame_count = 1 zone_1.mode = ZoneMode.OCCUPANCY # Create a zone set and add the zones zone_set = ZoneSet() zone_set.sensor_to_body_transform = sensor_to_body_transform zone_set.power_on_live_ids = [0, 1] zone_set.zones = {0: zone_0, 1: zone_1} # render all STLs to ZRBs zone_set.render(sensor_info) # Print the JSON representation of the zone set print(zone_set.to_json(ZoneSetOutputFilter.ZRB)) # Write out the zone set to a zip file zone_set.save(zip_path, ZoneSetOutputFilter.ZRB)
# [doc-etag-zrb-zone-set]
[docs]def upload(zone_set, output_filter, sensor_hostname): # [doc-stag-upload-zone-set] from ouster.sdk.core import SensorHttp http = SensorHttp.create(args.sensor_hostname) print("Uploading zone monitor config...") http.set_zone_monitor_config_zip(zone_set_from_zip.to_zip_blob(output_filter)) print("Applying staged config to active...") http.apply_zone_monitor_staged_config_to_active() print("Reinitializing sensor...") http.reinitialize()
# [doc-etag-upload-zone-set] if __name__ == '__main__': parser = argparse.ArgumentParser( description="Zone monitor example") parser.add_argument("zone_set_type", type=str, choices=["STL", "ZRB"], help="Type of zone set to create") parser.add_argument("data_dir", type=str, help="Directory containing data files") parser.add_argument("zip_path", type=str, help="Path to save the zone set zip file") parser.add_argument("sensor_hostname", type=str, help="sensor hostname or IP address") parser.add_argument("--no-auto-udp-dest", action="store_true", help="Disable auto UDP destination configuration") parser.add_argument("--upload", action="store_true", help="Upload the zone set to the sensor") args = parser.parse_args() source = open_source(args.sensor_hostname, no_auto_udp_dest=args.no_auto_udp_dest) sensor_info = source.sensor_info[0] from ouster.sdk.zone_monitor import ZoneSetOutputFilter, ZoneSet output_filter = ZoneSetOutputFilter.STL if args.zone_set_type == "STL" else ZoneSetOutputFilter.ZRB zone_set_create_method = create_stl_zone_set if args.zone_set_type == "STL" else create_zrb_zone_set zone_set_create_method(args.data_dir, args.zip_path, sensor_info) # Load zone set from zip zone_set_from_zip = ZoneSet(args.zip_path) # how to configure sensor? if args.upload: upload(zone_set_from_zip, output_filter, args.sensor_hostname)