MATLAB机器人对偏导数、雅克比矩阵、行列式的分析与实践

偏导数、雅克比矩阵、行列式都是非常重要的知识点,为了让大家更容易看懂,尽量使用画图来演示。

1、偏导数Partial derivative

对于导数我们已经很清楚了,某点求导就是某点的斜率,也就是这点的变化率。那么偏导数是什么,跟导数有什么不一样的地方,其实是一样的,只不过偏导是在多元(多个未知变量)的情况下,所以我们求导的时候,是偏向某个自变量求导,所以叫做偏导数(通俗解释,不严谨)

百度百科的解释如下,一般都更偏向几何意义:

偏导数 f'x(x0,y0) 表示固定面上一点对 x 轴的切线斜率;偏导数 f'y(x0,y0) 表示固定面上一点对 y 轴的切线斜率。
高阶偏导数:如果二元函数 z=f(x,y) 的偏导数 f'x(x,y) 与 f'y(x,y) 仍然可导,那么这两个偏导函数的偏导数称为 z=f(x,y) 的二阶偏导数。二元函数的二阶偏导数有四个:f"xx,f"xy,f"yx,f"yy。
注意:
f"xy与f"yx的区别:前者是先对 x 求偏导,然后将所得的偏导函数再对 y 求偏导;后者是先对 y 求偏导再对 x 求偏导。当 f"xy 与 f"yx 都连续时,求导的结果与先后次序无关。

具体如何求,也是很简单的,我们只需要将需要求导的这个看作是自变量,其余的自变量都当成常数来对待就好了。
我们来看一张雅克比矩阵的图片,也是接下来需要讲的。

这张图虽然是雅克比矩阵,实质是求的偏导数,J(x)这个雅克比矩阵里面的值是怎么来的呢?我们看到红色圈起来的变量,也就是说在求这个偏导数的时候,我们将其余的变量都当作常量,比如说2X_1-X_1X_2+X_3^3=Y_2这个函数,如果求X_1的偏导数,那么可以看成是2X_1-X_1*C+C,所以它的偏导数分别是2、-X_2(看成是常数)、0(常数的导数是0),所以就是2-X_2,其余变量求偏导,同样的道理,将其他变量看成是常数来求即可。 

2、雅克比矩阵Jacobian Matrix

掌握了上面介绍的偏导数,其实就明白了雅克比矩阵。
在向量微积分中,雅可比(Jacobian)矩阵是一阶偏导数以一定方式排列成的矩阵,其行列式称为雅可比行列式。雅可比矩阵的重要性在于它体现了一个可微方程与给出点的最优线性逼近。在人工智能领域,像这样的一阶偏导的集合,叫做梯度,这个概念非常非常重要,也是AI的核心之一。我们通过机器人的实践,更要明白其产生的意义是什么。
我们依然使用p560六自由度的机械臂为例,首先将机器人加载进来

startup_rvc
mdl_puma560
p560.teach

当然还有其他自带的,如斯坦福机器人,sawyer机器人:

mdl_stanford
stanf.teach

当然这个斯坦福机器人不是6个关节都可以旋转,其中有一个关节Prismatic只能平移

stanf.links
ans = 
Revolute(std):  theta=q1   d=0.412       a=0           alpha=-1.571      offset=0          
Revolute(std):  theta=q2   d=0.154       a=0           alpha=1.571       offset=0          
Prismatic(std): theta=-1.571        d=q3 a=0           alpha=0           offset=0          
Revolute(std):  theta=q4   d=0           a=0           alpha=-1.571      offset=0          
Revolute(std):  theta=q5   d=0           a=0           alpha=1.571       offset=0          
Revolute(std):  theta=q6   d=0           a=0           alpha=0           offset=0 

如下图:

mdl_sawyer
sawyer.teach

 这是一个7关节的机器人,每个关节Revolute都是可以旋转的:

