I'm doing a simple aruco tracking on MATLAB, using mexopencv package.
Currently I'm using an overhead camera looking down on a 2D plane, where my aruco marker lies.
I want to see if the orientation accuracy of aruco markers are good or not. To do this, I plan to see if the rotation of 90, 180, 270 degrees on a 2D plane gives accurate results (ideally, I want to see [0,0,90],[0,0,180],[0,0,270]). I have recorded rvecs
of the aruco marker at its origin position, after 90 degrees, 180 degrees, and 270 degrees rotation on the 2D plane. I turned the rvecs
into a 3x3 matrix using cv.Rodrigues
function. Hence,
- M1 = 3x3 matrix of rvecs at origin position.
- M2 = 3x3 matrix of rvecs after 90 degrees rotation.
- M3 = 3x3 matrix of rvecs after 180 degrees rotation.
- M4 = 3x3 matrix of rvecs after 270 degrees rotation.
I believe these matrices are relative to the camera frames, therefore essentially being orientation matrix. To find the rotation matrix between M1 and M2, I inversed M1, and then multiplied M2 on it (i.e. M2 * M1^-1). I used cv.Rodrigues
on the output matrix to achieve the angles again.
However, I'm getting some inconsistent results, especially on 180 degrees rotation as
90 degrees rotation: cv.Rodrigues(M2*M1^-1) to show [-0.6,-4,90.3] degrees, this isn't too bad
180 degrees rotation: cv.Rodrigues(M3M1^-1) to show [125,-4,126] degrees, it doesn't seem right*
270 degrees rotation: cv.Rodrigues(M4*M1^-1) to show [0.9,3,-90] degrees, this isn't too bad either,
Is there something that I'm doing it wrong?
Thanks