Skip to content

Motion

For information on how to cite this extension when referencing it in the context of the academic literature, please read Citing BIDS.

Motion datasets formatted using this specification are available on the BIDS examples repository and can be used as helpful guidance when curating new datasets.

Motion recording data

Template:

Legend:
  • For more information about filename elements (for example, entities, suffixes, extensions), follow the links embedded in the filename template.

  • Filename entities or directories between square brackets (for example, [_ses-<label>]) are OPTIONAL.

  • Some entities may only allow specific values, in which case those values are listed in <>, separated by |.

  • _<suffix> means that there are several (>6) valid suffixes for this filename pattern.

  • .<extension> means that there are several (>6) valid extensions for this file type.

  • [.gz] means that both the unzipped and gzipped versions of the extension are valid.

A wide variety of motion capture systems are used in human research, resulting in different proprietary data formats.

This BIDS extension deals with common outputs from motion capture systems such as positions, orientations, or their time derivatives.

The extension is not limited to motion data in physical space but also encompasses simulated movement in virtual space, as far as these are comparable to movements in physical space. Other dynamic objects than human body parts whose motion is tracked may as well be included as tracked objects. This specification does not include raw camera footages (from camera-based or optical motion capture recordings), but includes the positions or orientations computed using such data.

In this specification, positions (and their time derivatives) are represented as Cartesian coordinates along up to three spatial axes, and orientations (and their time derivatives) are represented as Euler angles. However, to cover recordings from computer graphics applications (for example, virtual 3D motion or immersive virtual reality recording in physical space), orientations are also allowed to be represented as quaternions.

In this case, the quaternion channels can be distinguished from channels containing Euler angles based on the entries in columns component and units in the *_channels.tsv file. See subsection on Channels description for further details.

Motion data from one tracking system MUST be stored in a single *_motion.tsv file. A tracking system is defined as a group of motion channels that share hardware properties (the recording device) and software properties (the recording duration and number of samples). For example, if the position time series of multiple optical markers is processed via one recording unit, this MAY be defined as a single tracking system. Note that it is not uncommon to have multiple tracking systems to record at the same time.

Each tracking system MUST have its own *_tracksys-<label>_motion.tsv file, where <label> is a user-defined keyword to be used to identify each file belonging to a tracking system. This is especially helpful when more than one tracking system is used. Data from different tracking systems MUST be stored in different *_tracksys-<label>_motion.tsv files, each of which is accompanied by *_tracksys-<label>_motion.json and *_tracksys-<label>_channels.tsv files. Between tracksys-<label> entity and *_motion.tsv, *_motion.json, or *_channels.tsv suffixes, optional acq-<label> or run-<index> entity MAY be inserted.

One column in the *_tracksys-<label>_motion.tsv file represents one data channel. The ordering of columns MUST match the order of rows in the *_channels.tsv file for unambiguous assignment. All relevant metadata about a tracking systems is stored in accompanying sidecar *_tracksys-<label>_motion.json file.

The source data from each tracking system in their original format, if different from .tsv, can be stored in the /sourcedata directory. The original data format MAY hold more metadata than currently specified in the *_motion.json file.

When multiple tracking systems are used to record motion or motion capture is used alongside the recording of other BIDS modalities and recordings should be interpreted together, it is advised to provide a possibility to synchronize recordings. The preferred way to do so is to use the acquisition time of the first data point of recordings and to store this information in the acq_time column of the *_scans.tsv file. The Note that the BIDS date time format allows optional fractional seconds, which SHOULD be used to maximize the precision of the synchronization. Only if the precision of the synchronization is not high enough, the *_events.tsv file SHOULD be used to synchronize recordings. In this file, the start- and stop time of the recording of a system are specified in relation to a system to synchronize with. If more than two systems are to be synchronized, it is up to the user to indntify the "main" system.

In case a tracking system provides time information with every recorded sample, these time information MAY be stored in form of latencies to recording onset (first sample) in the *_motion.tsv file. If a system has uneven sampling rate behavior, the LATENCY channel can be used to share these information.

To store events alongside motion data when there are multiple tracking systems simultaneously in use, it is RECOMMENDED to designate a tracking system to the events file. Such an events filename SHOULD include the tracksys key and looks like sub-<label>[_ses-<label>]_task-<label>[_tracksys-<label>][_acq-<label>][_run-<index>]_events.tsv. Event latencies can then be related to motion samples of multiple tracking systems also by using acq_time column entries in the *_scans.tsv. The same principle applies when the events file is saved alongside a simultaneously recorded non-motion data (for example EEG).

