机器人基础之雅克比矩阵

概述

雅克比矩阵 J ( q ) J(q) J(q)是从关节空间向操作空间的速度传递的线性关系,借助于机械原理中的概念,可以理解为广义传动比。
对于 n n n个关节的机器人,其雅克比矩阵是 6 × n 6\times n 6×n阶矩阵。其中前3行代表机器人末端坐标系线速度 v v v的传递比;后3行代表对手爪的角速度 ω \omega ω的传递比。另一方面,每一列代表相应的关节速度对末端坐标系线速度和角速度的传递比。因此,可将雅克比矩阵分块,即 [ v ω ] = [ J l 1 J l 2 ⋅ ⋅ ⋅ J l n J a 1 J a 2 ⋅ ⋅ ⋅ J a n ] [ q 1 q 2 q ˙ 1 q ˙ 2 ⋅ ⋅ ⋅ q ˙ n ] (1) \left[ \begin{matrix} v\\ \omega \end{matrix} \right] = \left[ \begin{matrix} J_{l1} & J_{l2} & \cdot\cdot\cdot & J_{ln}\\ J_{a1} & J_{a2} & \cdot\cdot\cdot & J_{an} \end{matrix} \right] \left[ \begin{matrix} q_1\\ q_2\\ \dot q_1\\ \dot q_2\\ \cdot \\ \cdot \\ \cdot \\ \dot q_n\\ \end{matrix} \right] \tag{1} [vω]=[Jl1Ja1Jl2Ja2JlnJan]q1q2q˙1q˙2q˙n(1)

雅克比矩阵的构造

微分运动和广义速度

刚体或坐标系的微分运动包含微分移动矢量 d d d和微分转动矢量 δ \delta δ。前者由沿三个坐标轴的微分移动组成,后者由绕三坐标轴的微分转动组成。将两者合并为6维列矢量 D D D,称为刚体或坐标系的微分运动矢量。 D = [ d δ ] (2) D=\left[ \begin{matrix} d\\ \delta\\ \end{matrix} \right] \tag{2} D=[dδ](2) 相应地,刚体或坐标系的广义速度 V V V是由线速度 v v v和角速度 ω \omega ω组成的6维列矢量。即 V = D ˙ = [ d ˙ δ ˙ ] (3) V=\dot D=\left[ \begin{matrix} \dot d\\ \dot\delta\\ \end{matrix} \right] \tag{3} V=D˙=[d˙δ˙](3) 微分运动矢量D和广义速度V也是相对于某坐标系而言的,在不同坐标系中表达式不同。若坐标系{T}相对于基坐标系的齐次变换矩阵为 T = [ n x o x a x p x n y o y a y p y n z o z a z p z 0 0 0 1 ] = [ n o a p ] (4) T=\left[ \begin{matrix} n_x & o_x & a_x & p_x \\ n_y & o_y & a_y & p_y \\ n_z & o_z & a_z & p_z \\ 0& 0& 0& 1\\ \end{matrix} \right] = \left[ \begin{matrix} n & o & a & p \\ \end{matrix} \right]\tag{4} T=nxnynz0oxoyoz0axayaz0pxpypz1=[noap](4) 则坐标系{T}中的微分运动 T D {^T}D TD和基坐标系中的微分运动 D D D之间的关系为: T D = [ n x n y a x ( p × n ) x ( p × n ) y ( p × n ) z o x o y o z ( p × o ) x ( p × o ) y ( p × o ) z a x a y a z ( p × a ) x ( p × a ) y ( p × a ) z 0 0 0 n x n y a x 0 0 0 o x o y o z 0 0 0 a x a y a z ] D (5) {^T}D = \left[ \begin{matrix} n_x & n_y & a_x & (p\times n)_x & (p\times n)_y & (p\times n)_z \\ o_x & o_y & o_z & (p\times o)_x & (p\times o)_y & (p\times o)_z\\ a_x & a_y & a_z & (p\times a)_x & (p\times a)_y & (p\times a)_z\\ 0& 0& 0& n_x & n_y & a_x\\ 0& 0& 0& o_x & o_y & o_z\\ 0& 0 & 0& a_x & a_y & a_z\\ \end{matrix} \right] D\tag{5} TD=nxoxax000nyoyay000axozaz000(p×n)x(p×o)x(p×a)xnxoxax(p×n)y(p×o)y(p×a)ynyoyay(p×n)z(p×o)z(p×a)zaxozazD(5) 上式简写为 T D = [ R T − R T S ( p ) 0 R T ] D (6) {^T}D = \left[ \begin{matrix} R^T & -R^TS(p) \\ 0 & R^T\\ \end{matrix} \right] D\tag{6} TD=[RT0RTS(p)RT]D(6) 其中 R = [ n x o x a x n y o y a y n z o z a z ] (7) R=\left[ \begin{matrix} n_x & o_x & a_x \\ n_y & o_y & a_y \\ n_z & o_z & a_z \end{matrix} \right] \tag{7} R=nxnynzoxoyozaxayaz(7) 反对称矩阵 S ( p ) S(p) S(p)定义为 S ( p ) = [ 0 − p z p y p z 0 p x − p y p x 0 ] (8) S(p)=\left[ \begin{matrix} 0& -p_z & p_y \\ p_z & 0 & p_x \\ -p_y & p_x & 0 \end{matrix} \right] \tag{8} S(p)=0pzpypz0pxpypx0(8) 类似的,任意两坐标系{A}和{B}之间微分运动的坐标变换为 B D = [ B R T − A B R T S ( B p B O ) 0 A B R T ] A D (9) {^B}D = \left[ \begin{matrix} {^B}R^T & -{^B_A}R^TS({^B}p_{BO}) \\ 0 & {^B_A}R^T\\ \end{matrix} \right] {^A}D\tag{9} BD=[BRT0ABRTS(BpBO)ABRT]AD(9)

