机器人正运动学(3)—— 坐标系及其变换

1. 引言

  个人认为机器人运动学是整个机器人学的核心内容。仍然以前面的SCARA机器人为例,如下图所示,假设笛卡尔坐标系{A}是一个固定坐标系(笛卡尔坐标系实际上就是利用相交于一点的三条数轴来衡量空间中点的位置的一种坐标系,相对应的有极坐标系,球坐标系等;所谓固定坐标系就是坐标系不随着机器人运动)。蓝色的P点是机器人丝杆末端的上的一个点。
在这里插入图片描述
  想像一下,如果我们知道机器人各个关节当前旋转的角度,如何确定P点在坐标系{A}中的坐标P(x,y,z)呢?老实说即使是这样一个问题也曾经困扰了我很久。

  这就是我们在机器人运动学中碰到的第一个问题—正运动学问题。也就是在已知机器人各个关节的位置的情况下确定其末端执行器的位置。

2. 位姿的描述(位置与姿态)

  整个机器人运动学都是建立在坐标系及其变换的基础之上,而这一部分也确实存在诸多有趣的问题。因此我们以坐标系及其变换作为机器人正运动学的切入点。

2.1 平移的描述(位置)

  从最简单的情况说起,如下图所示,两个坐标系{A}和{B}的坐标轴分别平行,设坐标系{A}为基坐标系,那么如何表达坐标系B与坐标系A关系呢?
在这里插入图片描述
  这个问题其实是比较简单的,从图中我们知道,空间中任意一点M在基坐标系{A}中的位置可以用向量 P M A P_{M}^{A} PMA 表示,而在坐标系{B}中可以用向量 P M B P_{M}^{B} PMB 表示。坐标系{B}的原点可以用向量 P B A P_{B}^{A} PBA 表示(注意这些记法的上标代表该向量在哪个坐标系中表达,也就是向量的起点与哪个坐标系的原点重合,下标代表的是空间中的点,比如M代表的是M点。因此 P X Y P_{X}^{Y} PXY 代表X点在坐标系Y下的向量表示)。根据向量的运算法则,我们很容易得到下面的等价关系 P M A = P B A + P M B P_{M}^{A}=P_{B}^{A}+P_{M}^{B} PMA=PBA+PMB

  在上面的等式中 P M A P_{M}^{A} PMA P M B P_{M}^{B} PMB 都代表了点M的坐标,只是参考坐标系不同,一个参考系是坐标系{A},一个参考系是坐标系{B}。那么 P B A P_{B}^{A} PBA 又代表了什么呢?我想你应该能够想到这个代表了两个坐标系之间的位置关系。因此对于只存在平移关系的两个坐标系,我们通过一个三维向量 P B A P_{B}^{A} PBA 就可以描述坐标系{B}与坐标系{A}的关系。上面的等式也就是在只有平移的情况下点在坐标系{A}与{B}之间的坐标变换公式。

