Skip to content

Repository files navigation

OGLO Python SDK

CIPython 3.10+Firmware 0.9.10+License: Apache-2.0

Python access to the OGLO five-finger tactile glove: 80 taxels per hand at a nominal 250 Hz over USB, plus accelerometer, gyroscope, and optional magnetometer streams.

Release candidate:0.1.0rc3 is a USB-first research SDK for firmware 0.9.10 or newer with CONFIG schema 6. The current golden firmware for new flashes is 0.9.12; deployed 0.9.10 and 0.9.11 gloves remain supported. Older firmware is rejected for both live connections and replay. BLE is experimental and not release-qualified.

This public repository is the sole canonical source for the SDK. Development, issues, pull requests, tags, and releases all belong under OpenGraphLabs/oglo-python; no private or staging repository is an active upstream.

What is included

  • single- and dual-glove discovery with verified logical identity and side
  • typed tactile, IMU, and magnetometer samples
  • device and host timestamps, sequence gaps, and transport-health counters
  • bounded-memory recording and hardware-free replay
  • explicit calibration and stream controls
  • oglo doctor for connection, rate, and integrity checks
  • pure decoders, captured golden vectors, and hardware opt-in tests

Install

Download the wheel from the matching GitHub Release, then install it locally:

python3 -m pip install ./oglo-0.1.0rc3-py3-none-any.whl

To install the tagged source instead:

python3 -m pip install \
"oglo @ git+https://github.com/OpenGraphLabs/oglo-python.git@v0.1.0rc3"

Python 3.10 or newer is required.

Check the glove first

Connect one or two gloves over USB-C and run:

oglo doctor

doctor measures the attached device and host rather than assuming the nominal rates. Resolve any reported identity, firmware, loss, or throughput failure before recording data. Upgrade any live glove that reports firmware older than 0.9.10 or anything other than schema 6. New flashes should use the current 0.9.12 golden image.

Read one glove

This first example is read-only: it does not change calibration or stream settings.

fromitertoolsimportisliceimportoglowithoglo.connect() asglove:
print(glove.info.serial, glove.info.side, glove.info.fw_rev)
forframeinislice(glove.tactile(), 10):
print(frame.seq, frame.counts.shape, int(frame.counts.max()))

frame.counts has shape (5, 4, 4) and contains 12-bit ADC counts, not force. There is no Newton conversion in this release.

Use two hands

left, right=oglo.connect_pair()
try:
print(left.info.serial, right.info.serial)
finally:
left.close()
right.close()

The devices must report opposite sides and distinct logical serials. Samples from two gloves are not hardware-synchronised; see the two-hand example before aligning a dataset.

Calibration changes device state

glove.zero(sweep=5), glove.clean(...), glove.raw(), and glove.rates(...) change device state. Do not put them in a first-connect smoke test. Read the calibration guide and wear the glove through its full motion range before capturing a new zero.

Documentation

Test the complete physical pair

The owner-facing acceptance runner exercises the installed SDK's public API and writes a Markdown/JSON evidence bundle. Its default is read-only with respect to device calibration and settings:

oglo acceptance

Add --interactive for guided finger/IMU actions, --mutations for reversible RAW/CLEAN/rate changes, --zero to deliberately replace calibration, or --soak 75m for the two-hand device-clock rollover gate. See the acceptance guide before enabling state-changing options.

Development

git clone https://github.com/OpenGraphLabs/oglo-python.git
cd oglo-python
python3 -m pip install -e ".[dev]"
python3 -m pytest

The default test suite never opens hardware. With exactly one left/right USB pair attached, the opt-in integration tests exercise every stream, repeated reconnects, two-hand capture, recording, replay, and diagnostics:

python3 -m pytest -m hardware --hardware-seconds 5
python3 -m pytest -m hardware_mutation --hardware-mutations

The mutation suite restores stream settings but deliberately does not run zero(), because a valid sweep needs a person wearing the glove and overwrites the stored calibration.

License and security

Licensed under Apache-2.0. Please report security issues according to SECURITY.md, not through a public issue containing sensitive details.

About

Python SDK for the OGLO five-finger tactile glove

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages