Robotics Lab
Forward and inverse kinematics, path planning, actuator dynamics — the full manipulator pipeline, rendered in the browser and verified at joint-space ground truth.
- Live app — zeq.dev/apps/robotics-lab/
- Source —
apps/zeq-me/public/apps/_in-development/robotics-lab/(1,748 lines) - Operators — KO42 · NM19 · NM28 · NM29
- Error budget — ≤ 0.1% end-effector position vs. DH ground truth
What it solves
A serial-manipulator workbench. Up to 7 DOF, configurable Denavit-Hartenberg parameters, visual joint-space and task-space editing. Three modes:
- FK — given joint angles, render the arm and compute end-effector pose
- IK — given target pose, solve joint angles via damped least squares (Levenberg-Marquardt)
- Planning — RRT* in joint space with NM29-based torque-budget constraints
Actuator dynamics are first-order: τ = I θ̈ + B θ̇ + .... The sim handles saturation limits and joint-torque costs so the planner can trade time for power.
The math
NM19 F = m a (per-link forces)
NM28 L = r × p (link angular momentum)
NM29 τ = r × F (joint torque from link wrench)
FK T_n = T_0 · A_1(θ_1) · … · A_n(θ_n) (DH homogeneous transforms)
IK Δθ = (J^T J + λ² I)^{-1} J^T e (damped least squares)
Operator picks
| Step | Decision |
|---|---|
| 1. Prime | KO42 on |
| 2. Limit | KO42 + NM19 + NM28 + NM29 = 4 operators (at the edge; all needed for forces, angular momentum, torque) |
| 3. Scale | Rigid-body, human-scale, non-relativistic |
| 4. Precision | ≤ 0.1% end-effector position |
| 5. Compile | C_KO42 + C_NM19 + C_NM28 + C_NM29 |
| 6. Execute | Z encodes DH parameters, joint limits, actuator specs |
| 7. Verify | End-effector pose vs. analytical FK for 3 poses |
Runnable worked example — FK of a UR5-like arm at home pose
Home joints all zero. Expected end-effector (x, y, z) = (0.8172, 0.1915, −0.0054) m.
The anonymous playground takes a domain plus named inputs and lets the seven-step wizard pick the operators (always KO42 + the domain fit). It returns a sealed envelope:
curl -s -X POST https://zeqsdk.com/api/playground/compute \
-H "Content-Type: application/json" \
-d '{
"domain": "newtonian-mechanics",
"inputs": { "angle_1": 0, "angle_2": 0, "angle_3": 0, "length": 0.425 }
}' | jq
The response carries value, unit, the operators the wizard chose, the equations it evaluated, and a zeqProof digest. Compare the returned value against the expected UR5-like home-pose end-effector position ((0.8172, 0.1915, −0.0054) m) yourself — the platform hands you a result any node can recompute, not a printed figure to trust.
Extend it
- Task-priority IK — add a secondary goal (elbow up, obstacle avoidance) in the null space of the Jacobian
- Torque-optimal planning — swap RRT cost to
∫ τ² dt; the solver returns a lower-energy trajectory with the same reach - Elastic joints — add NM30 spring-damper to each joint; verify against Spong's single-link reference
Seeds
- Whole-body humanoid — 24+ DOF with balance constraints at 1.287 Hz update
- Cable-driven parallel robots — tension-only NM19 constraints; non-negative λ solver
- Micro-scale manipulators where QM de Broglie wavelength matters for tool-tip resolution
Papers
- Zeq Paper — doi:10.5281/zenodo.18158152
Middleware active. Kernel on the 1.287 Hz HulyaPulse. Awaiting next Zeqond.