0

I am using the (newly released) ArUco 2.0.7 to track some markers. The camera that I am using is mounted to the ceiling facing down, so I only need the x and y coordinates. It can view an area of 2.6m by 1.5m. If I understand the documentation correctly, I supply the sidelength of the markers I'm using in an arbitrary unit, the output of the pose will be in the same unit. So the markers have a sidelength of 19.5cm. As I want my result in meters, I have that value set to 0.195.

However, the results I obtain are not correct. If I place the markers right in the corners of the field of view of the camera, they are not at the corresponding expected x and y coordinates.

I am placing the global origin on one of the corners of the field of view, e.g. (0,0) is the bottom left corner. This is done by transforming all incoming positions into that markers coordinate system using the matrix transforms obtained by getRTMatrix(). Everything seems to be working, except the x and y coordinates are in a wrong unit or scaled. The rotation works perfectly.

Am I missing something? Or can I not expect a good accuracy? The error is significant, e.g. when it should be (2.6,1.5), it is displayed as (1.8, 1), which is roughly an error of 33%.

RunOrVeith
  • 4,487
  • 4
  • 32
  • 50

1 Answers1

1

After some more thought I figured out that simply my camera was calibrated using a smaller distance from the calibration board to the lens than what I need for my use case. This caused the distortion coefficients the be wrong, thus giving me a bogus scale. I re-calibrated using the aruco_calibration tool and am now accurate to roughly 3 or 4 cm, which is good enough for me.

RunOrVeith
  • 4,487
  • 4
  • 32
  • 50