微分变换法

下面采用构造性的方法,不需要求导而直接构造出 J l i J_{li} Jli J a i J_{ai} Jai
以六自由度机械臂为例。

  1. 首先计算出各连杆变换矩阵 1 0 T {^0_1}T 10T 2 1 T {^1_2}T 21T 3 2 T {^2_3}T 32T 4 3 T {^3_4}T 43T 5 4 T {^4_5}T 54T 6 5 T {^5_6}T 65T
  2. 然后利用公式 i − 1 i T = [ i i − 1 R T i i − 1 R T i − 1 P B O 0 1 ] (n) {^i_{i-1}}T = \left[ \begin{matrix} {^{i-1}_i}R^T & {^{i-1}_i}R^T {^{i-1}}P_{BO}\\ 0 & 1 \\ \end{matrix} \right] \tag{n} i1iT=[ii1RT0ii1RTi1PBO1](n)计算得 0 1 T {^1_0}T 01T 1 2 T {^2_1}T 12T 2 3 T {^3_2}T 23T 3 4 T {^4_3}T 34T 4 5 T {^5_4}T 45T 5 6 T {^6_5}T 56T
  3. 依次计算末端坐标系在各连杆坐标系中的变化矩阵 0 6 T {^6_0}T 06T 1 6 T {^6_1}T 16T 2 6 T {^6_2}T 26T 3 6 T {^6_3}T 36T 4 6 T {^6_4}T 46T 5 6 T {^6_5}T 56T
  4. 利用公式9计算微分运动变化矩阵。
  5. 若关节 i i i为直线运动,则取微分运动变化矩阵的第三列作为雅克比矩阵的第 i i i列;
    若关节 i i i为旋转运动,则取微分运动变化矩阵的第六列作为雅克比矩阵的第 i i i列;
    对于六自由度机械臂而言,显然取微分运动变化矩阵的第六列作为雅克比矩阵的第 i i i列。

