If data collection is configured and enables in your robot.yaml Sentinel will record robot teleoperation sessions to MCAP files for downstream training and analysis. Each recording session (by default) contains:

<aside> 💡

Which topics are recorded is completely configurable through your robot.yaml

</aside>

Dataset Directory Structure

datasets/
└── session_YYYYMMDD_HHMMSS/          # Session directory (timestamp-based)
    ├── episode_001/                   # Individual episode
    │   ├── episode_001_0.mcap         # MCAP bag file (split at 1GB; configurable in robot.yaml)
    │   ├── episode_001_1.mcap         # Additional splits if needed
    │   └── sentinel_metadata.json     # Episode metadata
    ├── episode_002/
    │   ├── episode_002_0.mcap
    │   └── sentinel_metadata.json
    └── episode_003/
        ├── episode_003_0.mcap
        └── sentinel_metadata.json

Naming convention

Message Definitions

All data is stored as serialized ROS 2 messages. Joint commands and joint states use standard ROS 2 JointTrajectory and JointState message types. The remaining messages use custom types and are provided below.

XRInput

std_msgs/Header header

# All tracking data (controllers, HMD, skeleton, hands)
XRTransform[] transforms

# Controller buttons
ButtonStates buttons

# Joystick inputs
JoystickInput joystick

XRTransform:

string name                     # Frame ID: "controller_left", "controller_right", "hmd", etc.
geometry_msgs/Transform transform
float32 confidence              # 0.0 to 1.0
bool is_tracked

ButtonStates: