Gallery › robotparts › Models × benches
Models × benches
The rack comparison Zach keeps rebuilding: every friction and drivetrain model of the GIM4305-10 (CAN 14) scored on the bam-rack/1 suite by its twin's joint-angle error, q RMS. The pivot is models × tests with each cell's median and spread; two charts put every run, and each model's median, against the twin-grade lines (held-out error at most 1.5 × the 1.08 mrad floor, 1.62 mrad, and at most 2.16 mrad in every motion class). The chart shows the report's verdict at a glance: M4.ripple with the moteus-c1 driver twin sits at about 1 × the floor on the Oct 23 tapes and at 8.2 × on the Oct 24 cycle runs, so no model is twin-grade yet.
The .base file and its data
Every tab above is one entry of this file; the views read these rows. ⋯ in the toolbar copies the current view as YAML.
# Models × benches: the CAN 14 twin-error comparison (suite bam-rack/1), one row per model and run. The pivot is the
# table lane's preset; the charts put every run per model against the twin-grade line (1.5 × the 1.08 mrad floor).
# Check it: node bin/data-ui.mjs check <this file>
data: models.json
facets:
- family
- suite
- test
- { property: q_rms_mrad, as: range }
properties:
variant: { displayName: Model }
model: { displayName: Model id }
backend: { displayName: Backend }
family: { displayName: Family }
rung: { displayName: Rung }
about: { displayName: What it models }
suite: { displayName: Suite }
test: { displayName: Test }
run: { displayName: Run }
q_rms_mrad: { displayName: q RMS }
x_floor: { displayName: × floor }
bench_steps: { displayName: Bench steps }
bench_min: { displayName: Bench time }
sensors_missing: { displayName: Sensors the rack lacks }
views:
- type: pivot
name: Benchmarks
order: [variant]
groupBy: { property: family }
splitBy: [suite, test]
value: { property: q_rms_mrad, summary: Median, display: dist }
- type: chart
name: Every run per model
chart:
mark: { type: tick, thickness: 2, size: 26 }
encoding:
x: { field: q_rms_mrad, scale: { type: log } }
y: { field: variant }
color: { field: suite }
guides:
- { rule: { x: 1.0818 }, label: "floor 1.08" }
- { rule: { x: 1.6227 }, label: "twin-grade ≤ 1.62" }
- { rule: { x: 2.1636 }, label: "every class ≤ 2.16" }
hover: { title: variant, fields: [q_rms_mrad, x_floor, suite, test, run] }
- type: chart
name: Median per model
chart:
mark: bar
encoding:
x: { field: q_rms_mrad, aggregate: median }
y: { field: variant, sort: x }
color: { field: family }
guides:
- { rule: { x: 1.6227 }, label: "twin-grade ≤ 1.62 mrad" }
- type: table
name: All runs
order: [variant, suite, test, run, q_rms_mrad, x_floor]
groupBy: { property: variant }
sort:
- { property: q_rms_mrad, direction: DESC }
display: { q_rms_mrad: bar }
fold: closed
// models.json: 100 rows, 48 KB; the first 3
{
"id": "models-benches",
"title": "Models × benches (CAN 14)",
"titleProperty": "variant",
"source": "lane/datasheet @ ec9a13c: docs/proposals/build_models_report_r2.py (CAN 14, suite bam-rack/1); floor 1.0818 mrad (5 repeats of one tape), twin-grade = 1.5 x floor = 1.62 mrad",
"properties": {
"variant": {
"type": "text",
"width": 230
},
"model": {
"type": "text",
"width": 160
},
"backend": {
"type": "text",
"width": 250
},
"family": {
"type": "text",
"width": 230
},
"rung": {
"type": "text",
"width": 60
},
"about": {
"type": "text",
"width": 240
},
"suite": {
"type": "text",
"width": 170
},
"test": {
"type": "text",
"width": 110
},
"run": {
"type": "text",
"width": 300
},
"q_rms_mrad": {
"type": "number",
"unitText": "mrad",
"decimals": 2,
"width": 110,
"better": "lower"
},
"x_floor": {
"type": "number",
"unitText": "× floor",
"decimals": 2,
"width": 100,
"derived": "q RMS / the 1.082 mrad floor"
},
"bench_steps": {
"type": "list",
"width": 280
},
"bench_min": {
"type": "number",
"unitText": "min",
"width": 90
},
"sensors_missing": {
"type": "list",
"width": 220
},
"model_order": {
"type": "number",
"hidden": true
}
},
"records": {
"columns": [
{
"id": "suite",
"label": "Suite"
},
{
"id": "test",
"label": "Test"
},
{
"id": "run",
"label": "Run"
},
{
"id": "q_rms_mrad",
"label": "q RMS (mrad)"
},
{
"id": "x_floor",
"label": "× floor"
}
]
},
"rows": [
{
"id": "r000",
"variant": "M0.ideal",
"model": "M0.ideal",
"backend": "MuJoCo native",
"family": "M0 · ideal",
"rung": "M0",
"about": "no friction, datasheet inertia",
"suite": null,
"test": null,
"run": null,
"q_rms_mrad": null,
"x_floor": null,
"bench_steps": [
"velocity plateaus + chirps"
],
"bench_min": 6,
"sensors_missing": [],
"model_order": 0
},
{
"id": "r001",
"variant": "M1.datasheet",
"model": "M1.datasheet",
"backend": "MuJoCo native",
"family": "M1 · datasheet",
"rung": "M1",
"about": "the stated values",
"suite": null,
"test": null,
"run": null,
"q_rms_mrad": null,
"x_floor": null,
"bench_steps": [
"read the datasheet"
],
"bench_min": 0,
"sensors_missing": [],
"model_order": 1
},
{
"id": "r002",
"variant": "M2.coulomb_viscous",
"model": "M2.coulomb_viscous",
"backend": "MuJoCo native, soft friction",
"family": "M2 · fitted constant friction",
"rung": "M2",
"about": "Coulomb + viscous",
"suite": "Budget tapes, Oct 23",
"test": "staircase",
"run": "session_01a/runs/s01_can14_staircase",
"q_rms_mrad": 2.9049,
"x_floor": 2.685,
"bench_steps": [
"velocity plateaus + chirps"
],
"bench_min": 6,
"sensors_missing": [],
"model_order": 2
}
]
}README.md
# Models × benches
The rack comparison Zach keeps rebuilding: every friction and drivetrain model of the GIM4305-10 (CAN 14) scored on
the bam-rack/1 suite by its twin's joint-angle error, q RMS. The pivot is models × tests with each cell's median and
spread; two charts put every run, and each model's median, against the twin-grade lines (held-out error at most
1.5 × the 1.08 mrad floor, 1.62 mrad, and at most 2.16 mrad in every motion class). The chart shows the report's
verdict at a glance: M4.ripple with the moteus-c1 driver twin sits at about 1 × the floor on the Oct 23 tapes and
at 8.2 × on the Oct 24 cycle runs, so no model is twin-grade yet.
- **App:** robotparts
- **Replaces:** the hand-built HTML tables and SVG strips of robotparts' models report
(`lane/datasheet` `docs/proposals/build_models_report_r2.py`: `dist_svg`, the per-test rows, the floor and twin-grade
lines drawn by hand) and the table lane's `models.html` prototype (`design/tables-2026-10-25/presets/models.base`).
- **Shows:** `type: pivot` (models grouped by family x suite / test, median with its distribution, click a cell for
its runs); a strip `chart` of every run per model on a log axis, coloured by suite, with the floor and the
twin-grade line as `guides: rule`; a bar `chart` of each model's median (hover a bar for the rows behind it,
click to list them); the runs table. Models with no run yet show "—" in the pivot and are counted out of the
charts, said so in the status line.
- **Data:** `models.json`, written by `source/build.py` from `source/models-runs.json`, the table lane's snapshot
(robotparts lane/tables @ ab5ba92, from lane/datasheet @ ec9a13c), unchanged.
The original UI it replaces
the hand-built HTML tables and SVG strips of robotparts' models report (lane/datasheet docs/proposals/build_models_report_r2.py: dist_svg, the per-test rows, the floor and twin-grade lines drawn by hand) and the table lane's models.html prototype (design/tables-2026-10-25/presets/models.base).
What it shows
type: pivot (models grouped by family x suite / test, median with its distribution, click a cell for its runs); a strip chart of every run per model on a log axis, coloured by suite, with the floor and the twin-grade line as guides: rule; a bar chart of each model's median (hover a bar for the rows behind it, click to list them); the runs table. Models with no run yet show "—" in the pivot and are counted out of the charts, said so in the status line.
Data
models.json, written by source/build.py from source/models-runs.json, the table lane's snapshot (robotparts lane/tables @ ab5ba92, from lane/datasheet @ ec9a13c), unchanged.