Device Configuration
Device configuration is sent under each device's configure map (WebSocket)
or via /{device_type}/{id}/config/{key} HTTP routes. All entries are
persistent — set once, stays until changed.
Configuration availability matrix
| Key | WS configure | HTTP config/ | Session-scoped | Notes |
|---|---|---|---|---|
preset | ✓ | ✓ | ✓ | Mutually exclusive with mount |
basis | ✓ | ✓ | ✓ | Session-level and per-device |
mount | ✓ | ✓ | ✓ | Mutually exclusive with preset |
damping | ✓ | ✓ | ✓ | Scalar and/or directional |
force_gate | ✓ | ✓ | ✓ | Oscillation guard |
handedness | — | ✓ | — | Device-global (right/left) |
torque_scaling | — | ✓ | — | Device-global |
gravity_compensation | — | ✓ | — | Device-global |
home_return | — | ✓ | — | Firmware not yet active |
navigation | ✓ | ✓ | ✓ | Module → see dedicated page |
preset
Selects a named factory configuration that sets mount, basis, and workspace origin in one shot. See Mount & Workspace (presets) for the full list.
- WebSocket
- HTTP
{ "inverse3": [{ "device_id": "049D", "configure": { "preset": { "preset": "arm_front_centered" } } }] }
curl -X POST "http://localhost:10001/inverse3/049D/config/preset?session=:0" \
-d '{"preset":"arm_front_centered"}'
basis
Sets the coordinate-axis remapping. See Basis Permutation for conventions and migration notes.
- WebSocket
- HTTP
{ "session": { "configure": { "basis": { "permutation": "XZY" } } } }
Per-device basis is also supported:
{ "inverse3": [{ "device_id": "049D", "configure": { "basis": { "permutation": "XZY" } } }] }
curl -X POST "http://localhost:10001/inverse3/049D/config/basis?session=:0" \
-d '{"permutation":"XZY"}'
mount
Overrides the physical mount transform. See Mount & Workspace for the coordinate pipeline.
- WebSocket
- HTTP
{
"inverse3": [{
"device_id": "049D",
"configure": {
"mount": {
"transform": {
"position": { "x": 0.0, "y": 0.0, "z": 0.0 },
"rotation": { "w": 1.0, "x": 0.0, "y": 0.0, "z": 0.0 },
"scale": { "x": 1.0, "y": 1.0, "z": 1.0 }
}
}
}
}]
}
curl -X POST "http://localhost:10001/inverse3/049D/config/mount?session=:0" \
-H "Content-Type: application/json" \
-d '{"transform":{"position":{"x":0,"y":0,"z":0},"rotation":{"w":1,"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1}}}'
mount and preset are mutually exclusiveDon't send both in the same message — the service rejects it as ambiguous.
damping
Controls both uniform and directional damping. At least one field must be present.
- WebSocket
- HTTP
{ "inverse3": [{ "device_id": "049D", "configure": { "damping": { "scalar": 0.5 } } }] }
Directional:
{ "inverse3": [{ "device_id": "049D", "configure": { "damping": { "vector": { "x": 0.0, "y": 1.0, "z": 0.0 } } } }] }
curl -X POST "http://localhost:10001/inverse3/049D/config/filters/damping?session=:0" \
-d '{"scalar": 0.5}'
force_gate
Oscillation guard — attenuates force output when oscillation is detected.
| Value | Effect |
|---|---|
gain = 0.0 | Disabled — force passes at full magnitude |
gain = 1.0 | Maximum attenuation during oscillation |
- WebSocket
- HTTP
{ "inverse3": [{ "device_id": "049D", "configure": { "force_gate": { "gain": 0.5 } } }] }
curl -X POST "http://localhost:10001/inverse3/049D/config/filters/force_gate?session=:0" \
-d '{"gain": 0.5}'
HTTP-only device configuration
The following settings are device-global (not session-scoped) and can only be set via HTTP:
| Endpoint | Body | Description |
|---|---|---|
POST /{type}/{id}/config/handedness | "left" or "right" | Inverse3 handedness |
POST /{type}/{id}/config/torque_scaling | { "enabled": bool } | Enable/disable torque scaling |
POST /{type}/{id}/config/gravity_compensation | { "enabled": bool, "scaling_factor": float } | Gravity compensation |
POST /{type}/{id}/config/home_return | { "enabled": bool } | Return-home (firmware not yet active) |
All support GET (read current), POST (set), and DELETE (reset to default).