4887 words
24 minutes
机器人学基础 第四章 机械臂的速度与静力
首次发布: 2025-05-19
... 次访问

机械臂连杆的速度方程和静力分析

4.1 速度分析目标#

分析机械臂连杆的速度的目标是求机械臂的末端及各个中间连杆的运动速度与关节速率之间的关系

设连杆0的固连框架 {0}\{0\} 为参考坐标系。固连框架 {i}\{i\} 的速度有两种,分别是框架 {i}\{i\} 原点的线速度 0vi= 0Viorg^{0}v_i = \ ^{0}V_{iorg} 和 连杆 ii 整个刚体的角速度 0ωi= 0Ωi^{0}\omega_i = \ ^{0}\Omega_i。有时,我们会利用在刚体自身框架下的速度向量表达,以方便进行向量的迭代计算,因此需要涉及到速度向量在不同框架下的转换。具体的方法是使用旋转矩阵进行变换,例如从框架 {i}\{i\} 变到框架 {0}\{0\} 的公式为

0vi= i0R ivi0ωi= i0R iωi\begin{aligned} ^{0}v_i = \ ^{0}_{i}R\ ^{i}v_i\\ ^{0}\omega_i = \ ^{0}_{i}R\ ^{i}\omega_i\\ \end{aligned}
连杆的速度表达速度传播

4.2 速度传递公式#

连杆间的速度传递公式有两种形式,一种是在绝对框架 {0}\{0\} 表达下的迭代形式,另一种是在自身框架 {i}\{i\} 表达的迭代形式。

4.2.1 旋转关节#

旋转关节 i+1i + 1 连接的连杆 ii 和连杆 i+1i + 1 之间的速度传播公式为

自身框架形式

