1. 引言

  个人认为研究机器人动力学一个比较好的路径应该是质点动力学—-单刚体动力学—-多刚体动力学,有这样一个由浅入深的过程是深刻理解机器人动力学的基础。因此我们先从高中时期的万能小滑块说起吧。

2. 质点的动力学

2.1 牛顿第二定律

  质点的动力学方程拥有着最为简单和直观的形式,这就是我们高中时期学习的牛顿第二定律:合外力等于质量乘以加速度。如下图所示的一个小滑块在光滑水平桌面上运动。


图1. 滑块的运动

先来作一下受力分析,滑块受到重力mg,与重力平衡的支持力f,水平方向的推力F。由于桌面光滑,没有摩擦力。因此滑块的合外力为F。选择向右和向上为正方向,那么根据牛顿第二定律有:

F=ma

这个就是针对质点的动力学方程了。

2.2 质点的能量

  接下来求一下以上滑块的能量。对于运动的质点,它的能量包含了两部分即动能和势能。高中课本中势能的定义入下:

U=mgh

  我觉得这里值得好好地说一下,高中物理中一个非常重要的概念叫做正方向。在求解滑块的运动时必须以这个正方向为一个参考,通常会把向右和向上视为正方向。如果你在计算的时候正方向搞反了那么你的某些计算中表达式的正负号一定会存在问题。
  正方向这个东西的存在是为了避免建立坐标系而引入的复杂性。实际上建立坐标系就是规定正方向的过程。不知道你有没有发现正方向这个在高中物理中如此重要的概念在大学物理中竟然消失了!原因就是在大物中我们已经在坐标系下利用矢量运算来分析问题了。而高中物理还仅仅停留在利用正方向和标量运算来解决问题。在面对复杂的问题时这种正方向加标量运算的模式就显得捉襟见肘了。
  还是言归正传,毕竟我们介绍质点动力学是为了后面的机械臂动力学作铺垫,因此这里采用建立坐标系加矢量运算的方式来求解势能吧,建立如下图所示的坐标系。


图2. 坐标系中的质点运动

其中\vec{h}代表的是质点的质心在坐标系下的位置矢量,由于质点是在XOZ平面上运动,因此它的y轴分量为0。此时:

\vec{h}=\begin{pmatrix}
x\\
0\\
z
\end{pmatrix}

\vec{g}代表的是重力加速度矢量,由于重力加速度是沿z轴的负方向,因此:

\vec{g}=\begin{pmatrix}
0\\
0\\
-9.81
\end{pmatrix}

那么重力势能的定义应该是位置矢量与重力加速度矢量的内积再乘以质量,即:

U=-m\vec{g}^T \vec{h}

2.2.2 质点的动能

  根据质点的动能方程可得:

E=\frac{1}{2}mv^2

在我们定义了坐标系之后速度作为位置矢量的导数依然会是一个矢量:

\dot{\vec{h}}=\vec{v}=\begin{pmatrix}
v_x\\
v_y\\
v_z
\end{pmatrix}

此时动能的表达式为:

E=\frac{1}{2}m\vec{v}^T \vec{v}

这个等式的计算结果和前面规定正方向计算的结果是一样的。接下来定义:

L=E-U=\frac{1}{2}m\vec{v}^T \vec{v}+m\vec{g}^T\vec{h}

可知L是一个标量,这个方程就是拉格朗日函数啦。对于质点而言拉格朗日函数的形式还是相当简洁的。

2.2 质点动力学的拉格朗日法推导

  在机器人学的书籍中拉格朗日方程定义如下:

\frac{d}{dt}\left(\frac{\partial L}{\partial \dot{q}}\right)^T - \left(\frac{\partial L}{\partial q}\right)^T=\vec{\tau}

其中q代表的是广义坐标,对应到前面质点的运动,位置矢量\vec{h}就是广义坐标;L代表的是系统的能量。就是在2.2中求得的质点的能量。接下来求一下对于质点来说它的拉格朗日方程是什么样子的。

  首先来看\frac{\partial L}{\partial \dot{q}}\frac{\partial L}{\partial \dot{\vec{h}}}=\frac{\partial L}{\partial \vec{v}},根据2. 机器人动力学 —- 矩阵求导介绍的矩阵求导经验,这是一个标量对向量求导的问题,由于这是第一次使用前面介绍的动力学基础知识,这里详细的推导一下。我们可以先套上迹求全微分,推导dLd\vec{v}之间的关系

