A common language
for touch.
An open standard and developer toolkit for capturing, structuring, and sharing tactile data across sensors, robots, and datasets.
The problem
Every tactile sensor speaks its own dialect. Drivers, calibration, and dataset formats are rebuilt for each device, so work done on one hand rarely reaches the next.
Contour is the layer they all map into. One encoding for taxel readings, geometry, and pose, so touch becomes something you can record, replay, and train on the way you already do with images and text.
The frame
One record for a moment of contact
A Contour frame carries the normalized reading, where it sat in space, and what produced it, stamped in time and tagged with a schema version. The same shape whether it came from a gel fingertip or a taxel skin.
- taxelsthe normalized contact field, row-major
- posewhere the sensor sat, relative to its mount
- geometrythe surface the reading was taken on
- device + schemawhat produced it, versioned
frame: t: 1712345678.921 # unix seconds device: digit / rev3 schema: contour.frame/1.0 taxels: shape: [24, 24] # row-major units: kPa pose: parent: gripper_left xyz: [0.031, -0.004, 0.112] quat: [0.0, 0.0, 0.383, 0.924] geometry: gel.mesh / digit
Why a layer
Any sensor, one shape
A taxel grid, a gel image, a force array. Every device maps into the same frame, so a driver written once reads them all.
A representation models can hold
Touch data stays stable across hardware, so a policy trained on one fingertip transfers to the next instead of starting over.
Owned by the field
Versioned in public, mapped by the people who use it. The role POSIX and JSON play in their domains, for touch.
The project
Built in the open, one surface at a time
A concept in progress. The reference client is still planned, and the listings are illustrative until real.
Help define the standard for touch.
Contour is an open-sourced project looking for the people who will build on it. Read the spec, or shape what comes next.