ans = 
Revolute(std):  theta=q1   d=0.081       a=0.317       alpha=-1.571      offset=0          
Revolute(std):  theta=q2   d=0           a=0.1925      alpha=-1.571      offset=0          
Revolute(std):  theta=q3   d=0           a=0.4         alpha=-1.571      offset=0          
Revolute(std):  theta=q4   d=0           a=0.1685      alpha=-1.571      offset=0          
Revolute(std):  theta=q5   d=0           a=0.4         alpha=-1.571      offset=0          
Revolute(std):  theta=q6   d=0           a=0.1363      alpha=-1.571      offset=0          
Revolute(std):  theta=q7   d=0           a=0.1338      alpha=0           offset=0 

如下图:
我们分别从世界坐标系和末端执行器坐标系来了解。
这个世界坐标系是机器人的参考坐标系,是用来描述机器人在整个运动区域的定位的。
我们使用标准状态来测试:qn[0 0.7854 3.1416 0 0.7854 0]

2.1、世界坐标系

我们来看下世界坐标系的雅克比矩阵,使用的是jacob0函数

J0n = p560.jacob0(qn)
J0n =

    0.1501    0.0144    0.3197         0         0         0
    0.5963    0.0000    0.0000         0         0         0
    0.0000    0.5963    0.2910         0         0         0
   -0.0000         0         0    0.7071         0    1.0000
   -0.0000   -1.0000   -1.0000   -0.0000   -1.0000   -0.0000
    1.0000    0.0000    0.0000   -0.7071    0.0000   -0.0000

2.2、末端执行器

接着来看下末端执行器的雅克比矩阵,平常经常说的末端执行器是一些吸盘、抓手、夹持器之类的设备,使用的是jacobe函数

JEn = p560.jacobe(qn)
JEn =

   -0.0000   -0.5963   -0.2910         0         0         0
    0.5963    0.0000    0.0000         0         0         0
    0.1500    0.0144    0.3197         0         0         0
   -1.0000         0         0    0.7071         0         0
   -0.0000   -1.0000   -1.0000   -0.0000   -1.0000         0
   -0.0000    0.0000    0.0000    0.7071    0.0000    1.0000

可以看到机器人生成的雅克比矩阵是6x6的形状,前面也介绍了,因为行数是XYZRPY所以为6,又因为我们这里使用的是6自由度的机械臂,是6个关节,看做是6个自变量,所以列数是6。
另外我们可以看到右块的XYZ轴全部为零,这表明4、5、6三个关节的运动不会引起机器人末端执行器的任何平移运动,因为手腕关节是旋转的。
雅克比矩阵主要是用来求末端执行器的速度,而我们知道速度是位移的变化率,或者说是位移的导数(这里是偏导),这样是不是就跟上面的偏导数又结合起来了。
速度=雅克比矩阵与关节向量的点积。V=JEn*qn' (注意,qn需要做转置,不然前面矩阵列数与后面矩阵行数不一样)
V' :[-1.3825 0.0000 1.0156 0 -4.7124 0.0000]

3、行列式Determinant

行列式是对矩阵按一定规则进行运算之后得到的一个数值。行列式可以确定出对应矩阵是否存在着逆,即确定矩阵的奇异性,可以用来解线性方程组等。当行列式为0或近似于0时,其对应逆矩阵不存在,或虽然存在,但计算机计算出来的结果不正确。
我们来看下上面的雅可比矩阵的行列式: det(J0n)det(JEn)都是-0.0786,不是0,所以可逆,inv(J0n)inv(JEn)
我们自定义几个矩阵来具体看下这个行列式是怎么求值的,以及有什么意义。

mat0 = [3 0;0 2]
det(mat0)
%结果为6

mat1 = [1 2 3;4 5 6;7 8 9]
mat1 =
     1     2     3
     4     5     6
     7     8     9
det(mat1)
%结果为-9.5162e-16 近似为0了,这里我们等会手动计算就是0,所以不可逆,或者结果不正确

我们来看下它的逆矩阵: 

inv(mat1)

