Computing Euler angles from a rotation matrix is straightforward once you set a convention. Indeed is possible to compute an entire different set of angles that defines a rotation when you change axis. In this case I use the aeronautical notation, with pitch, yaw and roll as a plane taking off.

% Returns euler angles in radians given a wanted convention, implementation from GPU Gems IV and
% from Eigen libraries

function [x,y,z] = eulerAngles(R,a0,a1,a2)

res=zeros(1,3);
odd=-1;
if ( mod(a0+1,3)==a1 )
    odd=0;
else
    odd=1;
end

i = a0;
j = mod((a0 + 1 + odd),3);
k = mod((a0 + 2 - odd),3);

i=i+1;
j=j+1;
k=k+1;

if (a0==a2)
    s = norm([ R(j,i),R(k,j) ]);
    y = atan2(s, R(i,i));
    if (s > eps)
        x = atan2(R(j,i), R(k,i));
        z = atan2(R(i,j),-R(i,k));
    else
        x = 0.0;
        if (R(i,i)>0)
            z=atan2(-R(k,j), R(j,j));
        else
            z=-atan2(-R(k,j), R(j,j));
        end
    end
else
    c = norm([ R(i,i),R(i,j)] );
    y = atan2(-R(i,k), c);
    if (c > eps)
        x = atan2(R(j,k), R(k,k));
        z = atan2(R(i,j), R(i,i));
    else
        x = 0.0;
        if (R(i,k)>0)
            z=atan2(-R(k,j), R(j,j));
        else
            z=-atan2(-R(k,j), R(j,j));
        end
    end
end

res=[x,y,z];
if (~odd)
    res = -res;
end

x=res(1);
y=res(2);
z=res(3);

Further reading

Read more in the science topic.

Let's talk!

I'm Carlo Nicolini — I am interested on the reliability of AI reasoning systems (interpretability, inference-time methods, probabilistic language programming) and on quantitative portfolio optimization (I am a maintainer of skfolio). If you're working on something in these areas and think we might collaborate, chat, discuss, I'm happy to talk about it!

The best way to reach me is on via DM on LinkedIn.