rt_tr2rpy - homogeneous transform to roll/pitch/yaw angles[view code]
Return a vector of roll/pitch/yaw angles, in radians, corresponding to the rotational part of the homogeneous transform T.
// The following example shows how rt_tr2rpy() can be used to get the
// orientation of a coordinate frame, described by a given homogeneous
// transform, expressed in terms of roll/pitch/yaw (RPY) angles.
// generate a homogeneous transform
rpy = [%pi/6, -%pi/4, -2/5*%pi], // RPY angles set
T = rt_rpy2tr(rpy);
// corresponding RPY angles set
rpy_comp = rt_tr2rpy(T),
// Remember that the solution to the problem of computing a set of RPY
// angles corresponding to the rotational part of a homogeneous
// transform is not univoque.
// rt_tr2rpy() computes the solution reducing the range to whom the
// pitch angle belongs to (-%pi/2, %pi/2) radians.
// Therefore, if you generate a coordinate frame from a set of RPY
// angles with the pitch belonging to (%pi/2, 3/2*%pi) and then you try
// to get its orientation by using rt_tr2rpy() function, be aware that
// you won't obtain the starting set of angles.
rpy1 = [0.6, 2.85, -1.75], // RPY angles set
T = rt_rpy2tr(rpy1);
rpy2 = rt_tr2rpy(T), // rpy2 is different from rpy1, but
// they are equivalent in their effects
// Lastly, note that rt_tr2rpy() provides a single solution when the
// computed set of RPY angles has pitch = %pi/2 or pitch = -%pi/2. But
// you should remember that in these cases infinitely many solutions are
// corresponding to the rotational part of the homogeneous transform.
rpy1 = [0.6, %pi/2, -1.75]; // RPY angles set with pitch = %pi/2
T = rt_rpy2tr(rpy1),
// all solutions for which yaw - roll = -1.75 - 0.6 are equivalent in
// their effects
rpy1_a = rt_tr2rpy(T); Ta = rt_rpy2tr(rpy1_a),
rpy1_b = [0.25, %pi/2, -2.35+0.25]; Tb = rt_rpy2tr(rpy1_b),
rpy1_c = [2.6, %pi/2, -2.35+2.6]; Tc = rt_rpy2tr(rpy1_c),
rpy1_d = [-1.35, %pi/2, -2.35-1.35]; Td = rt_rpy2tr(rpy1_d),
rpy1_e = [-0.9, %pi/2, -2.35-0.9]; Te = rt_rpy2tr(rpy1_e),
rpy2 = [-2.2, -%pi/2, 0.95]; // RPY angles set with pitch = -%pi/2
T = rt_rpy2tr(rpy2),
// all solutions for which roll + yaw = -2.2 + 0.95 are equivalent in
// their effects
rpy2_a = rt_tr2rpy(T); Ta = rt_rpy2tr(rpy2_a),
rpy2_b = [0, -%pi/2, -1.25]; Tb = rt_rpy2tr(rpy2_b),
rpy2_c = [-2.1, -%pi/2, -1.25+2.1]; Tc = rt_rpy2tr(rpy2_c),
rpy2_d = [2.85, -%pi/2, -1.25-2.85]; Td = rt_rpy2tr(rpy2_d),
rpy2_e = [0.5, -%pi/2, -1.25-0.5]; Te = rt_rpy2tr(rpy2_e),
Corke, P.I. "A Robotics Toolbox for MATLAB", IEEE Robotics and Automation Magazine, Volume 3(1), March 1996, pp. 24-32
R. P. Paul, Robot Manipulators: Mathematics, Programming and Control. Cambridge, Massachusetts: MIT Press, 1981.
L. Sciavicco, B. Siciliano, Modelling and Control of Robot Manipulators. 2nd Edition, Springer-Verlag Advanced Textbooks in Control and Signal Processing Series, London, UK, 2000.