在机器人领域,运动可以说是一个永不过时的话题,因为我们制造机器人最主要的目的就是替代人类从事体力劳动,这当然离不开运动了。而谈到运动也离不开一个基本概念 —— 速度。要弄明白运动学和动力学,速度可是绕不过去的重要概念,这可能也是挡在初学者面前的第一只拦路虎。在不同的机器人教科书中甚至采用了不同的表示方法,不同的速度概念之间也少有人去解释它们的关系和转换方法。

点的速度

如果我们将机器人简化成由一些质点组成(有些情况确实可以这么做),那么事情就简单了。因为如果一个点 p 的位置向量  \(\textbf{p}\) 可以用三维坐标$ (x,y,z)$表示的话,那么它的速度就是位置的坐标分量对时间 t 的导数,见式 (1)。这个定义简单粗暴,我想不出更简洁的方式了,那我们就采用这个定义吧。

\[\frac{d\textbf{p}}{dt}=\left(\frac{dx}{dt},\frac{dy}{dt},\frac{dz}{dt}\right)\tag{1} \]

  *为了简洁,以后我们有时也会将\(\frac{d\textbf{p}}{dt}\)记为 \(\dot{\textbf{p}}\)或者 \(v_{p}\)

刚体的姿态——大麻烦    

可是点毕竟有些过于简单了,更接近实际的假设是将机器人视为由一些刚体组成。在推导速度之前,我们先要给出刚体的位置等状态的描述方法。对于刚体,只描述它的位置是不够的,我们还要描述它的姿态(或者叫朝向)。描述刚体的位置并不难,只要我们选择刚体上的一点,然后用这个点的坐标就能表示刚体的位置了。这个点该如何选择取决于你要解决的问题,怎么方便怎么来,比如你想建立动力学模型,那么最好选择质心这个点。    

如果平移运动是个听话的乖宝宝,那旋转运动就是让人捉摸不透的老油条。其原因就在于平移变换是一个欧式空间,而旋转变换则是一个非欧空间(更确切的说是一个李群,等到后面我会进一步介绍这具体是什么意思,我们暂时不管这个)。我们一下子从初中生难度进入了研究生难度,这个跳跃让很多初学者都不习惯。 

姿态应该怎么描述呢?如果在刚体 b上固定一个直角坐标系(记为 \({b}\)),那么不管这个刚体怎么转动,它的姿态总是可以用与其固联的坐标系 \({b}\)唯一描述的,如下图所示。(当然,位置和速度这些运动量都是相对的概念,要描述它们我们还需要一个参考坐标系,就是图中不动的那个,记为\({s}\), \({s}\) 的原点记为 o。\({b}\) 的原点记为 p ,p 在 \({s}\) 中的位置用向量 \(\textbf{p}\) 表示)

直角坐标系 \({b}\) 可以用 \(3\times3\) 的矩阵描述,这个矩阵被称为姿态矩阵,记为 $ $。姿态矩阵 $ $有一个性质:

\[\textbf{R}^{\rm{T}}\textbf{R}=\textbf{I}\tag{2} \]

这样,一个刚体的位置和姿态可以用 \(\textbf{p}\)\(\textbf{R}\) 完全描述。机器人学中最常用的方式是将位置和姿态捆绑起来,用一个矩阵一块表示,这个矩阵就是齐次变换矩阵,记为 \(\textbf{g}\)

\[\textbf{g}=\left[ \begin{matrix} \textbf{R} & \textbf{p}\\ 0_{3\times1} & 1 \end{matrix} \right]\tag{3}\]

那么类比点的情况,刚体的速度是不是可以定义为矩阵 \(\textbf{g}\) 的分量对时间的导数呢,如式 (4)所示?

\[\frac{d\textbf{g}}{dt}=\left[ \begin{matrix} \frac{d\textbf{R}}{dt} & \frac{d\textbf{p}}{dt}\\ 0_{3\times1} & 0 \end{matrix} \right]\tag{4}\]

