Python bindings for Voyant Photonics, Inc. sensors
Project description
Voyant API - Python Bindings
Python bindings for Voyant Photonics LiDAR sensors, providing high-performance access to point cloud data.
Installation
pip install voyant-api
Sensor compatibility
| Sensor | Client |
|---|---|
| Carbon | CarbonClient + CarbonConfig |
| Meadowlark | VoyantClient (deprecated — see below) |
Quick Start
Receiving live data (Carbon)
import time
from voyant_api import CarbonClient, CarbonConfig, init_voyant_logging
init_voyant_logging()
config = CarbonConfig()
config.set_bind_addr("0.0.0.0:5678")
config.set_group_addr("224.0.0.0")
config.set_interface_addr("192.168.1.100")
client = CarbonClient(config)
client.start()
# Press Ctrl+C to stop
while client.is_running():
frame = client.try_receive_frame()
if frame is not None:
print(frame)
# Get point cloud as numpy array (N x 4: x, y, z, radial_vel)
xyzv = frame.xyzv()
print(f"Points shape: {xyzv.shape}")
else:
time.sleep(0.001)
Config can also be loaded from a JSON file — see CarbonConfig JSON format below.
Recording data
import time
from voyant_api import CarbonClient, CarbonConfig, VoyantRecorder, RecordStatus, init_voyant_logging
init_voyant_logging()
config = CarbonConfig()
config.set_bind_addr("0.0.0.0:5678")
config.set_group_addr("224.0.0.0")
config.set_interface_addr("192.168.1.100")
client = CarbonClient(config)
client.start()
with VoyantRecorder(
output_path="my_recording.bin",
timestamp_filename=True,
max_total_frames=1000, # Optional: stop after 1000 frames
) as recorder:
while client.is_running():
frame = client.try_receive_frame()
if frame is not None:
status = recorder.record_frame(frame)
if status == RecordStatus.STOP:
break
else:
time.sleep(0.001)
Playing back recordings
from voyant_api import VoyantPlayback, init_voyant_logging
from voyant_api.pandas_utils import frame_to_dataframe
init_voyant_logging()
with VoyantPlayback(filter_points=True) as playback:
playback.open("my_recording.bin")
for frame in playback:
if frame is None:
break
print(frame)
# Convert to pandas DataFrame
df = frame_to_dataframe(frame)
print(df.head())
Converting recordings to PCD
from voyant_api import VoyantPlayback, init_voyant_logging
from voyant_api.pcd_utils import save_frame_to_pcd, frame_to_extended_pcd
init_voyant_logging()
with VoyantPlayback(filter_points=True) as playback:
playback.open("my_recording.bin")
for frame in playback:
if frame is None:
break
# Save directly to .pcd file
save_frame_to_pcd(frame, f"frame_{frame.frame_index}.pcd")
# Or get a PointCloud object for further processing
pc = frame_to_extended_pcd(frame)
pc.save(f"frame_{frame.frame_index}.pcd")
API Overview
CarbonClient
Receives live data from Carbon sensors. Construct with a CarbonConfig and call start() before polling for frames.
config = CarbonConfig()
config.set_bind_addr("0.0.0.0:5678")
config.set_group_addr("224.0.0.0")
config.set_interface_addr("192.168.1.100")
config.set_range_max(50.0)
config.set_pfa(1e-4)
client = CarbonClient(config)
client.start()
CarbonConfig
Configuration for the Carbon pipeline. Construct with defaults and setters, or load from JSON.
# From defaults
config = CarbonConfig()
config.set_bind_addr("0.0.0.0:5678")
# From a JSON file
config = CarbonConfig.from_json("config.json")
CarbonConfig JSON format
All fields are optional and fall back to their defaults when omitted. To see all available fields and their current defaults, run:
from voyant_api import CarbonConfig
print(CarbonConfig())
This prints the full nested config with all current defaults, for example:
CarbonConfig { receiver: ReceiverConfig { multicast: MulticastReceiverConfig { bind_addr: "0.0.0.0:5678", group_addr: "224.0.0.0", interface_addr: "127.0.0.1" }, batch_size: 32, ... }, dsp: DspConfig { pfa: None, bandwidth_hz: 2000000000.0, elevation_fov_deg: 22.5, ... }, ... }
Any field shown in that output can be set in the JSON file. Fields showing None are unset and use sensor defaults.
VoyantRecorder
Records frames to binary files with automatic splitting options.
recorder = VoyantRecorder(
output_path="recording.bin",
timestamp_filename=True, # Add timestamp to filename
frames_per_file=None, # Split after N frames
duration_per_file=None, # Split after N seconds
size_per_file_mb=None, # Split after N megabytes
max_total_frames=None, # Stop after N total frames
max_total_duration=None, # Stop after N total seconds
max_total_size_mb=None, # Stop after N total megabytes
)
VoyantPlayback
Plays back recorded data with rate control.
playback = VoyantPlayback(
rate=1.0, # Playback speed (None = as fast as possible)
loopback=False, # Loop continuously
filter_points=True, # Remove invalid points
)
playback.open("recording.bin")
Frame data access
# NumPy arrays
xyz = frame.xyz() # (N x 3): [x, y, z]
xyzv = frame.xyzv() # (N x 4): [x, y, z, radial_vel]
sph = frame.spherical() # (N x 3): [range, azimuth, elevation]
# Pandas DataFrames (via voyant_api.pandas_utils)
from voyant_api.pandas_utils import frame_to_dataframe, frame_to_extended_dataframe
df = frame_to_dataframe(frame) # 7 columns
df_extended = frame_to_extended_dataframe(frame) # 11 columns
# PCD PointCloud objects (via voyant_api.pcd_utils)
from voyant_api.pcd_utils import frame_to_pcd, frame_to_extended_pcd, save_frame_to_pcd
pc = frame_to_pcd(frame) # 7 fields
pc = frame_to_extended_pcd(frame) # 11 fields
save_frame_to_pcd(frame, "out.pcd")
# Frame metadata
print(frame.frame_index)
print(frame.timestamp)
print(frame.n_points)
print(frame.n_valid_points)
Migrating from VoyantClient
VoyantClientis deprecated as of v0.5.0 and will be removed in a future release. Carbon sensor users should migrate toCarbonClient.
VoyantClient remains functional for Meadowlark sensors but will receive no new features or fixes.
The main differences:
VoyantClient (deprecated) |
CarbonClient |
|
|---|---|---|
| Config | Constructor kwargs | CarbonConfig object |
| Lifecycle | No explicit start | client.start() required |
| Shutdown | — | client.stop() / client.wait_for_shutdown() |
| Timestamps | use_msg_stamps |
set_use_msg_timestamp() — default True for Carbon |
Before:
client = VoyantClient(
bind_addr="0.0.0.0:4444",
group_addr="224.0.0.0",
interface_addr="192.168.1.100",
filter_points=True,
use_msg_stamps=True,
)
while True:
frame = client.try_receive_frame()
if frame is not None:
process(frame)
After:
config = CarbonConfig()
config.set_bind_addr("0.0.0.0:5678")
config.set_group_addr("224.0.0.0")
config.set_interface_addr("192.168.1.100")
client = CarbonClient(config)
client.start()
# Press Ctrl+C to stop
while client.is_running():
frame = client.try_receive_frame()
if frame is not None:
process(frame)
else:
time.sleep(0.001)
client.stop()
Features
- High performance: Rust-based implementation with zero-copy data access
- NumPy integration: Direct conversion to NumPy arrays via
frame.xyzv() - Pandas support: DataFrame conversion via
voyant_api.pandas_utils - PCD support: Point Cloud Data export via
voyant_api.pcd_utils - Type hints: Full type annotations for IDE support (
.pyistubs included) - Recording & playback: Save and replay sensor data with timestamp preservation
- Network streaming: Multicast UDP support for live sensor data
Complete examples
Full example scripts are available in the voyant-sdk repository:
client_example.py— Live data streaming with CarbonClientrecorder_example.py— Recording with all optionsplayback_example.py— Playback and processingpcd_conversion_example.py— Converting recordings to PCD files
System requirements
- Python: 3.9 or later
- Dependencies: NumPy 2.0+, Pandas 2.0+, pypcd4 1.4+
- Platforms: Linux, Windows, macOS
- Hardware: Carbon sensors require v0.5.0+. Meadowlark sensors use the deprecated
VoyantClient.
Documentation
- Full documentation: https://voyant-photonics.github.io/
- Examples repository: https://github.com/Voyant-Photonics/voyant-sdk
Support
License
Proprietary — for use with Voyant Photonics hardware products only.
Copyright © 2025 Voyant Photonics, Inc. All rights reserved.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file voyant_api-0.7.2-cp314-cp314-win_amd64.whl.
File metadata
- Download URL: voyant_api-0.7.2-cp314-cp314-win_amd64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.14, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
91d307aa47cc3f0ca8838ca8ff644749fa3e05f32fbc16d7df8a7714f9f547f5
|
|
| MD5 |
a48923397b3f705c2d9f1be5244692d0
|
|
| BLAKE2b-256 |
0d9a7da1b0db802ac5ce7b991a9baca0d2a2ae5276838eecfb1d6d25f92d19dd
|
File details
Details for the file voyant_api-0.7.2-cp314-cp314-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: voyant_api-0.7.2-cp314-cp314-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 1.7 MB
- Tags: CPython 3.14, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b66c9600152e3986fc7209d2c2e827a2208a2610ae3847a2ee23f4336a9ef7ea
|
|
| MD5 |
b7ec540736bb4a8c0c6ea2468b8d1a32
|
|
| BLAKE2b-256 |
e220202a9c93adcee186dead9207b0f8b4fb374c59087db9609adf2734bac8b0
|
File details
Details for the file voyant_api-0.7.2-cp314-cp314-macosx_11_0_arm64.whl.
File metadata
- Download URL: voyant_api-0.7.2-cp314-cp314-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.14, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
318d7da3b00aa6f57b54e8cf417f44db2f3b5ab8a06804e1d2359fa3c8793383
|
|
| MD5 |
d8d46e59fdd160c1b7c5616b9bcfb1e3
|
|
| BLAKE2b-256 |
bd2a69eff3094b5e40c93392249e9a50ffd58461d1e54c094849906545961cb0
|
File details
Details for the file voyant_api-0.7.2-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: voyant_api-0.7.2-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cf5b0e5cd17d40f1c0225aa972266f32023d883b47b2754d55bdcd0a0f0e0cac
|
|
| MD5 |
69e6af4f8e7cbb14fa7347dd2e27c978
|
|
| BLAKE2b-256 |
0b46f3e8b7f38f3079be29413fdb20ddc51298ac244b6bd803a408be9e5c2369
|
File details
Details for the file voyant_api-0.7.2-cp313-cp313-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: voyant_api-0.7.2-cp313-cp313-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 1.7 MB
- Tags: CPython 3.13, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e7ef83b46637d22bd48392a460d46122bad0221097bae5c37b949c7a7feda08b
|
|
| MD5 |
3ba720d0030f27c4ca1bab79c23ff7a6
|
|
| BLAKE2b-256 |
74618d5a76c4468172f172b787272e5d3764392222d8e48a12ee5480179aa3d9
|
File details
Details for the file voyant_api-0.7.2-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: voyant_api-0.7.2-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2989cbd96117d6c585d863d566267a84cb4b5365d5c6607a05b77d4934522fb8
|
|
| MD5 |
339d931b7eb962f06e05fb99f4729603
|
|
| BLAKE2b-256 |
b819d359db5d4ee5127c498e4e5740ba40d1d789f0ac40ca1f348f28b940a92c
|
File details
Details for the file voyant_api-0.7.2-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: voyant_api-0.7.2-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1f26876f8a89e48eeb55edf4c0e5adf709732b279f7ce7810c1386c344b20105
|
|
| MD5 |
eb98d0fa2abfb08365e028e265fe7869
|
|
| BLAKE2b-256 |
d8c373ea2d374eb5f0df52207ec0e0956d69bc14e5cbdcde9674e6f71d6939fb
|
File details
Details for the file voyant_api-0.7.2-cp312-cp312-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: voyant_api-0.7.2-cp312-cp312-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 1.7 MB
- Tags: CPython 3.12, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
821916008038853023516c5535566d52ffd8f16b651bbdb014e452ec6b7a6255
|
|
| MD5 |
516b31e7d2d4d8f34ed406e652f559f2
|
|
| BLAKE2b-256 |
88d0a2813098fcdf6217f0c6403ccc44585cdd0a06c654901a0687612c41eeb4
|
File details
Details for the file voyant_api-0.7.2-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: voyant_api-0.7.2-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f7a0ffff5d938f011356a95595c47b134111840904183d422efd1d29a03363eb
|
|
| MD5 |
78d3105812eedc1bf70c7b4b30517d96
|
|
| BLAKE2b-256 |
5fe977da23a3aece44b6c77e57bcad52f5518e0e14d550dfd7784213cc60197e
|
File details
Details for the file voyant_api-0.7.2-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: voyant_api-0.7.2-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1563489e1cf279e08610d9750c937dede3557b698f45859c8d8e70930f4a6651
|
|
| MD5 |
4d5ac2ee6cdf0d20f9bea78dd2065a7f
|
|
| BLAKE2b-256 |
0144dfabe1aa02f718011722a09461a7b0f358b283dc7a31590b14b46b096154
|
File details
Details for the file voyant_api-0.7.2-cp311-cp311-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: voyant_api-0.7.2-cp311-cp311-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 1.7 MB
- Tags: CPython 3.11, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8234f754a9743ea4b35948f2e9aa0aeb952e7e126de4f47c5f9f296a8cfccd1e
|
|
| MD5 |
3aac9ddb14192197479b01d813bd59e6
|
|
| BLAKE2b-256 |
db76b49cbe0098f706e0d816851f711a7759bf246646b27501f81778dadff69c
|
File details
Details for the file voyant_api-0.7.2-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: voyant_api-0.7.2-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0932c8728fa1314d92efc1b40f0ca85c7a25f0ef196a2789850bc199991fd3ff
|
|
| MD5 |
af58c84869bed76116104add4cac4639
|
|
| BLAKE2b-256 |
154494ae69f45fc99440d1ac3bf8baa257fc962179285c04acde45fd96149fe1
|
File details
Details for the file voyant_api-0.7.2-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: voyant_api-0.7.2-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
58162789715145b1496c61af8a47ab243c7ab0c16a0667e7029b68fbaa13c6df
|
|
| MD5 |
0246baac9d5076aca5a10498d4c84152
|
|
| BLAKE2b-256 |
c1717198d6b36b1814bf570ec5e9e63b14ef24c5cc3c2eb95b46d76913ef3507
|
File details
Details for the file voyant_api-0.7.2-cp310-cp310-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: voyant_api-0.7.2-cp310-cp310-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 1.7 MB
- Tags: CPython 3.10, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d8a37864df9d28df2bd70cef4e2ff3b663bc8e02b5f170e62b63f9ecc3dc8537
|
|
| MD5 |
b93bd584a1712164d8a8901e2fd06b77
|
|
| BLAKE2b-256 |
8c7d0714584354d4f057dd67fea1b36438d7d87477291390aef55c771a4863d6
|
File details
Details for the file voyant_api-0.7.2-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: voyant_api-0.7.2-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.10, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
51db182e568a597246be48c6f791eafde137f270377962a813042e7c242d6907
|
|
| MD5 |
fdaf0a666bbe1e3aa960ce368e233b79
|
|
| BLAKE2b-256 |
98a861b509aef958c62833c727a9f0056695bb909623f179f4fba15fa08de882
|
File details
Details for the file voyant_api-0.7.2-cp39-cp39-win_amd64.whl.
File metadata
- Download URL: voyant_api-0.7.2-cp39-cp39-win_amd64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.9, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
848c9bf2d1f50c860833af385146333e64c78e9c1bef7551165b517333991c5e
|
|
| MD5 |
062a23269667f531aa3755220f26c7cb
|
|
| BLAKE2b-256 |
ea666967b0cb754e52e352564f05560fbab09653100a6ba54475f2194f0344b3
|
File details
Details for the file voyant_api-0.7.2-cp39-cp39-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: voyant_api-0.7.2-cp39-cp39-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 1.7 MB
- Tags: CPython 3.9, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
294d07303ed957c22b9ff89ecdbc4a126aad70be249872d06b219697158d4401
|
|
| MD5 |
f427da6531c0ca972793d4bb8885620e
|
|
| BLAKE2b-256 |
b6c6d7e4162807ec30dbcd9738996558a8e82c8204791680b30a972722350070
|
File details
Details for the file voyant_api-0.7.2-cp39-cp39-macosx_11_0_arm64.whl.
File metadata
- Download URL: voyant_api-0.7.2-cp39-cp39-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.9, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e1f805f903900a9b0ce8a9ab2180bb40703c02a58173b479df6be25f5e8acd1
|
|
| MD5 |
f59b1f470a91d16a1af574288b47a1d2
|
|
| BLAKE2b-256 |
d50bc3426279a5a93118f1d02c13ff12a21c773797b3505251dfec401ccf873a
|