Sidecar JSON (*_motion.json)

Task information

Key name Requirement Level Data type Description
TaskName REQUIRED string Name of the task. No two tasks should have the same name. The task label included in the filename is derived from this "TaskName" field by removing all non-alphanumeric characters (that is, all except those matching [0-9a-zA-Z]). For example "TaskName" "faces n-back" or "head nodding" will correspond to task labels facesnback and headnodding, respectively. Task names for motion datasets usually contain information about the specific motion task (for example, "walking").
TaskDescription RECOMMENDED string Longer description of the task.
Instructions RECOMMENDED string Text of the instructions given to participants before the recording.

Hardware information

Key name Requirement Level Data type Description
DeviceSerialNumber RECOMMENDED string The serial number of the equipment that produced the measurements. A pseudonym can also be used to prevent the equipment from being identifiable, so long as each pseudonym is unique within the dataset.
Manufacturer RECOMMENDED string Manufacturer of the equipment that produced the measurements.
ManufacturersModelName RECOMMENDED string Manufacturer's model name of the equipment that produced the measurements.
SoftwareVersions RECOMMENDED string Manufacturer's designation of software version of the equipment that produced the measurements.

Institution information

Key name Requirement Level Data type Description
InstitutionName RECOMMENDED string The name of the institution in charge of the equipment that produced the measurements.
InstitutionAddress RECOMMENDED string The address of the institution in charge of the equipment that produced the measurements.
InstitutionalDepartmentName RECOMMENDED string The department in the institution in charge of the equipment that produced the measurements.

Motion specific fields

Motion specific fields MUST be present:

Key name Requirement Level Data type Description
SamplingFrequency REQUIRED number Sampling frequency (in Hz) of all the data in the recording, regardless of their type (for example, 2400). This field refers to the nominal sampling frequency. For motion data one can use "SamplingFrequencyEffective" if nominal and effective differ. The sampling frequency of data channels that deviate from the main (nominal) sampling frequency SHOULD be specified in the "_tracksys-<label>_channels.tsv" file.

Motion specific fields SHOULD be present:

Key name Requirement Level Data type Description
ACCELChannelCount RECOMMENDED integer Number of acceleration channels.

Must be a number greater than or equal to 0.
ANGACCELChannelCount RECOMMENDED integer Number of angular acceleration channels.

Must be a number greater than or equal to 0.
GYROChannelCount RECOMMENDED integer Number of gyrometer channels.

Must be a number greater than or equal to 0.
JNTANGChannelCount RECOMMENDED integer Number of joint angle channels.

Must be a number greater than or equal to 0.
LATENCYChannelCount RECOMMENDED integer Number of Latency channels.

Must be a number greater than or equal to 0.
MAGNChannelCount RECOMMENDED integer Number of magnetometer channels.

Must be a number greater than or equal to 0.
MISCChannelCount RECOMMENDED integer Number of miscellaneous channels not covered otherwise.

Must be a number greater than or equal to 0.
MissingValues RECOMMENDED string Describes how missing values are represented in the given recording system (for example a tracking system in motion), can take values such as, "NaN", "0".
MotionChannelCount RECOMMENDED integer Number of motion channels (for example, 275).

Must be a number greater than or equal to 0.
ORNTChannelCount RECOMMENDED integer Number of orientation channels.

Must be a number greater than or equal to 0.
POSChannelCount RECOMMENDED integer Number of position channels.

Must be a number greater than or equal to 0.
RotationOrder RECOMMENDED string Specify the sequence in which the elemental 3D extrinsic rotations are applied around the three distinct axes.

Must be one of: "XYZ", "XZY", "YXZ", "YZX", "ZXY", "ZYX", "n/a".
RotationRule RECOMMENDED string In case orientation channels are present, indicate whether rotations are applied clockwise around an axis when seen from the positive direction (left-hand rule) or counter-clockwise (right-hand rule). Must be one of: "left-hand", "right-hand".

