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>
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
session_YYYYMMDD_HHMMSS (e.g., session_20260418_143052)episode_NNN (zero-padded 3 digits, e.g., episode_001)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.
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: