On-sensor processing of Sensor Fusion data

We've had success with implementing on-sensor data processing. We could implement rather complex data processor chains that worked reliably, without a hitch — as long as we didn't try to use some data processors on sensor fusion data signals.

Example stream of data from `RSS(raw accelerometer signal)`, moving the sensor around randomly:

``````0.8592529
0.92108154
1.355957
2.1344604
2.8235474
2.854309
2.619751
2.414917
2.376587
2.3988647
2.3880615
2.2908936
2.4415283
``````

As expected, the RSS data processor's input is a CartesianFloat, and its output is a floating point number: the length of the 3D input vector.

However, here's an example stream of data from `RSS(sensor fusion linear acceleration signal)`, moving the sensor around randomly:

``````(x: 6.7e-42, y: 0.0, z: 0.0)
(x: 4.313e-42, y: 0.0, z: 0.0)
(x: 6.952e-42, y: 0.0, z: 0.0)
(x: 7.678e-42, y: 0.0, z: 0.0)
(x: 8.814e-42, y: 0.0, z: 0.0)
(x: 6.596e-42, y: 0.0, z: 0.0)
(x: 6.477e-42, y: 0.0, z: 0.0)
(x: 4.919e-42, y: 0.0, z: 0.0)
(x: 5.765e-42, y: 0.0, z: 0.0)
(x: 7.245e-42, y: 0.0, z: 0.0)
(x: 4.94e-42, y: 0.0, z: 0.0)
(x: 6.21e-42, y: 0.0, z: 0.0)
(x: 8.6e-42, y: 0.0, z: 0.0)
(x: 1.704e-42, y: 0.0, z: 0.0)
(x: 8.89e-42, y: 0.0, z: 0.0)
(x: 8.9e-42, y: 0.0, z: 0.0)
(x: 8.186e-42, y: 0.0, z: 0.0)
(x: 7.695e-42, y: 0.0, z: 0.0)
(x: 8.511e-42, y: 0.0, z: 0.0)
(x: 7.308e-42, y: 0.0, z: 0.0)
...
``````

The first surprise is that the same RSS data processor now produces a CartesianFloat output. The second is that no matter what we do with the sensor, its output is always almost zero, even though the linear acceleration of the sensor definitely wasn't zero during the test.)
The same thing happens with the sensor fusion gravity vector signal.

Those data processors that just let the data through without modification (e.g. passthrough) seem to work. Those that process the data don't.

Is there a reason for the sensor fusion signals not being usable as input for some data processors, or is it a bug?

Model: MetaMotion R
Model number: 5
Firmware: 1.4.4
Hardware: 0.4, 0.3

• @kustra said:
The first surprise is that the same RSS data processor now produces a CartesianFloat output.

I'm not sure why this is a surprise: RSS converts a vectored input into a scalar, which is what was observed with the raw accelerometer data.

The second is that no matter what we do with the sensor, its output is always almost zero, even though the linear acceleration of the sensor definitely wasn't zero during the test.

Sensor fusion data is not supported with processors that transform the data.

Is there a reason for the sensor fusion signals not being usable as input for some data processors

Yes

• @Eric said:

@kustra said:
The first surprise is that the same RSS data processor now produces a CartesianFloat output.

I'm not sure why this is a surprise: RSS converts a vectored input into a scalar, which is what was observed with the raw accelerometer data.

`CartesianFloat` is a term used for a 3D vector with x, y, z components in the SDK. It is surprising to see it as the output type of the RSS data processor.

The second is that no matter what we do with the sensor, its output is always almost zero, even though the linear acceleration of the sensor definitely wasn't zero during the test.

Sensor fusion data is not supported with processors that transform the data.

I see. Thank you for the info.

• The issue here is that the sensor fusion module outputs floating point values natively in the firmware, but the data processor is only implemented to deal with fixed point or integer values. This means you can't manipulate the data on device with the current set of filters (you can pass it through as you noted since it just blindly passes the bits).

I'll update this thread if we end up adding this feature, but in the meantime the SDK should raise an error when trying to do this to make it clear this isn't supported.

• I see. Thanks for the explanation!