Interfacing with the Sensel Morph via senselosc. 2020, Till Bovermann (http://tai-studio.org | http://lfsaw.de)

senselosc command-line interface, get it at https://github.com/tai-studio/senselosc .create new instance
| deviceID |
the id of the sensel morph (currently only |
run the senselosc binary in a terminal
| scanDetail |
set scanning detail (0: low, 1:med, 2:high) |
binary path to the senselosc binary.
start operating
| force |
when |
stop operating
device ID
Dictionary of ControlSpecs used to normalise incoming values.
Collected values are stored in dictionaries.
Each contact has the following elements stored. Ranges are normalised (vals.c) or raw (deviceVals.c, in sensels or gram).
state | one of [\invalid, \start, \drag, \end], raw values are [0, 1, 2, 3] |
x | x-pos |
y | y-pos |
force | pressure |
area | covered area |
dist | distance to center position |
wDist | distance to weighted center position |
orientation | orientation of elipsis |
majAxis | major axis length of elipsis |
minAxis | minor axis length of elipsis |
peakX | x-pos of pressure peak |
peakY | y-pos of pressure peak |
peakForce | pressure at pressure peak |
minX | upper-left x-pos of bounding box |
minY | upper-left y-pos of bounding box |
maxX | lower-right x-pos of bounding box |
maxY | lower-right y-pos of bounding box |
dX | delta x since last update |
dY | delta y since last update |
dForce | delta force since last update |
dArea | delta area since last update |
The avg has the following elements stored. Ranges are normalised (vals.avg) or raw (deviceVals.avg, in sensels or gram).
\numContacts | number of contacts (normalised: i/16) |
\x | average x-pos |
\y | average y-pos |
\force | average pressure |
\dist | average distance between average position and all contacts |
\area | average covered area |
\wX | force-weighted x-pos |
\wY | force-weighted y-pos |
\tForce | summed forces of all contacts |
\wDist | average distance between weighted average position and all contacts |
Below you can see how the different parametes affect each other. Shown are: positions and force of two contacts, their average position and force (contantly in-between), and their weighted average position and force (moving from one to the other while force is altered).

Dictionary of all stored average values (normalised)
Array of all stored contact values (normalised)
Dictionary of all stored (previous) values (normalised)
Dictionary of all stored (previous) values (raw)
Dictionary of all contacts that were updated in the last frame
Array of states, each one of [0, 1, 2, 3].
actions are evaluated in the order
avgActioncontactPreActioncontactDownActioncontactDragActioncontactUpActioncontactPostActionsyncActionremove all actions
creates a graphical display of the morph's state.
no sound example
simple sound example
visualisation