Must be one of: "left-hand", "right-hand", "n/a".
SamplingFrequencyEffective RECOMMENDED number Effective sampling frequency (in Hz) of all the data in the recording, regardless of their type (for example, 2400) which can be determined if timestamps per sample are provided. If not available, the field takes value n/a.
SpatialAxes RECOMMENDED string Refers to the coordinate system in which the motion data are to be interpreted, if the recorded data can be mapped to a fixed reference frame. A sequence of characters F/B (forward-backward), L/R (left-right), and U/D (up-down). The position of a character in the sequence determines which of the X,Y,Z axes it maps to. For example, "FRD" for X-forward, Y-right, Z-down. For 1D or 2D cases, only specify the used axes and use the character "_" for unused axes ("F_R" when the Y axis is not used, for instance).
SubjectArtefactDescription RECOMMENDED string Freeform description of the observed subject artifact and its possible cause (for example, "Vagus Nerve Stimulator", "non-removable implant"). If this field is set to "n/a", it will be interpreted as absence of major source of artifacts except cardiac and blinks.
TrackedPointsCount RECOMMENDED number Number of different tracked points tracked in a motion tracking system.
TrackingSystemName OPTIONAL string A human-readable name of the tracking system to complement "tracksys" label of the corresponding *_motion.tsv filename.
VELChannelCount RECOMMENDED integer Number of linear velocity channels.

Must be a number greater than or equal to 0.

Example *_tracksys-<label>_motion.json

{
 "SamplingFrequency": 60,
 "SamplingFrequencyEffective": 60.00197437,
 "TaskName": "BIDS Motion fictive example",
 "TrackingSystemName": "IMU Right Hand",
 "TaskDescription": "walking and talking",
 "InstitutionAddress": "Fictive address",
 "InstitutionName": "Fictive Institution",
 "MotionChannelCount": 18,
 "RecordingDuration": 4667.641106,
 "RotationRule": "right-hand",
 "RotationOrder": "ZXY",
 "SpatialAxes": "FRU",
 "SubjectArtefactDescription": "n/a",
 "TrackedPointsCount" : 2,
 "ACCELChannelCount": 6,
 "GYROChannelCount": 6,
 "MAGNChannelCount": 6,
 "Manufacturer": "BWSensing",
 "ManufacturersModelName": "BW-IMU600",
}

In this example, the *_motion.json contains data from one tracking system consisting of two inertial measurement units (imu). If there are additional tracking systems (for example optical motion capture), data from these MUST be stored as separate files like *_tracksys-omcA_motion.tsv and *_tracksys-omcB_motion.tsv. All specified tracking systems MAY share tracked_point defined in *_channels.tsv, when tracking devices are placed on the same object or body part.

Note that the onsets of the recordings SHOULD be stored in the study key file (scans.tsv). Here, date-time information MUST be expressed as indicated in Units. The scans.tsv file contains the filename and the acquisition time of a recording, which MAY be used to synchronize multiple recordings.

Channels description (*_channels.tsv)

Template:

Legend:
  • For more information about filename elements (for example, entities, suffixes, extensions), follow the links embedded in the filename template.

  • Filename entities or directories between square brackets (for example, [_ses-<label>]) are OPTIONAL.

  • Some entities may only allow specific values, in which case those values are listed in <>, separated by |.

  • _<suffix> means that there are several (>6) valid suffixes for this filename pattern.

  • .<extension> means that there are several (>6) valid extensions for this file type.

  • [.gz] means that both the unzipped and gzipped versions of the extension are valid.

This file is REQUIRED as it makes it easy to browse or query over larger collections of datasets. The REQUIRED columns are channel name, component, type, tracked_point and units. Any number of additional columns MAY be added to provide additional information about the channels. The *_tracksys-<label>_channels.tsv file SHOULD give additional information about individual recorded channel, some of which my not be found summarized in *_motion.json.

The columns of the channels description table stored in *_channels.tsv are:

Column name Requirement Level Data type Description
name REQUIRED string Label of the channel.

This column must appear first in the file.
component REQUIRED string Description of the spatial axis or label of quaternion component associated with the channel. For example, x,y,z for position channels, or quat_x, quat_y, quat_z, quat_w for quaternion orientation channels.

This column must appear second in the file.

Must be one of: "x", "y", "z", "quat_x", "quat_y", "quat_z", "quat_w", "n/a".
type REQUIRED string Type of channel; MUST use the channel types listed below. Note that the type MUST be in upper-case.

This column must appear third in the file.

For a list of valid values for this column, see the associated glossary entry.
tracked_point REQUIRED string Label of the point that is being tracked, for example, label of a tracker or a marker (for example,"LeftFoot", "RightWrist").

This column must appear fourth in the file.
units REQUIRED string Physical or virtual unit of the value represented in this channel, for example, '"rad"' or '"deg"' for angular quantities or '"m"' for position data. If motion data is recorded in a virtual space and deviate from standard SI units, the unit used MUST be specified in the sidecar *_motion.json file (for example "vm" for virtual meters). "rad" is used for Euler angles and "n/a" for quaternions. For guidelines about units see the Appendix and Common Principles pages.

