EVALUATION NOTES / ROBOT LEARNINGMJAK Labs

Robot APIs: SO100, YAM, and SO101 pick and place

What this report proves

The trained SO100 V3 policy completed pick and place through authenticated API calls in 10 of 12 primary MuJoCo trials. The API and direct reference agreed on task outcome in 12 of 12 paired trials. The 2 primary failures remain in the results and their traces are available below.

The APIs executed complete pick and place in MuJoCo with live GR00T V3 outputs adapted to YAM and SO101. The fixed controller passed 2 of 2 held out YAM trials and 2 of 2 held out SO101 trials. Each success required a physical grasp, unsupported lift, transfer, release, and a settled object at the destination.

The full history contains 3 successes and 1 failures for YAM, and 3 successes and 5 failures for SO101. V3 received cameras and joint state from an SO100 shadow simulation. These results establish API execution with that transfer controller in the tested scenes; target camera feedback, physical hardware performance, and broader reliability require further evaluation.

Researcher: Akhilesh Chandra

Report updated: 21 October 2026, 18:27:03 IST

We evaluated the trained SO100 policy through authenticated API calls in MuJoCo and compared each trial with direct control. The results below include every primary trial, the follow up work on failed seeds, and the recorded camera and physics evidence.

Results across three arms

SO100, YAM, and SO101 comparison

Each row states the controller and evaluation population so the outcomes can be read in context. SO100 uses its own observations. YAM and SO101 use live policy outputs from the SO100 shadow scene. Their held out results follow controller corrections on seed 42001.

ArmControllerEvaluation groupTrialsSuccessesFailuresEvidence context
SO100V3 policy with the SO100 scene cameras and measured jointsPrimary evaluation1210212 of 12 paired outcomes agree with direct control
YAMLive V3 outputs from an SO100 shadow scene, mapped through FK and IK to target API commandsFixed controller on held out seeds220Full attempt history: 3 successes, 1 failures; includes controller development and held out trials
SO101Live V3 outputs from an SO100 shadow scene, mapped through FK and IK to target API commandsFixed controller on held out seeds220Full attempt history: 3 successes, 5 failures; includes controller development and held out trials

SO100 trial ledger · YAM full report · SO101 full report

Trained policy / SO100

Task outcomes

10/12API policy successes
10/12Direct MuJoCo reference successes
12/12Paired success agreement
55.2% to 95.3%Wilson 95% interval for API success

Success is the benchmark's ordered physical predicate: bilateral cube contact, lift, containment inside the green zone, open jaw release, and at least 0.5 simulated seconds settled. A completed HTTP request alone does not count as success. Seeds and full failure traces are retained. The confidence interval describes sampling uncertainty for these seeds only.

Paired outcome ledger

SeedAPI successDirect successAPI ticksDirect ticksAPI wall sDirect wall sMax action ΔMax cube Δ mAPI error
42000yesyes41141142.79.90.000000000.00000000Not recorded
42001yesyes40140141.89.40.004101570.00003489Not recorded
42002yesyes37737738.68.90.000000000.00000000Not recorded
42003yesyes33833734.97.1Not recordedNot recordedNot recorded
42004nono60060061.712.30.000000000.00000000Not recorded
42005yesyes39639640.68.10.000000000.00000000Not recorded
42006yesyes35035036.27.10.000000000.00000000Not recorded
42007yesyes34734635.67.2Not recordedNot recordedNot recorded
42008nono60060061.012.30.000000000.00000000Not recorded
42009yesyes34834835.07.20.000000000.00000000Not recorded
42010yesyes39640138.18.3Not recordedNot recordedNot recorded
42011yesyes35335335.87.30.015039060.00007006Not recorded

Trajectory deltas compare corresponding recorded ticks only when both traces have the same length. Zero means the API reproduced the direct simulation numerically for that seed; a dash means comparison was unavailable.

Execution path

Latency and control

OperationCallsMedian msP95 msWorst ms
Atomic two camera observation491749.1251.27182.59
Trained policy RPC621227.24239.29258.25
API control step + MuJoCo physics491715.1416.45115.17

Statistics pool every recorded call across API episodes; P95 uses the nearest rank definition. Latency is measured at the loopback HTTP client, including response parsing. Policy RPC time includes server computation and transport to the local policy server. API step latency includes validation, journaling, and MuJoCo integration. Physics is paused during policy inference in this experiment, so these timings do not establish a hard real time robot controller.

