13. 机器人正运动学---雅克比矩阵(1)

2023-11-19

目录

 

1. 引言

2. 雅克比矩阵

3. 机器人雅克比矩阵

4. 求解雅克比矩阵

4.1 几何法

 


1. 引言

前面的一些文章我们一直对机器人进行静态分析,也就是给定一组关节角求机器人末端位姿。这篇文章我们来分析一下关节角的运动将怎样影响机器人末端的位置和姿态。这就是雅克比矩阵了。

2. 雅克比矩阵

还是先了解一下雅克比矩阵的由来吧。我们在高数中都学过函数以及函数的导数,设有一个关于时间t的函数f(t),那么它的时间导数为\dot{f}(t),这个很简单吧。现在我们换一个提法,在时间t_{0}处对应的函数值是f(t_{0}),当时间tt_{0}基础上发生一个微小变化d_t,那么相应的f(t)会在f(t_{0})的基础上发生怎样的变化呢?这其实是一个微分的提法,我们把前面的导数写成微分的形式如下:

                                                                     d_f=\dot{f}(t_{0})d_t

为了直观定义\dot{f}(t_0)=J_0那么d_f=J_0\cdot d_t。这里J_0是一个标量。

扩展一下,设f(t)是一个向量函数,如下:

                                                               f(t)=\begin{bmatrix} f_1(t)\\ f_2(t)\\ ...\\ f_n(t) \end{bmatrix}

还是以微分形式表达自变量t的变化如何影响函数值,如下:

                                                                 d_f=\begin{bmatrix} d_{f1}\\ d_{f2}\\ ...\\ d_{fn} \end{bmatrix}=\begin{bmatrix} \dot{f_1}(t_{0})\\ \dot{f_2}(t_{0})\\ ...\\ \dot{f_n}(t_{0}) \end{bmatrix}d_t

同样为了直观定义:

                                                                 J_0=\begin{bmatrix} \dot{f_1}(t_{0})\\ \dot{f_2}(t_{0})\\ ...\\ \dot{f_n}(t_{0}) \end{bmatrix}

那么d_f=J_0\cdot d_t。这里J_0是一个nx1的向量。

接下来再扩展一下,自变量不是一维的时间t,而是一个m维的向量:

                                                                     x=\begin{bmatrix} x_0\\ x_1\\ ...\\ x_m \end{bmatrix}

这个时候要怎么写这个微分表达式呢?其实也并不复杂,把所有的函数对所有的自变量都求一次导数然后按照一定的顺序排列一下就可以了,如下:

                                     d_f=\begin{bmatrix} d_{f1}\\ d_{f2}\\ \vdots \\ d_{fn} \end{bmatrix}=\begin{bmatrix} \frac{\partial f_{1}}{\partial x_{1}} & \frac{\partial f_{1}}{\partial x_{2}} & \cdots & \frac{\partial f_{1}}{\partial x_{m}}\\ \frac{\partial f_{2}}{\partial x_{1}} & \frac{\partial f_{2}}{\partial x_{2}} & \cdots & \frac{\partial f_{2}}{\partial x_{m}} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial f_{n}}{\partial x_{1}} & \frac{\partial f_{n}}{\partial x_{2}} & \cdots & \frac{\partial f_{n}}{\partial x_{m}} \end{bmatrix}\begin{bmatrix} d_{x1}\\ d_{x2}\\ \vdots \\ d_{xm} \end{bmatrix}

同样,为了直观,我们定义:

                                                   J_{0}=\begin{bmatrix} \frac{\partial f_{1}}{\partial x_{1}} & \frac{\partial f_{1}}{\partial x_{2}} & \cdots & \frac{\partial f_{1}}{\partial x_{m}}\\ \frac{\partial f_{2}}{\partial x_{1}} & \frac{\partial f_{2}}{\partial x_{2}} & \cdots & \frac{\partial f_{2}}{\partial x_{m}} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial f_{n}}{\partial x_{1}} & \frac{\partial f_{n}}{\partial x_{2}} & \cdots & \frac{\partial f_{n}}{\partial x_{m}} \end{bmatrix}

那么d_f=J_0\cdot d_x。这里J_0是一个nxm的向量。