2.2 旋转的描述(姿态)

  旋转的描述是比较复杂的,我们先讨论只有旋转,没有平移的情况,即两个坐标系原点重合的情况。如下图所示,在这样的情况下怎么去描述坐标系{B}与坐标系{A}之间的关系呢?

  我们依然以坐标系{A}为基坐标系。那么坐标系{A}的三个坐标轴可以用如下三个单位向量描述: i A = [ 1 0 0 ] j A = [ 0 1 0 ] k A = [ 0 0 1 ] i_A=\begin{bmatrix} 1\\ 0\\ 0 \end{bmatrix} j_A=\begin{bmatrix} 0\\ 1\\ 0 \end{bmatrix} k_A=\begin{bmatrix} 0\\ 0\\ 1 \end{bmatrix} iA=100jA=010kA=001

  同时我们设坐标系{B}的三个坐标轴在基坐标系{A}下的向量描述为: i B , j B , k B i_B, j_B, k_B iB,jB,kB。现在我们假设空间中有一点V,那么我们知道这个点既可以在坐标系{A}中表示,又可以在坐标系{B}中表示。设点V在基坐标系{A}下的坐标为: P V A = [ x A y A z A ] T P_{V}^{A}=\begin{bmatrix} x_A & y_A& z_A \end{bmatrix}^{T} PVA=[xAyAzA]T ,点V在坐标系{B}中的坐标为 P V B = [ x B y B z B ] T P_{V}^{B}=\begin{bmatrix} x_B & y_B& z_B \end{bmatrix}^{T} PVB=[xByBzB]T ,设O为坐标系{A}和{B}的公共原点。

  此时我们意识到向量 O V → \overrightarrow{OV} OV 其实存在两种分解,第一种是将向量 O V → \overrightarrow{OV} OV 分解到坐标系{A}的三个轴上,此时向量 O V → \overrightarrow{OV} OV 可以表示为: O V → = x A i A → + y A j A → + z A k A → \overrightarrow{OV}=x_A\overrightarrow{i_A}+y_A\overrightarrow{j_A}+z_A\overrightarrow{k_A} OV =xAiA +yAjA +zAkA ;第二种是将向量 O V → \overrightarrow{OV} OV 分解到坐标系{B}的三个轴上,此时向量 O V → \overrightarrow{OV} OV 可以表示为: O V → = x B i B → + y B j B → + z B k B → \overrightarrow{OV}=x_B\overrightarrow{i_B}+y_B\overrightarrow{j_B}+z_B\overrightarrow{k_B} OV =xBiB +yBjB +zBkB (注意我们前面已经提到所有的六个坐标轴单位向量都是在基坐标系中描述的)。由于这是同一个向量的两种表示方法。因此我们可以得到如下的等价关系: x A i A → + y A j A → + z A k A → = x B i B → + y B j B → + z B k B → x_A\overrightarrow{i_A}+y_A\overrightarrow{j_A}+z_A\overrightarrow{k_A}=x_B\overrightarrow{i_B}+y_B\overrightarrow{j_B}+z_B\overrightarrow{k_B} xAiA +yAjA +zAkA =xBiB +yBjB +zBkB

  如果在这个等式两边同时点乘 i A → \overrightarrow{i_A} iA 可以得到: x A = x B i B → ⋅ i A → + y B j B → ⋅ i A → + z B k B → ⋅ i A → x_A=x_B\overrightarrow{i_B}\cdot \overrightarrow{i_A}+y_B\overrightarrow{j_B}\cdot \overrightarrow{i_A}+z_B\overrightarrow{k_B}\cdot \overrightarrow{i_A} xA=xBiB iA +yBjB iA +zBkB iA

  注意在上面的推导中我们用到了向量点乘法则,即两个互相垂直的单位向量点积为0,单位向量与其自身的点积为1。根据向量点乘法则, i B → ⋅ i A → = ∣ i B → ∣ ∣ i A → ∣ c o s < i B , i A > = c o s < i B , i A > \overrightarrow{i_B}\cdot \overrightarrow{i_A}=\left | \overrightarrow{i_B} \right |\left | \overrightarrow{i_A}\right |cos<i_B, i_A>=cos<i_B, i_A> iB iA =iB iA cos<iB,iA>=cos<iB,iA>

  注意在上面的推导中我们用到了单位向量模长为1的性质。根据这些性质, x A x_A xA可以进一步表示为: x A = x B c o s < i B , i A > + y B c o s < j B , i A > + z B c o s < k B , i A > x_A=x_Bcos<i_B, i_A>+y_Bcos<j_B, i_A>+z_Bcos<k_B, i_A> xA=xBcos<iB,iA>+yBcos<jB,iA>+zBcos<kB,iA> = [ c o s < i B , i A > c o s < j B , i A > c o s < k B , i A > ] [ x B y B z B ] =\begin{bmatrix} cos<i_B, i_A> & cos<j_B, i_A> & cos<k_B, i_A> \end{bmatrix}\begin{bmatrix} x_B\\ y_B\\ z_B \end{bmatrix} =[cos<iB,iA>cos<jB,iA>cos<kB,iA>]xByBzB

  同理可得: y A = [ c o s < i B , j A > c o s < j B , j A > c o s < k B , j A > ] [ x B y B z B ] y_A=\begin{bmatrix} cos<i_B, j_A> & cos<j_B, j_A> & cos<k_B, j_A> \end{bmatrix}\begin{bmatrix} x_B\\ y_B\\ z_B \end{bmatrix} yA=[cos<iB,jA>cos<jB,jA>cos<kB,jA>]xByBzB z A = [ c o s < i B , k A > c o s < j B , k A > c o s < k B , k A > ] [ x B y B z B ] z_A=\begin{bmatrix} cos<i_B, k_A> & cos<j_B, k_A> & cos<k_B, k_A> \end{bmatrix}\begin{bmatrix} x_B\\ y_B\\ z_B \end{bmatrix} zA=[cos<iB,kA>cos<jB,kA>cos<kB,kA>]xByBzB

  最终整理可得: [ x A y A z A ] = [ c o s < i B , i A > c o s < j B , i A > c o s < k B , i A > c o s < i B , j A > c o s < j B , j A > c o s < k B , j A > c o s < i B , k A > c o s < j B , k A > c o s < k B , k A > ] [ x B y B z B ] = R [ x B y B z B ] \begin{bmatrix} x_A\\ y_A\\ z_A \end{bmatrix}=\begin{bmatrix} cos<i_B, i_A> & cos<j_B, i_A>& cos<k_B, i_A>\\ cos<i_B, j_A> & cos<j_B, j_A>& cos<k_B, j_A>\\ cos<i_B, k_A> & cos<j_B, k_A>&cos<k_B, k_A> \end{bmatrix}\begin{bmatrix} x_B\\ y_B\\ z_B \end{bmatrix}=R\begin{bmatrix} x_B\\ y_B\\ z_B \end{bmatrix} xAyAzA=cos<iB,iA>cos<iB,jA>cos<iB,kA>cos<jB,iA>cos<jB,jA>cos<jB,kA>cos<kB,iA>cos<kB,jA>cos<kB,kA>xByBzB=RxByBzB

  前面我们进行了那么多的推导,看上去很复杂,但是其实都是最简单的向量以及矩阵运算。我们观察最后得到的这个等式。等式左边是点V在坐标系{A}中的坐标;等式右边是一个矩阵R乘上点V在坐标系{B}中的坐标。那么根据这个等式我们可以将空间中任意一点由坐标系{B}中的表示转换到坐标系{A}中的表示。可见我们利用同一个向量(即 O V → \overrightarrow{OV} OV 的两种不同分解(在坐标系{A}中分解得到其在坐标系{A}中的坐标表示,同理在坐标系{B}中分解得到在坐标系{B}中的坐标表示)的等价性已经不自觉地推导出了两个原点重合的坐标系之间的姿态关系,这个关系就是前面提到的矩阵R

  接下来我们总结一下关于旋转的描述。当两个坐标系{A}和{B}原点重合时,他们的姿态关系可以利用一个3x3的矩阵来描述。我们看到这个矩阵的所有元素都是余弦值,因此我们称这个矩阵为方向余弦矩阵。这可以认为是方向余弦矩阵的由来

3. 总结

  这一篇文章,我们主要介绍了坐标系以及坐标系的两种变换关系,即平移变换和旋转变换,虽然我们依然没能解决引言中提出的问题,但是我们已经比较接近答案了。

  由于个人能力有限,所述内容难免存在疏漏,欢迎指出,欢迎讨论。

下一篇:机器人正运动学(4) —— 理解变换矩阵
————————————————
版权声明:本文为CSDN博主「hitgavin」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hitgavin/article/details/101113331

  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值