matlab|机器人中的坐标转换关系(个人记录学习)

1.前言: 在机器人的应用中,可以使用不同的坐标系来定义机器人,传感器和其他物体的位置。通常,对象在三维空间中的位置可以通过位置和方向值指定。这些值有多个可能的表示形式应用于某些特定应用程序。平移和旋转是位置和方向的替代术语。Robotics System Toolbox机器人系统工具箱支持机器人中常用的表示形式,并允许您在它们之间进行转换。将这些表示应用于三维点时,可以在坐标系之间进行变换(机器人系统工具箱假定位置和方向是在右手笛卡尔坐标系中定义的)。
2、欧拉角:缩写eul (1-by-3) 欧拉角是描述刚体方向的三个角度。每个角度都是围绕给定坐标框轴的标量旋转。机器人系统工具箱支持两个旋转形式。'ZYZ’轴顺序通常用于机器人应用。'ZYX’轴顺序,该顺序也称为"滚动间距偏航(rpy)"。
例如,围绕 pi y轴的旋转表示为:
eul = [0 pi 0]
3、齐次变换:缩写tform (4-by-4) 齐次变换矩阵将平移和旋转组合到一个矩阵中,旋转矩阵算子一般如下。
matlab|机器人中的坐标转换关系(个人记录学习)
文章图片

所以围绕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、机器人系统工具箱所支持的函数变换(蓝色部分表示可以互相转换) matlab|机器人中的坐标转换关系(个人记录学习)
文章图片

9、后记: 坐标的变换大概写有两篇, MATLAB下坐标系变换(1)和MATLAB坐标系变换(2)—逃不过的四元数。在MATLAB坐标系变换(2)—逃不过的四元数中有演示的代码(主要是机器人工具箱Robotics Toolbox中的一些函数),可以复制运行方便理解,其中开篇的四篇参考链接中有关于各种变换的数学推导,值得研读。另外,作为使用可以直接调用函数进行相关变换即可,mathwork官网中有,可具体查看或使用时help下。链接如下:https://www.mathworks.com/help/robotics/coordinate-system-transformations.html(机器人系统工具箱支持的函数)
最后,使用时发现俩个工具箱中函数有些变换是相同的,毕竟变换下的数学原理是一样的(为了方便将MATLAB坐标系变换(2)—逃不过的四元数中提到的关于数学推导的参考连接也放到此处)
(1)http://mini.eastday.com/mobile/180306210610472.html#(2)https://www.cnblogs.com/21207-iHome/p/6894128.html(3)https://blog.csdn.net/xiaoma_bk/article/details/79082629(4)https://blog.csdn.net/lql0716/article/details/72597719

【matlab|机器人中的坐标转换关系(个人记录学习)】代码参看(运行了解,方便直接使用)—以下在利用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)%四元数转齐次变换矩阵 trvec1 = tform2trvec(Transfrom)%从齐次中获得平移向量 quat1 = tform2quat(Transfrom)%从齐次中获得四元数向量 q1=Baxter_Left.ikine(Transfrom); %逆解获得角度

    推荐阅读