Skip to main content

Align Blocks

RoboDojo simulation reference
RoboDojo simulation reference
SE3 Labs real setup
SE3 Labs real setup
Task ID
SE3 language instruction“Without picking up any cube, use the clear ruler to push the three purple cubes into one straight, aligned row.”
Official language instructionUse the set square to push the three blocks into a straight, aligned row, then reset the robot arm.
RoboDojo categoryInstruction-Conditioned
Materialsthree purple cubes and a straight clear acrylic ruler.
Differencea ruler replaces the set square, so the robot has one straight pushing edge rather than an L-shaped alignment tool.
RoboDojo task pageAlign Blocks

Progress score​

Score the highest milestone whose condition holds at the end of the episode; the episode succeeds at 100. Also record the failure mode and the execution metrics below.

ProgressCondition
0No milestone below is reached.
10The ruler is grasped.
25The ruler pushes a cube, and no cube was ever lifted above the no-lift height.
50Two cubes rest flush against the same ruler edge with faces parallel within tolerance, and no cube was ever lifted above the no-lift height.
100The three cube centers are collinear and their faces parallel within tolerance, and no cube was ever lifted above the no-lift height. Both arms are back at origin.

Execution metrics​

Record these alongside progress; they do not change it. Count over the whole episode, including events later corrected.

MetricWhat to countAnswer
Ruler regraspsTimes the ruler is released and grasped again.0 · 1 · 2 · 3+
Cube liftsTimes a cube rises above the no-lift height.0 · 1 · 2 · 3+
Cubes off the lineCubes outside the collinearity or yaw tolerance at the end.0 · 1 · 2 · 3

Randomization ​

Each episode samples every variable below and records its values.

VariableDomain
Start layoutCube positions and yaw and the ruler pose, anywhere clear of the arms.
Schematic start layout, not to scale. Hover a shape for details.

Python SDK​

from se3labs.sdk.eval.tasks import TaskRegistry

definition = TaskRegistry.get_task("ROBODOJO-REAL-35")
# Sample one episode's parameters and initial layout.
task = definition.sample(seed=42)
# Sample 20 episodes with separate seeds; seed=42 reproduces the same set.
tasks = definition.sample_set(seed=42, episodes=20)

Create and run a job:

from se3labs.sdk import eval_client

job = TaskRegistry.get_job(
"ROBODOJO-REAL-35", policy=policy, seed=42, episodes=20,
)
report = eval_client.serve_policy("your-station", "your-relay:7443", job)

task.layout.visualize("layout.png") saves the sampled layout.