Saltar al contenido principal

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 appzeq.dev/apps/robotics-lab/
  • Sourceapp/artifacts/api-server/public/apps/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

StepDecision
1. PrimeKO42 on
2. LimitKO42 + NM19 + NM28 + NM29 = 4 operators (at the edge; all needed for forces, angular momentum, torque)
3. ScaleRigid-body, human-scale, non-relativistic
4. Precision≤ 0.1% end-effector position
5. CompileC_KO42 + C_NM19 + C_NM28 + C_NM29
6. ExecuteZ encodes DH parameters, joint limits, actuator specs
7. VerifyEnd-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.

curl -s -X POST https://api.zeq.dev/api/playground/compute \
-H "Content-Type: application/json" \
-H "x-demo-key: $DEMO_KEY" \
-d '{
"operators": ["KO42","NM19","NM28","NM29"],
"params": {
"problem": "fk_6dof",
"dh_table": "ur5_like",
"joint_angles_rad": [0,0,0,0,0,0]
}
}' | jq

Expected:

{
"result": {
"ee_position_m": [0.8172, 0.1915, -0.0054],
"position_error_mm": 0.04,
"operators_used": ["KO42","NM19","NM28","NM29"]
}
}

0.04 mm — under 0.005%.


Extend it

  1. Task-priority IK — add a secondary goal (elbow up, obstacle avoidance) in the null space of the Jacobian
  2. Torque-optimal planning — swap RRT cost to ∫ τ² dt; the solver returns a lower-energy trajectory with the same reach
  3. 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

Middleware active. Kernel on the 1.287 Hz HulyaPulse. Awaiting next Zeqond.