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_txtget_sensor_infoget_beam_intrinsicsget_imu_intrinsicsget_lidar_intrinsicsget_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.
Metadata
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)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| ouster-os1-1.1.1.tar.gz | 8.9 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|
Security for ouster-os1 1.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.