1. 引言

1.1 伪逆应用

  上一篇文章我们解决了雅克比矩阵求广义逆的问题,在雅克比矩阵不是方阵时,怎么求解逆问题。这里我觉得有必要再重申一下,机器人学中雅克比矩阵求逆分成了三种基本情况。以下默认机器人操作空间维度是6。
1.无冗余的情况,也就是机器人操作空间的维度等于机器人的关节数,此时雅克比矩阵是6\times6的,它的逆问题如下:

\dot{q}=J^{-1}(q)v_e

2.冗余的情况:也就是机器人操作空间的维度小于机器人的关节数,比如7自由度机械臂雅克比矩阵是6\times7的,此时应该用右伪逆来计算关节角速度:

\dot{q}=J^T(JJ^T)^{-1}v_e

3.欠驱动情况:不知道这样说是否合理,这里是想说机器人操作空间的维度大于机器人的关节数,比如一个4自由度的SCARA机械臂雅克比矩阵是6\times4的。此时应该用左伪逆来计算关节角速度:

\dot{q}=(J^TJ)^{-1}J^Tv_e

1.2 奇异问题

  上一篇文章主要解决的是雅克比矩阵不是方阵的情况下怎么求逆,但是并没有解决雅克比矩阵不可逆的情况下要怎么处理。这篇文章将主要介绍雅克比矩阵不可逆情况的处理。

2 可操作性

2.1 奇异位形

  机器人的奇异问题本身其实是一个很大的课题,在数学上和实际应用中也会有多方面的体现。比如在奇异位形下雅克比矩阵不满秩,机器人末端执行器在奇异位形下会丢失若干个运动自由度等等。我们拿一个只有两个旋转自由度的平面机械臂为例来说明这个问题。如下图1是一个二连杆平面臂。

二连杆平面臂

图1 二连杆平面臂

这是一个二自由度机械臂,因此需要选取两个广义坐标来描述它。为了方便我们选择如下图2所示两个旋转角\theta_1\theta_2

定义广义坐标

图2 二连杆平面臂

  这个机械臂当两个连杆完全伸直的时候是奇异位形(比如\theta_1=\theta_2=0),因为此时机器人无法沿着连杆的方向运动,如下图3所示。在这种情况下无论两个关节角以多大的速度旋转,机器人末端都不能产生沿x轴方向的速度,机器人丢失了一个自由度!

奇异位形

图3 奇异位形

2.2 可操作性的表达

  其实在机器人接近奇异位形时也同样会存在关节速度突增等种种我们不希望出现的情况。因此很多时候你不只需要关心机器人是否奇异还希望定量的去判断机器人当前距离奇异位形究竟有多远。可操作性就是衡量机器人与奇异位形的距离的一种度量方式。
为了衡量在某个位形下机器人末端在各个自由度方向可以有多大的运动能力,我们取一个单位角速度向量作为关节速度的输入,即:

\dot{q}^T\dot{q}=1

从几何上说,上述方程描述的是高维空间中的球面。把伪逆代入\dot{q}^T\dot{q}=1将得到:

v_e^T(J^{\dagger T}(q)J^{\dagger}(q))v_e=1

对于冗余机械臂也就是:

v_e^T(J(q)J^T(q))^{-1}v_e=1

可以看到这个方程描述的是高维空间的椭球面,椭球面(二维情况下是椭圆)的形状和方向由其二次型的核(也就是(J(q)J^T(q))^{-1})决定,等价于考察JJ^T。椭球体的主轴方向由矩阵JJ^T的特征向量u_i,\ i=1,\dots,r确定,而轴的尺度由J的奇异值\sigma_i=\sqrt{\lambda_i(JJ^T)}(i=1,\dots,r)给出。

  为了能够更直观的度量机器人与奇异位形之间的距离,可以使用JJ^T的行列式(与椭球体容积成比例)来作为机械手运动能力的度量。

\omega(q)=\sqrt{det(JJ^T)}

  当机械臂处于奇异位形时,JJ^T不是满秩的,必然存在零特征值,因此\omega=0。在非奇异位置\omega>0。因此称为机械臂可操作性度量。它描述了机械臂与奇异位形之间的距离。

  还是以前面的二连杆平面臂为例来进行说明,二连杆平面臂中\dot{q}^T\dot{q}=1对应于

\dot\theta_{1}^2 + \dot\theta_2^2=1

如果你了解高中数学中的圆锥曲线,应该能够理解,这个方程描述的是一个圆。现在思考一下,关节角速度取的是单位值,那么如果它引起的末端某个自由度方向比较大的速度,说明机器人在当前位形下在这个自由度方向上具有很大的运动能力。相反当它引起的末端某个自由度方向极小的速度,说明机器人在这个方向上具备很低的运动能力,如果需要机器人在这个自由度方向产生比较大的速度那么必定导致非常大的关节角速度。

  上面一段话可以仔细体会一下,操作空间在某个自由度方向具备很低的运动能力意味着什么呢?意味着在这个方向上机器人接近奇异了(奇异位置机器人丧失某些自由度)!

  同样对于二连杆平面臂而言v_e=\begin{pmatrix}
\dot{x} & \dot{y}
\end{pmatrix}
(J(q)J^T(q))^{-1}=\begin{pmatrix}k_1 & k_2 \\ k_3 & k_4 \\ \end{pmatrix},那么v_e^T(J(q)J^T(q))^{-1}v_e=1可以展开成:

k_1\dot{x}^2+(k_2+k_3)\dot{x}\dot{y}+k_4\dot{y}^2=1

  这是一个典型的半正定二次型,对应的几何形状是椭圆。由于雅克比矩阵与机器人当前构型相关,因此椭圆的形状在不同的关节角度处是不一样的,而从椭圆中心到椭圆边界的向量长度描述的则是机器人在这个自由度方向的运动能力。如下图4所示。

图4 可操作性椭球

图4 可操作性椭球

椭圆越扁说明在其短轴方向机器人的运动能力越差,在奇异位置处可操作性椭球收缩为一条直线。关于二连杆平面臂的可操作性求解与可视化相关代码已上传至github: https://github.com/hitgavin/simmechanics/tree/master/two_link_planner_robot
感兴趣可以参考一下。

3 不可逆矩阵的求逆

  听起来似乎有些矛盾,但是实际上我们经常需要被迫面对不可逆矩阵的求逆问题,这个问题一个比较经典的解决方案是所谓的渐消最小二乘方法即将伪逆表达为以下等式:

J^*=J^T(JJ^T+\lambda I)^{-1}

其中\lambda是大于零的一个渐消因子,它通常比较小。比如在进行二连杆平面臂可操作性仿真编程时有如下代码:

% jacobian matrix
J = [-y1, y1 - y2; 
     x1 , x2 - x1];
J = inv(J*J' + eye(2)*0.0001);

你可以看一下最后一行的求逆过程,eye(2)*0.0001对应的就是\lambda I

4 总结

  这篇文章主要介绍了机器人的可操作性以及当雅克比矩阵不可逆时的处理方法。由于个人能力有限,所述内容难免存在疏漏,欢迎指出,欢迎讨论。

5 参考文献

[1]. 机器人学:建模、规划与控制,西西里安诺
[2]. https://skill-lync.com/projects/forward-kinematics-manipulation-of-a-2r-robotic-arm-using-matlab