eidon-ai/tracker-pov-imu

Dataset

Eidon Tracker POV: IMU

10

9 commits

updated Sep 20, 2026

See the code

README

Eidon Tracker POV: IMU

24 Hz orientation and motion data from a seven-point IMU harness, paired with the egocentric video in eidon-ai/tracker-pov.

One row per (recording, timestamp, body slot), roughly 780 million rows. Join to the video metadata on recording_id.

This repo holds the sensor data only. There is no video here.

The release sits in three places:

ContentsSize
tracker-povthe 13,451 MP4s and metadata.parquet9.05 TB
this repo (tracker-pov-imu)the IMU streams, 779M rows, same recordings9.5 GB
egocentric-povextra video with no sensor data. A bucket, so load_dataset does not reach it1.55 TB

The first two are one dataset in two pieces, joined on recording_id. The video is in tracker-pov, and the organization page has the overview.

Schema

ColumnTypeDescription
recording_idint32joins to metadata.parquet in the video repo
time_msint32milliseconds from the start of the recording
slotint8body slot, 0 to 6
quat_x, quat_y, quat_z, quat_wfloat32orientation quaternion
accel_x/y/zfloat32accelerometer, m/s² (null on most recordings)
gyro_x/y/zfloat32gyroscope, rad/s (null on most recordings)
mag_x/y/zfloat32magnetometer, µT (null on most recordings)
SlotPositionSlotPosition
0left_hand4right_forearm
1left_forearm5right_shoulder
2left_shoulder6chest
3right_hand

The chest sensor is the natural reference frame: composing chest⁻¹ · limb gives torso-relative arm pose, invariant to which way the wearer is facing.

Usage

from datasets import load_dataset
imu = load_dataset("eidon-ai/tracker-pov-imu", split="train", streaming=True)

Shards are written in ascending recording_id order and a recording is never split across two shards, so shard_index.json lets you fetch one recording without scanning the set:

import json, pandas as pd
from huggingface_hub import hf_hub_download

idx = json.load(open(hf_hub_download("eidon-ai/tracker-pov-imu", "shard_index.json",
                                     repo_type="dataset")))
rid = 4211
shard = next(s["shard"] for s in idx
             if s["first_recording_id"] <= rid <= s["last_recording_id"])
df = pd.read_parquet(f"hf://datasets/eidon-ai/tracker-pov-imu/{shard}",
                     filters=[("recording_id", "=", rid)])
pose = df.pivot(index="time_ms", columns="slot",
                values=["quat_x", "quat_y", "quat_z", "quat_w"])

Caveats

Raw motion covers a minority of recordings. Accelerometer, gyroscope and magnetometer readings follow a per-contributor opt-in, and 2,841 of 13,451 recordings (21.1%) carry them. Everywhere else those columns are null, though orientation quaternions are present throughout. Filter on has_raw_motion in the video repo's metadata.parquet.

A few recordings have an incomplete rig. 129 of 13,451 stream fewer than seven slots, sometimes missing the chest sensor that torso-relative pose depends on. n_slots and has_chest in metadata.parquet let you filter.

Timestamps are relative to the start of each recording rather than wall clock.

Provenance, licence, citation

See the main dataset card. Published under CC-BY-4.0 by Solidic Labs Inc (Eidon AI). For removal requests, contact padilla.samuelk@gmail.com.

egocentric
embodied-ai
manipulation
motion-capture
time-series

Contributors

sampadilla

9 commits

eidon-ai/tracker-pov-imu

Dataset

Eidon Tracker POV: IMU

10

9 commits

updated Sep 20, 2026

See the code

README

Eidon Tracker POV: IMU

24 Hz orientation and motion data from a seven-point IMU harness, paired with the egocentric video in eidon-ai/tracker-pov.

One row per (recording, timestamp, body slot), roughly 780 million rows. Join to the video metadata on recording_id.

This repo holds the sensor data only. There is no video here.

The release sits in three places:

ContentsSize
tracker-povthe 13,451 MP4s and metadata.parquet9.05 TB
this repo (tracker-pov-imu)the IMU streams, 779M rows, same recordings9.5 GB
egocentric-povextra video with no sensor data. A bucket, so load_dataset does not reach it1.55 TB

The first two are one dataset in two pieces, joined on recording_id. The video is in tracker-pov, and the organization page has the overview.

Schema

ColumnTypeDescription
recording_idint32joins to metadata.parquet in the video repo
time_msint32milliseconds from the start of the recording
slotint8body slot, 0 to 6
quat_x, quat_y, quat_z, quat_wfloat32orientation quaternion
accel_x/y/zfloat32accelerometer, m/s² (null on most recordings)
gyro_x/y/zfloat32gyroscope, rad/s (null on most recordings)
mag_x/y/zfloat32magnetometer, µT (null on most recordings)
SlotPositionSlotPosition
0left_hand4right_forearm
1left_forearm5right_shoulder
2left_shoulder6chest
3right_hand

The chest sensor is the natural reference frame: composing chest⁻¹ · limb gives torso-relative arm pose, invariant to which way the wearer is facing.

Usage

from datasets import load_dataset
imu = load_dataset("eidon-ai/tracker-pov-imu", split="train", streaming=True)

Shards are written in ascending recording_id order and a recording is never split across two shards, so shard_index.json lets you fetch one recording without scanning the set:

import json, pandas as pd
from huggingface_hub import hf_hub_download

idx = json.load(open(hf_hub_download("eidon-ai/tracker-pov-imu", "shard_index.json",
                                     repo_type="dataset")))
rid = 4211
shard = next(s["shard"] for s in idx
             if s["first_recording_id"] <= rid <= s["last_recording_id"])
df = pd.read_parquet(f"hf://datasets/eidon-ai/tracker-pov-imu/{shard}",
                     filters=[("recording_id", "=", rid)])
pose = df.pivot(index="time_ms", columns="slot",
                values=["quat_x", "quat_y", "quat_z", "quat_w"])

Caveats

Raw motion covers a minority of recordings. Accelerometer, gyroscope and magnetometer readings follow a per-contributor opt-in, and 2,841 of 13,451 recordings (21.1%) carry them. Everywhere else those columns are null, though orientation quaternions are present throughout. Filter on has_raw_motion in the video repo's metadata.parquet.

A few recordings have an incomplete rig. 129 of 13,451 stream fewer than seven slots, sometimes missing the chest sensor that torso-relative pose depends on. n_slots and has_chest in metadata.parquet let you filter.

Timestamps are relative to the start of each recording rather than wall clock.

Provenance, licence, citation

See the main dataset card. Published under CC-BY-4.0 by Solidic Labs Inc (Eidon AI). For removal requests, contact padilla.samuelk@gmail.com.

egocentric
embodied-ai
manipulation
motion-capture
time-series

Contributors

sampadilla

9 commits