A fiducial can have a convincing image overlay while its reported position sits far behind the real target. That does not necessarily mean detection failed: finding corners and converting them into a metric pose are different operations. This troubleshooting procedure is for ROS 2 integrations where detections look correct but distance, direction or transform publication does not. You will isolate image geometry, physical scale and coordinate frames before changing hardware or adding a depth stream.
1. Freeze the evidence before changing parameters
Start with a stationary camera and a flat, stationary tag. Save the exact image entering the detector, its associated CameraInfo, detected corners, configured tag size, pose output and relevant transforms. Record the image dimensions, frame identifiers and acquisition timestamp.
Disable application-side resizing, cropping and image warping temporarily, unless the detector requires them. If preprocessing cannot be removed, document every geometric operation between acquisition and detection.
Classify the symptom before making changes:
| Symptom | First check | Useful separating test |
|---|---|---|
| Distance wrong by a nearly constant factor | Effective focal length, tag size and units | Compare measured and reported distances at several positions |
| Distance error changes across the image | Distortion handling and stream calibration | Move the stationary target geometry from center to edge |
| Pose correct relative to the camera but wrong in the fixed frame | Transform direction, optical axes and timestamps | Inspect the camera-relative pose before applying extrinsics |
| Detection exists but no tag transform appears | Pose configuration, calibration input and publication settings | Check whether a pose message exists independently of TF |
| Pose jumps mainly when the tag is small or nearly frontal | Corner quality and planar pose ambiguity | Increase apparent target size and introduce modest tilt |
The fiducial pose estimation guide explains the underlying corner-to-pose calculation. Here, the objective is to find which input or transformation makes an otherwise valid calculation wrong.
2. Match the image to its calibration
The most useful first check is whether the detector receives calibration for the image it actually processes. Similar topic names, equal image dimensions and plausible focal lengths do not prove a match.
Check these items together:
- The image and CameraInfo describe the same physical camera and stream.
- Calibration dimensions agree with the delivered geometry, including documented ROI and binning behavior.
- Raw images use the appropriate intrinsic matrix and distortion model.
- Rectified images use the effective rectified projection geometry without applying the original distortion again.
- The calibration remains valid for the current lens, focus and acquisition mode.
For a raw image, the projection model normally uses the intrinsic matrix K and distortion coefficients D. For a rectified monocular image, the effective intrinsics normally come from the upper-left block of P, with no residual distortion assumed by that rectification model.
Do not treat that distinction as a universal instruction to replace K with P in every package. Check which fields the installed detector actually reads. Stereo projection offsets and rectification rotations also require the documented reference-frame interpretation.
The rectified image pose estimation guide covers this choice in detail. A topic suffix suggesting rectification is not evidence that every downstream subscriber uses the correct geometry.
CameraInfo does not always need a newly computed calibration for every image. It does need to describe that image's geometry, and the integration must meet the package's synchronization requirements.
3. Recalculate intrinsics after resizing or cropping
A detector can locate corners correctly in a resized image while receiving focal lengths from the original image. This creates a scale error without necessarily creating an obvious detection error.
For a resize without cropping, the transformed intrinsics are:
If cropping occurs before resizing, subtract the crop origin from the original principal point before multiplying by the scale. Account for the image library's pixel-center convention when subpixel accuracy matters. More general warps need their corresponding geometry, not just a focal-length adjustment.
For a centered, front-facing square, the pinhole distance estimate is:
Here, Z is optical-axis distance, fx is focal length in pixels, L is the physical tag edge, and s is its observed edge length in pixels. This is a diagnostic estimate, not a replacement for full pose estimation under tilt or distortion.
Suppose fx is 1200 pixels, the tag edge is 0.060 m, and its image edge spans 120 pixels:
Now halve the image dimensions. The tag edge becomes 60 pixels. Keeping the original focal length produces:
That factor-of-two error is a calibration mismatch, not evidence that the detector needs depth input. Apply the same audit to preview images, inference inputs and images reconstructed from stored recordings.
4. Verify the physical edge and unit convention
A tag-size parameter establishes metric scale. Measure the exact boundary that the detector's documentation defines as the tag edge. Do not assume it means the full printed sheet, outside margin or mounting plate.
Measure both directions after printing and mounting. A print setting that fits content to a page can change scale. Unequal dimensions, curling or an uneven mounting surface violate the square planar model.
With image geometry fixed, monocular translation scales with the configured physical size:
For example, configuring 0.080 m for an actual 0.040 m edge doubles the estimated translation. A meters-versus-millimeters mistake introduces a factor of 1000.
Use the package's documented units rather than assuming them. Also check whether a launch file, parameter file or per-tag configuration overrides the value you inspected.
A useful diagnostic is the reported-to-measured distance ratio. If that ratio stays near 2 across several positions, investigate size and focal-length scaling first. A fixed positional offset is more suggestive of a reference-point or transform issue, although combined errors can hide either pattern.
5. Separate optical-axis distance from frame errors
Inspect the tag pose in the detector's camera reference frame before transforming it into a robot, base or world frame. This separates the image-to-pose calculation from the transform chain.
The usual optical-frame convention has x pointing right, y down and z forward. Confirm the published frame definition rather than relying on a familiar frame name.
Also distinguish optical-axis distance from straight-line range:
A translation of x = 0.30 m, y = 0 m and z = 0.40 m has a range of 0.50 m. Comparing the reported z value with a diagonal tape measurement would create an apparent error even when the pose is correct.
For a solver that returns the tag-to-optical-camera transform, a consistent chain is:
Confirm the direction of every transform. A function returning the inverse relationship needs inversion before this composition. If rectification rotates the camera reference frame, include that relationship instead of attaching the pose directly to an unrectified optical frame.
A pure rotation about the same origin changes coordinate components but preserves range. Changing the origin through translation can change range too. This makes component-versus-norm comparisons useful when diagnosing frame mistakes.
The optical-frame point transformation guide explains the same axis and transform principles, even when the tag pose itself uses no depth data.
For a moving camera, resolve the transform at the image acquisition time. A current transform applied to an older image can create a motion-dependent position error.
6. Use reprojection and known-distance tests together
Reprojection asks whether the estimated pose explains the observed corners. Transform the model corners into the camera frame, project them with the same image model, and compare them with the detections.
For a square tag, N is 4. Keep corner ordering consistent between the physical model and image detections.
Record the residual in pixels, but do not interpret a small value as proof of correct metric distance. Wrong physical size can preserve a convincing projection because translation scales with it. A mismatched focal length can also produce a deceptively good fit in favorable views.
Combine reprojection with independent measurements:
- Place the tag at several known positions, such as approximately 0.40 m, 0.60 m and 0.80 m along the optical axis.
- Reference measurements to the optical origin as accurately as the fixture permits, not automatically to the housing front.
- Compare optical-axis distance with z and straight-line distance with translation norm.
- Repeat with lateral displacement and modest tag tilt.
- Record repeatability separately from the average error.
If the optical origin is difficult to locate mechanically, a measured displacement between target positions is useful. Moving the tag by 0.20 m along the optical axis tests translation scale without requiring the same certainty about the absolute starting offset.
The calibration accuracy guide beyond reprojection error explains why independent position checks matter. Use application-derived acceptance limits rather than treating one pixel-error threshold as universally sufficient.
7. Treat missing transforms as a separate fault
A valid detection message proves that the detector found a tag. It does not prove that pose estimation is enabled, the required calibration arrived, or a transform broadcaster accepted the estimate.
When no tag transform appears, check the installed package's documented behavior in this order:
- Confirm that pose estimation is enabled and the detected tag has a valid physical-size configuration.
- Confirm that the expected CameraInfo input is connected and accepted.
- Look for a pose output independently of transform publication.
- Inspect warnings about unsupported calibration, synchronization or rejected estimates.
- Check parent and child frame names and whether another node publishes a conflicting relationship.
- Inspect both dynamic and static transform sources, then query the required frame pair at the relevant time.
A calibrated monocular camera can estimate a known planar tag's pose from its image corners. It does not inherently require a depth stream or a camera that publishes its own pose. The detector or pose-estimation node performs that calculation.
If a particular integration requires another input, follow its documented interface. Do not generalize that requirement to all fiducial pose estimation.
8. Check acquisition hardware only after geometry
Do not replace the camera to correct a repeatable scale error before checking calibration and size. Hardware becomes relevant when exposure, motion distortion, focus or insufficient target sampling prevents stable corner measurement.
For replacement planning, compare area scan cameras using the camera finder. Select the required interface and shutter behavior, then verify driver support and calibration access independently.
The LS-CMR-0053 is a GigE area scan camera with a rolling shutter.
- Sensor format
- 1/1.7"
- Lens mount
- C-mount
- Interface
- GigE
- Resolution
- 12 MP
The LS-CMR-0166 is a USB3 area scan camera with a rolling shutter.
- Sensor format
- 1/1.7"
- Interface
- USB3
- Resolution
- 12 MP
- Shutter
- Rolling
These examples illustrate acquisition choices, not a cure for incorrect intrinsics. Their catalog descriptions do not establish ROS 2 driver compatibility. Rolling-shutter acquisition also requires care when the camera or target moves during readout.
If processing moves to vision controllers, carry over the same image geometry, calibration and timestamp checks. Changing the host does not repair a mismatched camera model.
The camera acquisition software compatibility guide helps identify integration requirements before ordering. Specify access to original images, calibration metadata and timestamps rather than relying only on a display preview.
9. Prevent recurrence with a release checklist
Store calibration as a versioned acquisition asset, not an anonymous file copied between machines. Record camera identity, lens and focus state, image dimensions, ROI, binning, distortion model and rectification settings.
Before releasing the application, confirm:
- [ ] The saved diagnostic image is the exact detector input.
- [ ] Raw or rectified geometry is identified explicitly.
- [ ] Every resize and crop has corresponding intrinsic updates.
- [ ] The configured edge matches the documented physical boundary and units.
- [ ] Camera-relative pose passes independent distance checks.
- [ ] Optical-axis distance and straight-line range are compared correctly.
- [ ] Transform direction, origin and acquisition time are verified.
- [ ] Missing pose output is distinguished from missing transform publication.
- [ ] Stationary and moving tests meet separate acceptance limits.
Repeat these checks after changing the camera, lens, focus, acquisition geometry or mounting. The vision calibration recovery guide provides a structured way to decide what must be revalidated.
If geometry is correct but acquisition needs to change, start with the camera configurator. For help isolating an existing distance error, send the saved image, matching calibration, measured tag edge and camera-relative pose through technical support, with application-sensitive information removed.
Questions
Does fiducial pose estimation require a depth stream?
No. A calibrated monocular image and a known physical tag size are enough to estimate a planar tag's pose. Depth can provide an additional measurement, but it does not correct mismatched intrinsics, an incorrect size parameter or a reversed coordinate transform.
Why can the overlay look correct while the distance is wrong?
Corner detection establishes image coordinates, not physical scale. The pose calculation also depends on focal length, distortion handling and the configured physical edge. An incorrect scale can still project the tag corners convincingly, so verify the pose against an independently measured position.
Should a detector use raw or rectified camera calibration?
Inspect the image input expected by the pose package. Raw images generally require their original intrinsics and distortion model. Rectified images require the effective rectified geometry. Confirm which CameraInfo fields the package reads, and do not apply the original distortion to an already rectified image.
Does a small reprojection error prove the pose is accurate?
It proves image-model consistency, not absolute scale or frame correctness. A wrong tag dimension can scale translation without spoiling the projection. Check measured distance, lateral displacement and the final transform chain as independent acceptance tests.
Why are detections published without a tag transform?
Pose estimation may be disabled, required calibration may be missing, or transform publication may be configured separately. Check for an independent pose message and inspect the node's warnings. Confirm frame names and transform availability at the image timestamp before treating the issue as a distance-calculation failure.

