poseproxy
Streams one rigid body from any mocap system to a browser. Requires Python 3.10+.
Install from PyPI:
python3 -m venv .venv
. .venv/bin/activate
pip install poseproxy
poseproxy --demo
For Vicon:
pip install 'poseproxy[vicon]'
poseproxy.vicon --host 192.154.4.124 --list # List current object names
poseproxy.vicon --host 192.154.4.124 --subject crazyflie | poseproxy
Vicon uses the root segment; override with --segment NAME. Server defaults:
127.0.0.1:8765; change with --host/--port. Stop with Ctrl-C.
Pose API
Connect to ws://127.0.0.1:8765/pose. Each text message contains:
{"timestamp":1789600000.125,"position":[0.1,-0.2,0.5],"quaternion":[0,0,0,1]}
timestamp: Unix seconds when the producer received the sample.position: meters, right-handed world frame: X forward, Y left, Z up.quaternion: normalized[x,y,z,w], rotating body-local vectors into world coordinates.
All values must be finite numbers. The Vicon adapter converts millimeters to meters and reorders its SDK quaternion to this shared convention.
The stream is read-only. Invalid/occluded poses are skipped; tracking loss means silence. Clients should detect stale data. Slow clients skip pending samples; new connections receive only new samples. Input EOF stops the server.
Other adapters must emit this format as flushed, newline-delimited JSON to stdout, with diagnostics on stderr:
python -u my_mocap_adapter.py | poseproxy
Browser
Run Python on the browser's computer. From a Connect button handler:
const response = await fetch("http://127.0.0.1:8765/health");
if (!response.ok) throw new Error("Pose server unavailable");
const socket = new WebSocket("ws://127.0.0.1:8765/pose");
socket.onmessage = ({data}) => console.log(JSON.parse(data));
Grant Chrome's local/loopback permission. Allowed origins: https://rc.rl.tools,
http://localhost:8000, http://127.0.0.1:8000; extend with --allow-origin URL.
/health returns last_pose_age_s (null before any sample).
From the repository root: pip install ./poseproxy.
Tests: python -B -m unittest discover -s poseproxy/tests -v.
Metadata
Release files for poseproxy 0.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| poseproxy-0.0.2.tar.gz | 8.9 kB | Without provenance | Details |
Release files / poseproxy-0.0.2.tar.gz
| Download URL | poseproxy-0.0.2.tar.gz |
|---|---|
| Size | 8.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ac374d233c46968c365c06154e9326c8b3bbcd18c1fdc574724a78e2ff630519
|
|
BLAKE2b-256 checksum How to use checksums |
85d50b3c82ef95b9f17865e37d04d9e5aef06d20e0415f0f57d90f2091fce679
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Security for poseproxy 0.0.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.