What is missing
WP-06 named three calibration problems.
Two are implemented:
calibrateToolPoint
calibrateHandEye
The third, calibration of the robot base relative to the cell frame, is not implemented.
ADR-0011 records this explicitly.
Why it matters
Without base-frame calibration there is no direct way to express a target in cell coordinates.
Every target pose given to the arm must already be expressed in the robot's own base frame.
That means a fixture drawing or an externally measured location must currently be transformed manually or by an external tool.
Base-frame calibration is what turns "the part is at this location on the table" into a pose expressed in the robot's base frame.
It is missing while the two more difficult calibration primitives are already present.
Proposed approach
The problem uses the same algebra as hand-eye calibration.
Use A X = X B with:
- the robot's measured flange poses on one side
- external measurements of the same poses on the other
The quaternion-linear form from ADR-0011 Decision 1 applies unchanged:
(L(q_A) - R(q_B)) q_X = 0
The existing null-space-by-shifted-power-iteration approach can also be reused.
Where
include/motionkit/core/calibration.hpp
src/core/calibration.cpp — use calibrateHandEye as the implementation template
Acceptance criteria
References
docs/adr/0011-calibration-refuses-what-it-cannot-determine.md, Consequences.
What is missing
WP-06 named three calibration problems.
Two are implemented:
calibrateToolPointcalibrateHandEyeThe third, calibration of the robot base relative to the cell frame, is not implemented.
ADR-0011 records this explicitly.
Why it matters
Without base-frame calibration there is no direct way to express a target in cell coordinates.
Every target pose given to the arm must already be expressed in the robot's own base frame.
That means a fixture drawing or an externally measured location must currently be transformed manually or by an external tool.
Base-frame calibration is what turns "the part is at this location on the table" into a pose expressed in the robot's base frame.
It is missing while the two more difficult calibration primitives are already present.
Proposed approach
The problem uses the same algebra as hand-eye calibration.
Use
A X = X Bwith:The quaternion-linear form from ADR-0011 Decision 1 applies unchanged:
(L(q_A) - R(q_B)) q_X = 0The existing null-space-by-shifted-power-iteration approach can also be reused.
Where
include/motionkit/core/calibration.hppsrc/core/calibration.cpp— usecalibrateHandEyeas the implementation templateAcceptance criteria
calibrateBaseFrame.axis_spreadso "barely solvable" can be distinguished from "not solvable".DegenerateGeometrydistinct fromNotEnoughSamples.calibrateHandEye, factor the common solve instead.References
docs/adr/0011-calibration-refuses-what-it-cannot-determine.md, Consequences.