0

I am developing a vision system based on ArUco visual markers. The ArUco library used is cv2.aruco.DICT_7X7_50 and the marker I have used is 2 cm on each side.

I have made the calibration using a 3.6 cm board for each square, obtaining results that I consider satisfactory.

The problem appeared when I started to validate the results provided by the vision system. To perform the validation, a UR10e collaborative robot has been used, in which the ArUco marker has been strategically placed on the tool connected to it. In this way, the robot tool is positioned in a known spatial position and, using a Logitech C525 camera, the marker is located and its position and orientation with respect to the camera is calculated (actually the position of the tool is calculated, for this the reference system is transferred from the center of the aruco to the center of the tool using homogeneous transformation matrices).

The problem I have is that when the tool and its marker are placed just in front of the camera, i.e. without any rotation in X or Y, I seem to have an ambiguity problem because the vision system returns a rotation value in Y. In the same way, when I try to correct the error manually, this numerical error is transferred to the X rotation.

I have posted this problem on GitHub and on the OpenCV forum, but they didn't do much help. Attached are the links to each of the topics:

If you need more detailed information, please do not hesitate to ask for it.

Christoph Rackwitz
  • 11,317
  • 4
  • 27
  • 36
  • 1
    impossible to solve with a single marker. that's just the math of it. -- use "aruco boards" consisting of multiple markers. when it sees multiple markers, it'll have a chance to give a more stable solution. – Christoph Rackwitz Mar 09 '22 at 11:12
  • 1
    you should use two or more _non co-planar_ markers – Miki Mar 09 '22 at 11:19
  • In case of using another marker, the following questions arise for me: Should I place it in a position in a different plane from the Arc I already have in place?How should I modify the code to achieve this improvement? When evaluating the number of detected corners to determine that at least one marker was detected, then I calculate rvec and tvec with the estimatePoseSingleMarkers function but, in case of using another marker, I would simply calculate rvec and tvec for each of the markers. I don't understand why the use of another marker can make me improve the results. – Daniel Bilbao Moreno Mar 09 '22 at 11:55
  • the markers must span a 3-dimensional shape. make sure they aren't parallel. a cube would work, but mind the "quiet zone" white border. if you must place them on parallel planes, make sure the planes have some distance between them (think: different floors of a building, not different rooms on the same floor). -- here is information on "boards". this doesn't mean the markers have to be on one plane. it refers to an arbitrary 3D arrangement of markers https://docs.opencv.org/3.4/db/da9/tutorial_aruco_board_detection.html – Christoph Rackwitz Mar 09 '22 at 12:59
  • Thanks for your help. Could I create a custom aruco board using some aruco markers strategically placed in the TCP of the robot? That is, place the aruco where I want (without it being a conventional square board), detect the corners of these markers and using the `cv2.aruco.Board_create` function, enter the corners, the aruco dictionary I use and their IDs? In this post it says the following : [link](https://docs.opencv.org/4.x/d4/db2/classcv_1_1aruco_1_1Board.html) "A board is a set of markers in the 3D space... **however any 3D layout can be used.**" – Daniel Bilbao Moreno Mar 10 '22 at 11:29

0 Answers0