当然是可以的,不过还有更简洁的方法。别急,下面我一步步介绍怎么做。

空间速度——几何解释

在刚体 b 上有一个和它固定的点 p ,刚体运动时 p 点和它一起运动,如图下图所示。假如我们通过某种测量仪器知道了 p 点的速度$ v_{p}$ 和和刚体转动的角速度 \(\omega\),那么我们该怎么描述刚体 b 的速度呢 ?(这里的 \(v_{p}\)\(\omega\) 都是相对于参考坐标系$ {s}$ 的) 当然,用 \((v_{p}\),\(\omega\)) 就可以。但问题是 p 点只是我们随意选择的一个点,它并不比其它的点有更高的地位。我们暂时不讨论动力学,所以质心处的点也没有更高的地位。哪个点的地位不一样呢?既然刚体上的点地位都一样,我们把眼光瞄准了 o 点——参考坐标系的原点。可是等等, o 点不在刚体上啊?这里存在一个理解上的难点,我们可以这样想象,刚体 b 长胖了,胖到将 o 点也包括进去了。这时,刚体 b 上就有与 o 点瞬间重合的点。 利用理论力学中的基点法,我们就可以求出胖了的刚体与 o 重合的点的速度,即:

\[v_{o}=v_{p}+\omega\times\overrightarrow{po}\tag{5}\]

我们可以用 \((v_{o},\omega)\)来描述刚体的速度。你可能会问,这么奇怪的表示方法有什么意义,下面我从另一种方式给出回答。

空间速度——代数解释

我们知道刚体的位置和姿态(合称位姿)可以用\(\textbf{g}\) 描述,对于刚体上的任意一点r ,它相对于\({s}\) 的位置用向量

\(\textbf{r}\) 表示,那么在刚体运动后的位置是:

\[\left[ \begin{matrix} \textbf{r}\\1 \end{matrix} \right]=\textbf{g}\left[ \begin{matrix} \textbf{r}\\1 \end{matrix} \right]\tag{6}\]

对式 (6) 求导可得

\[\left[ \begin{matrix} \textbf{r}\\1 \end{matrix} \right]=\dot{\textbf{g}}\left[ \begin{matrix} \textbf{r}\\1 \end{matrix} \right]=\dot{\textbf{g}}\textbf{g}^{-1}\left[ \begin{matrix} \textbf{r}\\1 \end{matrix} \right]\tag{7}\]

我们注意到出现了一个

\[\dot{\textbf{g}}\textbf{g}^{-1}=\left[ \begin{matrix} \dot{\textbf{R}} & \dot{\textbf{p}}\\ 0_{3\times1} & 0 \end{matrix} \right]\left[ \begin{matrix} \textbf{R}^{-1} & -\textbf{R}^{-1}\textbf{p}\\ 0_{3\times1} & 1 \end{matrix} \right]=\left[ \begin{matrix} \dot{\textbf{R}}\textbf{R}^{-1} & \dot{\textbf{p}}-\dot{\textbf{R}}\textbf{R}^{-1}\textbf{p}\\ 0_{3\times1} & 0 \end{matrix} \right] \tag{8}\]

所以是空间速度(Spatial Velocity),这是第一个登场的速度。

\[\textbf{g}^{-1}\dot{\textbf{g}}=\left[ \begin{matrix} \textbf{R}^{-1} & -\textbf{R}^{-1}\textbf{p}\\ 0_{3\times1} & 1 \end{matrix} \right]\left[ \begin{matrix} \dot{\textbf{R}} & \dot{\textbf{p}}\\ 0_{3\times1} & 0 \end{matrix} \right]=\left[ \begin{matrix} \textbf{R}^{-1}\dot{\textbf{R}} & \textbf{R}^{-1}\dot{\textbf{p}}\\ 0_{3\times1} & 0 \end{matrix} \right] \tag{9}\]

三个速度概念的变换方法如下图:

原文链接:https://blog.csdn.net/robinvista/article/details/69415962