Skip to main content

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

VoyantClient is deprecated as of v0.5.0 and will be removed in a future release. Carbon sensor users should migrate to CarbonClient.

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 (.pyi stubs 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 CarbonClient
  • recorder_example.py — Recording with all options
  • playback_example.py — Playback and processing
  • pcd_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

Support

License

Proprietary — for use with Voyant Photonics hardware products only.

Copyright © 2025 Voyant Photonics, Inc. All rights reserved.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

voyant_api-0.7.2-cp314-cp314-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.14Windows x86-64

voyant_api-0.7.2-cp314-cp314-manylinux_2_34_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.34+ x86-64

voyant_api-0.7.2-cp314-cp314-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

voyant_api-0.7.2-cp313-cp313-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.13Windows x86-64

voyant_api-0.7.2-cp313-cp313-manylinux_2_34_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

voyant_api-0.7.2-cp313-cp313-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

voyant_api-0.7.2-cp312-cp312-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.12Windows x86-64

voyant_api-0.7.2-cp312-cp312-manylinux_2_34_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

voyant_api-0.7.2-cp312-cp312-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

voyant_api-0.7.2-cp311-cp311-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.11Windows x86-64

voyant_api-0.7.2-cp311-cp311-manylinux_2_34_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

voyant_api-0.7.2-cp311-cp311-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

voyant_api-0.7.2-cp310-cp310-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.10Windows x86-64

voyant_api-0.7.2-cp310-cp310-manylinux_2_34_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

voyant_api-0.7.2-cp310-cp310-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

voyant_api-0.7.2-cp39-cp39-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.9Windows x86-64

voyant_api-0.7.2-cp39-cp39-manylinux_2_34_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.34+ x86-64

voyant_api-0.7.2-cp39-cp39-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

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

Hashes for voyant_api-0.7.2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 91d307aa47cc3f0ca8838ca8ff644749fa3e05f32fbc16d7df8a7714f9f547f5
MD5 a48923397b3f705c2d9f1be5244692d0
BLAKE2b-256 0d9a7da1b0db802ac5ce7b991a9baca0d2a2ae5276838eecfb1d6d25f92d19dd

See more details on using hashes here.

File details

Details for the file voyant_api-0.7.2-cp314-cp314-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for voyant_api-0.7.2-cp314-cp314-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 b66c9600152e3986fc7209d2c2e827a2208a2610ae3847a2ee23f4336a9ef7ea
MD5 b7ec540736bb4a8c0c6ea2468b8d1a32
BLAKE2b-256 e220202a9c93adcee186dead9207b0f8b4fb374c59087db9609adf2734bac8b0

See more details on using hashes here.

File details

Details for the file voyant_api-0.7.2-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for voyant_api-0.7.2-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 318d7da3b00aa6f57b54e8cf417f44db2f3b5ab8a06804e1d2359fa3c8793383
MD5 d8d46e59fdd160c1b7c5616b9bcfb1e3
BLAKE2b-256 bd2a69eff3094b5e40c93392249e9a50ffd58461d1e54c094849906545961cb0

See more details on using hashes here.

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

Hashes for voyant_api-0.7.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 cf5b0e5cd17d40f1c0225aa972266f32023d883b47b2754d55bdcd0a0f0e0cac
MD5 69e6af4f8e7cbb14fa7347dd2e27c978
BLAKE2b-256 0b46f3e8b7f38f3079be29413fdb20ddc51298ac244b6bd803a408be9e5c2369

See more details on using hashes here.

File details

Details for the file voyant_api-0.7.2-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for voyant_api-0.7.2-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 e7ef83b46637d22bd48392a460d46122bad0221097bae5c37b949c7a7feda08b
MD5 3ba720d0030f27c4ca1bab79c23ff7a6
BLAKE2b-256 74618d5a76c4468172f172b787272e5d3764392222d8e48a12ee5480179aa3d9

See more details on using hashes here.

File details

Details for the file voyant_api-0.7.2-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for voyant_api-0.7.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2989cbd96117d6c585d863d566267a84cb4b5365d5c6607a05b77d4934522fb8
MD5 339d931b7eb962f06e05fb99f4729603
BLAKE2b-256 b819d359db5d4ee5127c498e4e5740ba40d1d789f0ac40ca1f348f28b940a92c

See more details on using hashes here.

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

Hashes for voyant_api-0.7.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 1f26876f8a89e48eeb55edf4c0e5adf709732b279f7ce7810c1386c344b20105
MD5 eb98d0fa2abfb08365e028e265fe7869
BLAKE2b-256 d8c373ea2d374eb5f0df52207ec0e0956d69bc14e5cbdcde9674e6f71d6939fb

See more details on using hashes here.

File details

Details for the file voyant_api-0.7.2-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for voyant_api-0.7.2-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 821916008038853023516c5535566d52ffd8f16b651bbdb014e452ec6b7a6255
MD5 516b31e7d2d4d8f34ed406e652f559f2
BLAKE2b-256 88d0a2813098fcdf6217f0c6403ccc44585cdd0a06c654901a0687612c41eeb4

See more details on using hashes here.

File details

Details for the file voyant_api-0.7.2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for voyant_api-0.7.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f7a0ffff5d938f011356a95595c47b134111840904183d422efd1d29a03363eb
MD5 78d3105812eedc1bf70c7b4b30517d96
BLAKE2b-256 5fe977da23a3aece44b6c77e57bcad52f5518e0e14d550dfd7784213cc60197e

See more details on using hashes here.

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

Hashes for voyant_api-0.7.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1563489e1cf279e08610d9750c937dede3557b698f45859c8d8e70930f4a6651
MD5 4d5ac2ee6cdf0d20f9bea78dd2065a7f
BLAKE2b-256 0144dfabe1aa02f718011722a09461a7b0f358b283dc7a31590b14b46b096154

See more details on using hashes here.

File details

Details for the file voyant_api-0.7.2-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for voyant_api-0.7.2-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 8234f754a9743ea4b35948f2e9aa0aeb952e7e126de4f47c5f9f296a8cfccd1e
MD5 3aac9ddb14192197479b01d813bd59e6
BLAKE2b-256 db76b49cbe0098f706e0d816851f711a7759bf246646b27501f81778dadff69c

See more details on using hashes here.

File details

Details for the file voyant_api-0.7.2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for voyant_api-0.7.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0932c8728fa1314d92efc1b40f0ca85c7a25f0ef196a2789850bc199991fd3ff
MD5 af58c84869bed76116104add4cac4639
BLAKE2b-256 154494ae69f45fc99440d1ac3bf8baa257fc962179285c04acde45fd96149fe1

See more details on using hashes here.

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

Hashes for voyant_api-0.7.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 58162789715145b1496c61af8a47ab243c7ab0c16a0667e7029b68fbaa13c6df
MD5 0246baac9d5076aca5a10498d4c84152
BLAKE2b-256 c1717198d6b36b1814bf570ec5e9e63b14ef24c5cc3c2eb95b46d76913ef3507

See more details on using hashes here.

File details

Details for the file voyant_api-0.7.2-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for voyant_api-0.7.2-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 d8a37864df9d28df2bd70cef4e2ff3b663bc8e02b5f170e62b63f9ecc3dc8537
MD5 b93bd584a1712164d8a8901e2fd06b77
BLAKE2b-256 8c7d0714584354d4f057dd67fea1b36438d7d87477291390aef55c771a4863d6

See more details on using hashes here.

File details

Details for the file voyant_api-0.7.2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for voyant_api-0.7.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 51db182e568a597246be48c6f791eafde137f270377962a813042e7c242d6907
MD5 fdaf0a666bbe1e3aa960ce368e233b79
BLAKE2b-256 98a861b509aef958c62833c727a9f0056695bb909623f179f4fba15fa08de882

See more details on using hashes here.

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

Hashes for voyant_api-0.7.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 848c9bf2d1f50c860833af385146333e64c78e9c1bef7551165b517333991c5e
MD5 062a23269667f531aa3755220f26c7cb
BLAKE2b-256 ea666967b0cb754e52e352564f05560fbab09653100a6ba54475f2194f0344b3

See more details on using hashes here.

File details

Details for the file voyant_api-0.7.2-cp39-cp39-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for voyant_api-0.7.2-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 294d07303ed957c22b9ff89ecdbc4a126aad70be249872d06b219697158d4401
MD5 f427da6531c0ca972793d4bb8885620e
BLAKE2b-256 b6c6d7e4162807ec30dbcd9738996558a8e82c8204791680b30a972722350070

See more details on using hashes here.

File details

Details for the file voyant_api-0.7.2-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for voyant_api-0.7.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2e1f805f903900a9b0ce8a9ab2180bb40703c02a58173b479df6be25f5e8acd1
MD5 f59b1f470a91d16a1af574288b47a1d2
BLAKE2b-256 d50bc3426279a5a93118f1d02c13ff12a21c773797b3505251dfec401ccf873a

See more details on using hashes here.

Supported by

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