至此,构造出机器人的雅克比矩阵。

MATLAB实现

function J = calJacobi(DH_parameter)
% 计算雅克比矩阵
% DH_parameter:DH参数表;

[dim_row, dim_col] = size(DH_parameter);
J = zeros(6, dim_row);

for i = 1 : dim_row
    T = calT(DH_parameter, i - 1, dim_row);
    R = T(1:3, 1:3);
    P = T(1:3, 4);
    DiffM = [R', -R' * antiSymMatrix(P); zeros(3, 3), R'];
    J(:, i) = DiffM(:, 6);
end
  • 11
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 雅各矩阵(Jacobian Matrix)是一个数学工具,由一组多元函数构成,常用来描述函数在不同自变量取值下的变化率。在matlab中,可以使用symbolic toolbox进行雅各矩阵的求解。 使用Matlab求解雅各矩阵的步骤如下: (1)输入需要求解雅各矩阵的函数 (2)使用symbolic toolbox中的diff函数对每个自变量进行偏导数求解 (3)将偏导数组合成一个矩阵即为雅各矩阵 例如,对于一个由两个自变量x和y构成的函数f(x,y) = x^2 + y^3+2xy,我们可以使用Matlab求解其雅各矩阵。 首先,我们需要定义该多元函数: syms x y f = x^2+y^3+2*x*y 然后,对每个自变量进行偏导数求解: df_dx = diff(f,x) df_dy = diff(f,y) 最后,将偏导数组合成一个矩阵,得到该函数在x和y处的雅各矩阵: J = [df_dx, df_dy] 其中,J的第一行表示f在x处的偏导数,J的第二行表示f在y处的偏导数。通过求解雅各矩阵,我们可以获得函数在不同自变量取值下的变化率,有助于进行函数的优化、最大化与最小化等问题的求解。 ### 回答2: 雅各矩阵(Jacobian Matrix)是一个重要的线性代数工具,广泛应用于数学、工程和科学领域。在Matlab中,雅各矩阵也是一个非常重要的概念。 在Matlab中,雅各矩阵可以使用“jacobian”函数进行计算。这个函数需要两个参数,第一个参数是一个n维向量的函数,第二个参数是一个n维向量,表示求导的点。函数返回一个n×n的矩阵,即为雅各矩阵雅各矩阵在Matlab中的应用非常广泛,特别是在求解最优化问题、非线性方程组和微分方程组等方面。例如,在优化问题中,我们可以通过雅各矩阵来计算优化目标函数的梯度,从而帮助我们找到最优解。在非线性方程组的求解中,我们可以使用雅各矩阵来计算牛顿法中的矩阵逆,从而更快地收敛到解。在微分方程组的求解中,我们可以使用雅各矩阵来计算控制函数和状态变量之间的关系,从而优化控制器参数。 因此,掌握Matlab中的雅各矩阵是非常重要的,可以帮助我们更高效地解决各种实际问题。 ### 回答3: 雅各矩阵是一种由Jacques Salomon Hadamard引入的协方差矩阵的推广形式,它是一种方阵,其中每个元素是原矩阵对应位置的偏导数。在matlab中,可以使用“jacobian”函数来计算雅各矩阵雅各矩阵在计算机视觉、机器人、控制系统等领域的应用非常广泛。例如,在机器人路径规划中,需要计算末端执行器的速度和加速度,那么可以利用雅各矩阵将关节速度转换为末端速度,并将关节加速度转换为末端加速度。 除此之外,在最优化问题中,雅各矩阵也非常重要。例如,如果要优化一个非线性函数,则可以使用牛顿法进行迭代求解,每次迭代都需要计算函数的梯度和海森矩阵,而雅各矩阵就是海森矩阵的特例,可以用于优化算法中。 总的来说,雅各矩阵是一种十分有用的数学工具,可以用于求解各种计算问题,尤其在数学和工程领域具有广泛的应用前景。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值