Search code examples
computer-visionarucopose-estimation

How to improve Aruco Marker Pose Estimation?


I'm having a hard time estimating the positions of the Aruco markers with the camera. In my tests with the DICT_6X6_250 dictionary and the board with 4 markers of 20x20 cm on it, I measured at 6 meters with an error of 20-30 cm. I need more precise measurements.

Is this error rate normal? What can I do to increase accuracy?


Solution

  • In general there are ambiguity issues with Aruco, which you can find here.

    I am doing abit of research on Fiducial Markers and this error rate is pretty normal. The Pose estimation of the markers tend to have errors in x and y rotation and z Translation.

    However, there are some factors that can influence the accuracy of Aruco Pose estimation. Here are some points, that can help improve Pose estimation accuracy, which you should take into consideration:

    • The first is to use a Camara with a high resolution. If the Marker is small in the image plane the pose estimation will not be as accurate.
    • Secondly instead of using cv2.aruco.estimatePoseSingleMarkers()
      I would recommend using cv2.SolvePnP() as it allows you to use different Perspective N Point algorithms to calculate the Pose. You can read more about SolvePnP here and the different methods here
    • For the Aruco Detection cv2.detectMarkers() use a SubPixel Corner refinement method.
    • Lastly you can use a Pose Refinement Method to improve the estimated pose (here). This method reduces the reprojection error of the estimated Pose and as a result you should get better Pose estimation accuracy.