Skip to main content

Python client for the Ouster Lidar OS-1

Project description

Python client for the Ouster Lidar OS-1

Compatible with Firmware Version 1.10.0 and python 3

Your milage may vary with other versions, it was tested against a device OS1-16 device running 1.10.0

Installing

pip install --upgrade ouster-os1

Quick start

from os1 import OS1
from os1.utils import xyz_points


def handler(raw_packet):
    """Takes each packet and log it to a file as xyz points"""
    with open('points.csv', 'a') as f:
        x, y, z = xyz_points(raw_packet)
        for coords in zip(x, y, z):
            f.write("{}\n".format(','.join(coords)))


os1 = OS1('10.0.0.3', '10.0.0.1', mode='1024x10')  # OS1 sensor IP, destination IP, and resolution
# Inform the sensor of the destination host and reintialize it
os1.start()
# Start the loop which will handle and dispatch each packet to the handler
# function for processing
os1.run_forever(handler)

You can run the server as threaded with os1.run_forever(handler, threaded=True)

Recipes

Generally speed is a concern since the OS1 is sending 12,608 bytes/packet at a rate of 1280 packets/sec (in 1024x20 or 2048x10 mode). So a multiprocessing producer consumer model works well.

import json
from multiprocessing import Process, Queue

from os1 import OS1
from os1.utils import build_trig_table, xyz_points


OS1_IP = '10.0.0.3'
HOST_IP = '10.0.0.2'
unprocessed_packets = Queue()


def handler(packet):
    unprocessed_packets.put(packet)


def worker(queue, beam_altitude_angles, beam_azimuth_angles) :
    build_trig_table(beam_altitude_angles, beam_azimuth_angles)
    while True:
        packet = queue.get()
        coords = xyz_points(packet) 
        # do work...


def spawn_workers(n, worker, *args, **kwargs):
    processes = []
    for i in range(n):
        process = Process(
            target=worker,
            args=args,
            kwargs=kwargs
        )
        process.start()
        processes.append(process)
    return processes


os1 = OS1(OS1_IP, HOST_IP)
beam_intrinsics = json.loads(os1.get_beam_intrinsics())
beam_alt_angles = beam_intrinsics['beam_altitude_angles']
beam_az_angles = beam_intrinsics['beam_azimuth_angles']
workers = spawn_workers(4, worker, unprocessed_packets, beam_alt_angles, beam_az_angles)
os1.start()
try:
    os1.run_forever(handler)
except KeyboardInterrupt:
    for w in workers:
        w.terminate()

TCP API Commands

The TCP API commands can be accessed through an instance of the OS1 object.

The following methods are supported:

  • get_config_txt
  • get_sensor_info
  • get_beam_intrinsics
  • get_imu_intrinsics
  • get_lidar_intrinsics
  • get_config_param - Supports querying active and staged parameters. Example: os1.get_config_param('active', 'udp_ip')
  • set_config_param - Supports settings parameters to be staged. Example: os1.set_config_param('udp_ip', '10.0.0.1')
  • reinitialize - Will reinitialize the sensor and apply all staged parameters to be active.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ouster-os1-1.1.1.tar.gz (8.9 kB view details)

Uploaded Source

Built Distribution

ouster_os1-1.1.1-py3-none-any.whl (10.1 kB view details)

Uploaded Python 3

File details

Details for the file ouster-os1-1.1.1.tar.gz.

File metadata

  • Download URL: ouster-os1-1.1.1.tar.gz
  • Upload date:
  • Size: 8.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.0

File hashes

Hashes for ouster-os1-1.1.1.tar.gz
Algorithm Hash digest
SHA256 6ee9dc0a99e3bff5aa6a7babf13ef222e198a3a8875f92a18fbc4db5810822be
MD5 d740e047c7216440d9292c601c4e4538
BLAKE2b-256 c11d6abc182dca3825f67f6b049662e74d795d5194392d259565e29c0be62611

See more details on using hashes here.

File details

Details for the file ouster_os1-1.1.1-py3-none-any.whl.

File metadata

  • Download URL: ouster_os1-1.1.1-py3-none-any.whl
  • Upload date:
  • Size: 10.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.0

File hashes

Hashes for ouster_os1-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 887a6c13fa3d6ead27fb0a12f93b906f8c47e0ff21666981d904b04f75461cec
MD5 21738a740161622e60c5fb4a2e11c8d4
BLAKE2b-256 fc1ea570ff59c4bd7d6c6def6bdd0c048596772cb760ef143f341a98fe661141

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page