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

Uploaded CPython 3.14Windows x86-64

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

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

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

Uploaded CPython 3.10macOS 11.0+ ARM64

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

Uploaded CPython 3.9Windows x86-64

voyant_api-0.8.0-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.0-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.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: voyant_api-0.8.0-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.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 f1bd72c3724a6a8a78d3a283422f9ee483ce9db9cb989d09f09586f14875307a
MD5 5149d5460cfed899f2812fbd468e7805
BLAKE2b-256 698b1346f2a95f18d9a2da9d07dbd37aff69099c560e56f76fafc7a97a9126b0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.0-cp314-cp314-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 5b2db9521514ceda227a41b2d4d5df415a57fe26fceb655dc8234bb031a4e098
MD5 5891d6ebb02f92a3b6165103b4b1cca5
BLAKE2b-256 64d913ed180abf8154a9597ea336424a4023f0c30f32856ad3e7405f827305b2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a6081e1423ce4ec6eb68b9c2fb82b9ff510e4cd9cedb887a1a7743ec8d959ea6
MD5 4c50f892e7a8c0b0d657cd8ce1655534
BLAKE2b-256 9350a1268b70c851e664804c695ce225069803697cecefddac4f00d394cdedef

See more details on using hashes here.

File details

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

File metadata

  • Download URL: voyant_api-0.8.0-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.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 b9836069434c44b1445e7ab2ac1512d5368f37cba44688c6ad4ae65f59e410fa
MD5 28c01bc92aeb98dafa5c8df04a8ef2e8
BLAKE2b-256 b312b9f20966c5f1ece7e49de45259f633ece82b1199090212fe8596e6257631

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.0-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 23c4decdc383185eaec24849cee70392675f6a68193bac64033a7cf4e34c4a75
MD5 e151e84a1c3d0b7a3185d40d1f58397b
BLAKE2b-256 83aba6e5837834398d11527c4c8c3a53f59b09f6089d8ea7498a9d8f0493bf10

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f8632c0138354955d04ad08e3a4d835a200cca7421d54d95c3eaa51b14e1fdc6
MD5 762b4afe8bfbf23182c282022d482a02
BLAKE2b-256 0f692fefb6cfbf979f4f99972fffc5bb190c521eb716607683ad8af5ecb5f039

See more details on using hashes here.

File details

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

File metadata

  • Download URL: voyant_api-0.8.0-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.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 1bac567c8edada1107bbf7f16c4a3097d4149fd80b1f8fd95afdebf80ef58ffd
MD5 fc938f5fe75ac88ad0ed0bbef3f6f4dd
BLAKE2b-256 27b3ba3b8873909bc70ce386ba5205dace35bf5dbeb2a6e80a019cf56f564458

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.0-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 98d8c41c6ae977b19bd1b68d7d6fed283b8f1a08688a6134a6ab274e03b1af9b
MD5 c3d5ad92ee3fba13c075dd9f1c9d71e9
BLAKE2b-256 9d6fe5224018e3c56db1673b72d9700c4ef9a5c0a95078ce89205d4b6a1722ec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2760334ee68c2ef667f9f1e8bdf0596281b21c999aa3fd7c7452ab27eb164116
MD5 d4b2f9b71c13874306639ddd92aff91d
BLAKE2b-256 0e5ed432c49771931d71f3cf9653f30258edc248c1c5fafa8169a8233f1ee626

See more details on using hashes here.

File details

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

File metadata

  • Download URL: voyant_api-0.8.0-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.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f407c31666eb4f19677f64df1b5cdc3de23ba214e9648b5ea4ed841f8856d8a5
MD5 4202274290c160c46862ab9ccf88a81e
BLAKE2b-256 37036f3fd010c139820e8f9b87a4adb47251fc3d07217d63f7d86af734938d20

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.0-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 c2b324194a6ad598c30c5147f132ea2780182d89d84a834b21e53d89ee7704b0
MD5 9fe85ec7164959925a9301acf522f716
BLAKE2b-256 35f90a030caf7988ed93b0bc7f561ee496c6083cb2acdf9a71317984249dcd8b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 30ac64b5983c56c0f057de8b31167761e5789b91577257cd393f24662458868f
MD5 66ab0e16808d5705963d7e01246d5126
BLAKE2b-256 d37c1c45c4818929ba489ba4adc8ab5b6d20bcd5ec310b08e65889003ca656a4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: voyant_api-0.8.0-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.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 0747bcaf7dfe90c3f0eecc657607628b263e974adcad1e2f160c2634c108dd32
MD5 564eb191915e6419421ec6a71844754f
BLAKE2b-256 f07384117115857283dd0e1cde8aad11668d422709801619486841d9e37352e4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.0-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 7d0e9b94001133a2c9614958b7a7d99ec62a2d69f5aea000cf3ba7d410a1735f
MD5 7b80d961beaf108e3e730d1b8b8d6edb
BLAKE2b-256 6548f3d4ff1d3db65f62cd502188a892e95372138d9e03b22212dd3a76bdee4a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e1d3f2a0bfad9597733c157a07afeee2e8f7453842da31e7d574cf1e2007918a
MD5 cddbf10f4109004219c3ce04a8e0ed73
BLAKE2b-256 0138662c388856eeceb148e0da189aaa2851c16b590855698aba2379cd5ddfb7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: voyant_api-0.8.0-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.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 a96e9456782d8e80f1032934a45c980f1011a03e03e3bbea1d88f901b4c1a24f
MD5 09351e1575a5574ea8f9067da3c281bb
BLAKE2b-256 0bac398911ed7a2d373c16211ddd4236ba7fc7d4e8e3b7af0b4ff0f0078f0365

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.0-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 96787a1c89a462cb7e0c007645823225a914be8e37554a7ae7f12f161563d603
MD5 6d0bf84b5178b36c628a9b8028b49e5f
BLAKE2b-256 5bec0e2f410f67e9796923fc7e675e7f772399b73c50520ce1e3df7deafa7c9c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for voyant_api-0.8.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8f6e1f66be223d2671793587c21f8ab60101ce3475913d55b3c4156e7fbc1082
MD5 a722a7ead49ec1961164ed076e924870
BLAKE2b-256 19bec9d44cd660e7668926f96cf922137b0b8e0ae10e20a31412b77a37ab1a83

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