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

Uploaded CPython 3.14Windows x86-64

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

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

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

Uploaded CPython 3.10macOS 11.0+ ARM64

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

Uploaded CPython 3.9Windows x86-64

voyant_api-0.8.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.8.2-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.2-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: voyant_api-0.8.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.8.2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 b00589a697b0b265f67f4d1bc554f8767d9e75a211ad6081a7fc2638dcb543ea
MD5 295b8c0bd13dc53ee234d92d94d37234
BLAKE2b-256 c115c30d363ed10ec33efe7a4022b2ab38fde9e2439d67259e55429b214cf672

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.2-cp314-cp314-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 58420d65786570eda5d3ec764c80e34b7878ce51780db62ccaae86d5068fce47
MD5 6368df8e2c5c2ac5abbdfebd77eb728b
BLAKE2b-256 52f97b9b6caf78397504af30cd6ff2baa8fdc34af0c3281e51ecd4ffa4f80de4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.2-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8597f26e8a80296a1ec405595e9cf14d305aee83540bf86618a8499348b1194f
MD5 463cb0d9fc8ef40d97724ce248c5ca1b
BLAKE2b-256 aa114a94d15a165f225a943f9c8473a9f9e838404969490c9c3878f74eafa0d7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: voyant_api-0.8.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.8.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 88f6c187f5622a6eb45ee46020668fc872e4601eea43755d855863e2285bdb31
MD5 f369b68d8d8345ec2fddf08cf0a64aa7
BLAKE2b-256 17e09c52ca67026c91633511bc084ff398fda034524a3c9ac17613c54ad2d32e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.2-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 cb080c652c16e90580f4d166f43eff1dd6efd0d0ac35bc2882f1c568526d67e4
MD5 0257779aeffc2f9bfabd22202f0e2246
BLAKE2b-256 f59f5cc6dfaf2d1c1ee537b2ed36058db3f541b68df4a8ee6ec96d6a9d674289

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2b7c70fc4b14913719e7898f3e2992107f4185342c1a3877c9d9218be98475ca
MD5 8b97e8479fb426ccbfb4c6d57fc939bf
BLAKE2b-256 3c45b586268cfe9172c22262634ee33ac08e3fde8338925f03e9e6693867477f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: voyant_api-0.8.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.8.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 14f6b7909ce3b87f7a042607f795704f25be2f2cffd3f9d876131f96658ea832
MD5 48665199c38f9cf4e8225302baa115c6
BLAKE2b-256 32d8eff007f85652af1c2a5c05c01112f5a0b466bbcf14635f97f2d17305ce24

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.2-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 332b93488b8a43f7e7ae28e6d853b8321ade55778f8c17a5d6cc1f6d25a37a9e
MD5 1801d3e63ce173ac68ade8fea2d80ef8
BLAKE2b-256 4e95d501f2e2f82e1187b3709d910e93552c6da6285f9af576c6bc5c7399573b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9ec4f0cace95e23fb1f0cb17b1e452625da1bd5ba4640f4095a714e9cb45224a
MD5 b6f405a3be01d91e260750d3872cb1ed
BLAKE2b-256 c30ac5949e99cfe1396055e544d715d05bc98a376670f979bca0f776f371cdfe

See more details on using hashes here.

File details

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

File metadata

  • Download URL: voyant_api-0.8.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.8.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 55aabcc9b43a8ebe28f0524d950dad32f6c21eb740ebdafe6c9d528bb702efe5
MD5 c28026d16c0d696c911b1268f580893d
BLAKE2b-256 cd965f52cab0dcf38db17e217b5d4370f964305911b976343178486551c92f28

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.2-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 46d1b7dc9df04a83d47b472819cf56879b5a78ce682cecc0da5c375ef9a8fdc0
MD5 716352291f3f6bcd87831e68a031d3c4
BLAKE2b-256 38ecf7a9bed4400039ae6b20284c987b7e3d031c916f0329893509556a295035

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f05511e5963f85369f92bb2e8ad185cef0f3094918cf38fa5e4187182edd91a8
MD5 40dc55fbc4715c68429dd22c84064b5c
BLAKE2b-256 fae67bb89c17b883a5e36e0a35fc2968a18e0fd0145a63671a67a50d71d75a53

See more details on using hashes here.

File details

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

File metadata

  • Download URL: voyant_api-0.8.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.8.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 ded8c9624ee1520c8a966711d3c00fc2c19b7a8fe42e5e7714f3ec834ff9f4e5
MD5 8e18578b45b86d800d725f1b7f9dc317
BLAKE2b-256 673395feab529afddc932be5125f88a266b756f0290abb6a299586948af599e8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.2-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 cfeade8fb27c175506e947e304ea63c1325a56af47c30bc5e527b88938e3fb65
MD5 d604fb032b9569b2c2518241e1472b25
BLAKE2b-256 491d0f311ef63cfa4eb7441dd221d72186110a51c5ff72c691e43d88a2927f1c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2f20850a110d001265b8952030cd84ebde457686d702c53f2619a90d06252c0c
MD5 725fbcee0eb444029920046ae9abaab2
BLAKE2b-256 e802899a9e7f0d5fb1a8a27a322107384f3db3bca62773f35b30b7d6a0ef5e98

See more details on using hashes here.

File details

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

File metadata

  • Download URL: voyant_api-0.8.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.8.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 65ed75b126df1ac0de79b0bdb7d1a6515d28de94673b7da2052f44358a2a7900
MD5 4b58e6fcc6524672cf08dd8acdd80579
BLAKE2b-256 ebb963d6107a3414b5e25df8461de1047a4a202952fce9ef07dfaefbd2f76aba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.2-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 2b22f590de4c354bd558e3433138c4a644e16bdfc04ee947a0324f276db5f515
MD5 86be7c153d6086fabfeff493758cd4fd
BLAKE2b-256 0773ec70394ab9dbff0c8eb0a92c213a5b3ebfdc442221c9134852d1d9ac5053

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8d3dbb64884e5721e4d0ccbd8db5be612571b9724cc6d2052943cf894a89fb7e
MD5 29c5b9e4266f85f931322b6987f9a548
BLAKE2b-256 b1737fe8c7e3f7740e7705f13fe64f2e09b762608bd25cec08b2d553b0e59367

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