API execution audit

What the API did, call by call

The primary SO100 evaluation executed 4917 authenticated POST /v1/sessions/{id}/policy-step calls and 621 actual V3 policy inference RPCs across 12 sessions. Every control tick paired a fresh atomic camera plus joint observation with one absolute six joint target and returned measured MuJoCo state. Tokens and lease secrets are not printed here.

OrderHTTP callPayload / response
1POST /v1/sessionsrobot_id=so100, scene=groot_v3, manual mode, recording on; response has session ID and lease epoch.
2, every tickGET /v1/sessions/{id}/observation?include_rgb=trueAtomically returns front/wrist RGB, joint positions, sequence, object/task state.
3, at chunk boundaryV3 policy RPCTwo live camera frames, measured joint state and task instruction; returns 40 predicted absolute six joint actions.
4, every tickPOST /v1/sessions/{id}/policy-stepLease header, fresh observation sequence, increasing command sequence and the current model produced joint target; returns measured state, contact/task metrics and simulation time.
5DELETE /v1/sessions/{id}; GET /exportClose the session, then download the full per tick API journal.

Actual first control tick, seed 42000

{
  "observation_sequence": 1,
  "command_sequence": 0,
  "positions_rad": [
    0.5325309634208679,
    -1.3794503211975098,
    1.328666090965271,
    1.6192513704299927,
    -2.1013333797454834,
    0.699999988079071
  ],
  "measured_positions_rad": [
    0.5310142602164671,
    -1.367295844510259,
    1.3273086097611002,
    1.625157377439205,
    -2.101003908060749,
    0.6999829452756653
  ],
  "object_position_m_after_step": [
    0.09933514190447397,
    -0.22944205256490283,
    0.0148922445562271
  ],
  "task_success_after_step": false
}

Full model/action/physics trace · Raw API episode journal · HTTP access log · Run contract

Exploratory follow up

Preserved failures and controller repair

The primary 12 seed result above is unchanged. We reran only its two failed seeds with different policy action commitment horizons; this selected seed follow up is not an unbiased new success rate. Commitment 16 rescued seed 42004 through both API and direct control (347 ticks); seed 42008 still failed. All failed trials and videos remain linked.

SeedPrimary successCommitted ticksFollow up API successFollow up ticksEvidence
42004False4False600Trace · Video
42008False4False600Trace · Video
42004False16True347Trace · Video
42008False16False600Trace · Video
Per seed evidence

Policy driven pick and place

Seed 42000

SUCCESS

411 policy ticks · 13.70 simulated seconds · 52 policy calls · 272 bilateral contact ticks · 72.2 mm peak cube center height · direct reference: success

Through authenticated API

Direct MuJoCo reference

front camera at initial
front / initial
wrist camera at initial
wrist / initial
front camera at final
front / final
wrist camera at final
wrist / final

Measured object path

Red = pickup · Green = target zone · Cyan = measured cube trajectory (m)

Cube center height (mm)

72.2314.47411 ticks

API control step latency (ms)

115.170.00411 ticks

Tick level trace · API journal export

Seed 42001

SUCCESS

401 policy ticks · 13.37 simulated seconds · 51 policy calls · 272 bilateral contact ticks · 75.2 mm peak cube center height · direct reference: success

Through authenticated API

Direct MuJoCo reference

front camera at initial
front / initial
wrist camera at initial
wrist / initial
front camera at final
front / final
wrist camera at final
wrist / final

Measured object path

Red = pickup · Green = target zone · Cyan = measured cube trajectory (m)

Cube center height (mm)

75.2314.22401 ticks

API control step latency (ms)

20.440.00401 ticks

Tick level trace · API journal export

Seed 42002

SUCCESS

377 policy ticks · 12.57 simulated seconds · 48 policy calls · 245 bilateral contact ticks · 74.6 mm peak cube center height · direct reference: success

Through authenticated API

Direct MuJoCo reference

front camera at initial
front / initial
wrist camera at initial
wrist / initial
front camera at final
front / final
wrist camera at final
wrist / final

Measured object path

Red = pickup · Green = target zone · Cyan = measured cube trajectory (m)

Cube center height (mm)

74.5914.58377 ticks