This column must appear fifth in the file.
placement RECOMMENDED string Placement of the tracked point on the body (for example, participant, avatar centroid, torso, left arm). It can refer to an external vocabulary for describing body parts.

This column may appear anywhere in the file.
description OPTIONAL string Brief free-text description of the channel, or other information of interest.

This column may appear anywhere in the file.
sampling_frequency OPTIONAL number Sampling rate of the channel in Hz.

This column may appear anywhere in the file.
status OPTIONAL string Data quality observed on the channel. A channel is considered bad if its data quality is compromised by excessive noise. If quality is unknown, then a value of n/a may be used. Description of noise type SHOULD be provided in [status_description].

This column may appear anywhere in the file.

Must be one of: "good", "bad", "n/a".
status_description OPTIONAL string Freeform text description of noise or artifact affecting data quality on the channel. It is meant to explain why the channel was declared bad in the status column.

This column may appear anywhere in the file.
Additional Columns OPTIONAL n/a Additional columns are allowed if they are defined in the associated metadata file.

Restricted keyword list for channel component

Restricted keyword list for column component. When using quaternions to represent orientations, the axial components that corresponds to the three spatial axes MUST be specified as "quat_x", "quat_y", "quat_z", and the non-axial component as "quat_w".

Keyword Description
x Position along the X-axis, or rotation about the X-axis among the Euler angles that represent the orientation, or magnetic field strength along the X-axis.
y Position along the Y-axis or rotation about the Y-axis among the Euler angles that represent the orientation, or magnetic field strength along the Y-axis.
z Position along the Z-axis or rotation about the Z-axis among the Euler angles that represent the orientation, or magnetic field strength along the Z-axis.
quat_x Quaternion component associated with the X-axis.
quat_y Quaternion component associated with the Y-axis.
quat_z Quaternion component associated with the Z-axis.
quat_w Non-axial quaternion component.
n/a Channels that have no corresponding spatial axis.

Restricted keyword list for channel type

Restricted keyword list for column type in alphabetic order. Note that upper-case is REQUIRED:

Keyword Description
ACCEL Accelerometer channel, one channel for each spatial axis. Column component for the axis MUST be added to the *_channels.tsv file (x, y, or z).
ANGACCEL Angular acceleration channel, one channel for each spatial axis. Column component for the axis MUST be added to the *_channels.tsv file (x, y, or z).
GYRO Gyrometer channel, one channel for each spatial axis. Column component for the axis MUST be added to the *_channels.tsv file (x, y, or z).
JNTANG Joint angle channel between two fixed axis belonging to two bodyparts. Angle SHOULD be defined between proximal and distal bodypart in deg.
LATENCY Latency of samples in seconds from recording onset (see acq_time column of the respective *_scans.tsv file). MUST be in form of s[.000000], where s reflects whole seconds, and .000000 reflects OPTIONAL fractional seconds.
MAGN Magnetic field strength, one channel for each spatial axis. Column component for the axis MUST be added to the *_channels.tsv file (x, y or z).
MISC Miscellaneous channels.
ORNT Orientation channel, one channel for each spatial axis or quaternion component. Column component for the axis or quaternion label MUST be added to the *_channels.tsv file (x, y, z, quat_x, quat_y, quat_z, or quat_w).
POS Position in space, one channel for each spatial axis. Column component for the axis MUST be added to the *_channels.tsv file (x, y or z).
VEL Velocity, one channel for each spatial axis. Column component for the axis MUST be added to the *_channels.tsv file (x, y or z).

Example *_channels.tsv

name        component   type   tracked_point   units
t1_acc_x    x           ACCEL  LeftFoot        m/s^2
t1_acc_y    y           ACCEL  LeftFoot        m/s^2
t1_acc_z    z           ACCEL  LeftFoot        m/s^2
t1_gyro_x   x           GYRO   LeftFoot        rad/s
t1_gyro_y   y           GYRO   LeftFoot        rad/s
t1_gyro_z   z           GYRO   LeftFoot        rad/s
…
t2_acc_x    x           ACCEL  RightWrist      m/s^2
t2_acc_y    y           ACCEL  RightWrist      m/s^2
t2_acc_z    z           ACCEL  RightWrist      m/s^2
t2_gyro_x   x           GYRO   RightWrist      rad/s
t2_gyro_y   y           GYRO   RightWrist      rad/s
t2_gyro_z   z           GYRO   RightWrist      rad/s