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

news2024/11/27 19:38:29

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

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,这种情况我们前面也验证过,这个矩阵是不可逆,这个通俗来说就是降维了,就类似于“万向节死锁”的现象出现了,成为了线性关系,所以不能反推回去,有兴趣的可以点击:欧拉角(横滚角、俯仰角、偏航角)、旋转矩阵、四元数的转换与解决万向节死锁

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

thinkphp todo

来由: 数据库的这个字段我想返回成: 新奇的写法如下: 逻辑层的代码: public function goodsDetail($goodId){$detail $this->good->where(id, $goodId)->hidden([type_params,user_id])->find();if (!$detail) {ret…

idea新建spring boot starter

什么是spring boot starter Spring Boot Starter 是一种 Maven 或 Gradle 依赖,它能够轻松地将相关库和框架集成到 Spring Boot 应用程序中。Starter 是一种对常见依赖项和设置的易于复用的封装,它们通常被开发人员用于创建可插拔的 Spring Boot 应用程序…

Java UDP 多人聊天室简易版

服务端 import java.io.*; import java.net.*; import java.util.ArrayList; public class Server{public static ServerSocket server_socket;public static ArrayList<Socket> socketListnew ArrayList<Socket>(); public static void main(String []args){try{…

景联文科技:高质量垂直领域数据集助力AI技术突破

随着人工智能技术的飞速发展&#xff0c;垂直领域数据集在提升模型性能、解决领域问题、推动创新应用以及提升竞争力等方面的重要性日益凸显。 提高模型性能&#xff1a;垂直领域数据集专注于特定任务或领域&#xff0c;使用这些数据集进行训练可以让模型更好地理解和解决特定领…

安防音频接口选型的高性能国产芯片分析

在人工智能兴起之后&#xff0c;安防市场就成为了其全球最大的市场&#xff0c;也是成功落地的最主要场景之一。对于安防应用而言&#xff0c;智慧摄像头、智慧交通、智慧城市等概念的不断涌现&#xff0c;对于芯片产业催生出海量需求。今天&#xff0c;我将为大家梳理GLOBALCH…

得帆云助力容百科技构建CRM系统,实现LTC全流程管理

宁波容百新能源科技股份有限公司 宁波容百新能源科技股份有限公司&#xff08;以下简称“容百科技”&#xff09;于2014年9月建立&#xff0c;是高科技新能源材料行业的跨国型集团公司。专业从事锂电池正极材料的研发、生产和销售&#xff0c;于2019年登陆上交所科创板&#x…

CV计算机视觉每日开源代码Paper with code速览-2023.12.1

点击CV计算机视觉&#xff0c;关注更多CV干货 论文已打包&#xff0c;点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【基础网络架构&#xff1a;Transformer】TransNeXt: Robust Foveal Visual Perception for Vision Transformers 论文地址&#xff1a;http…

Java聊天

一对一聊天 服务端 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.…

【问题思考】泰勒公式证明题如何选展开点?【对称美】

我的证明题水平很烂&#xff0c;这个纯属让自己有一个初步的理解&#xff0c;恳请指正&#xff01; 问题 我们可以看到这里有两种展开方式&#xff08;注意&#xff1a;x0叫展开点&#xff09;&#xff0c;分别是正确的做法&#xff0c;在x0展开&#xff0c;然后将0和a代入fx中…

【JavaEE】生产者消费者模式

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

【开源】基于JAVA的天沐瑜伽馆管理系统

项目编号&#xff1a; S 039 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S039&#xff0c;文末获取源码。} 项目编号&#xff1a;S039&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 瑜伽课程模块2.3 课…

线程池基础参数和执行流程

线程池核心参数 1.corePoolSize:线程池中核心线程的个数。 2.maximumPoolSize:线程池中线程的总数。&#xff08;线程总数核心线程数 救急线程数&#xff09; 3. keepAliveTime:救急线程的存活时间。&#xff08;救急线程空闲时的存活时间。&#xff09; 4.unit:存活时间的…

numpy数据读取保存及速度测试

目录 数据保存及读取 速度比对测试 数据保存及读取 代码示例&#xff1a; # 导入必要的库 import numpy as np # 生成测试数据 arr_disk np.arange(8) # 打印生成能的数据 print(arr_disk) # numpy保存数据到本地 np.save("arr_disk", arr_disk) # 加载本地数据…

gpt3、gpt2与gpt1区别

参考&#xff1a;深度学习&#xff1a;GPT1、GPT2、GPT-3_HanZee的博客-CSDN博客 Zero-shot Learning / One-shot Learning-CSDN博客 Zero-shot&#xff08;零次学习&#xff09;简介-CSDN博客 GPT-2 模型由多层单向transformer的解码器部分构成&#xff0c;本质上是自回归模型…

软件系统应用开发安全指南

2.1.应用系统架构安全设计要求 2.2.应用系统软件功能安全设计要求 2.3.应用系统存储安全设计要求 2.4.应用系统通讯安全设计要求 2.5.应用系统数据库安全设计要求 2.6.应用系统数据安全设计要求 全资料获取进主页。

C、C++、C#的区别概述

C、C、C#的区别概述 https://link.zhihu.com/?targethttps%3A//csharp-station.com/understanding-the-differences-between-c-c-and-c/文章翻译源于此链接 01、C语言 ​ Dennis Ritchie在1972年创造了C语言并在1978年公布。Ritchie设计C的初衷是用于开发新版本的Unix。在那之…

关于DWC OTG2.0中PFC的理解

在DWC OTG2.0 Controller手册中&#xff0c;有一章节专门介绍了PFC&#xff0c;Packet FIFO Controller。其内部分为共享FIFO&#xff08;shared FIFO&#xff09;以及专用FIFO&#xff08;Dedicated FIFO&#xff09;&#xff0c;并针对dev和host两种模式&#xff0c;并且还要…

IT行业软件数据文件传输安全与高效是如何保障的?

在当今迅速发展的科技世界中&#xff0c;云计算、大数据、移动互联网等信息技术正迎来蓬勃发展&#xff0c;IT行业正置身于一个全新的世界。数据不仅是最重要的资产&#xff0c;也是企业竞争力的核心所在。然而&#xff0c;如何缩短信息共享时间、高速流转数据、跨部门/跨区域协…

智能优化算法应用:基于鹰栖息算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于鹰栖息算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于鹰栖息算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鹰栖息算法4.实验参数设定5.算法结果6.参考文献7.…

Linux--文件权限与shell外壳的理解

目录 一.Linux的用户与用户切换&#xff0c;提权 二.对文件权限的理解 1.文件权限角色的权限文件属性 2.Linux中的三种角色 3.为什么会存在所属组这个角色 4.文件属性的意义 4.1.第一个字母的意义 4.2 第2——第10个字母的意义 4.3修改文件权限的方法 三.目录权限 四…