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

1.前言:

在机器人的应用中,可以使用不同的坐标系来定义机器人,传感器和其他物体的位置。通常,对象在三维空间中的位置可以通过位置和方向值指定。这些值有多个可能的表示形式应用于某些特定应用程序。平移和旋转是位置和方向的替代术语。Robotics System Toolbox机器人系统工具箱支持机器人中常用的表示形式,并允许您在它们之间进行转换。将这些表示应用于三维点时,可以在坐标系之间进行变换(机器人系统工具箱假定位置和方向是在右手笛卡尔坐标系中定义的)。

2、欧拉角:缩写eul (1-by-3)

欧拉角是描述刚体方向的三个角度。每个角度都是围绕给定坐标框轴的标量旋转。机器人系统工具箱支持两个旋转形式。'ZYZ’轴顺序通常用于机器人应用。'ZYX’轴顺序,该顺序也称为"滚动间距偏航(rpy)"。

例如,围绕 pi y轴的旋转表示为:

eul = [0 pi 0]

3、齐次变换:缩写tform (4-by-4)

齐次变换矩阵将平移和旋转组合到一个矩阵中,旋转矩阵算子一般如下。

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

机器人中的坐标转换关系(个人记录学习)_第2张图片

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

代码参看(运行了解,方便直接使用)—以下在利用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);%逆解获得角度

你可能感兴趣的:(matlab,ROS系统)