总结一下你会发现不管自变量和函数值是标量还是向量,他们之间微小量的变化总是存在一种固定的联系,那就是:

                                                                    d_f=J_0\cdot d_x

其中d_x代表自变量的一个微小变化,d_f代表函数值的微小变化。联系两者的一个纽带就是所谓雅可比矩阵J_0(其实就是函数向量对自变量向量的偏导数矩阵)。从前面的例子中类比得到当自变量和函数值都是标量时雅可比矩阵退化为一个标量,也就是导数值!

3. 机器人雅克比矩阵

前面介绍了雅克比矩阵的基本概念,很显然机器人雅克比矩阵描述的是关节转速(自变量)和末端笛卡尔速度和角速度(函数值)之间的关系。那么在机器人学中雅克比矩阵有什么用呢?总结来说:

  1. DH参数可以把关节角映射为末端执行器的位置和姿态
  2. 雅克比矩阵可以把关节转速映射为笛卡尔空间的速度和角速度

DH参数和雅克比矩阵可以认为是机器人正运动学的基础。

4. 求解雅克比矩阵

怎么求解雅克比矩阵呢?其实大体上有两个思路,第一个思路是从几何意义去考虑:找出每个关节的微小变化如何影响笛卡尔空间中位置和姿态的微小变化,后面简称几何法。 第二个思路是从数学意义的角度出发:推导出每个关节的微分与笛卡尔空间微分之间的关系,后面简称解析法。这篇文章主要介绍几何法,分析法涉及到矩阵求导等复杂的公式推导,下一篇文章单独介绍。

4.1 几何法

几何法求解雅克比矩阵相对来说简单直接。先从一个最简单的情况出发,设六轴机器人当前的关节角为q=\begin{bmatrix} q_1 & q_2 & q_3 & q_4 & q_5 & q_6 \end{bmatrix},除关节2以外其他关节均锁位(固定不动)。为了体现一般性,我们用i来代表关节2。现在求解关节i的转速与机器人末端执行器笛卡尔速度和角速度之间的关系。我们当前陈述的问题可以用下图表示。

解释一下图中符号的含义,提前声明,图中所有的点和向量都是在机器人的基坐标系下描述的,除关节2以外所有关节均锁位E代表末端法兰盘中心点坐标系,v_e\omega_e分别代表末端法兰盘中心点坐标系的速度和角速度矢量。O_{i-1}代表连杆i-1坐标系的原点(标准DH参数连杆i-1坐标系建立在关节i上!如果你还是存在疑惑请参考我的另外一篇博客:连杆坐标系与DH参数),\dot{q_i} \cdot z_{i-1}代表关节i角速度,其中\dot{q_i}代表角速度的大小,是标量; z_{i-1}代表角速度的方向,也是连杆i-1坐标系的z轴,是矢量。

有了前面的这些阐述我们就可以求法关节i转速和法兰盘中心点坐标系在笛卡尔空间的速度和角速度之间的关系了,根据速度的计算公式v=\omega \times r

                                                                        v_e=\dot{q_i}z_{i-1}\times \overrightarrow{O_{i-1}E}

由于只有关节i运动,法兰盘中心点坐标系角速度就是关节i角速度,所以:

                                                                                \omega_e=\dot{q_i} \cdot z_{i-1}

那么关节i的转速和法兰盘中心点坐标系笛卡尔空间速度和角速度之间的关系可以描述为以下矩阵形式。

                                                                    \begin{bmatrix} v_e\\ \omega_e \end{bmatrix}=\begin{bmatrix} z_{i-1} \times \overrightarrow{O_{i-1}E}\\ z_{i-1} \end{bmatrix}\cdot \dot{q_i}=J^{i}\cdot\dot{q_i}

在这里:

                                                                          J^i=\begin{bmatrix} z_{i-1} \times \overrightarrow{O_{i-1}E}\\ z_{i-1} \end{bmatrix}

可见J^i是一个列向量,它代表在q=\begin{bmatrix} q_1 & q_2 & q_3 & q_4 & q_5 & q_6 \end{bmatrix}时,关节i的转速与末端笛卡尔速度和角速度之间的关系!

对于移动关节就更简单了,它只能造成末端法兰盘沿着z_{i-1}平移,不会产生旋转。因此这个时候:

                                                                               J^i=\begin{bmatrix} z_{i-1}\\ 0 \end{bmatrix}

