Skip to main content

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.

Release files for ouster-os1 1.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ouster-os1 1.1.1
File Size Uploaded
ouster-os1-1.1.1.tar.gz 8.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ouster-os1 1.1.1
File Interpreter ABI Platform
ouster_os1-1.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 19.0 kB

Release files / ouster-os1-1.1.1.tar.gz

Download URL ouster-os1-1.1.1.tar.gz
Size 8.9 kB
Tags Source
SHA-256 checksum
How to use checksums
6ee9dc0a99e3bff5aa6a7babf13ef222e198a3a8875f92a18fbc4db5810822be
BLAKE2b-256 checksum
How to use checksums
c11d6abc182dca3825f67f6b049662e74d795d5194392d259565e29c0be62611
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / ouster_os1-1.1.1-py3-none-any.whl

Download URL ouster_os1-1.1.1-py3-none-any.whl
Size 10.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
887a6c13fa3d6ead27fb0a12f93b906f8c47e0ff21666981d904b04f75461cec
BLAKE2b-256 checksum
How to use checksums
fc1ea570ff59c4bd7d6c6def6bdd0c048596772cb760ef143f341a98fe661141
Upload date
Uploaded using Trusted Publishing?
What is 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

Release history Release notifications | RSS feed

This release

1.1.1 This release

2 release files

1.1.0

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page