机器人学笔记(3)矩阵的伪逆

机器人学笔记(3)矩阵的伪逆

左逆矩阵与右逆矩阵

对于机器人而言,求解雅可比的矩阵可以通过机器人各个关节的速度求得末端的速度与角速度,而求解逆运动学时,经常会出现已知末端机器人末端速度,求机器人各个关节速度的情况。

对于一个矩阵 A m × n A_{m\times n} Am×n和矩阵 B n × m B_{{n\times m}} Bn×m,如果矩阵之间满足:
A B A = A ABA=A ABA=A
则称 B B B A A A的广义逆矩阵。

在机器人学之中,一般使用矩阵的左逆或者右逆,若 A A A是满秩,则可以使用它的左逆或右逆矩阵。

m > n m>n m>n,则使用左逆矩阵,若 n > m n>m n>m,则使用右逆矩阵,下面直接给出左逆矩阵和右逆矩阵的形式:
A l e f t − 1 = ( A T A ) − 1 A T A r i g h t − 1 = A T ( A A T ) − 1 A_{left}^{-1}=(A^TA)^{-1}A^T\\ A_{right}^{-1}=A^T(AA^T)^{-1} Aleft1=(ATA)1ATAright1=AT(AAT)1

SVD奇异值分解求逆

上述的做法的问题在于,它要求矩阵的满秩,而在机器人正常运行时,有时会运动到奇异点附近,雅可比矩阵发生降秩,此时较小的关节角度要通过较大的速度实现,对机器人造成损害。

所以我们可以将矩阵进行奇异值分解再计算矩阵的逆,假设矩阵 A A A m × n m\times n m×n维矩阵,我们定义 A A A矩阵的SVD为:
A = U Σ V T A=U\Sigma V^T A=UΣVT
其中, U ∈ R m × m U \in \mathbb{R_{m \times m}} URm×m​, Σ ∈ R m × n \Sigma \in\mathbb{R_{m\times n}} ΣRm×n​, V ∈ R n × n V \in\mathbb{R_{n\times n}} VRn×n,其中 U U U V V V都是酉矩阵,我们令 A T A^T AT A A A做矩阵乘法,得到一个 n × n n\times n n×n的矩阵,对其求特征向量,有:
( A T A ) v i = λ i v i (A^TA)v_i=\lambda_iv_i (ATA)vi=λivi
v i v_i vi列向量的组合就是矩阵 V V V,同样的道理,令 A A A A T A_T AT做矩阵乘法,有:
( A A T ) u i = λ i u i (AA^T)u_i=\lambda_iu_i (AAT)ui=λiui
u i u_i ui列向量的组合就是矩阵 U U U,下面计算奇异值矩阵,有:
Σ = ( σ 1 ∣ σ 2 ∣ . . . ∣ σ r ∣ − − − − 十 − ∣ 0 ) \Sigma = \begin{pmatrix} \sigma_1&&&&|&\\ &\sigma_2&&&|&\\ &&...&&|&\\ &&&\sigma_r&|&\\ -&-&-&-&十&-\\ &&&&|&0 \end{pmatrix} Σ= σ1σ2...σr0
对每一个 σ i \sigma_i σi,有:
A v i = σ i u i Av_i=\sigma_iu_i Avi=σiui
不过用这个式子来计算是比较困难的,我们一般计算出矩阵 A A T AA^T AAT的特征值 λ i \lambda_i λi用:
σ i = λ i \sigma_i = \sqrt{\lambda_i} σi=λi
利用 S V D SVD SVD计算矩阵的逆,得到的逆矩阵为:
A + = V Σ + U T A^+=V\Sigma^+U^T A+=VΣ+UT
在上式中
Σ + = ( 1 σ 1 ∣ 1 σ 2 ∣ . . . ∣ 1 σ r ∣ − − − − 十 − ∣ 0 ) \Sigma^+ = \begin{pmatrix} \dfrac{1}{\sigma_1}&&&&|&\\ &\dfrac{1}{\sigma_2}&&&|&\\ &&...&&|&\\ &&&\dfrac{1}{\sigma_r}&|&\\ -&-&-&-&十&-\\ &&&&|&0 \end{pmatrix} Σ+= σ11σ21...σr10
此时可以放弃阈值小于 ϵ \epsilon ϵ的奇异值,但会产生不连续性,利用阻尼最小二乘法计算伪逆的方式是在倒置奇异值之前为其设置一个下界:
A ∗ = A T ( A A T + λ I ) − 1 A^*=A^T(AA^T+\lambda I)^{-1} A=AT(AAT+λI)1
通过引入阻尼参数 λ \lambda λ,避免分母为0,来进行平滑过渡。
A ∗ = V ( σ 1 σ 1 2 + λ σ 2 σ 2 2 + λ . . . σ r σ r 2 + λ 0 0 0 0 ) U T A^*=V\begin{pmatrix} \dfrac{\sigma_1}{\sigma_1^2+\lambda}&&&\\ &\dfrac{\sigma_2}{\sigma_2^2+\lambda}&&\\ &&...&\\ &&&\dfrac{\sigma_r}{\sigma_r^2+\lambda}\\ 0&0&0&0\\ \end{pmatrix}U^T A=V σ12+λσ10σ22+λσ20...0σr2+λσr0 UT

你可能感兴趣的:(机器人学,矩阵,线性代数,算法)