Skip to content

Base-frame calibration: where the robot sits relative to the cell #3

Description

@Onwcan

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

  • Add calibrateBaseFrame.
  • Accept paired stations containing the flange pose measured in robot base coordinates and the same flange pose measured by the external device.
  • Detect degenerate geometry as its own failure mode.
  • Parallel rotation axes across all motions must be recognised as making base position along that axis unrecoverable.
  • Report axis_spread so "barely solvable" can be distinguished from "not solvable".
  • Keep DegenerateGeometry distinct from NotEnoughSamples.
  • Report both RMS residual and worst-case residual.
  • Use fixed-size normal equations.
  • Keep the implementation allocation-free and assert this in a test.
  • Add a noise-free synthetic recovery test that approaches machine precision.
  • Add a deterministic-wobble test showing the reported residual is of the same order as the injected measurement error.
  • If the implementation would substantially duplicate calibrateHandEye, factor the common solve instead.
  • Document in the ADR whether the solve was shared or kept separate and why.
  • Amend the ADR-0011 consequence section.

References

docs/adr/0011-calibration-refuses-what-it-cannot-determine.md, Consequences.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions