matlabrpy2tr,MATLAB坐标系变换之机器⼈⼯具箱系列(3)1.前⾔:
在机器⼈的应⽤中,可以使⽤不同的坐标系来定义机器⼈,传感器和其他物体的位置。通常,对象在三维空间中的位置可以通过位置和⽅向值指定。这些值有多个可能的表⽰形式应⽤于某些特定应⽤程序。平移和旋转是位置和⽅向的替代术语。Robotics System Toolbox机器⼈系统⼯具箱⽀持机器⼈中常⽤的表⽰形式,并允许您在它们之间进⾏转换。将这些表⽰应⽤于三维点时,可以在坐标系之间进⾏变换(机器⼈系统⼯具箱假定位置和⽅向是在右⼿笛卡尔坐标系中定义的)。
2、欧拉⾓:缩写eul  (1-by-3)
欧拉⾓是描述刚体⽅向的三个⾓度。每个⾓度都是围绕给定坐标框轴的标量旋转。机器⼈系统⼯具箱⽀持两个旋转形式。'ZYZ'轴顺序通常⽤于机器⼈应⽤。'ZYX'轴顺序,该顺序也称为"滚动间距偏航(rpy)"。
例如,围绕 pi y轴的旋转表⽰为:
eul = [0 pi 0]
3、齐次变换:缩写tform  (4-by-4)
齐次变换矩阵将平移和旋转组合到⼀个矩阵中,旋转矩阵算⼦⼀般如下。
所以围绕y轴旋转⼀个⾓度后,在沿y轴平移4个单位的齐次变换为:
4、四元数:缩写quat  (1-by-4)
四元数是具有标量旋转和三元素⽮量的四元素⽮量。四元数在应⽤时的优点可以避免其他表⽰中固有的奇点问题。第⼀个元素w是⼀个标量,⽤于定义旋转轴的[x y z]来规范化⽮量。
如:围绕y轴旋转pi/2表⽰为
quat = [0.7071 0 0.7071 0]
5、旋转矩阵:缩写rotm  (3-by-3)
旋转矩阵描述三维空间中的旋转。它是⼀个⽅阵,⾏列式为 1。具体同在上述介绍的旋转算⼦。
6、平移变换:缩写trvec  (1-by-3)
平移变换也是位置⽮量,在三维欧⼏⾥得空间中表⽰为笛卡尔坐标。它仅涉及应⽤于所有点的坐标转换,不涉及旋转。
例如,沿x轴的 3 个单位和沿z轴的 2.5 个单位的平移将表⽰为:
trvec = [3 0 2.5]
7、机器⼈系统⼯具箱所⽀持的函数变换(蓝⾊部分表⽰可以互相转换)
9、后记:
最后,使⽤时发现俩个⼯具箱中函数有些变换是相同的,毕竟变换下的数学原理是⼀样的(为了⽅便将MATLAB坐标系变换(2)---逃不过的四元数中提到的关于数学推导的参考连接也放到此处)
代码参看(运⾏了解,⽅便直接使⽤)---以下在利⽤Baxter机器⼈模型做路径规划时为了解各种变换关系时参看的部分代码。
%% 将四元数转换成旋转矩阵3-by-3
Q=[0.1461 0.9889 0.30125 0.4026];%分别表⽰四元数的实部与虚部
Rq= quaternion(Q)
Q2R= rotmat(Rq,'frame')
%将3-by-3旋转矩阵转换成齐次式
tform = rotm2tform(Q2R)
%% 四元数转齐次变换矩阵4-by-4
quat = [0.7071 0.7071 0 0];
tform = quat2tform(quat)
%四元数转齐次变换矩阵
Q=[0.141 0.990 0.005 0.023]
tform = quat2tform(Q)
%===================================%
eulZYX = quat2eul(quat)%四元素转欧拉⾓zyx,或者使⽤[yaw, pitch, roll] =quat2angle(quat);
quat = eul2quat(eulZYX)%欧拉⾓转四元数
%===================================%
%从齐次转换矩阵中获得欧拉⾓,四元素
eulZYX = tform2eul(tform)
quat = tform2quat(tform)
%==================================%
%从齐次转换矩阵中获得3-by-3旋转矩阵
rotm = tform2rotm(tform)
%从齐次转换矩阵中获得平移向量
trvec = tform2trvec(tform)
%% 提取矩阵T中的旋转部分、平移部分
t2r(T)
transl(T)'
%% 欧拉⾓转齐次变换矩阵
T = rpy2tr(ROLL, PITCH, YAW, OPTIONS)
%eul2tr函数:onvert Euler angles to homogeneous transform欧拉-齐次矩阵
eul = [0 pi/2 pi/2];
tformZYZ = eul2tform(eul,'ZYZ')
%% 所以,从Baxter或得位置⽮量和四元素表⽰的姿态。
%======================%先从Baxter获得左臂末端位姿
untuck(bc, 3);%utuck=[-0.08, -1.0, -1.19, 1.94, 0.67, 1.03, -0.50] enableEndpointDisplay(bc,3);
currPoseL = bc.LeftArmEndpoint;
disp(currPoseL.Pos);
disp(currPoseL.Orientation);
%=====================%
%可以构成末端位姿矩阵4-by-4
P=[0.579 0.185 0.100];%位置,transl(P)位置变为齐次变换矩阵或trvec2tform(P) Qpos=[0.141 0.990 0.004 0.023];%姿态
Transfrom=transl(P)*quat2tform(Qpos)%四元数转齐次变换矩阵tool工具箱
trvec1 = tform2trvec(Transfrom)%从齐次中获得平移向量
quat1 = tform2quat(Transfrom)%从齐次中获得四元数向量
q1=Baxter_Left.ikine(Transfrom);%逆解获得⾓度

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。