连杆i-1坐标系z_{i-1}轴矢量,原点O_{i-1},法兰盘中心点E在基坐标系下的表示都可以根据DH参数和当前关节角轻松的求解出来。

高中物理中我们学过速度是满足叠加原理的,大学物理中扩展了这个描述,角速度也是满足叠加原理的。因此,机器人在某一个固定的位姿下,我们单独求解每一个关节的转速与末端笛卡尔速度和角速度的关系然后把它们加在一起就可以了!

对于以上的六关节机器人,它的雅克比矩阵即为:

                                                           \begin{bmatrix} v_e\\ \omega_e \end{bmatrix}=\begin{bmatrix} J^1& J^2& J^3& J^4& J^5& J^6 \end{bmatrix}\begin{bmatrix} \dot{q_1}\\ \dot{q_2}\\ \dot{q_3}\\ \dot{q_4}\\ \dot{q_5}\\ \dot{q_6} \end{bmatrix}=J \cdot \dot{q}

其中:

                                                           J^i=\begin{cases} \begin{bmatrix} z_{i-1} \times \overrightarrow{O_{i-1}E}\\ z_{i-1} \end{bmatrix} & \text{ if } revolute \ joint \\ \begin{bmatrix} z_{i-1}\\ 0 \end{bmatrix}& \text{ if } prismatic \ joint \end{cases}

5. 总结

这篇文章主要介绍了雅克比矩阵的由来以及几何法求解雅克比矩阵的方法,下一篇文章我们将介绍利用解析法求解雅克比矩阵。由于个人能力有限,所述内容难免存在疏漏,欢迎指出,欢迎讨论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

13. 机器人正运动学---雅克比矩阵(1) 的相关文章

