The mvnx file format

The MVNX (Moven Open XML format) files contains 3D position, 3D orientation, (and optionally; 3D acceleration, 3D velocity, 3D angular rate, 3D angular acceleration) of each segment (not the sensors) in XML format (ASCII). The following documentation is extracted partially from the XSens original documentation and by review of example files. There are still open point with unknow undocumented behavoir. 

<mvnx>

The MVNX file starts with a version number
<mvnx version="2">

General

The <mvnxInfo> section contains information about the number of frames, the frame rate, recording date, original MVN file, and the contents of velocity, acceleration, angular velocity or angular acceleration data.
<mvnxInfo frameCount="1000"
frameRate="100"
recDate="0"
originalFilename="c:\data\session‐001.mvn"
velData="1"
accData="0"
angVelData="1"
angAccData="0"/>
Attribute Default description
frameCount
count of frames
frameRate
frames per second
recDate
Unknow format, e.g. 1239100243 recorded 2009
originalFilename
absolute path to the original ".mvn" file
velData
0 set to "1" if position velocity data is available
accData
0 set to "1" if position acceleration data is available
angVelData
0 set to "1" if angular velocity data is available
angAccData
0 set to "1" if angular acceleration data is available

Events (markers)

The section <markers> contains the description of markers with frame number and marker name if present. In comparison with nomenclature of Vicon Workstation, markers are events. But there are no event types. It seems to be allowed to define more than one marker with the same name (event type) in a trial. Instead of the common c3d-format the position of the marker is defined by an integer instead of a double defining a real time point with optional definition of a range.
<markers>
    <marker frame="123" name="RHS"/>
    <marker frame="340" name="RTO"/>
</markers>
For compatiblity the following table shows the Vicon workstation event type names and its meaning, which must be used for correct gait cycle detection also for the XSens system to be compatible with the Nimue-Platform applications.

marker (event) name description
RHS
right foot strike
LHS
left foot strike
RTO
right foot off
LTO
left foot off
LG
special meaning in the gaitlab heidelberg: 1. between LHS and LTO to indicate that the kinetics is usable, 2. if there are more then one of this events between LHS and LTO first and last LG event defines start and end of a foot flat phase of the left side
RG
special meaning in the gaitlab heidelberg: 1. between RHS and RTO to indicate that the kinetics is usable, 2. if there are more then one of this events between RHS and RTO first and last RG event defines start and end of a foot flat phase of the right side
GG
general event of no specific side

Comments

The section <comment> contains the text which has been entered when creating a new recording session.

Mesh scale

The <meshScale> data is used for scaling of the visualization of the character in Moven Studio.

Segment Points

The section <segments> defines all positions of connecting joints and anatomical landmarks with respect to origin of that segment (in body frame B).
<segment id="16" label="RightUpperLeg">
<point label="jRightHip" pos_s="0.000000 0.000000 0.000000"/>
<point label="jRightKnee" pos_s="0.000000 0.000000 ‐0.417462"/>
...
</segment>

Security code???

In some exported .mvnx-files a tag with unknow meaning is found:
<securityCode code="0639359e" />

Frames

The section <frames> contains the actual motion capture data. Each time frame consists of one row, containing 23 segments with 7 channels per segment (4 quaternion, 3 position) = 161 columns of data.

All kinematic data is expressed in the global coordinates system (with Z up).

Format of the data:

Sample 1 <F v=" GBqseg1 Gposseg1 GBqseg2 Gposseg2 … GBqseg23 Gposseg23 " />

Sample 2 <F v=" GBqseg1 Gposseg1 GBqseg2 Gposseg2 … GBqseg23 Gposseg23 " />

Sample n <F v=" GBqseg1 Gposseg1 GBqseg2 Gposseg2 … GBqseg23 Gposseg23 " />


GBqseg is the quaternion (q0, q1, q2, q3) describing the rotation of the segment in the global frame

Gposseg is the position (x,y,z) of the origin of the segment in the global frame

