enpose-api 0.1.0

Public Rust API for the Enpose 6-DoF tracking system
Documentation

Enpose API — Rust

The native Rust implementation of the Enpose tracking API, and the source of truth for the C and C++ bindings (which call into the C ABI this crate exports).

It covers the full client workflow:

  • DiscoveryDeviceDiscovery finds Enpose devices on the local network.
  • Pose streamingPoseStream connects to a device and delivers a live stream of MarkerPose updates.

Usage

use enpose_api::{DeviceDiscovery, PoseStream};

fn main() -> std::io::Result<()> {
    // Find a device, then stream poses from it.
    if let Some(device) = DeviceDiscovery::new().discover()?.into_iter().next() {
        // Threaded mode (preferred): a background thread buffers poses.
        let mut stream = PoseStream::from_device(&device, true)?;
        loop {
            // `true` waits for a pose update (up to a 3-second timeout); pass
            // `false` to poll without waiting.
            for pose in stream.receive_pose_updates(true)? {
                println!("marker {} @ ({}, {}, {})", pose.marker_id, pose.x, pose.y, pose.z);
            }
        }
    }
    Ok(())
}

A PoseStream can also be opened directly from an address with PoseStream::from_ip(ip, create_thread), and it disconnects automatically when dropped.

Building and running

cargo build --release
cargo run --example example   # discover devices and stream poses
cargo test

The release build also produces the C-ABI shared library (target/release/libenpose_api.so) used by the C and C++ bindings.

API reference

The full API reference is published at https://enpose.tech/docs/rust/ (and is available offline via cargo doc --open).