opencad
← Machines
MachinePASS 9/9

Four-bar linkage

Planar crank-rocker four-bar linkage on a ground plate.

Facts

Backend
build123d
Gates
9 pass, 0 fail, 5 n/a
Envelope
160.0 × 118.0 × 20.0 mm
Bodies
4 (4 modelled)
Joints
4
Truth case
yes, scored against held-back geometry

Printable part designs

PartGatesFiles
ground
four-bar-ground
PASS 11/11STEP · STL
crank
four-bar-crank
PASS 11/11STEP · STL
coupler
four-bar-coupler
PASS 11/11STEP · STL
rocker
four-bar-rocker
PASS 11/11STEP · STL

Assembled machine

FileKindSize
four-bar.stepSTEP0.1 MB
four-bar.stlSTL102 KB

Source

assembly.yaml (design contract)

Design intent

Planar crank-rocker four-bar linkage from sources/four-bar-spec.md (the only source, authoritative, text): a 160 x 60 x 5 ground plate with Ø6 pivot holes at O2 (0, 0) and O4 (100, 0), and three stadium links 5 thick and 16 wide with R8 ends and Ø6 holes (crank O2-A 40, coupler A-B 100, rocker O4-B 80 between hole centres). Four separate solids, each drafted and modelled in its own frame and stacked in layers (ground z -5..0, crank 0..5, coupler 5..10, rocker 10..15), joined by four revolute pins about +z into one closed loop: O2, A and O4 form the joint tree from the ground and B is the loop's closing joint. Rest is the open configuration (crank 0 deg, coupler 53.130102 deg, rocker 90 deg; A at (40, 0), B at (100, 80)). The crank pin O2 is motor-driven through one full revolution (0 to 360 deg about +z); the evaluator measures the rocker angle about O4 from rest, its total swing, and the x and y of the coupler point P ((50, 30) in the coupler frame, (46, 58) at rest) from the placed geometry.

Gates

TierGateResultEvidence
Aparts_pass
Every part design passed its own 12 gates and has a handoff STEP
PASSresults/build123d/four-bar/parts.json designs.<design>.gates_ok: four-bar-ground=True, four-bar-crank=True, four-bar-coupler=True, four-bar-rocker=True
Abom_complete
Every body of the bill of materials is in the export, once, with a placement
PASSresults/build123d/four-bar/verify.json solid_count = 4 (expected 4); placements.missing = []; unmatched = []
Ajoint_fidelity
Every joint's child frame lies on its parent frame (axis, offset, rest angle)
PASSresults/build123d/four-bar/verify.json joints.joints.<joint>.checks; failing: none
Aclearances
Static clearances and seats at rest
PASSresults/build123d/four-bar/verify.json clearances.<name>; failing: none
Amotion_clear
Every drive moves through its range without interference; gears mesh; ratios match tooth counts
PASSresults/build123d/four-bar/kinematics.json motions.<name>.max_interference: crankTurn=0
Afluid_domain
Each fluid region is one sealed piece within its volume band and agrees with the source's fluid body
n/aresults/build123d/four-bar/domains.json fluids.<name>:
Bexport_agreement
Each exported body equals its part handoff x placement; the assembled envelope matches
PASSresults/build123d/four-bar/verify.json agreement.bodies.<body>.volume_rel/hausdorff_mm; envelope.max_error = 0.0 (tol 0.1)
Bperformance
Every predicted observable meets the requirement the sources state over its numerical band (value +- 2 u_numerical)
n/aresults/build123d/four-bar/simulate.json observables.<id>.requirement:
Bconservation
Energy, mass and force balances of every analysis close within their tolerance
n/aresults/build123d/four-bar/simulate.json simulations.<id>.conservation:
Brefinement
Every prediction of a mesh ladder is resolved: all its levels finished and the grid-convergence index is within tolerance
n/aresults/build123d/four-bar/simulate.json simulations.<id>.refinement.observables:
Csource_hygiene
The assembly source imports only its declared inputs, formats and lints clean
PASSresults/build123d/four-bar/verify.json hygiene: cad_refs=[] truth_refs=[]; ruff format True, ruff check True
Cboundaries_complete
Every face of a bounded body carries exactly one named boundary
n/aresults/build123d/four-bar/domains.json boundaries.<body>.unassigned/conflicts: none
Cprovenance
Stage JSONs carry provenance stamps; part handoffs are hash-bound; inputs carry provenance
PASSresults/build123d/four-bar/<stage>.json provenance present for ['verify', 'kinematics', 'domains', 'simulate']; parts.json designs.<d>.step_sha256 present: True
Cevidence_separation
No worker-visible artefact reads truth; the assembly source only places declared inputs
PASSresults/build123d/four-bar/verify.json hygiene.truth_refs = []

Bill of materials

BodyKindDesignMaterial
groundmodelledfour-bar-ground
crankmodelledfour-bar-crank
couplermodelledfour-bar-coupler
rockermodelledfour-bar-rocker