警告: 矩阵接近奇异值,或者缩放错误。结果可能不准确。RCOND =  2.202823e-18。 

我们将矩阵修改下

mat2 = [1 2 3;4 5 6;7 8 0]

然后求行列式:det(mat2)结果为27.0000,好的,不是0的情况,就可逆inv(mat2)
那么这些值是怎么算出来的呢?依然通过画图来给大家直观感受下: 

4、行列式推导 

从错误提示以及图片,我们可以看到行列式,其实是在做拉伸或叫缩放的操作,mat0的矩阵的行列式我们可以知道是面积放大了6倍,这个就是行列式的几何意义。
对于这个矩阵的行列式是具体如何计算得到的,我们一起来看下推导过程:

我们实际是求这个缩放的平行四边形的面积,如果求出来的结果是0,这种情况我们前面也验证过,这个矩阵是不可逆,这个通俗来说就是降维了,就类似于“万向节死锁”的现象出现了,成为了线性关系,所以不能反推回去,有兴趣的可以点击:欧拉角(横滚角、俯仰角、偏航角)、旋转矩阵、四元数的转换与解决万向节死锁

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/225304.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

抖去推微信小程序版:短视频矩阵系统视频剪辑+无人直播

短视频矩阵获客工具的出现,给矩阵号的管理及运营带来了极大的便利,大家可以批量生成作品,并且可以实现自动发布,极大的节省了人力物力。 然而,对于中小商家来说虽然很想购买一套这样的系统,但考虑到费用较高…

外贸平台自建站的教程?做海洋建站的好处?

外贸平台自建站怎么做?搭建网站的具体流程有哪些? 作为外贸从业者,借助互联网平台自建站点已经成为推广业务、拓展市场的一种重要手段。海洋建站将为您提供一份详尽的外贸平台自建站的教程,助您在网络空间中展现您的企业魅力。 …

备战2024年1月AMC8美国数学竞赛新方式:刷在线真题集(附资源)

今天是2023年12月7日,距离暂定于2024年1月19日举办的AMC8美国数学竞赛的举办日期还有42天,有志于尽早出国留学,或者小升初冲击名校的孩子们相信已经在如火如荼地利用课余时间上辅导班或者自学。 为了帮助大家提高备考2024年1月份AMC8竞赛的效…

QxOrm 如何自定义主键?

