[足式机器人]Part4 南科大高等机器人控制课 Ch07 Velocity Kinematics: Geometric and Analytic Jacobian of Open Chain

本文仅供学习使用
本文参考:
B站:CLEAR_LAB
笔者带更新-运动学
课程主讲教师:
Prof. Wei Zhang


1. Background

1.1 Velocity Kinematics

  • Velocity Kinematics : How does the velocity of { b } \left\{ b \right\} {b} relate to the joint velocities θ ˙ 1 , ⋯   , θ ˙ n \dot{\theta}_1,\cdots ,\dot{\theta}_{\mathrm{n}} θ˙1,,θ˙n (Note : { b } \left\{ b \right\} {b}'s velocity is due to joint velocity)

FK: Find the func of [ T b ( θ 1 , ⋯   , θ n ) ] \left[ T_b\left( \theta _1,\cdots ,\theta _{\mathrm{n}} \right) \right] [Tb(θ1,,θn)]
Result: [ T b ( θ 1 , ⋯   , θ n ) ] = e [ S ˉ 1 0 ] θ 1 e [ S ˉ 2 0 ] θ 2 ⋯ e [ S ˉ n 0 ] θ n [ M ] \left[ T_b\left( \theta _1,\cdots ,\theta _{\mathrm{n}} \right) \right] =e^{\left[ \bar{\mathcal{S}}_{1}^{0} \right] \theta _1}e^{\left[ \bar{\mathcal{S}}_{2}^{0} \right] \theta _2}\cdots e^{\left[ \bar{\mathcal{S}}_{\mathrm{n}}^{0} \right] \theta _{\mathrm{n}}}\left[ M \right] [Tb(θ1,,θn)]=e[Sˉ10]θ1e[Sˉ20]θ2e[Sˉn0]θn[M] —— meaning screw axis i i i when θ i = 0 \theta _{\mathrm{i}}=0 θi=0 wrt to frame { 0 } \left\{ 0 \right\} {0}

Can we use [ T ˙ b ] \left[ \dot{T}_b \right] [T˙b] to represent velocity of { b } \left\{ b \right\} {b}? —— NO- [ T ˙ b ] ∣ 4 × 4 \left. \left[ \dot{T}_b \right] \right|_{4\times 4} [T˙b] 4×4

  • This depends on how to represent { b } \left\{ b \right\} {b}'s velocity
  1. Twist representation ⟶ \longrightarrow Geometric Jacobian
    V b = [ ω ⃗ v ⃗ ] , V b ( θ , θ ˙ ) \mathcal{V} _b=\left[ \begin{array}{c} \vec{\omega}\\ \vec{v}\\ \end{array} \right] ,\mathcal{V} _b\left( \theta ,\dot{\theta} \right) Vb=[ω v ],Vb(θ,θ˙) , it turns out , V b \mathcal{V} _b Vb is a linear func of θ ˙ \dot{\theta} θ˙ , ⇒ V b ( θ , θ ˙ ) = J ( θ ) θ ˙ , J ( θ ) ∈ R 6 × n \Rightarrow \mathcal{V} _b\left( \theta ,\dot{\theta} \right) =J\left( \theta \right) \dot{\theta},J\left( \theta \right) \in \mathbb{R} ^{6\times n} Vb(θ,θ˙)=J(θ)θ˙,J(θ)R6×n
    This matrix is the Geometric
  2. Local coordinate of SE(3) ⟶ \longrightarrow Analytic Jacobian
    θ 1 , ⋯   , θ n ⟶ F K [ T b ( θ 1 , ⋯   , θ n ) ] = [ T b ( [ Q ] , R ⃗ p ) ] ⟶ [ p x p y p z α β γ ] ∈ R 6 \theta _1,\cdots ,\theta _{\mathrm{n}}\overset{FK}{\longrightarrow}\left[ T_b\left( \theta _1,\cdots ,\theta _{\mathrm{n}} \right) \right] =\left[ T_b\left( \left[ Q \right] ,\vec{R}_{\mathrm{p}} \right) \right] \longrightarrow \left[ \begin{array}{l} p_{\mathrm{x}}\\ p_{\mathrm{y}}\\ p_{\mathrm{z}}\\ \alpha\\ \beta\\ \gamma\\ \end{array} \right] \in \mathbb{R} ^6 θ1,,θnFK[Tb(θ1,,θn)]=[Tb([Q],R p)] pxpypzαβγ R6
    ⇒ θ 1 , ⋯   , θ n ⟶ g ( ⋅ ) [ p x p y p z α β γ ] ⇒ x = g ( θ 1 , ⋯   , θ n ) ⇒ x ˙ = [ ∂ g ∂ θ ] ∣ 6 × n [ θ ˙ 1 ⋮ θ ˙ n ]    , [ ∂ g ∂ θ ] i j = [ ∂ g i ∂ θ j ] \Rightarrow \theta _1,\cdots ,\theta _{\mathrm{n}}\overset{g\left( \cdot \right)}{\longrightarrow}\left[ \begin{array}{l} p_{\mathrm{x}}\\ p_{\mathrm{y}}\\ p_{\mathrm{z}}\\ \alpha\\ \beta\\ \gamma\\ \end{array} \right] \Rightarrow x=g\left( \theta _1,\cdots ,\theta _{\mathrm{n}} \right) \Rightarrow \dot{x}=\left. \left[ \frac{\partial g}{\partial \theta} \right] \right|_{6\times n}\left[ \begin{array}{c} \dot{\theta}_1\\ \vdots\\ \dot{\theta}_{\mathrm{n}}\\ \end{array} \right] \,\,, \left[ \frac{\partial g}{\partial \theta} \right] _{\mathrm{ij}}=\left[ \frac{\partial g_{\mathrm{i}}}{\partial \theta _{\mathrm{j}}} \right] θ1,,θng() pxpypzαβγ x=g(θ1,,θn)x˙=[θg] 6×n θ˙1θ˙n ,[θg]ij=[θjgi]

[ ∂ g ∂ θ ] \left[ \frac{\partial g}{\partial \theta} \right] [θg] 称为 Analytic Jacobian

1.2 Simple Illustration Example: Geometric Jacobian

在这里插入图片描述

  • Coordinate-free
    screw axis: Joint 1 S 1 \mathcal{S} _1 S1-independs of θ 1 , θ 2 \theta _1,\theta _2 θ1,θ2 ; Joint 2 S 2 ( θ 1 ) \mathcal{S} _2\left( \theta _1 \right) S2(θ1) depends on θ 1 \theta _1 θ1
    Spatial velocity of each link (when θ ˙ 1 , θ ˙ 2 \dot{\theta}_1,\dot{\theta}_2 θ˙1,θ˙2)
    1.Link 0 : V L 0 = 0 ∈ R 6 \mathcal{V} _{\mathrm{L}_0}=0\in \mathbb{R} ^6 VL0=0R6
    2.Link 1 : V L 1 = S 1 θ ˙ 1 \mathcal{V} _{\mathrm{L}_1}=\mathcal{S} _1\dot{\theta}_1 VL1=S1θ˙1
    3.Link 2 : V L 2 → V L 2 / L 0 = V L 2 / L 1 + V L 1 / L 0 = S 2 θ ˙ 2 + S 1 θ ˙ 1 = [ S 1 S 2 ] [ θ ˙ 1 θ ˙ 2 ] \mathcal{V} _{\mathrm{L}_2}\rightarrow \mathcal{V} _{{{\mathrm{L}_2}/{\mathrm{L}_0}}}=\mathcal{V} _{{{\mathrm{L}_2}/{\mathrm{L}_1}}}+\mathcal{V} _{{{\mathrm{L}_1}/{\mathrm{L}_0}}}=\mathcal{S} _2\dot{\theta}_2+\mathcal{S} _1\dot{\theta}_1=\left[ \begin{matrix} \mathcal{S} _1& \mathcal{S} _2\\ \end{matrix} \right] \left[ \begin{array}{c} \dot{\theta}_1\\ \dot{\theta}_2\\ \end{array} \right] VL2VL2/L0=VL2/L1+VL1/L0=S2θ˙2+S1θ˙1=[S1S2][θ˙1θ˙2]

  • { b } \left\{ b \right\} {b}
    V b = V L 2 = [ S 1 S 2 ] [ θ ˙ 1 θ ˙ 2 ] = [ J 1 ( θ ) J 2 ( θ ) ] [ θ ˙ 1 θ ˙ 2 ] \mathcal{V} _{\mathrm{b}}=\mathcal{V} _{\mathrm{L}_2}=\left[ \begin{matrix} \mathcal{S} _1& \mathcal{S} _2\\ \end{matrix} \right] \left[ \begin{array}{c} \dot{\theta}_1\\ \dot{\theta}_2\\ \end{array} \right] =\left[ \begin{matrix} J_1\left( \theta \right)& J_2\left( \theta \right)\\ \end{matrix} \right] \left[ \begin{array}{c} \dot{\theta}_1\\ \dot{\theta}_2\\ \end{array} \right] Vb=VL2=[S1S2][θ˙1θ˙2]=[J1(θ)J2(θ)][θ˙1θ˙2]
    J 1 ( θ ) J_1\left( \theta \right) J1(θ) 1st-column of Geomatric Jacobian; J 2 ( θ ) J_2\left( \theta \right) J2(θ) 2st-column of Geomatric Jacobian
    J i ( θ ) J_{\mathrm{i}}\left( \theta \right) Ji(θ) : the twist of { b } \left\{ b \right\} {b} when θ i = 1 , θ j = 0 , i ≠ j \theta _{\mathrm{i}}=1,\theta _{\mathrm{j}}=0,i\ne j θi=1,θj=0,i=j

  • Computation : Let’s work with { o } \left\{ o \right\} {o}
    S 1 0 ( θ ) = S 1 0 ( θ = 0 ) = S ˉ 1 0 = [ 0 0 1 0 0 0 ] \mathcal{S} _{1}^{0}\left( \theta \right) =\mathcal{S} _{1}^{0}\left( \theta =0 \right) =\bar{\mathcal{S}}_{1}^{0}=\left[ \begin{array}{l} 0\\ 0\\ 1\\ 0\\ 0\\ 0\\ \end{array} \right] S10(θ)=S10(θ=0)=Sˉ10= 001000
    S 2 0 ( θ 1 ) = S 2 0 ( θ 1 = 0 ) = S ˉ 2 0 = [ 0 0 1 0 − L 1 0 ] \mathcal{S} _{2}^{0}\left( \theta _1 \right) =\mathcal{S} _{2}^{0}\left( \theta _1=0 \right) =\bar{\mathcal{S}}_{2}^{0}=\left[ \begin{array}{l} 0\\ 0\\ 1\\ 0\\ -L_1\\ 0\\ \end{array} \right] S20(θ1)=S20(θ1=0)=Sˉ20= 0010L10
    Let’s θ 1 ≠ 0 \theta _1\ne 0 θ1=0 : S ˉ 2 0 = S 2 0 ( 0 ) ⟶ [ T ( θ 1 ) ] = e [ S ˉ 1 0 ] θ 1 S 2 0 ( θ 1 ) = [ A d [ T ( θ 1 ) ] ] S ˉ 2 0 \bar{\mathcal{S}}_{2}^{0}=\mathcal{S} _{2}^{0}\left( 0 \right) \overset{\left[ T\left( \theta _1 \right) \right] =e^{\left[ \bar{\mathcal{S}}_{1}^{0} \right] \theta _1}}{\longrightarrow}\mathcal{S} _{2}^{0}\left( \theta _1 \right) =\left[ Ad_{\left[ T\left( \theta _1 \right) \right]} \right] \bar{\mathcal{S}}_{2}^{0} Sˉ20=S20(0)[T(θ1)]=e[Sˉ10]θ1S20(θ1)=[Ad[T(θ1)]]Sˉ20

⇒ J 0 ( θ ) = [ S ˉ 1 0 [ A d [ T ( θ 1 ) ] ] S ˉ 2 0 ] \Rightarrow J^0\left( \theta \right) =\left[ \begin{matrix} \bar{\mathcal{S}}_{1}^{0}& \left[ Ad_{\left[ T\left( \theta _1 \right) \right]} \right] \bar{\mathcal{S}}_{2}^{0}\\ \end{matrix} \right] J0(θ)=[Sˉ10[Ad[T(θ1)]]Sˉ20]

2. Geometric Jacobian Derivations

2.1 Geometric Jacobian : General Case

  • Let V = ( ω ⃗ , v ⃗ ) \mathcal{V} =\left( \vec{\omega},\vec{v} \right) V=(ω ,v ) be the end-effector twist(coordinate-free notation), we aim to find J ( θ ) J\left( \theta \right) J(θ) such that :
    V = J ( θ ) θ ˙ = J 1 ( θ ) θ ˙ 1 + ⋯ + J n ( θ ) θ ˙ n = [ J 1 ( θ ) ⋯ J n ( θ ) ] [ θ ˙ 1 ⋮ θ ˙ n ] , J i ( θ ) : θ ˙ i = 1 , θ ˙ j = 0 , i ≠ j \mathcal{V} =J\left( \theta \right) \dot{\theta}=J_1\left( \theta \right) \dot{\theta}_1+\cdots +J_{\mathrm{n}}\left( \theta \right) \dot{\theta}_{\mathrm{n}}=\left[ \begin{matrix} J_1\left( \theta \right)& \cdots& J_{\mathrm{n}}\left( \theta \right)\\ \end{matrix} \right] \left[ \begin{array}{c} \dot{\theta}_1\\ \vdots\\ \dot{\theta}_{\mathrm{n}}\\ \end{array} \right] ,J_{\mathrm{i}}\left( \theta \right) :\dot{\theta}_{\mathrm{i}}=1,\dot{\theta}_{\mathrm{j}}=0,i\ne j V=J(θ)θ˙=J1(θ)θ˙1++Jn(θ)θ˙n=[J1(θ)Jn(θ)] θ˙1θ˙n ,Ji(θ):θ˙i=1,θ˙j=0,i=j

  • The i i ith column J i ( θ ) J_{\mathrm{i}}\left( \theta \right) Ji(θ) is the end-effector velocity when the robot is rotating about S i \mathcal{S} _{\mathrm{i}} Si at unit speed θ ˙ i = 1 \dot{\theta}_{\mathrm{i}}=1 θ˙i=1 while all other joints do not move ( θ ˙ j = 0 , i ≠ j \dot{\theta}_{\mathrm{j}}=0,i\ne j θ˙j=0,i=j)

  • Therefore, in coordinate free notation, J i J_{\mathrm{i}} Ji is just the screw axis of joint i i i :
    J i ( θ ) = S i ( θ ) J_{\mathrm{i}}\left( \theta \right) =\mathcal{S} _{\mathrm{i}}\left( \theta \right) Ji(θ)=Si(θ)

  • The simplest way to write Jacobian is to use local coordinate:
    J i i = S i i , i = 1 , ⋯   , n , J 0 = [ J 1 0 , J 2 0 , ⋯   , J n 0 ] J_{\mathrm{i}}^{i}=\mathcal{S} _{\mathrm{i}}^{i}, i=1,\cdots ,n,J^0=\left[ J_{1}^{0},J_{2}^{0},\cdots ,J_{\mathrm{n}}^{0} \right] Jii=Sii,i=1,,n,J0=[J10,J20,,Jn0]

  • In fixed frame { 0 } \left\{ 0 \right\} {0} , we have
    J i 0 = [ X i 0 ( θ ) ] S i i , i = 1 , ⋯   , n J_{\mathrm{i}}^{0}=\left[ X_{\mathrm{i}}^{0}\left( \theta \right) \right] \mathcal{S} _{\mathrm{i}}^{i}, i=1,\cdots ,n Ji0=[Xi0(θ)]Sii,i=1,,n
    Recall : [ X i 0 ] \left[ X_{\mathrm{i}}^{0} \right] [Xi0] is the change of coordinate matrix for spatial velocities.

  • Assume θ = ( θ 1 , θ 2 ⋯   , θ n ) \theta =\left( \theta _1,\theta _2\cdots ,\theta _{\mathrm{n}} \right) θ=(θ1,θ2,θn) then (pose of frame { i } \left\{ i \right\} {i} relative to { 0 } \left\{ 0 \right\} {0})
    [ T i 0 ( θ ) ] = e [ S ˉ 1 0 ] θ 1 e [ S ˉ 2 0 ] θ 2 ⋯ e [ S ˉ i 0 ] θ i [ M ] ⇒ [ X i 0 ( θ ) ] = [ A d [ T i 0 ( θ ) ] ] \left[ T_{\mathrm{i}}^{0}\left( \theta \right) \right] =e^{\left[ \bar{\mathcal{S}}_{1}^{0} \right] \theta _1}e^{\left[ \bar{\mathcal{S}}_{2}^{0} \right] \theta _2}\cdots e^{\left[ \bar{\mathcal{S}}_{\mathrm{i}}^{0} \right] \theta _{\mathrm{i}}}\left[ M \right] \Rightarrow \left[ X_{\mathrm{i}}^{0}\left( \theta \right) \right] =\left[ Ad_{\left[ T_{\mathrm{i}}^{0}\left( \theta \right) \right]} \right] [Ti0(θ)]=e[Sˉ10]θ1e[Sˉ20]θ2e[Sˉi0]θi[M][Xi0(θ)]=[Ad[Ti0(θ)]]

The Jacobian formula above is conceptually simple, but can be cumbersome for calculation. We now derive a recursive Jacobian formula

Note : J i 0 ( θ ) = S i 0 ( θ ) J_{\mathrm{i}}^{0}\left( \theta \right) =\mathcal{S} _{\mathrm{i}}^{0}\left( \theta \right) Ji0(θ)=Si0(θ)

  • For i = 1 i=1 i=1, S 1 0 ( θ ) = S 1 0 ( 0 ) = S ˉ 1 0 \mathcal{S} _{1}^{0}\left( \theta \right) =\mathcal{S} _{1}^{0}\left( 0 \right) =\bar{\mathcal{S}}_{1}^{0} S10(θ)=S10(0)=Sˉ10 (independent of θ \theta θ)
  • For i = 2 i=2 i=2, S 2 0 ( θ ) = S 2 0 ( θ 1 ) = [ A d [ T ( θ 1 ) ] ] S ˉ 2 0 \mathcal{S} _{2}^{0}\left( \theta \right) =\mathcal{S} _{2}^{0}\left( \theta _1 \right) =\left[ Ad_{\left[ T\left( \theta _1 \right) \right]} \right] \bar{\mathcal{S}}_{2}^{0} S20(θ)=S20(θ1)=[Ad[T(θ1)]]Sˉ20 where [ T ( θ 1 ) ] ≜ e [ S ˉ 1 0 ] θ 1 \left[ T\left( \theta _1 \right) \right] \triangleq e^{\left[ \bar{\mathcal{S}}_{1}^{0} \right] \theta _1} [T(θ1)]e[Sˉ10]θ1
  • For general i i i, we have
    J i 0 ( θ ) = S i 0 ( θ ) = [ A d [ T i 0 ( θ 1 , ⋯   , θ i − 1 ) ] ] S ˉ i 0 J_{\mathrm{i}}^{0}\left( \theta \right) =\mathcal{S} _{\mathrm{i}}^{0}\left( \theta \right) =\left[ Ad_{\left[ T_{\mathrm{i}}^{0}\left( \theta _1,\cdots ,\theta _{\mathrm{i}-1} \right) \right]} \right] \bar{\mathcal{S}}_{\mathrm{i}}^{0} Ji0(θ)=Si0(θ)=[Ad[Ti0(θ1,,θi1)]]Sˉi0
    where : [ T i 0 ( θ 1 , ⋯   , θ i − 1 ) ] ≜ e [ S ˉ 1 0 ] θ 1 ⋯ e [ S ˉ i − 1 0 ] θ i − 1 \left[ T_{\mathrm{i}}^{0}\left( \theta _1,\cdots ,\theta _{\mathrm{i}-1} \right) \right] \triangleq e^{\left[ \bar{\mathcal{S}}_{1}^{0} \right] \theta _1}\cdots e^{\left[ \bar{\mathcal{S}}_{\mathrm{i}-1}^{0} \right] \theta _{\mathrm{i}-1}} [Ti0(θ1,,θi1)]e[Sˉ10]θ1e[Sˉi10]θi1

2.2 Geometric Jacobian Example

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3. Analytic Jacobian

  • Let x ∈ R p x\in \mathbb{R} ^p xRp be the task space variable of interest with desired reference x d x_d xd
    E.g : x x x can be Cartesian(spherical coordinate) + Euler angle(ZYZ ZYX) of end-effctor frame
    p < 6 p<6 p<6 os allowed, which means a partial parameterization of SE(3), e.g. we only care about the position or the orientation of the end-effector frame

  • Analytic Jacobian : x = g ( θ ) , x ˙ = J a ( θ ) θ ˙ , J a ( θ ) = ∂ g ∂ θ x=g\left( \theta \right) ,\dot{x}=J_{\mathrm{a}}\left( \theta \right) \dot{\theta},J_{\mathrm{a}}\left( \theta \right) =\frac{\partial g}{\partial \theta} x=g(θ),x˙=Ja(θ)θ˙,Ja(θ)=θg

  • Recall Geometric Jacobian : V = [ ω ⃗ v ⃗ ] = J ( θ ) θ ˙ \mathcal{V} =\left[ \begin{array}{c} \vec{\omega}\\ \vec{v}\\ \end{array} \right] =J\left( \theta \right) \dot{\theta} V=[ω v ]=J(θ)θ˙

  • They are related by : J a ( θ ) = E ( x ) J ( θ ) = E ( θ ) J ( θ ) J_{\mathrm{a}}\left( \theta \right) =E\left( x \right) J\left( \theta \right) =E\left( \theta \right) J\left( \theta \right) Ja(θ)=E(x)J(θ)=E(θ)J(θ)
    E ( x ) E\left( x \right) E(x) can be found with given parameterization x x x

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我来改进一下ch07_09.cpp中的冒泡排序算法。冒泡排序算法的主要思想是比较相邻两个元素的大小,如果前一个元素比后一个元素大,就将它们交换位置,这样一轮比较下来,最大的元素就会被移动到数组的末尾。我们可以通过增加一些优化来提高冒泡排序的效率,比如记录上一次交换的位置,下一轮比较时只需要比较到上一次交换的位置,因为该位置之后的元素已经是有序的。 下面是改进后的代码: ```c++ #include <iostream> using namespace std; void bubbleSort(int arr[], int n) { int i, j, lastSwap; for (i = 0; i < n - 1; i++) { lastSwap = n - 1; // 初始化为数组末尾 for (j = 0; j < lastSwap; j++) { if (arr[j] > arr[j + 1]) { swap(arr[j], arr[j + 1]); lastSwap = j; // 更新上一次交换的位置 } } if (lastSwap == n - 1) break; // 如果这一轮没有发生交换,说明数组已经有序,结束循环 } } int main() { int arr[] = {5, 2, 8, 4, 7, 1, 3, 9, 6}; int n = sizeof(arr) / sizeof(arr[0]); bubbleSort(arr, n); cout << "排序后的数组:"; for (int i = 0; i < n; i++) { cout << arr[i] << " "; } cout << endl; return 0; } ``` 这里我们增加了一个变量`lastSwap`来记录上一次交换的位置,每次内层循环时都将`lastSwap`初始化为数组的末尾。当发生交换时,将`lastSwap`更新为当前交换的位置。下一轮比较时,只需要比较到`lastSwap`即可。如果这一轮没有发生交换,说明数组已经有序,结束循环。这样可以减少比较的次数,提高冒泡排序的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LiongLoure

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值