API control step latency (ms)

19.200.00377 ticks

Tick level trace · API journal export

Seed 42003

SUCCESS

338 policy ticks · 11.27 simulated seconds · 43 policy calls · 202 bilateral contact ticks · 73.9 mm peak cube center height · direct reference: success

No video captured.

front camera at initial
front / initial
wrist camera at initial
wrist / initial
front camera at final
front / final
wrist camera at final
wrist / final

Measured object path

Red = pickup · Green = target zone · Cyan = measured cube trajectory (m)

Cube center height (mm)

73.9514.69338 ticks

API control step latency (ms)

20.060.00338 ticks

Tick level trace · API journal export

Seed 42004

FAILURE

600 policy ticks · 20.00 simulated seconds · 75 policy calls · 489 bilateral contact ticks · 74.4 mm peak cube center height · direct reference: failure

No video captured.

front camera at initial
front / initial
wrist camera at initial
wrist / initial
front camera at final
front / final
wrist camera at final
wrist / final

Measured object path

Red = pickup · Green = target zone · Cyan = measured cube trajectory (m)

Cube center height (mm)

74.4311.70600 ticks

API control step latency (ms)

22.110.00600 ticks

Tick level trace · API journal export

Seed 42005

SUCCESS

396 policy ticks · 13.20 simulated seconds · 50 policy calls · 260 bilateral contact ticks · 72.8 mm peak cube center height · direct reference: success

No video captured.

front camera at initial
front / initial
wrist camera at initial
wrist / initial
front camera at final
front / final
wrist camera at final
wrist / final

Measured object path

Red = pickup · Green = target zone · Cyan = measured cube trajectory (m)

Cube center height (mm)

72.7714.84396 ticks

API control step latency (ms)

20.990.00396 ticks

Tick level trace · API journal export

Seed 42006

SUCCESS

350 policy ticks · 11.67 simulated seconds · 44 policy calls · 222 bilateral contact ticks · 73.8 mm peak cube center height · direct reference: success

No video captured.

front camera at initial
front / initial
wrist camera at initial
wrist / initial
front camera at final
front / final
wrist camera at final
wrist / final

Measured object path

Red = pickup · Green = target zone · Cyan = measured cube trajectory (m)

Cube center height (mm)

73.7614.78350 ticks

API control step latency (ms)

19.280.00350 ticks

Tick level trace · API journal export

Seed 42007

SUCCESS

347 policy ticks · 11.57 simulated seconds · 44 policy calls · 222 bilateral contact ticks · 75.7 mm peak cube center height · direct reference: success

No video captured.

front camera at initial
front / initial
wrist camera at initial
wrist / initial
front camera at final
front / final
wrist camera at final
wrist / final

Measured object path

Red = pickup · Green = target zone · Cyan = measured cube trajectory (m)

Cube center height (mm)

75.7314.43347 ticks

API control step latency (ms)

19.450.00347 ticks

Tick level trace · API journal export

Seed 42008

FAILURE

600 policy ticks · 20.00 simulated seconds · 75 policy calls · 447 bilateral contact ticks · 20.6 mm peak cube center height · direct reference: failure

No video captured.

front camera at initial
front / initial
wrist camera at initial
wrist / initial
front camera at final
front / final
wrist camera at final
wrist / final

Measured object path

Red = pickup · Green = target zone · Cyan = measured cube trajectory (m)

Cube center height (mm)

20.6213.70600 ticks

API control step latency (ms)

20.040.00600 ticks

Tick level trace · API journal export

Seed 42009

SUCCESS

348 policy ticks · 11.60 simulated seconds · 44 policy calls · 221 bilateral contact ticks · 72.7 mm peak cube center height · direct reference: success

No video captured.

front camera at initial
front / initial
wrist camera at initial
wrist / initial
front camera at final
front / final
wrist camera at final
wrist / final

Measured object path

Red = pickup · Green = target zone · Cyan = measured cube trajectory (m)

Cube center height (mm)

72.7414.46348 ticks

API control step latency (ms)

18.970.00348 ticks

Tick level trace · API journal export

Seed 42010

SUCCESS

396 policy ticks · 13.20 simulated seconds · 50 policy calls · 263 bilateral contact ticks · 73.5 mm peak cube center height · direct reference: success

No video captured.