默认情况下QxOrm的主键是long类型自增的,但是有时候我们不想使用这个主键,想使用比如string类型的主键。 可以使用QX_REGISTER_PRIMARY_KEY宏定义另一种类型(例如,QString 类型)的唯一 id(主键&#xff09…

第 7 部分 — 增强 LLM 安全性的策略:数学和伦理框架

一、说明 增强大型语言模型 (LLM) 安全性的追求是技术创新、道德考虑和实际应用的复杂相互作用。这项努力需要一种深入而富有洞察力的方法,将先进的数学模型与道德原则和谐地融合在一起,以确保LLM的发展不仅在技术上稳健,而且在道德上合理且对…

实现简易的一对一用户聊天

服务端 package 一对一用户;import java.awt.BorderLayout; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Vector…

Linux 存储管理

内容概述 磁盘结构分区类型管理分区管理文件系统挂载设备管理swap空间(用来缓解内存空间不足情况)RAID 管理LVM管理LVM快照 1 磁盘结构 1.1 设备文件 块设备文件:数据的访问单位是块Block,一个块的IO 字符设备文件&#xff1a…

文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《计及需求响应与火–储深度调峰定价策略的电力系统双层优化调度》

这个标题似乎涉及到电力系统的双层优化调度问题,并考虑了两个关键方面:需求响应和火–储深度调峰定价策略。 电力系统双层优化调度:这指的是在电力系统中进行优化调度的过程。双层优化可能意味着系统具有两个层次的决策过程,通常是…

python实战—核心基础1(高考倒计时)lv1

目录 一、核心代码解释 二、代码 三、运行截图 一、核心代码解释 1、datetime模块 Python有一个名为datetime的模块,用于处理日期和时间。 datetime模块中定义的一个类是datetime类。 可以使用now()方法创建一个包含当前本地日期和时间的datetime对象。 impo…

外汇天眼:市场95%的输家都犯了这个错误,你也中招了吗?

下单的是人,由于人的不完美与无经验,因之会产生很多障碍,没有累积足够之经验,获得周全之要领前,通常会犯了主要是人就会不自觉犯下主观与判断上的差错,这也就是,95%为输家的原因。 由于投资人在…

安装和初始化 VyOS 虚拟机

目录 安装和初始化 VyOS虚拟机1. 安装VyOS系统(1)进入系统安装界面 2. 登录VyOS系统(1)安装 Image 镜像(2)进入初始话设置文字描述重启系统 3. 配置路由3.1 设置静态IP地址3.2 SSH端口设置3.3 删除网卡IP地…

uniapp实战 —— 自定义顶部导航栏

效果预览 下图中的红框区域 范例代码 src\pages.json 配置隐藏默认顶部导航栏 "navigationStyle": "custom", // 隐藏默认顶部导航src\pages\index\components\CustomNavbar.vue 封装自定义顶部导航栏的组件(要点在于:获取屏幕边界…

springboot 自定义响应

自定义响应类是指在开发中,根据业务需求自定义的用于封装接口响应数据的类。通常情况下,一个自定义响应类包含了接口返回的相关信息,如状态码、消息、数据等。 自定义响应类的设计灵活多样,可以根据具体的业务需求进行定义。一般…

Word文件设置了只读模式,为什么还能编辑?

Word文档设置了只读模式,为什么还可以编辑呢?,不过当我们进行保存的时候会发现,word提示需要重命名并选择新路径才能够保存,是因为什么呢?今天我们学习一下如何解决问题。 这种操作,即使可以编辑…

【用unity实现100个游戏之18】从零开始制作一个类CSGO/CS2、CF第一人称FPS射击游戏——基础篇3(附项目源码)

文章目录 本节最终效果前言素材人物移动音效枪口火焰和开火音效枪口灯光弹孔和火花添加武器随镜头手臂摇摆效果源码完结 本节最终效果 前言 本节主要实现添加音效,和一些特效、武器摆动调整。 素材 素材,为了方便我直接用了unity免费的音效输出&#…

zabbix的自动发现和注册、proxy代理和SNMP监控

目录 一、zabbix自动发现与自动注册机制: 1、概念 2、zabbix 自动发现与自动注册的部署 二、zabbix的proxy代理功能: 1、工作流程 2、安装部署 三、zabbix-snmp 监控 1、概念 2、安装部署 四、总结: 一、zabbix自动发现与自动注册…

matlab 点云放缩变换

目录 一、算法原理二、代码实现三、结果展示四、相关链接本文由CSDN点云侠原创,原文链接。爬虫网站自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 缩放可以独立应用于三个坐标轴,如将点 ( x , y , z ) ( x

k8s官方镜像代理加速

背景 大家可能在云原生领域需要部署周边的一些生态组件时,在国内遇到无法正常拉取镜像,显得就有点苦恼,不过没关系,常见的${{ registry_name }} 例如 “gcr.io”,“registry.k8s.io” Failed to pull image “registry…

2023下半年软件设计师 关于我用了半个月过了软件设计师这件事

前言 废话不多说、看图喽。刚可以查询、我就赶紧去查成绩 上午成绩是57分、下午成绩是45分。下午成绩刚好踩着及格线 有关备考 我是在工作之余外进行的备考、备考前前后后花了半个月。但是备考的很仓促、每天下班都要搞到十一二点。早上赶班车也在刷题,吃饭的时候也…

从cot到agent的survey视频笔记

参考视频: 从CoT到Agent的列车即将发车,请各位旅客尽快上车 姚杳 由于总结不易,所以暂时都是粉丝可见,如果总结的不好见谅。 核心理解点总结: paradigm shifts of cot when cot?推理多的任务时 how cot…