{i+1ωi+1= ii+1R iωi+θ˙i+1 i+1z^i+1i+1vi+1= ii+1R(ivi+ iωi× ipi+1)\begin{cases} &^{i+1}\omega_{i+1} = \ ^{i+1}_{i}R\ ^{i}\omega_i + \dot\theta_{i+1} \ ^{i+1} \hat{\mathbf{z}}_{i+1} \\ &^{i+1}v_{i+1} = \ ^{i+1}_{i}R(^{i} v_i + \ ^{i}\omega_i \times \ ^{i}p_{i+1}) \end{cases}

其中 z^i+1\hat{\mathbf{z}}_{i+1} 是框架 {i+1}\{i+1\} 的 Z 轴方向的单位向量。

注:

  • 框架 {i+1}\{i+1\} 的原点其实就是连杆 ii 的末端,因此 vi+1=vi+ωi×pi+1\vec{v}_{i+1} = \vec{v}_i + \vec{\omega}_i \times \vec{p}_{i+1},其中 pi+1\vec{p}_{i+1} 是框架 {i+1}\{i+1\} 原点 Oi+1O_{i+1} 在框架 {i}\{i\} 中的位矢;
  • 连杆 i+1i+1 的角速度满足 ωi+1=ωi+θ˙i+1z^i+1\vec{\omega}_{i+1} = \vec{\omega}_{i} + \dot\theta_{i+1} \hat{\mathbf{z}}_{i+1},因为 θ˙i+1\dot\theta_{i+1} 是连杆 i+1i+1 相对于连杆 ii 的相对角速度大小,其方向沿 框架 {i+1}\{i+1\} 的 Z 轴方向,因此总的角速度用合成公式即可得到。

绝对框架形式

{0ωi+1= 0ωi+θ˙i+1 i+10R i+1z^i+10vi+1= 0vi+ 0ωi× i0R ipi+1\begin{cases} &^{0}\omega_{i+1} = \ ^{0}\omega_i + \dot\theta_{i+1} \ ^{0}_{i+1}R\ ^{i+1} \hat{\mathbf{z}}_{i+1} \\ &^{0}v_{i+1} = \ ^{0} v_i + \ ^{0}\omega_i \times \ ^{0}_{i}R\ ^{i}p_{i+1} \end{cases}

物理含义同上。

4.2.2 棱柱关节#

棱柱关节 i+1i + 1 连接的连杆 ii 和连杆 i+1i + 1 之间的速度传播公式为

自身框架形式

{i+1ωi+1= ii+1R iωii+1vi+1= ii+1R(ivi+ iωi× ipi+1)+d˙i+1 i+1z^i+1\begin{cases} &^{i+1}\omega_{i+1} = \ ^{i+1}_{i}R\ ^{i}\omega_i \\ &^{i+1}v_{i+1} = \ ^{i+1}_{i}R(^{i} v_i + \ ^{i}\omega_i \times \ ^{i}p_{i+1}) + \dot{d}_{i+1}\ ^{i+1}\hat{\mathbf{z}}_{i+1} \end{cases}

其中 z^i+1\hat{\mathbf{z}}_{i+1} 是框架 {i+1}\{i+1\} 的 Z 轴方向的单位向量。

注:

  • 同样地,这里框架 {i+1}\{i+1\} 的原点也是连杆 ii ,因此 vi+1=vi+ωi×pi+1+d˙i+1z^i+1\vec{v}_{i+1} = \vec{v}_i + \vec{\omega}_i \times \vec{p}_{i+1} + \dot{d}_{i+1}\hat{\mathbf{z}}_{i+1},其中 pi+1\vec{p}_{i+1} 是框架 {i+1}\{i+1\} 原点 Oi+1O_{i+1} 在框架 {i}\{i\} 中的位矢,这里比旋转关节多出来的那一项是相对运动的速度;
  • 由于是旋转关节,因此没有相对的角速度部分,故连杆 i+1i+1 的角速度就是连杆 ii 的角速度 ωi+1=ωi\vec{\omega}_{i+1} = \vec{\omega}_{i}

绝对框架形式

{0ωi+1= 0ωi0vi+1= 0vi+ 0ωi× i0R ipi+1+d˙i+1 i+10R i+1z^i+1\begin{cases} &^{0}\omega_{i+1} = \ ^{0}\omega_i \\ &^{0}v_{i+1} = \ ^{0} v_i + \ ^{0}\omega_i \times \ ^{0}_{i}R\ ^{i}p_{i+1} + \dot{d}_{i+1}\ ^{0}_{i+1} R \ ^{i+1}\hat{\mathbf{z}}_{i+1} \end{cases}

物理含义同上。

根据上述的迭代公式,可以得到从连杆 1 开始的,直至最后一根连杆 nn 的速度结果。

求平面 2R 的末端速度与关节速率的函数关系

解:

前向运动学方程为

10T=[cθ1sθ100sθ1cθ10000100001]21T=[cθ2sθ20L1sθ2cθ20000100001]32T=[100L2010000100001]30T(θ1,θ2)=[c(θ1+θ2)s(θ1+θ2)0L1cθ1+L2c(θ1+θ2)s(θ1+θ2)c(θ1+θ2)0L1sθ1+L2s(θ1+θ2)00100001]\begin{aligned} ^{0}_{1}T &= \begin{bmatrix} c\theta_1 & -s\theta_1 & 0 & 0\\ s\theta_1 & c\theta_1 &0 &0\\ 0 &0 &1 &0 \\ 0 &0 &0 &1\end{bmatrix} \\ ^{1}_{2}T &= \begin{bmatrix} c\theta_2 & -s\theta_2 & 0 & L_1\\ s\theta_2 & c\theta_2 &0 &0\\ 0 &0 &1 &0 \\ 0 &0 &0 &1\end{bmatrix} \\ ^{2}_{3}T &= \begin{bmatrix} 1 & 0 & 0 & L_2\\ 0 & 1 &0 &0\\ 0 &0 &1 &0 \\ 0 &0 &0 &1\end{bmatrix} \\ ^{0}_{3}T(\theta_1, \theta_2) &= \begin{bmatrix} c(\theta_1 + \theta_2) & -s(\theta_1 + \theta_2) & 0 & L_1 c\theta_1 + L_2 c(\theta_1 + \theta_2)\\ s(\theta_1 + \theta_2) & c(\theta_1 + \theta_2) &0 &L_1 s\theta_1 + L_2 s(\theta_1 + \theta_2)\\ 0 &0 &1 &0 \\ 0 &0 &0 &1\end{bmatrix} \\ \end{aligned}

其中,c()c(\cdot)s()s(\cdot) 分别是余弦函数和正弦函数的缩写。

已知 0ω0=0, 0v0=0^0\omega_0 = 0, \ ^0v_0 = 0,利用迭代公式,有

 1ω1= 01R 0w0+θ˙1 1z^1=[00θ˙1] 2ω2= 12R 1w1+θ˙2 2z^2=[00θ˙1+θ˙2] 3ω3= 23R 2ω2= 2ω2\begin{aligned} \ ^{1}\omega_1 &= \ ^{1}_{0}R \ ^{0}w_0 + \dot\theta_1 \ ^{1}\mathbf{\hat{z}}_1 = \begin{bmatrix}0\\ 0\\ \dot\theta_1\end{bmatrix}\\ \ ^{2}\omega_2 &= \ ^{2}_{1}R \ ^{1}w_1 + \dot\theta_2 \ ^{2}\mathbf{\hat{z}}_2 = \begin{bmatrix} 0 \\ 0\\ \dot\theta_1 + \dot\theta_2\end{bmatrix} \\ \ ^{3}\omega_3 &= \ ^{3}_{2}R\ ^{2}\omega_2 = \ ^{2}\omega_2 \end{aligned}

注意这里计算  ii+1R\ ^{i+1}_{i} R 使用  ii+1R= i+1iR\ ^{i+1}_{i}R = \ ^{i}_{i+1}R^\top 最方便。

 1v1= 01R( 0v0+ 0ω0× 0p1)=0 2v2= 12R( 1v1+ 1ω1× 1p2)=[L1θ˙1sθ2L1θ˙1cθ20] 3v3= 23R( 2v2+ 2ω2× 2p3)=[L1θ˙1sθ2L1θ˙1cθ2+L2(θ˙1+θ˙2)0]\begin{aligned} \ ^{1}v_1 &= \ ^{1}_{0}R(\ ^{0}v_0 + \ ^{0}\omega_0 \times \ ^{0} p_1) = 0\\ \ ^{2}v_2 &= \ ^{2}_{1}R(\ ^{1}v_1 + \ ^{1}\omega_1 \times \ ^{1}p_2) = \begin{bmatrix} L_1\dot\theta_1 s\theta_2 \\ L_1\dot\theta_1c\theta_2 \\ 0\end{bmatrix} \\ \ ^{3}v_3 &= \ ^{3}_{2}R(\ ^{2}v_2 + \ ^{2}\omega_2 \times \ ^{2}p_3) = \begin{bmatrix} L_1\dot\theta_1 s\theta_2\\ L_1\dot\theta_1c\theta_2 + L_2(\dot\theta_1 + \dot\theta_2) \\ 0\end{bmatrix} \end{aligned}

注意,这里的  3v3\ ^{3}v_3 依然需要使用旋转关节的传播公式,因为线速度实际是上一个连杆末端的速度。

当从后续 Jacobian 矩阵的角度看这个问题的时候,会发现 vv 关于 x, y 分量的项数并不对称,其实这是因为这里的速度表达是在刚体自身框架下的表达,而不是在绝对框架 {0}\{0\} 下的表达形式

实际上,将上述结果变换到框架 {0}\{0\} 中,得到

 0v3= 30R 3v3=[c(θ1+θ2)s(θ1+θ2)0s(θ1+θ2)c(θ1+θ2)0001][L1θ˙1sθ2L1θ˙1cθ2+L2(θ˙1+θ˙2)0]=[L1sθ2c(θ1+θ2)θ˙1s(θ1+θ2)(L1θ˙1cθ2+L2(θ˙1+θ˙2))L1sθ2s(θ1+θ2)θ˙1+c(θ1+θ2)(L1θ˙1cθ2+L2(θ˙1+θ˙2))0]=[L1sθ1θ˙1L2s(θ1+θ2)θ˙1L2s(θ1+θ2)θ˙2L1cθ1θ˙1+L2c(θ1+θ2)θ˙1+L2c(θ1+θ2)θ˙20]\begin{aligned} \ ^{0}v_3 &= \ ^{0}_{3}R \ ^{3}v_3 = \begin{bmatrix} c(\theta_1 + \theta_2) &-s(\theta_1 + \theta_2) &0 \\ s(\theta_1 + \theta_2) &c(\theta_1 + \theta_2) &0 \\ 0 &0 &1 \end{bmatrix} \begin{bmatrix} L_1\dot\theta_1 s\theta_2\\ L_1\dot\theta_1c\theta_2 + L_2(\dot\theta_1 + \dot\theta_2) \\ 0\end{bmatrix}\\ &= \begin{bmatrix} L_1 s\theta_2 c(\theta_1 + \theta_2)\dot\theta_1 - s(\theta_1 + \theta_2)(L_1\dot\theta_1c\theta_2 + L_2(\dot\theta_1 + \dot\theta_2)) \\ L_1 s\theta_2 s(\theta_1 + \theta_2)\dot\theta_1 + c(\theta_1 + \theta_2)(L_1\dot\theta_1c\theta_2 + L_2(\dot\theta_1 + \dot\theta_2)) \\ 0\end{bmatrix}\\ &= \begin{bmatrix} -L_1s\theta_1\dot\theta_1 - L_2 s(\theta_1 + \theta_2)\dot\theta_1 -L_2s(\theta_1 + \theta_2)\dot\theta_2 \\ L_1c\theta_1\dot\theta_1 + L_2 c(\theta_1 + \theta_2)\dot\theta_1 + L_2 c(\theta_1 + \theta_2)\dot\theta_2 \\ 0\end{bmatrix} \end{aligned}

4.3 Jacobian 矩阵#

4.3.1 数学定义#

Jacobian 是向量函数 f(x)Rmf(x) \in \mathbb{R}^m 对向量 xRnx \in \mathbb{R}^n 的一阶导数,其形式为一个矩阵

J(x)=f(x)xRm×nJ(x) = \frac{\partial f(x)}{\partial x} \in \mathbb{R}^{m \times n}

对应微分形式为

df(x)=J(x)dx\mathrm{d}f(x) = J(x)\mathrm{d}x

4.3.2 Jacobian 矩阵求速度关系#

设想我们得到了末端位置 X=[xyz]\mathcal{X} = \begin{bmatrix} x \\ y\\ z\end{bmatrix} 对关节变量 q=[q1qn]q = \begin{bmatrix} q_1 \\ \vdots \\ q_n\end{bmatrix} 的正向运动学关系为

X=T(q)\mathcal{X} = T(q)

那么,通过求 Jacobian 矩阵 J(q)J(q),并且让微分形式同时对时间 tt 求导,可以得到

X˙=J(q)q˙\dot{\mathcal{X}} = J(q) \dot q

这个公式即是速度关系,实现了从构形空间到笛卡尔空间的速度映射。注意,通常这里所取的向量表达框架就是绝对框架 {0}\{0\}

平面2R速度关系的 Jacobian 解法

解:

直接得到正向运动学结果

30T(θ1,θ2)=[c(θ1+θ2)s(θ1+θ2)0L1cθ1+L2c(θ1+θ2)s(θ1+θ2)c(θ1+θ2)0L1sθ1+L2s(θ1+θ2)00100001]\begin{aligned} ^{0}_{3}T(\theta_1, \theta_2) &= \begin{bmatrix} c(\theta_1 + \theta_2) & -s(\theta_1 + \theta_2) & 0 & L_1 c\theta_1 + L_2 c(\theta_1 + \theta_2)\\ s(\theta_1 + \theta_2) & c(\theta_1 + \theta_2) &0 &L_1 s\theta_1 + L_2 s(\theta_1 + \theta_2)\\ 0 &0 &1 &0 \\ 0 &0 &0 &1\end{bmatrix} \\ \end{aligned}

提取末端位置坐标,有

X=[L1cθ1+L2c(θ1+θ2)L1sθ1+L2s(θ1+θ2)]\mathcal{X} = \begin{bmatrix} L_1 c\theta_1 + L_2 c(\theta_1 + \theta_2)\\ L_1 s\theta_1 + L_2 s(\theta_1 + \theta_2)\end{bmatrix}

对时间 tt 求导,有

X˙=[L1sθ1L2s(θ1+θ2)L2s(θ1+θ2)L1cθ1+L2c(θ1+θ2)L2c(θ1+θ2)][θ˙1θ˙2]\dot{\mathcal{X}} = \begin{bmatrix} -L_1s\theta_1 - L_2 s(\theta_1 + \theta_2) &-L_2 s(\theta_1 + \theta_2)\\ L_1c\theta_1 + L_2 c(\theta_1 + \theta_2) &L_2 c(\theta_1 + \theta_2)\end{bmatrix}\begin{bmatrix} \dot\theta_1 \\ \dot\theta_2\end{bmatrix}

其中,J(θ1,θ2)=[L1sθ1L2s(θ1+θ2)L2s(θ1+θ2)L1cθ1+L2c(θ1+θ2)L2c(θ1+θ2)]J(\theta_1, \theta_2) = \begin{bmatrix} -L_1s\theta_1 - L_2 s(\theta_1 + \theta_2) &-L_2 s(\theta_1 + \theta_2)\\ L_1c\theta_1 + L_2 c(\theta_1 + \theta_2) &L_2 c(\theta_1 + \theta_2)\end{bmatrix}

这里的运算结果和前面的使用迭代方式的运算结果是一致的。

4.3.3 关节变量的 Jacobian 贡献#

相较于框架 {0}\{0\}(默认各个变量的左上标均为 0\ ^0),考察各个关节变量对末端速度的贡献。设

X˙=JP(q)q˙=i=1nJPi(q)q˙iΩ=JO(q)q˙=i=1nJOi(q)q˙i\begin{aligned} \dot{\mathcal{X}} &= J_P(q)\dot{q} = \sum_{i=1}^n J_{P_i}(q)\dot{q}_i \\ \Omega &= J_O(q) \dot{q} = \sum_{i=1}^n J_{O_i}(q)\dot q_i \end{aligned}

其中,X\mathcal{X} 表示末端线速度, Ω\Omega 表示末端旋转角速度,线速度 Jacobian 矩阵 JP(q)=[JP1(q)JP2(q)JPn(q)]J_P(q) = \begin{bmatrix} J_{P_1}(q) & J_{P_2}(q) & \dots & J_{P_n}(q)\end{bmatrix},角速度 Jacobian 矩阵 JO(q)=[JO1(q)JO2(q)JOn(q)]J_O(q) = \begin{bmatrix} J_{O_1}(q) & J_{O_2}(q) &\dots &J_{O_n}(q)\end{bmatrix}

旋转关节#

JPi(q)θ˙i=θ˙iz^i×(Xpi)JOi(q)θ˙i=z^iθ˙i\begin{aligned} J_{P_i}(q)\dot\theta_i &= \dot\theta_i\mathbf{\hat{z}}_i \times (\mathcal{X} - p_i) \\ J_{O_i}(q)\dot\theta_i &= \mathbf{\hat{z}}_i\dot\theta_i \end{aligned}

于是

JPi(q)=z^i×(Xpi)JOi(q)=z^i\begin{aligned} J_{P_i}(q) &= \mathbf{\hat{z}}_i \times (\mathcal{X} - p_i) \\ J_{O_i}(q) &= \mathbf{\hat{z}}_i \end{aligned}

其中, pip_i 是关节 ii 的位置向量,也就是框架 {i}\{i\} 的原点 piorgp_{iorg}

棱柱关节#

JPi(q)d˙i=z^id˙iJOi(q)d˙i=0\begin{aligned} J_{P_i}(q)\dot d_i &= \mathbf{\hat{z}}_i \dot d_i\\ J_{O_i}(q)\dot d_i &= 0 \end{aligned}

于是

JPi(q)=z^iJOi(q)=0\begin{aligned} J_{P_i}(q) &= \mathbf{\hat{z}}_i \\ J_{O_i}(q) &= 0 \end{aligned}

4.3.4 运动旋量的 Jacobian#

前面所使用的 Jacobian 主要是关节变量和末端线速度之间或和末端角速度之间的 Jacobian 矩阵。我们可以将线速度和角速度的 Jacobian 矩阵沿行方向拼接起来,从而得到末端运动旋量 ξ=[X˙Ω]\xi = \begin{bmatrix} \dot{\mathcal{X}} \\ \Omega\end{bmatrix} 关于各个关节变量的速度关系。

ξ=[X˙Ω]=J(q)q˙=[JP(q)JO(q)]q˙=[JP1(q)JPn(q)JO1(q)JOn(q)][q˙1q˙n]\xi = \begin{bmatrix} \dot{\mathcal{X}} \\ \Omega\end{bmatrix} = J(q) \dot q = \begin{bmatrix} J_P(q) \\ J_O(q)\end{bmatrix} \dot q = \begin{bmatrix} J_{P_1}(q) & \dots &J_{P_n}(q) \\ J_{O_1}(q) & \dots &J_{O_n}(q)\end{bmatrix} \begin{bmatrix} \dot q_1 \\ \vdots \\ \dot q_n\end{bmatrix}

对于旋转关节,有

J(q)=[z^i×(Xpi)z^i]J(q) = \begin{bmatrix} \mathbf{\hat{z}}_i \times (\mathcal{X} - p_i) \\ \mathbf{\hat{z}}_i\end{bmatrix}

对于棱柱关节,有

J(q)=[z^i0]J(q) = \begin{bmatrix} \mathbf{\hat{z}}_i \\ 0\end{bmatrix}

平面2R速度关系的另一种 Jacobian 解法

解:

前向运动学结果为

30T(θ1,θ2)=[c(θ1+θ2)s(θ1+θ2)0L1cθ1+L2c(θ1+θ2)s(θ1+θ2)c(θ1+θ2)0L1sθ1+L2s(θ1+θ2)00100001]\begin{aligned} ^{0}_{3}T(\theta_1, \theta_2) &= \begin{bmatrix} c(\theta_1 + \theta_2) & -s(\theta_1 + \theta_2) & 0 & L_1 c\theta_1 + L_2 c(\theta_1 + \theta_2)\\ s(\theta_1 + \theta_2) & c(\theta_1 + \theta_2) &0 &L_1 s\theta_1 + L_2 s(\theta_1 + \theta_2)\\ 0 &0 &1 &0 \\ 0 &0 &0 &1\end{bmatrix} \\ \end{aligned}

于是,有

[JP1JO1]=[ 0z^i×( 0p3 0p1) 0z^1]=[[001]×([L1cθ1+L2c(θ1+θ2)L1sθ1+L2s(θ1+θ2)0][000])[001]]=[L1sθ1L2s(θ1+θ2)L1cθ1+L2c(θ1+θ2)0001][JP2JO2]=[ 0z^i×( 0p3 0p2) 0z^2]=[[001]×([L1cθ1+L2c(θ1+θ2)L1sθ1+L2s(θ1+θ2)0][L1cθ1L1sθ10])[001]]=[L2s(θ1+θ2)L2c(θ1+θ2)0001]\begin{aligned} \begin{bmatrix} J_{P_1} \\ J_{O_1}\end{bmatrix} &= \begin{bmatrix} \ ^{0}\mathbf{\hat{z}}_i \times (\ ^{0}p_3 - \ ^{0}p_1) \\ \ ^{0}\mathbf{\hat{z}}_1\end{bmatrix} = \begin{bmatrix} \begin{bmatrix} 0\\0\\1\end{bmatrix} \times \left(\begin{bmatrix} L_1 c\theta_1 + L_2c(\theta_1 + \theta_2) \\ L_1 s\theta_1 + L_2s(\theta_1 + \theta_2) \\0 \end{bmatrix} - \begin{bmatrix} 0\\0\\0\end{bmatrix}\right) \\ \begin{bmatrix} 0\\0\\1\end{bmatrix}\end{bmatrix} = \begin{bmatrix} -L_1 s\theta_1 - L_2 s(\theta_1 + \theta_2)\\ L_1 c\theta_1 + L_2 c(\theta_1 + \theta_2) \\ 0 \\ 0\\ 0\\ 1\end{bmatrix} \\ \begin{bmatrix} J_{P_2} \\ J_{O_2}\end{bmatrix} &= \begin{bmatrix} \ ^{0}\mathbf{\hat{z}}_i \times (\ ^{0}p_3 - \ ^{0}p_2) \\ \ ^{0}\mathbf{\hat{z}}_2\end{bmatrix} = \begin{bmatrix} \begin{bmatrix} 0\\0\\1\end{bmatrix} \times \left(\begin{bmatrix} L_1 c\theta_1 + L_2c(\theta_1 + \theta_2) \\ L_1 s\theta_1 + L_2s(\theta_1 + \theta_2) \\0 \end{bmatrix} - \begin{bmatrix} L_1c\theta_1\\L_1s\theta_1\\0\end{bmatrix}\right) \\ \begin{bmatrix} 0\\0\\1\end{bmatrix}\end{bmatrix} = \begin{bmatrix} - L_2 s(\theta_1 + \theta_2)\\ L_2 c(\theta_1 + \theta_2) \\ 0 \\ 0\\ 0\\ 1\end{bmatrix} \\ \end{aligned}

从而得到

ξ=[X˙Ω]=[JP1JP2JO1JO2][θ˙1θ˙2]\xi = \begin{bmatrix} \dot{\mathcal{X}} \\ \Omega\end{bmatrix} = \begin{bmatrix} J_{P_1} & J_{P_2} \\ J_{O_1} & J_{O_2} \end{bmatrix} \begin{bmatrix} \dot\theta_1 \\ \dot\theta_2\end{bmatrix}J=[JP1JP2JO1JO2]=[L1sθ1L2s(θ1+θ2)L2s(θ1+θ2)L1cθ1+L2c(θ1+θ2)L2c(θ1+θ2)00000011]J = \begin{bmatrix} J_{P_1} & J_{P_2} \\ J_{O_1} & J_{O_2} \end{bmatrix} = \begin{bmatrix} -L_1s\theta_1 - L_2 s(\theta_1 + \theta_2) &-L_2 s(\theta_1 + \theta_2)\\ L_1c\theta_1 + L_2 c(\theta_1 + \theta_2) &L_2 c(\theta_1 + \theta_2) \\ 0 &0 \\ 0 &0 \\ 0 &0 \\ 1 & 1\end{bmatrix}

化简后可以得到和之前一样的结果。

4.3.5 Jacobian 在不同框架下的切换#

前面所使用的 Jacobian 矩阵都是在框架 {0}\{0\} 中的向量表示。同样地,Jacobian 矩阵也可以在其他框架下表达。

设在框架 {A}\{A\} 中表达的 Jacobian 矩阵为 AJ(q)^{A}J(q),那么其在框架 {B}\{B\} 中的对应表达 BJ(q)^{B}J(q) 满足

AJ(q)=[ BAR00 BAR] BJ(q)^{A}J(q) = \begin{bmatrix} \ ^{A}_{B}R & 0 \\ 0 & \ ^{A}_{B}R\end{bmatrix} \ ^{B}J(q)

这是因为

[AvAω]=[ BAR00 BAR][BvBω]AX˙=[AvAω]= AJ(q)q˙BX˙=[BvBω]= BJ(q)q˙\begin{aligned} \begin{bmatrix} ^A v \\ ^A\omega\end{bmatrix} &= \begin{bmatrix} \ ^{A}_{B}R & 0 \\ 0 & \ ^{A}_{B}R\end{bmatrix} \begin{bmatrix} ^B v \\ ^B\omega\end{bmatrix} \\ ^{A}\dot{\mathcal{X}} = \begin{bmatrix} ^A v \\ ^A\omega\end{bmatrix} &= \ ^{A}J(q)\dot q \\ ^{B}\dot{\mathcal{X}} = \begin{bmatrix} ^B v \\ ^B\omega\end{bmatrix} &= \ ^{B}J(q)\dot q \end{aligned}

结合在一起即可推导出上述结论。

特别需要注意的一点是 [AvAω]\begin{bmatrix} ^A v \\ ^A\omega\end{bmatrix}[BvBω]\begin{bmatrix} ^B v \\ ^B\omega\end{bmatrix} 不是同一个运动旋量在不同框架下的向量表达。

4.3.6 运动学冗余#

Jacobian 子矩阵#

Jacobian 矩阵的形状不一定是方阵,在前面的例子中,Jacobian 的形状有 2×22\times 2 的和 6×26 \times 2 的。事实上这些矩阵都是空间 Jacobian 矩阵 J(q)R6×nJ(q) \in \mathbb{R}^{6\times n} 的子矩阵(其中 nn 为关节个数)。例如,在平面的机械臂问题中,实际上只需要 [x˙y˙ωz]\begin{bmatrix} \dot x \\\dot y \\ \omega_z\end{bmatrix} 三个速度变量即可完全描述机械臂的速度,而不需要剩下的三个速度变量 z˙,ωx,ωy\dot z, \omega_x, \omega_y。因此,可以通过选取适当的 Jacobian 子矩阵以方便问题的求解。

(这一段的讲述目的是阐明后续运动学冗余的定义中为什么 Jacobian 矩阵的形状是 J(q)Rm×nJ(q) \in \mathbb{R}^{m\times n},其中 mm 未必是6)

运动学冗余的定义#

  • 定义: 关节变量的数目 nn 大于描述给定任务所必须的变量数目 mm
  • 例如末端执行器的自由度为 6633,大于 66 轴的空间机械臂和大于 33 轴的平面臂都是运动学冗余的。
  • 又如若目标任务仅是实现平面定位任务(只关注末端 x,yx, y 坐标, m=2m = 2),那么三轴平面臂 (n=3n = 3) 也是运动学冗余的

运动学冗余并不是不好的,冗余能够为机械臂提供灵活、多样的运动。在实际应用中,关节活动范围往往有限制,此时加入运动学冗余可以弥补活动范围限制对末端运动的影响。

存在运动学冗余时的速度逆解#

求速度逆解的目标是给定末端速度 X˙\dot{\mathcal{X}} 和 Jacobian 矩阵 J(q)J(q),目标是求取相应的关节速率 q˙\dot q

X˙=J(q)q˙,X˙Rm,q˙Rn\dot{\mathcal{X}} = J(q)\dot q, \quad \dot{\mathcal{X}} \in \mathbb{R}^m, \quad \dot q \in \mathbb{R}^n

m<nm \lt n 时,运动学冗余会导致无穷多解的存在,此时求解方程可以用优化方法求解。例如采用正则化的最小二乘法

minq˙L(q˙,λ)=12q˙Wq˙+λ(X˙J(q)q˙)\min_{\dot q} \mathcal{L}(\dot q, \lambda) = \frac{1}{2}\dot q^\top W \dot q + \lambda^\top (\dot{\mathcal{X}} - J(q) \dot q)

有最优解

q˙=W1J(JW1J)1X˙\dot q = W^{-1} J^\top(JW^{-1}J^\top)^{-1}\dot{\mathcal{X}}

4.3.7 奇异性#

如果 Jacobian 矩阵 满秩 且为方阵,则可以通过求逆的方法直接得到速度逆解。

q˙=J1(q)X˙\dot q = J^{-1}(q)\dot{\mathcal{X}}

使 Jacobian 矩阵不满秩(注意是不满秩而不是非方阵)的构形 qq 也是有可能存在的,我们称这些构形为 奇异构形奇异点

  • 边界奇异点:末端执行器处于或接近工作空间边界时出现的奇异点。
  • 内部奇异点:出现在远离工作空间边界的位置,通常是由两个或多个关节轴共线或某个特定构形所致的奇异点。

如果机械臂的构形位于一个奇异点,则其运动自由度减少,无论如何选择关节速率,都无法实现笛卡尔空间内某个方向或子空间的运动。

  • 求解方阵 Jacobian 矩阵奇异点的方法通常是采用 Jacobian 矩阵的行列式,当行列式值为0时,即对应构形为奇异点。
  • 如果 Jacobian 矩阵非方阵,可以用求非满秩的情况的方法求解奇异点

虽然在奇异点附近也可以用优化方法求解速度逆解,但是 Jacobian 矩阵是否满秩对实际中末端速度实现是有影响的。在临近奇异点的区域,实现给定末端速度所需要的关节速率会激增。

平面2R的线速度奇异点

解:

根据前面的结果

J(θ1,θ2)=[L1sθ1L2s(θ1+θ2)L2s(θ1+θ2)L1cθ1+L2c(θ1+θ2)L2c(θ1+θ2)]J(\theta_1, \theta_2) = \begin{bmatrix} -L_1s\theta_1 - L_2 s(\theta_1 + \theta_2) &-L_2 s(\theta_1 + \theta_2)\\ L_1c\theta_1 + L_2 c(\theta_1 + \theta_2) &L_2 c(\theta_1 + \theta_2)\end{bmatrix}

detJ(θ1,θ2)=0\det J(\theta_1, \theta_2) = 0,可以得到

detJ=L1L2sθ1c(θ1+θ2)L22s(θ1+θ2)c(θ1+θ2)+L1L2cθ1s(θ1+θ2)+L22s(θ1+θ2)c(θ1+θ2)=L1L2sθ2\begin{aligned} \det J &= -L_1L_2s\theta_1c(\theta_1 + \theta_2) - L_2^2s(\theta_1 + \theta_2)c(\theta_1 + \theta_2) + L_1L_2c\theta_1s(\theta_1 + \theta_2) + L_2^2s(\theta_1 + \theta_2)c(\theta_1 + \theta_2) \\ &= L_1 L_2 s\theta_2 \end{aligned}

θ2=0 or π\theta_2 = 0 \text{ or } \pi 时是机械臂位于奇异点,此时,末端只能沿臂的垂直方向运动,在二维平面上损失了一个自由度。

从此例中也可以看出为什么在接近奇异点的区域,需要提供的关节速率会无穷大

θ˙=J1(θ)X˙\dot \theta = J^{-1}(\theta) \dot{\mathcal{X}}J1(θ)=1L1L2sθ2[L2c(θ1+θ2)L2s(θ1+θ2)L1cθ1L2c(θ1+θ2)L1sθ1L2s(θ1+θ2)]J^{-1}(\theta) = \frac{1}{L_1L_2s\theta_2}\begin{bmatrix} L_2c(\theta_1 + \theta_2) & L_2s(\theta_1 + \theta_2) \\ -L_1c\theta_1 - L_2 c(\theta_1 + \theta_2) & -L_1s\theta_1 - L_2 s(\theta_1 + \theta_2)\end{bmatrix}

这里分母上的 sθ2s\theta_2 就导致了为什么关节速率会趋于无穷大。

4.4 静力学分析目标及力和力矩的传播公式#

静力学分析是在机械臂相对静止或匀速状态下的受力分析。目标是求解,为了保证平衡条件,各个关节应该提供的力或力矩是什么。

约定

  • fif_i 表示连杆 i1i-1 施加在连杆 ii 上的力
  • nin_i 表示连杆 i1i-1 施加在连杆 ii 上的力矩

于是根据连杆 ii 的平衡方程(忽略自重),可以得到

{ifiifi+1=0iniini+1 ipi+1× ifi+1=0\begin{cases} &^{i}f_i - ^{i}f_{i+1} = 0\\ &^{i}n_i - ^{i}n_{i+1} -\ ^{i}p_{i+1} \times\ ^{i}f_{i+1} = 0 \end{cases}

其中 ipi+1=ip(i+1)org^{i}p_{i+1} = ^{i}p_{(i+1)org}

这里需要注意的一个点是如何得到这两个方程。

  • 在这个系统中,连杆 ii 只受到 fif_ifi+1f_{i+1} 两个力的作用,因此,根据刚体的静力学分析,直接把刚体视作一个质点作力部分的分析处理,得到第一个方程即力的平衡。
  • 然而,力矩的加减法是在必须在同一参考点下才可以进行。而根据我们所设定的结果,nin_ini+1n_{i+1} 分别是相对于关节 ii 和关节 i+1i+1 处的力矩(因为力 fif_ifi+1f_{i+1} 分别作用于关节 ii 和 关节 i+1i+1 上),是不可以直接作力矩平衡的,需要把 ni+1n_{i+1} 平移到关节 ii 处才可以。这种力矩的平移会带来一个额外的力矩项,即 pi+1×fi+1p_{i+1} \times f_{i+1},此时可以得到第二个方程。(可以参考朗道物理学 P112(实际是pdf文件的P125) )

于是传播公式为

{ifi+1= ifiini+1= ini+ ipi+1× ifi+1\begin{cases} &^{i}f_{i+1} = \ ^{i}f_i \\ &^{i}n_{i+1} = \ ^{i}n_i + \ ^{i}p_{i+1} \times\ ^{i}f_{i+1} \end{cases}

注意 fi,nif_i, n_i 是连杆 ii 提供的力和力矩,关节所能够提供的只能是 Z 轴方向的分量

  • 旋转关节(力矩): τi= ini iz^i\tau_i = \ ^{i} n_i^\top \ ^{i}\mathbf{\hat{z}}_i
  • 棱柱关节(力): τi= ifi iz^i\tau_i = \ ^{i}f_i^\top \ ^{i}\mathbf{\hat{z}}_i

下面的一道例题,给出了求解静力学平衡的方法(力学的结果,通常是反向传播求解)

平面2R,求为了保持平衡状态需要在末端施加的作用力 F\mathcal{F}

解:

前向运动学结果

10T=[cθ1sθ100sθ1cθ10000100001]21T=[cθ2sθ20L1sθ2cθ20000100001]32T=[100L2010000100001]30T(θ1,θ2)=[c(θ1+θ2)s(θ1+θ2)0L1cθ1+L2c(θ1+θ2)s(θ1+θ2)c(θ1+θ2)0L1sθ1+L2s(θ1+θ2)00100001]\begin{aligned} ^{0}_{1}T &= \begin{bmatrix} c\theta_1 & -s\theta_1 & 0 & 0\\ s\theta_1 & c\theta_1 &0 &0\\ 0 &0 &1 &0 \\ 0 &0 &0 &1\end{bmatrix} \\ ^{1}_{2}T &= \begin{bmatrix} c\theta_2 & -s\theta_2 & 0 & L_1\\ s\theta_2 & c\theta_2 &0 &0\\ 0 &0 &1 &0 \\ 0 &0 &0 &1\end{bmatrix} \\ ^{2}_{3}T &= \begin{bmatrix} 1 & 0 & 0 & L_2\\ 0 & 1 &0 &0\\ 0 &0 &1 &0 \\ 0 &0 &0 &1\end{bmatrix} \\ ^{0}_{3}T(\theta_1, \theta_2) &= \begin{bmatrix} c(\theta_1 + \theta_2) & -s(\theta_1 + \theta_2) & 0 & L_1 c\theta_1 + L_2 c(\theta_1 + \theta_2)\\ s(\theta_1 + \theta_2) & c(\theta_1 + \theta_2) &0 &L_1 s\theta_1 + L_2 s(\theta_1 + \theta_2)\\ 0 &0 &1 &0 \\ 0 &0 &0 &1\end{bmatrix} \\ \end{aligned}

根据末端无施加的外力矩,但是有施加的外力 F\mathcal{F},有

3F= 3f3=[3fx3fy0], 3n3=0\begin{aligned} ^{3}\mathcal{F} = \ ^{3} f_3 = \begin{bmatrix}^{3}f_x\\ ^{3}f_y \\ 0\end{bmatrix}, \quad \ ^{3}n_3 = 0 \end{aligned}

带入迭代公式

 2f2= 32R 3f3=[3fx3fy0], 2n2= 32R 3n3+ 2p3× 2f2=[00L2 3fy] 1f1= 21R 2f2=[3fxcθ2 3fysθ23fxsθ2+ 3fycθ20], 1n1= 21R 2n2+ 1p2× 1f1=[00L13fxsθ2+L1 3fycθ2+L2 3fy]\begin{aligned} \ ^{2}f_2 &= \ ^{2}_{3}R \ ^{3}f_3 = \begin{bmatrix}^{3}f_x\\ ^{3}f_y \\ 0 \end{bmatrix}, \quad \ ^{2}n_2 = \ ^{2}_{3}R \ ^{3}n_3 + \ ^{2}p_{3} \times \ ^{2}f_2 = \begin{bmatrix} 0 \\ 0\\ L_2 \ ^{3}f_y\end{bmatrix}\\ \ ^{1}f_1 &= \ ^{1}_{2}R \ ^{2}f_2 = \begin{bmatrix} ^{3}f_xc\theta_2 - \ ^{3}f_ys\theta_2 \\ ^{3}f_x s\theta_2 + \ ^{3}f_yc\theta_2 \\ 0\end{bmatrix}, \quad\ ^{1}n_1 = \ ^{1}_{2}R \ ^{2}n_2 + \ ^{1}p_2 \times \ ^{1}f_1 = \begin{bmatrix} 0 \\ 0 \\ L_1^{3}f_xs\theta_2 + L_1 \ ^{3}f_yc\theta_2 + L_2 \ ^{3}f_y \end{bmatrix} \end{aligned}

注意这里的逆向传播不需要计算到连杆0。

于是取沿 Z 轴方向的分量,得到关节需要提供的力矩为

[τ1τ2]=[1n1 1z^12n2 2z^2]=[L13fxsθ2+L1 3fycθ2+L2 3fyL2 3fy]=[L1sθ2L1cθ2+L20L2][3fx3fy]\begin{bmatrix} \tau_1 \\ \tau_2\end{bmatrix} = \begin{bmatrix}^{1}n_1^\top \ ^{1}\mathbf{\hat{z}}_1 \\ ^{2}n_2^\top \ ^{2}\mathbf{\hat{z}}_2\end{bmatrix} = \begin{bmatrix} L_1^{3}f_xs\theta_2 + L_1 \ ^{3}f_yc\theta_2 + L_2 \ ^{3}f_y \\ L_2 \ ^{3}f_y\end{bmatrix} = \begin{bmatrix} L_1 s\theta_2 &L_1c\theta_2 + L_2 \\ 0 & L_2\end{bmatrix}\begin{bmatrix} ^{3}f_x \\ ^{3}f_y\end{bmatrix}

4.4.1 力的 Jacobian 矩阵#

对比上面平面 2R 力学的结果

τ=[L1sθ2L1cθ2+L20L2][3fx3fy]\tau = \begin{bmatrix} L_1 s\theta_2 &L_1c\theta_2 + L_2 \\ 0 & L_2\end{bmatrix}\begin{bmatrix} ^{3}f_x \\ ^{3}f_y\end{bmatrix}

和速度的关系

3v3=[L1sθ20L1cθ2+L2L2][θ˙1θ˙2]^{3}v_3 = \begin{bmatrix} L_1 s\theta_2 & 0\\ L_1c\theta_2 + L_2 & L_2\end{bmatrix}\begin{bmatrix} \dot \theta_1 \\ \dot \theta_2\end{bmatrix}

发现一条规律,若 X˙=J(q)q˙\dot{\mathcal{X}} = J(q)\dot q,则应该有 τ=J(q)F\tau = J^\top(q)\mathcal{F}。事实上,这个结论是成立的,使用虚功原理可以证明这个结论。

根据虚功原理 (这个很出名,详细讲解很多,例如知乎某个讲解),主动力做的虚功之和为0,因此

τδq=FδX,δq\tau^\top\delta q = \mathcal{F}^\top \delta \mathcal{X}, \quad \forall \delta q

根据 δX=J(q)δq\delta \mathcal{X} = J(q)\delta q,带入有

τ=J(q)F\tau = J^\top(q) \mathcal{F}

这实现了从末端笛卡尔空间中的广义力到关节空间中的广义力的映射。

机器人学基础 第四章 机械臂的速度与静力
https://adalovelemon.github.io/blog/en/posts/content/coursenotes/robotics/chapter-4/
Author
Ada Lovelemon
Published at
2025-05-19

Comments Section