Trying to get transformation between 2 arUcos

Hi, I have 1 camera that see 4 arUcos placed in a box, as shown in the image below, and I’m trying to get the pair wise tranformations between all of them. For that, I’m using Opencv’s detectMarkers() and estimatePoseSingleMarkers() to get the pose of each marker with respect to the camera.

I then obtain rvecs and tvecs of each arUco and I use Rodrigues’ Formula to get a rotation matrix out of rvecs. Then, I build the transformation matrix between each arUco and the camera. After this I get the inverses of this matrices and multiply them like this:

M12 = inv(M_cam_1) * M_cam_2

The problem is the rotation between 1 → 3 is not the same as 1 → 4, and it should be and should also be 90º. Below are the matrices between arUco 1 and 3 and 4 respectivly.

Do any of you as any ideia what i might be doing wrong? Thanks in advance for the help.

draw on your picture the corners and edges of your markers, and mark the first corner of each.

to interpret the composite matrices by eye, it’ll help if their relative orientations aren’t too complicated.

in the translation component, I would expect only X or Y between {1 and 2} and {3 and 4} and I would expect some -Z (and X or Y) if you compare {1 or 2} with {3 or 4}.

practical advice double-sided adhesive tape. or print directly on card stock.

Ups, forgot to add them. there you go

Conserning your reply, do you mean to add them physically in the box, or edit the image? And how will this help? Shouldn’t the function detectMarkers() find the markers already? What Am I missing? thanks, again

since your request for clarification sounds confused and I can’t make any sense of it at all, I’ll just reiterate everything.

find out the orientations of these markers. find out which corner is the first corner of every marker.

orient all markers so their top edges point up.

ignore. that might be too complicated right now.

your markers aren’t very flat. they are kinda wavy. make sure they’re flat. that gives better results, as you can imagine.

Hi, I’m woriking on a project where I have to obtain the pairwise transformations between arUcos on a box. I’m using OpenCV’s calibrateCamera() to calibrate my camera and I obtain 0.100 of reprojection error, which I believe is not bad. Then I use detectMarkers() to detect the arUcos on the box and then I use estimatePoseSingleMarkers() to estimate their pose with respect to the camera. I then use Rodrigues formula on rvecs and build the tranformation matrix with that. The problem is, the arUcos should have a 90º angle between them, and that’s not happening. The image bellow shows the image I’m using and the poses that I’m obtaining. (I changed the perspective so you can see better)

What can i do to corret this? What am I doing wrong? Thanks in advance