我正在学习机器人运动学和雅可比矩阵,并且试图了解如何在给定的运动链(例如机器人手臂)下计算雅可比矩阵。我了解Jacobian矩阵背后的理论,但实际上我不确定该如何计算。

所以,假设我有7个自由度的机械臂,7个关节和6个关节之间的链接。我知道如何计算每个关节之间的变换矩阵,并且通过应用正向运动学,我知道关节角度任何配置的末端执行器的姿势。为了计算这一点,我编写了一些代码来存储每个变换矩阵,然后将它们依次相乘以在第一个关节和末端执行器之间创建变换矩阵。

但是,我现在该怎么做关于计算雅可比矩阵?到目前为止,我的解决方案是手动记下每个变换矩阵,然后将它们全部手动相乘,以得出相对于关节角度的整体变换矩阵。然后,我可以对此进行区分以创建雅可比矩阵。但是,这样做的问题是,随着我沿着运动学链前进,数学变得非常非常复杂。到最后,由于多重矩阵相乘而产生了太多的项,以至于手工完成这项工作变得非常乏味。

还有更好的方法吗?在计算正向运动学时,我不必手工完成,我只是编写了一些代码以将各个矩阵相乘。但是,当我需要雅可比矩阵时,似乎需要计算整体转换矩阵的导数后,因此需要手工完成。什么是标准解决方案?与差异化的链条规则有关吗?我不确定这在这里到底如何适用...

谢谢!

评论

请参阅Matlab中的jacobian()。它可以轻松轻松地确定雅可比矩阵。

#1 楼

手工编写方程式并推导它们无疑是了解“背景中”正在发生的事情的最佳方式。生成等式并使用一个符号引擎来推导它们,就像@SteveO所建议的,基本上是相同的过程,但是其他人(在这种情况下是符号引擎)正在为您完成工作。

但是,有不同的方法可以从几何上获得雅可比矩阵。

您可以考虑Jacobi矩阵是由子矩阵构成的。

$$ J = \ left [
\ begin {matrix}
J_T \\ \ hdashline
J_ \ omega
\ end {matrix} \ right] =
\ left [
\ begin {matrix}
J_ {T_ {1}} \ quad J_ {T_ {2}} \ quad \ dots \ quad J_ {T_ {n }} \\ \ hdashline \ hdashline
J _ {\ omega_ {1}} \ quad J _ {\ omega_ {2}} \ quad \ dots \ quad J _ {\ omega_ {n}} \\
\ end {matrix} \ right] =
\ left [
\ begin {matrix}
\ frac {\ delta x} {\ delta q_1} \; \ frac {\ delta x} {\ delta q_2} \; \ dots \; \ frac {\ delta x} {\ delta q_n} \\
\ frac {\ delta y} {\ delta q_1} \; \ frac {\ delta y} {\ delta q_2} \; \ dots \; \ frac {\ delta y} {\ delta q_n} \\
\ frac {\ delta z} {\ delta q_1} \; \ frac {\ delta z} {\ delta q_2} \; \ dots \; \ frac {\ delta z} {\ delta q_n} \\
\ hdashline
\ frac {\ delta \ alpha} {\ delta q_1} \; \ frac {\ delta \ alpha} {\ delta q_2} \; \ dots \; \ frac {\ delta \ alpha} {\ delta q_n} \\
\ frac {\ delta \ beta} {\ delta q_1} \; \ frac {\ delta \ beta} {\ delta q_2} \; \ dots \; \ frac {\ delta \ beta} {\ delta q_n} \\
\ frac {\ delta \ gamma} {\ delta q_1} \; \ frac {\ delta \ gamma} {\ delta q_2} \; \ dots \; \ frac {\ delta \ gamma} {\ delta q_n} \\
\ end {matrix} \ right]
$$

如果关节是旋转关节,则它在Jacobi矩阵中的对应部分是

$$ \ left [
\ begin {matrix}
J_ {T_ {i}} \\ \ hdashline
J_ {\ omega_ {i}}
\ end {matrix} \ right] =
\ left [
\ begin {matrix}
\ overrightarrow b_ {i-1} \ times \ overrightarrow r_ {i-1,ee} \ \ \ hdashline
\ overrightarrow b_ {i-1}
\ end {matrix} \ right]
$$

如果您的关节是平移关节,而不是它在Jacobi矩阵中的对应部分是
$$ \ left [
\ begin {matrix}
J_ {T_ {i}} \\ \ hdashline
J _ {\ omega_ { i}}
\ end {matrix} \ right] =
\ left [
\ begin {matrix}
\ overrightarrow b_ {i-1} \\ \ hdashline
0 _ {__ 1 {times 3}}
\ end {matrix} \ right]
$$

其中


$ \ overrightarrow b_ {i-1} $是关节轴的向量
$ \ overrightarrow r_ {i-1,ee} $是从关节坐标系的原点指向坐标系原点的向量末端执行器坐标系
$ i $是指Denavti Hartenber坐标系的计算方式


#2 楼

您对手工将所有这些矩阵相乘的繁琐本质是正确的!您可以在线搜索机器人运动学软件,并找到一些不错的工具来解决此问题,但是当您实际计算方程式时,您会学得更好。由于您已经编写了正向运动学代码,因此很显然您了解该过程。我建议您使用符号代数包(我曾经使用过Maple IV,而该功能现在在MatLab中)。重新编写正向运动学程序,但不要插入每个关节角度的值。对于$ \ vec x $的每一项,您最终都会得到很长的表达式,可以通过应用三角恒等式将其大大减少。 $ \ sin(\ theta_2 + \ theta_3)$和$ \ cos(\ theta_2 + \ theta_3)$的标识对于关节臂的几何结构特别有用。区分正向运动学非常简单。链规则不是主要的复杂因素,因为每个术语都是基于部分而不是全部的导数。符号代数工具在这里也可能会有所帮助。

我认为,适合您的情况的关键是首先确定运动形式的闭合形式(在方程式中保留$ \ theta_i $项)。还要以封闭形式计算雅可比行列式。然后,无论机器人的姿势如何,都可以使用方程式插入关节值。

#3 楼

对于具有使用标准DH参数表示的运动学模型的机器人,经典参考是:

用于简单操纵器的微分运动学控制方程式,
Paul,Shimano,Mayer,
IEEE SMC 11 (6)1981,
pp。 456-460

这是在许多软件工具中实现的,包括用于MATLAB的Robotics Toolbox,方法为jacobe,该方法给出了末端执行器坐标系中表示的速度的雅可比行列式。 jacob0使用此方法来表示世界坐标系中的速度。

要按上述建议计算正向运动学,可以将fkine方法与符号联合变量一起使用,然后可以对符号进行差分。如今,MATLAB提供了相当不错的符号支持。利益。