dL=tr(dL)=tr\left(d\left(\frac{1}{2}m\vec{v}^T \vec{v}+m\vec{g}^T\vec{h}\right)\right)=tr\left(d\left(\frac{1}{2}m\vec{v}^T\vec{v}\right)\right)

这里由于L是标量,因此dL=tr(dL)。由于m\vec{g}^T\vec{h}项与\vec{v}无关,因此可以直接忽略它。根据微分的性质2和3:

tr\left(d\left(\frac{1}{2}m\vec{v}^T \vec{v}\right)\right)=tr\left(\frac{1}{2}m\left(d\vec{v}\right)^T\vec{v} + \frac{1}{2}m\vec{v}^T d\vec{v}\right)

根据迹的性质3:

tr\left(\frac{1}{2}m\left(d\vec{v}\right)^T\vec{v} + \frac{1}{2}m\vec{v}^T d\vec{v}\right)=tr\left(\frac{1}{2}m\left(d\vec{v}\right)^T\vec{v}\right)+tr\left(\frac{1}{2}m\vec{v}^T d\vec{v}\right)

根据迹的性质2:

tr\left(\frac{1}{2}m\left(d\vec{v}\right)^T\vec{v}\right)+tr\left(\frac{1}{2}m\vec{v}^T d\vec{v}\right)=tr\left(\frac{1}{2}m\vec{v}^T d\vec{v}\right)+tr\left(\frac{1}{2}m\vec{v}^T d\vec{v}\right)=tr\left(\color{red}{m\vec{v}^T} d\vec{v}\right)

此时标红的部分即m\vec{v}^T=\frac{\partial L}{\partial \vec{v}}。(思考一下,如果没有前面矩阵求导的铺垫,你是不是会想当然的认为\frac{\partial L}{\partial \vec{v}}=m\vec{v}呢?当然这个结论也对只是布局不对)。

  基于前面的推导有:\left(\frac{\partial L}{\partial \vec{v}}\right)^T=m\vec{v},接下来还要求对时间t的导数,速度求导结果显然是加速度,因此:

\color{red}{\frac{d}{dt}\left(\frac{\partial L}{\partial \dot{q}}\right)^T=m\vec{a}}

你可能已经发现了,这一项的结果就是牛顿第二定律中的合外力!(所谓殊途同归)
  你会发现拉格朗日方程还有一项\left(\frac{\partial L}{\partial q}\right)^T又是什么呢?再来详细地看一下。动能项\frac{1}{2}m\vec{v}^T \vec{v}与位置矢量没有关系,因此可以直接忽略。因此:

\left(\frac{\partial L}{\partial q}\right)^T=\left(\frac{\partial m\vec{g}^T\vec{h}}{\partial h}\right)^T=\left(m\vec{g}^T\right)^T=m\vec{g}

你会发现,这一项的结果对应的质点的重力。因此对于质点而言它的拉格朗日方程实际上是:

\color{red}{m\vec{a}-m\vec{g}=\vec{\tau}}

这个公式就很有意思了,我们知道合外力是指质点所受到的所有力(包括重力,支持力,推力)的合力。那么合外力减去重力代表了什么呢?其实就是除了重力以外所有力(包括支持力,推力,如果桌面不光滑还会有摩擦力)的合力。西西里安诺的机器人学建模规划与控制一书中有这样的描述:\vec{\tau}代表的是广义坐标对应的广义力,它的每一个分量由非保守力给出。大家都知道重力属于保守力(实际上这是我们在机器人动力学中唯一接触到的保守力,其他的如电场力等我们用不到),所以在广义力中剔除了重力项。像摩擦力,支持力,推力都是非保守力。
  按照前面的说法\vec{\tau}代表非保守力的合力,那么:

\vec{\tau}_{非保守力}+m\vec{g}_{保守力}=F_{合外力}=m\vec{a}

推导了一圈我们最终又回到了牛顿第二定律。所以拉格朗日方程和牛顿第二定律是等价的,只是在形式上会有所不同

3. 总结

  这篇文章主要介绍了利用拉格朗日法推导质点的动力学方程,可以认为是对拉格朗日法推导机器人动力学方程的铺垫。本文的结论是拉格朗日方程的第一项代表的是合外力,第二项代表的是重力。读完这篇文章如果你能够对拉格朗日方程产生一个直观的印象,那么这篇文章的目的就达到了。

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

4. 参考文献

[1]. 西西里安诺,机器人学建模、规划与控制