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.0rc3is 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.
- 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 doctorfor connection, rate, and integrity checks- pure decoders, captured golden vectors, and hardware opt-in tests
Download the wheel from the matching GitHub Release, then install it locally:
python3 -m pip install ./oglo-0.1.0rc3-py3-none-any.whlTo 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.
Connect one or two gloves over USB-C and run:
oglo doctordoctor 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.
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.
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.
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.
- Quickstart
- Compatibility and validation scope
- Data reference
- Calibration
- Recording and replay
- Troubleshooting
- Test your own glove 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 acceptanceAdd --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.
git clone https://github.com/OpenGraphLabs/oglo-python.git
cd oglo-python
python3 -m pip install -e ".[dev]"
python3 -m pytestThe 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-mutationsThe 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.
Licensed under Apache-2.0. Please report security issues according to SECURITY.md, not through a public issue containing sensitive details.