A humanoid assembling IKEA furniture logs 35 motors at once, and for each motor it records position, velocity, acceleration and torque. The 2026 Humanoid IKEA Assembly Challenge adds seven camera streams per episode, including infrared pairs from both wrists, and a human-annotated list of the subtasks the robot is working through. This FiftyOne version is a 6-episode, 30.7-minute subset, parsed so the torque plots sit on the same timeline as the wrist cameras.
What is in it
The 2026 Humanoid IKEA Assembly Challenge subset comes from the BitRobot release. It keeps the shortest episode from each of six recording days spanning the collection window, and converts them to native multimodal MCAP episodes. Each of the 6 episodes runs 7,368 to 11,099 frames.
| Stream | What it holds |
|---|---|
/head-camera | Stereo head camera, 1280x480 side by side |
/left-wrist-camera, /right-wrist-camera | RGB wrist views |
/left-wrist-ir1, /left-wrist-ir2, /right-wrist-ir1, /right-wrist-ir2 | Infrared pairs from the wrist depth cameras |
/body-joint-state, /body-joint-command | All 35 motors: position, velocity, acceleration, torque, each with a timeline plot |
/left-gripper-state, /right-gripper-state and command counterparts | State and commands for the Dex1-1 hands |
/end-effector-state, /end-effector-action | End-effector state and action, plus /pivot.plot and /gripper-controls.plot |
/ego-pose, /odometry.plot | Pose as foxglove.PoseInFrame; body height, velocity and yaw rate |
/body-imu.plot, /secondary-imu.plot | The two IMU plots |
/instruction | The annotated subtask sequence |
Each episode also has the fields episode_name, task, recording_day, subtasks, num_subtasks, num_frames and duration.
The subtask sequence is the part that makes the telemetry readable. The labels run in this order: move to table, move table base, pick table leg, insert table leg to table base, rotate leg to tighten, rotate table base, flip table.
Read torque against what the hands see
Load the dataset and launch the App:
import fiftyone as fo import fiftyone.utils.huggingface as fouh dataset = fouh.load_from_hub( "Voxel51/2026-Humanoid-IKEA-Assembly-Challenge", name="2026-Humanoid-IKEA-Assembly-Challenge", persistent=True, ) fo.launch_app(dataset) Open an episode and play it. The wrist RGB views, the infrared pairs and the motor plots share one timeline, so you can scrub to the instruction change for "rotate leg to tighten" and check what the wrist camera shows while the arm torques move.
To start with the longest recording, sort on a per-episode field:
view = dataset.sort_by("num_frames", reverse=True) fo.launch_app(dataset, view=view) The same pattern works on duration, num_subtasks or recording_day.
Know the limits before you build on it
Six episodes is a small sample. Each one is the shortest episode from its recording day, so the subset leans toward short runs and says little about how long assemblies behave. Use it to check the stream layout, build a viewer or test a parser. For a policy-training claim you need the full BitRobot release.
The camera payloads are the source JPEGs passed through unchanged. The conversion from ROS 2 CDR to the FiftyOne MCAP flavor made one repair: the source recordings declare a SportModeState schema that omits its trailing path_point array, and the field is restored at decode so the odometry stream reads. If you decode the original files with a strict schema, expect that mismatch.
The source dataset is released under CC-BY-4.0, and this subset uses the same license. For more robot-learning datasets, from arms to humanoids, see LeRobot v3.0 robot-learning datasets for VLA training, from Franka arms to humanoids.
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 2026 Humanoid IKEA Assembly Challenge subset?
Six MCAP episodes of 7,368 to 11,099 frames each, 30.7 minutes in total. Each episode has seven camera streams, telemetry for 35 motors, gripper and end-effector streams, base odometry, two IMUs and the annotated subtask sequence.
Which sensors does each episode record?
The cameras are a stereo head camera, left and right wrist RGB cameras, and the infrared pairs from both wrist depth cameras. The body streams carry all 35 motors with position, velocity, acceleration and torque, and each has a timeline plot.
How do I load the dataset in FiftyOne?
Call load_from_hub with Voxel51/2026-Humanoid-IKEA-Assembly-Challenge and persistent=True, then launch the App. Sort by num_frames to start with the longest episode.
Which subtasks are annotated?
The instruction stream holds a human-annotated sequence: move to table, move table base, pick table leg, insert table leg to table base, rotate leg to tighten, rotate table base, and flip table. Each episode also stores the sequence in a subtasks field and a num_subtasks count.
Is this the full Humanoid IKEA Assembly Challenge?
No. It is a six-episode subset of the BitRobot release, made of the shortest episode from each of six recording days. It is a sample for inspecting the format, not a training set.
This post first appeared as the original article. I'm Harpreet Sahota, Hacker-in-Residence at The Employable Data Scientist, where we help AI and developer-tool teams ship prototypes, evaluations, and technical content. I also host the Artists of Intelligence podcast. For new field notes by email, subscribe on Substack.