When kinematic data other than position and orientation have been selected in the preference menuthey will be written after the <frames> section:


<velocity>
Sample 1 <F v=" Gvseg1 Gvseg2 … Gvseg23 " />
Sample 2 <F v=" Gvseg1 Gvseg2 … Gvseg23 " />

Sample n <F v=" Gvseg1 Gvseg2 … Gvseg23 " />
</velocity>

<ang_velocity>
Sample 1 <F v=" Gwseg1 Gwseg2 … Gwseg23 " />
Sample 2 <F v=" Gwseg1 Gwseg2 … Gwseg23 " />

Sample n <F v=" Gwseg1 Gwseg2 … Gwseg23 " />
</ang_velocity>

Gvseg is the 1x3 velocity vector (x, y, z) of the origin of the segment in the global frame in [m/s].
Gwseg is the 1x3 angular velocity vector (x, y, z) of the origin of the segment in the global frame in [rad/s].

<acceleration>
Sample 1 <F v=" Gaseg1 Gaseg2 … Gaseg23 " />
  Sample 2 <F v=" Gaseg1 Gaseg2 … Gaseg23 " />

Sample n <F v=" Gaseg1 Gaseg2 … Gaseg23 " />

</acceleration>
Gaseg is the 1x3 acceleration vector (x, y, z) of the origin of the segment in the global frame in [m/(s*s)].
Gwaseg is the 1x3 angular acceleration vector (x, y, z) of the origin of the segment in the global frame in [rad/(s*s)].
<ang_acceleration>
Sample 1 <F v=" Gwaseg1 Gwaseg2 … Gwaseg23 " />
  Sample 2 <F v=" Gwaseg1 Gwaseg2 … Gwaseg23 " />

Sample n <F v=" Gwaseg1 Gwaseg2 … Gwaseg23 " />

</ang_acceleration>

T-pose

The <tpose> section describes the positions and rotations of all segments during a T‐pose. All kinematic data is expressed in the global coordinate system.

Definition of segment axes

frames figure

Be careful: The use of the colors in the Moven Software and its documentation is different from use in the Nimue modules. Last is defined the same as in showc4d from Jan Simon.

Axis Nimue (Show4d) and showc4d (MoMo) Moven
x
red blue
y
green green
z
blue red

Segment Label
1 Pelvis
2 L5
3 L3
4 T12
5 T8
6 Neck
7 Head
8 RightShoulder
9 RightUpperArm
10 RightForeArm
11 RightHand
12 LeftShoulder
13 LeftUpperArm
14 LeftForeArm
15 LeftHand
16 RightUpperLeg
17 RightLowerLeg
18 RightFoot
19 RightToe
20 LeftUpperLeg
21 LeftLowerLeg
22 LeftFoot
23 LeftToe

Disadvantages of this file format

It is nice to have an xml export but the definition is not state of the art:

Disadvantages due to missing content:
Known bugs:

Processing flags

Processing flags are used to specify which parts of the .mvnx file should be loaded (if available).

Attribute name default value Description
EVENTS
true
POSITION
false
position in local coordinates of a segments coordinate system
ORIGIN
true
position of the orign of a segments coordinate system
ORIENTATION
false
orientation of a segments coordinate system saved as quaternions
VELOCITY
false
ACCELERATION
false
TIMESERIES
true
timeseries (POSITION and/or ORIGIN) should be loaded. This flag is automatically set to true, if one of the flags POSITION or ORIGIN is set to true.
QUATERNIONS
false
If set to false the orientations are defined by column vectors of a 3x3 matrix instead of the original quaternions.

If trial loading is specified by a "labelset" a subset of timeseries can be specified to be loaded. For the label names suffix conventions are defined as follows:

Label suffix name Description
Position
appended to specify position data with math type 3d-vector
Velocity
Acceleration
Rotation
appended to specify rotation data with math type 3x3-matrix or quaternion
AngularVelocity
AngularAcceleration