随机推荐

  • 2022 如何在 GitHub 上搭建个人网站(github.io)

    前言 目前 想要搭建自己的项目演示 又想要免费的服务 这时就可以使用 GitHub 提供的免费Pages服务 github io 前置 有GitHub账号 熟练使用git版本管理 成果展示 步骤 第一步 新建仓库 在GitHub上 创建一个
  • 下一步准备给自研引擎换皮

    抄完osg osgearth 鬼火引擎最低版本 以及ogre的大部分后 看到消息处理都通过窗口 突然顿悟 引擎都是类似的 下一步给自研引擎换皮 全换成ogre的皮 渲染流程类似osg的 多线程渲染 无非就是在哪个线程wglMakeCurre
  • 云原生热门话题|什么是可观测性-Observability

    code杂坛 关注一线大厂 互联网时讯 各技术栈 产品 开源社区 等最新讯息 1 可观测性引入 可观测性 术语源于几十年前的控制理论 在许多实际问题中 控制系统的状态变量不是由直接测量得到的 而是通过某种观测方法得到的 由某种观测系统所得到
  • 深大自考本科所需课程

    自考本科需要通过课程 网络经济与企业管理 数据结构导论 运筹学基础 信息资源管理 中国近代史纲要 计算机原理 马克思主义基本原理概论 数据库系统原理 管理经济学 软件开发工具 C 程序设计 英语2 操作系统概论 管理信息系统 计算机网络原理
  • 【OpenCV学习笔记】【编程实例】五 (霍夫圆检测)

    GetCircle cpp 定义控制台应用程序的入口点 圆形检测代码demo 载入数张包含各种形状的图片 检测出其中的圆形 include cv h include highgui h include
  • 排队论(Queuing Theory)

    目录 简介 一 基本概念 1 1 排队过程的一般表示 1 2 排队系统的组成和特征 1 2 1 输入过程 1 2 2 排队规则 1 2 3 服务过程 1 3 排队模型的符号表示 1 4 排队系统的运行指标 二 输入过程与服务时间的分布 2
  • 【MySQL】—— 在windows下的MySQL安装与配置

    更新日志 2020 11 13 文章发布 说明 本文地址 MySQL 在windows下的MySQL安装与配置 https blog csdn net maixiaochai article details 109676520 关于 Mai
  • 2FSK调制解调实验

    一 2FSK原理 频移键控是利用载波的频率变化来传递数字信息 数字频率调制是数据通信中使用较 早的一种通信方式 由于这种调制解调方式容易实现 抗噪声和抗衰减性能较强 因此在 中低速数字通信系统中得到了较为广泛的应用 在2FSK中 载波的频率
  • 树与二叉树(二叉树的表示,性质,遍历,还原)

    1 基本术语 A 或B 是I的祖先 I是A 或B 的子孙 D是I的双亲 I是D的孩子 节点的孩子个数称为节点的度 树中节点的最大度数称为树的度 度大于0的节点称为分支节点 度等于0的节点称为叶节点 定义树根为第一层 则 树的深度 高度 为5
  • 数据库开发三:JDBC数据库开发入门三(PrepareStatement的使用及预处理原理)

    目录 一PrepareStatement使用 二预处理原理 文章相关视频出处 https developer aliyun com lesson 1694 13598 spm 5176 10731542 0 0 4a023fdbjxoV5w
  • Java准确获取Word/Excel/PPT/PDF的页数(附Word页数读不准的处理办法)

    Java准确获取Word Excel PPT PDF的页数 附Word页数读不准的处理办法 1 需求背景 2 环境准备工作 2 1 JACOB介绍及安装 2 2 Microsoft Office Word的设置 3 代码 3 1 代码示例
  • Python实现“鸟脸识别”系统,看看什么鸟最贪吃~ 初学者也能学会

    梦晨 发自 凹非寺 量子位 报道 公众号 QbitAI 网友cldud1245是一个鸟类爱好者 以下简称喂鸟哥 最近打算自学Python 拥有其他语言编程经验的他 可不打算按部就班从Hello World做起 一上来就挑战图像识别 他用一个
  • 数学建模的六个步骤

    一 模型准备 了解问题的实际背景 明确其实际意义 掌握对象的各种信息 以数学思路来解释问题的精髓 数学思路贯彻问题的全过程 进而用数学语言来描述问题 要求符合数学理论 符合数学习惯 清晰准确 理解实际问题后 搜集资料 快速阅读和理解参考文献
  • 神经网络编程技巧(一):两个矩阵相乘报错,np.random.randn(5,)不是矩阵,np.random.randn(5,1)才能得到1*5的矩阵,np.dot()函数

    np dot函数主要用于向量的点积和矩阵的乘法 格式如下np dot a b 其中a b均为n维向量 具体例子参考下面的代码及其结果 在神经网络中经常使用这个函数 能够节约大量的时间 原来复杂的公式在编程时只需要这一行代码即可实现 在编写p
  • Qt实现Excel读写

    QtXlsx 是 第三方的Qt库 为Qt程序提供读写Excel的接口 不单单是Microsoft Excel 它可以用于任何Qt支持的平台 相比Qt官方的QAxObject QtXlsx提供的接口封装层次更高 使用更加简便 github主页
  • LeetCode 933. 最近的请求次数

    写一个 RecentCounter 类来计算特定时间范围内最近的请求 请你实现 RecentCounter 类 RecentCounter 初始化计数器 请求数为 0 int ping int t 在时间 t 添加一个新请求 其中 t 表示
  • 存储计划:自动kill掉死锁进程id

    CREATE PROCEDURE dbo sp who lock1116 AS exec sp who lock1116 begin declare spid int bl int intTransactionCountOnEntry in
  • 结构体封装(C语言)

    转自 http blog jobbole com 57822 我也不理会失不失落 只是对结构体封装技术感兴趣 目录 1 谁该阅读这篇文章 2 我为什么写这篇文章 3 对齐要求 4 填充 5 结构体对齐及填充 6 结构体重排序 7 难以处理的
  • suggest ajax,高仿google suggest ajax示例

    搜索提示框 var obj div 提示层对象 var obj input 输入框对象 var main delay 判断值变化延迟对象 var ajax delay ajax延迟搜索对象 var updown delay 方向键延迟对象
  • 13. 机器人正运动学---雅克比矩阵(1)

    目录 1 引言 2 雅克比矩阵 3 机器人雅克比矩阵 4 求解雅克比矩阵 4 1 几何法 1 引言 前面的一些文章我们一直对机器人进行静态分析 也就是给定一组关节角求机器人末端位姿 这篇文章我们来分析一下关节角的运动将怎样影响机器人末端的位