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: None, elevation_fov_deg: 30.0, ... }, ... }

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.8.1-cp314-cp314-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.14Windows x86-64

voyant_api-0.8.1-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.8.1-cp314-cp314-macosx_11_0_arm64.whl (1.4 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

voyant_api-0.8.1-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.8.1-cp313-cp313-macosx_11_0_arm64.whl (1.4 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

voyant_api-0.8.1-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.8.1-cp312-cp312-macosx_11_0_arm64.whl (1.4 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

voyant_api-0.8.1-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.8.1-cp311-cp311-macosx_11_0_arm64.whl (1.4 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

voyant_api-0.8.1-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.8.1-cp310-cp310-macosx_11_0_arm64.whl (1.4 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

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

Uploaded CPython 3.9Windows x86-64

voyant_api-0.8.1-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.8.1-cp39-cp39-macosx_11_0_arm64.whl (1.4 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

File details

Details for the file voyant_api-0.8.1-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: voyant_api-0.8.1-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.8.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 55d4b3eece470abebb5619c9302b079cec3a9ec3e3d40b389d6e12fca944b141
MD5 f2d039d5f3ad5d9ffa0a8a031d0c4378
BLAKE2b-256 1995363576bcfbbc1ab621f48ea79e0bed80e8a890ade953bb254b29383ba0bf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.1-cp314-cp314-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 e73d2f5c5e0427426537310f55e22682001df69611040892adb520602f0f2945
MD5 83d929fc528d53d9fce07fde79f41014
BLAKE2b-256 0a02e64de3c79209d28317ee1fdcced8e64e397e2ff132fd415cb0dca1b23107

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a1d551a765e8061ffbd1cf6cb23d85f9f9788b093411af4ba18d233451ee6bc4
MD5 86c295b78da87e08cd2dec3263d21b13
BLAKE2b-256 876399d7b8c105c6983f6ed55ece362e41fd13925ee23ac49a96c68545ec9370

See more details on using hashes here.

File details

Details for the file voyant_api-0.8.1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: voyant_api-0.8.1-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.8.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 b1a892f8415dc349ec7260bf7d4e76d6968bb91b941e54f82aee854e3aef5a5d
MD5 664b24f8238098c6fa100a10992b146c
BLAKE2b-256 64e1322db5593923438558a991389bc66423f412a902b6f3cc79234293c071f2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.1-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 fef067135cd7a72ec3f36d9a80dd4ca940675bdbc74d0f90e25978a072dd1faf
MD5 716d3d41b1d653a73cf3b21ef0d87fca
BLAKE2b-256 63956ad5b186346697a3280ae0f82dffb53816fc88384efe2c574153def7c786

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 62f3a44fece13fcfd2d606d4626a972a0446dbac97ba652d5e88e4c7862058da
MD5 789e3b7f4e2cf5fad7dccfed9bfb995b
BLAKE2b-256 ea0194d4910b7acd880345dac0ffc004b9e693bb5dda038a291eccd35b9239c5

See more details on using hashes here.

File details

Details for the file voyant_api-0.8.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: voyant_api-0.8.1-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.8.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c68074c75fbc71219261fa281c005efc8a25d374a1b3854a12e618e536ba6ef5
MD5 e5551075467ed73699ef42f5240250c7
BLAKE2b-256 f794f740decdc5fbf3d3cb83b9de7313eb16ca97ef66824f2390c95848d3042a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.1-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 59108209103d2d20344ee87e4c632ea92eb501b86fb595317274e4b186d02faf
MD5 ea9fa4db7920f0f31e8d3144f40db3df
BLAKE2b-256 09c4d69da36948552ffc0bf363da5ba7bd02a7be52e05e620e4b66c9d492f8f5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7e863720a7cb16caf0f3b5714d378623228eb3b06672fd8c42c2fb50e0fd49c8
MD5 cfcb625406f3bf297360510c3409eba7
BLAKE2b-256 fb7972623666e930da9b0aee04a3bd44a6cd48923b3d63b54f07e32b575e2142

See more details on using hashes here.

File details

Details for the file voyant_api-0.8.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: voyant_api-0.8.1-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.8.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 e3f6a8d3845089e7746f30c5465d33bb63487636595e3649bc62c3b837acb163
MD5 bf42cfb80b1159b465c4a4aa92c5619d
BLAKE2b-256 a7e21d152c8a93e4cc4126db89b7a7bc5abd6b879cb50940f876e6aa96c53baf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.1-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 591fc297f0ba308be90e91e755eb3ff19598f1572f0d2d36ef49d085a995d2a1
MD5 190f695dbfb87a076c8e109a9329c631
BLAKE2b-256 180f3c5646a9959e0b0e5ec6877a9011fea1eff10e957dd3c0eed76491648c86

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d0adad647923a9b846845805602a537bcf876b55612602bbdeb87aa48525d77b
MD5 73d7eef863dc7da7f09d7a8cf5bd202a
BLAKE2b-256 f1b0ced01a8791663166e7b8a2c4ebf58f3b10d8cab4d6993cdff2045c86f208

See more details on using hashes here.

File details

Details for the file voyant_api-0.8.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: voyant_api-0.8.1-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.8.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 7ee82709601d858b0066066cd2403a7e7dffef001ffcbc96a8307fd28b3089da
MD5 d6b62aea48cf84850650bc1ff57ffa81
BLAKE2b-256 694e64b90092dd1561e99cfd8e95645c9b70f4a31cd493b034db6c453b5d8bb4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.1-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 33bc3a4add130534d12d08a48221021ee1c137c284ab0aea2fb3ece142b9bdde
MD5 8ea9d4afef76a68e24baf1e1da2b34e1
BLAKE2b-256 070cd98d85b96f180093cab7302d0deb6e3f25772ec1fd1a81fcbae176cf9a5d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 aa45910449945c84541359abfa9b59c62ffc7a8e40feafc1f86c740186f3753e
MD5 809004a902e7963f5a03da89b34fef0f
BLAKE2b-256 6182275bc7394f149d19b6084e0a499106912e6e5227b9dad427a731516010d8

See more details on using hashes here.

File details

Details for the file voyant_api-0.8.1-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: voyant_api-0.8.1-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.8.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 73987b905cc7b01a82eb8144e6b6f9d0fdf076543173ba4ddbb9a99b324cad68
MD5 4a0261a4d0d3a50549d82dad3dccee51
BLAKE2b-256 45100dc8b23747bd6a95d72a1672aab50a9349a751bbfcb398b122bf59e72480

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.1-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 3480f5da5392db05c1f0465e6da73979420eb97603080788b3c7cd27e74ded7a
MD5 2866d1edbc0276f11b58ef79d077f2d7
BLAKE2b-256 6675a8d344a67acb1ef055bde811ba3c067c445758832b3519d7c6070b517092

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8c47ce0eea4097a6b38bdd28f7104b42727f2d75c883b4c8fbc382c8fedd155a
MD5 1a500f0d8a8f963805207a29a4456ba8
BLAKE2b-256 86c15256976f7668734a402ce6b7fc9e342712feee6ad84d8e72362a4aba26a7

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