$

$ teds read --post gr00t-x-embodiment-sim-fiftyone-analysis

GR00T-X-Embodiment-Sim: Seven Robot Bodies, 42 Episodes, Compared in FiftyOne

GR00T-X-Embodiment-Sim has six episodes from each of seven robot bodies. Compare cameras and joint telemetry on one timeline in FiftyOne.

Most robot datasets give you one body doing many things. GR00T-X-Embodiment-Sim gives you seven bodies, each with six episodes: a Unitree G1, two GR1 setups, three Panda setups, and an R1 Pro. The FiftyOne version puts camera streams and joint telemetry for each episode on one timeline, so you can open a Panda episode and a G1 episode back to back and compare how each body works through its task.

What is in it

GR00T-X-Embodiment-Sim is a 42-episode subset of NVIDIA’s PhysicalAI-Robotics-GR00T-X-Embodiment-Sim, with six episodes from each of seven embodiments. The Voxel51 version converts each one to a native multimodal MCAP episode. Camera streams are stored as H.264 foxglove.CompressedVideo (Annex-B, no B-frames).

The seven embodiments, as the card names them:

Embodiment Group
single_panda_gripper Panda
bimanual_panda_gripper Panda
bimanual_panda_hand Panda
gr1_arms_waist GR1
gr1_full_upper_body GR1
sim_behavior_r1_pro R1 Pro
unitree_g1 Unitree G1

Telemetry is split into named channels following the source modality.json. The card’s examples are /joint-position-state, /end-effector-position-absolute-state, and /gripper-qpos-action. Each channel gets a timeline plot channel, which is what lets the App draw the joint curves next to the video.

Each episode also has these fields:

Field What it holds
embodiment Which of the seven bodies
task The task label
source_task The task label in the source release
episode_index Episode index
num_frames Frame count
duration Episode length

Compare bodies on one timeline

Load it and launch the App:

import fiftyone as fo
import fiftyone.utils.huggingface as fouh

dataset = fouh.load_from_hub(
    "Voxel51/GR00T-X-Embodiment-Sim",
    name="GR00T-X-Embodiment-Sim",
    persistent=True,
)
fo.launch_app(dataset)

Start by confirming the split, then narrow to one body:

from fiftyone import ViewField as F

print(dataset.count_values("embodiment"))

g1 = dataset.match(F("embodiment") == "unitree_g1")
fo.launch_app(g1)

Each embodiment should report 6. Open one unitree_g1 episode, play it, and watch the joint plots move with the camera. Then switch the filter to gr1_full_upper_body or a Panda setup and compare how the same kind of telemetry looks on a different body. The task and source_task fields let you check which task each episode belongs to before you compare.

Know the limits before you train on it

This is a subset. Six episodes per body is enough to look at how each body behaves, and too few to say anything statistical about one. Sorting by num_frames or duration shows how much the episode lengths differ within a body, which is worth checking before you treat the six as representative.

The card does not list the tasks, the number of camera streams per body, or the frame counts, so read those from the loaded task, num_frames, and duration fields instead of assuming them. The three Panda setups and two GR1 setups are separate embodiments in the card, so group or compare them by the full embodiment string, not by the family name.

The conversion changes the format, not the contents: it subsets the source episodes and converts them from LeRobot parquet and mp4 to MCAP. NVIDIA released the source dataset under CC-BY-4.0, and this subset uses the same license.

For a wider survey of robot-learning datasets that were converted for inspection in FiftyOne, including arms, bimanual setups and humanoids, see From Franka Arms to Humanoids: LeRobot v3.0 Datasets for VLA Training. For another humanoid dataset with joint telemetry next to camera streams, see the Humanoid IKEA Assembly Challenge dataset in FiftyOne.

For more of my FiftyOne dataset notes, see my Voxel51 author page, and to curate your own robot data in the same tool, try Voxel51.

Frequently asked questions

What is in the GR00T-X-Embodiment-Sim dataset?

A 42-episode subset of NVIDIA's PhysicalAI-Robotics-GR00T-X-Embodiment-Sim, with six episodes from each of seven embodiments. Each episode carries camera streams, per-part robot state and action telemetry with timeline plot channels, and the task instruction.

Which robot bodies does GR00T-X-Embodiment-Sim cover?

The card lists single_panda_gripper, bimanual_panda_gripper, bimanual_panda_hand, gr1_arms_waist, gr1_full_upper_body, sim_behavior_r1_pro, and unitree_g1. That is three Panda setups, two GR1 setups, an R1 Pro, and a Unitree G1.

How do I load GR00T-X-Embodiment-Sim in FiftyOne?

Call load_from_hub with Voxel51/GR00T-X-Embodiment-Sim and persistent=True, then launch the App. Each episode has an embodiment field you can filter or group on.

What per-episode fields does GR00T-X-Embodiment-Sim have?

Each episode has embodiment, task, source_task, episode_index, num_frames, and duration. Telemetry is split into named channels following the source modality.json, such as /joint-position-state and /gripper-qpos-action.

What license does GR00T-X-Embodiment-Sim use?

NVIDIA released the source dataset under CC-BY-4.0, and this subset is distributed under the same license. The changes from the source are episode subsetting and conversion from LeRobot parquet and mp4 format to MCAP.