front camera at initial
front / initial
wrist camera at initial
wrist / initial
front camera at final
front / final
wrist camera at final
wrist / final

Measured object path

Red = pickup · Green = target zone · Cyan = measured cube trajectory (m)

Cube center height (mm)

73.4914.57396 ticks

API control step latency (ms)

19.030.00396 ticks

Tick level trace · API journal export

Seed 42011

SUCCESS

353 policy ticks · 11.77 simulated seconds · 45 policy calls · 220 bilateral contact ticks · 74.4 mm peak cube center height · direct reference: success

No video captured.

front camera at initial
front / initial
wrist camera at initial
wrist / initial
front camera at final
front / final
wrist camera at final
wrist / final

Measured object path

Red = pickup · Green = target zone · Cyan = measured cube trajectory (m)

Cube center height (mm)

74.3814.83353 ticks

API control step latency (ms)

18.910.00353 ticks

Tick level trace · API journal export

Cross embodiment evidence

YAM and SO101 live V3 transfer, plus separate scripted baselines

The trained V3 checkpoint was also evaluated by a live SO100 shadow policy FK/IK transfer controller through each target arm's APIs. It is not target camera conditioned. Open the dedicated YAM + SO101 report for actual model controlled outcomes, failures, videos, API calls and physical gates. The cards below are only scripted API baselines, excluded from policy success counts.

YAM scripted API control

passed

7 completed commands · 99.9 mm maximum lift · 1.0 mm placement error

yam before stage
before
yam grasp stage
grasp
yam lift stage
lift
yam transfer stage
transfer
yam release stage
release
yam after stage
after

Result JSON · Frame trace

SO100 scripted API control

passed

7 completed commands · 101.7 mm maximum lift · 5.8 mm placement error

so100 before stage
before
so100 grasp stage
grasp
so100 lift stage
lift
so100 transfer stage
transfer
so100 release stage
release
so100 after stage
after

Result JSON · Frame trace

SO101 scripted API control

passed

7 completed commands · 96.0 mm maximum lift · 3.2 mm placement error

so101 before stage
before
so101 grasp stage
grasp
so101 lift stage
lift
so101 transfer stage
transfer
so101 release stage
release
so101 after stage
after

Result JSON · Frame trace

Reproducibility

What was run

Checkpoint contract SHA-2569bb09bc4fe31f86c72eef8f7e4821a8a176f25454b2bad164e1f9c4d1dfe97e5
Checkpoint and processor bytesverified
MuJoCo rendererNVIDIA Corporation · NVIDIA A40/PCIe/SSE2 · 4.6.0 NVIDIA 595.91.07
API regression suite68 tests; 0 failures; 0 errors
Policy inputTwo 224×224 RGB cameras (front, wrist), six measured SO100 joint positions, exact task instruction
Policy output40 absolute six joint actions; first 8 consumed at 30 Hz
Dynamics and taskOriginal benchmark MujocoSO100Env and TaskTracker, 2 ms native physics timestep, gravity compensation
API boundaryBearer authentication, lease epoch, sequence and freshness validation, named joint bounds, measured state, per tick journal
Seed set[42000, 42001, 42002, 42003, 42004, 42005, 42006, 42007, 42008, 42009, 42010, 42011]

The API returns two camera images and state atomically under its session lock. Each policy action passes through POST /v1/sessions/{id}/policy-step; the endpoint applies the original benchmark's 1/30 second control tick. Simulated time accumulates against MuJoCo's native 2 ms step. Direct and HTTP arms use the same scene and policy checkpoint.

Scope. This is a GPU backed MuJoCo software evaluation, not proof of physical hardware safety or WAN real time performance. The separate YAM/SO101 experiment uses live SO100 V3 inference and target arm API execution but does not feed target cameras into V3 or provide a target trained checkpoint. MuJoCo physics runs on CPU; NVIDIA EGL renders the videos.
Audit trail

Downloadable evidence

API run manifest · All API outcomes · Direct baseline outcomes · Three arm scripted results · Checkpoint and processor verification · NVIDIA renderer · Regression JUnit · Installed packages · GPU inventory · Policy server log · API server log · Artifact checksums

Publication record

This site contains the report pages and their linked evidence. Session lease values were removed from publication copies of API journals. The original evaluation files remain unchanged. Source and published file hashes record the exported files and redactions.