Simple motion processing utilities.
npm install --save @ircam/sc-motion
Our goal is to provide unified axis and units across the different platforms. For this reason, we choose to follow the W3C specifications.
Please see FORMAT.md for OSC and WebSocket messages format.
In particular, we support the R-IoT hardware device and the CoMote phone app.
Format utilities for sensor data.
import { xyzToArray } from '@ircam/sc-motion/format.js';
const accelerometer = { x: 9.81, y: 0, z: 0 };
const accelerometerArray = xyzToArray(accelerometer);
console.log({ accelerometer, accelerometerArray });
// {
// accelerometer: { x: 9.81, y: 0, z: 0 },
// accelerometerArray: [ 9.81, 0, 0 ]
// }import { apiConvert } from '@ircam/sc-motion/format.js';
const sensorData = {
api: 'v3',
accelerometer: { x: 9.81, y: 0, z: 0 },
gyroscope: { x: 0, y: 0, z: 0 },
};
const sensorDataConverted = apiConvert({
...sensorData,
outputApi: 'riot-v2-array',
});
console.log(sensorDataConverted);
// {
// api: 'riot-v2-array',
// accelerometer: [ 0, 9.81, 0 ],
// gyroscope: [ 0, 0, 0 ],
// }Data object with x, y, and z properties, for API 'v3'.
Type: Object
Data object with alpha, beta and gamma properties, for API 'v3'.
Type: Object
alphanumber The x-coordinate value.betanumber The y-coordinate value.gammanumber The z-coordinate value.
Data array with three numerical values, for API 'v3'.
0number The first coordinate value.1number The second coordinate value.2number The third coordinate value.
Data sensor according to API version.
Type: (dataXyz | dataAlphaBetaGamma | dataArray)
Converts an angle from degrees to radians.
anglenumber The angle in degrees to be converted.
Returns number The angle in radians.
Converts an angle from radians to degrees.
anglenumber The angle in radians to be converted.
Returns number The angle converted to degrees.
The standard acceleration due to gravity (g) in meters per second squared (m/s²).
Type: number
Converts a value from g-force (g) to Newtons (N).
forcenumber The value in g-force to be converted.
Returns number The equivalent value in Newtons.
Converts a value from Newtons to G-force.
forcenumber The value in Newtons to be converted.
Returns number The equivalent value in G-force.
Normalises a 3D vector in place and returns its original magnitude.
This function modifies the input array array directly by dividing each of its
components by the vector's magnitude (Euclidean norm). If the magnitude is
zero, the vector remains unchanged.
arraydataArray A 3-element array representing the 3D vector to normalise.
Returns number The original magnitude (Euclidean norm) of the vector.
Converts an object with x, y, and z properties into an array.
-
coordinatesdataXyz The object containing x, y, and z properties.
Returns Array<number> An array containing the x, y, and z values in order.
Converts an array of three numerical values into an object with x, y,
and z properties.
-
coordinatesdataArray An array containing three numbers [x, y, z].coordinates.0coordinates.1coordinates.2
Returns dataXyz An object with x, y,
and z properties corresponding to the input array values.
Converts an object containing alpha, beta, and gamma properties into an array.
-
angledataAlphaBetaGamma The input object.
Returns dataArray An array containing the alpha, beta, and gamma values in order.
Converts an array of three elements into an object with properties alpha, beta, and gamma.
-
$0Array$0.0$0.1$0.2
-
angledataArray An array containing three numeric elements [alpha, beta, gamma]. -
anglenumber [0] - The alpha value. -
anglenumber [1] - The beta value. -
anglenumber [2] - The gamma value.
Returns dataAlphaBetaGamma An object with properties alpha, beta, and gamma.
Validates if the provided API is included in the list of valid APIs.
apistring The API name to validate.
Returns boolean Returns true if the API is valid, otherwise false.
- See: apiValid
Copy and converts sensor data between different API formats.
-
optionsObject The format options.options.apistring? The input API format.options.accelerometerdataMotion? The accelerometer data to convert.options.gyroscopedataMotion? The gyroscope data to convert.options.gravitydataMotion? The gravity data to convert.options.outputApistring? The output API format.options.magnetometeroptions.thermometeroptions.absoluteorientationoptions.headingoptions.batteryoptions.controloptions.extra...any
- Throws Error If the format between the specified input and output APIs is unsupported.
Returns Object The converted data. The output is a deep copy of the input data, even if the input and output APIs are the same.
Gravity class for estimating gravity using accelerometer and gyroscope.
-
$0Object (optional, default{})$0.outputApi(optional, default'v3')$0.gyroscopeWeightLinear(optional, default0.9)$0.frequency(optional, defaultundefined)
-
optionsObject Configuration options for the Gravity instance. (optional, default{})
import { Gravity } from '@ircam/sc-motion';
const gravityProcessor = new Gravity({ outputApi: 'v3'});
let motionSensor;
let gravity;
motionSensor = {
api: 'v3',
accelerometer: { x: 9.81, y: 0, z: 0 },
gyroscope: { x: 0, y: 0, z: 0 },
sampleTime: 0,
};
gravity = gravityProcessor.process(motionSensor);
console.log(gravity);
// { x: 9.80665, y: 0, z: 0 }
motionSensor = {
api: 'v3',
accelerometer: { x: 4.40, y: 4.40, z: 0 },
gyroscope: { x: -0.001, y: -0.001, z: 0 },
sampleTime: 0.01,
};
gravity = gravityProcessor.process(motionSensor);
console.log(gravity);
// { x: 6.934348715723057, y: 6.934348715723057, z: 0 }The API version for the input and output data. Current version is 'v3'.
Type: String
- Throws Error Throws an error if
outputApiis invalid.
The sample rate for processing. Used if sampleTime is not provided when processing.
- Throws Error Throws an error if
frequencyis not a positive number.
The linear weight for the gyroscope.
Type: Float
- Throws Error Throws an error if
gyroscopeWeightLinearis not between 0 and 1.
Resets the internal state of the Gravity instance. Clears the last recorded sample time and resets the accelerometer and gyroscope estimates to null.
Sets the attributes for the Gravity instance.
attributesObject The attributes to set. Same as constructor.
- Throws Error Same as constructor.
Processes accelerometer and gyroscope data to estimate gravity.
accelerometer, gyroscope and gravity conform to the api version.
-
paramsObject The input parameters. (optional, default{})params.accelerometerdataMotion The accelerometer data, conforming to the API version.params.gyroscopedataMotion The gyroscope data, conforming to the API version.params.timestampnumber? The timestamp of the current sample in seconds.params.api
- Throws Error Throws an error if API version is missing.
- Throws Error Throws an error if accelerometer data is missing.
- Throws Error Throws an error if gyroscope data is missing.
- Throws Error Throws an error if both sample interval and sample rate are missing (sample rate comes from the constructor or the set method).
Returns dataMotion An object containing the estimated gravity vector. The gravity vector is normalised and conforms to the output API version specified in the constructor.