
机器人自学之路笔记P1——前置知识:矩阵
机器人自学笔记,矩阵知识
机器人自学之路笔记P1——前置知识:矩阵
作者:开挖机的程序猿
文章始作于 2024-8-10,完作于 2024-8-14
一、前言
-
作者目前是大三狗一名,从大一开始就一直很想涉足机器人开发领域。奈何学校破事太多,作者也不是相关专业的学生,没有很多时间和精力去系统性地学完相关知识。借着最近开始在CSDN上发博客,边学边复习边记录,一是自己养成良好的学习习惯,二是自我记录鼓励,三是向同样想自学机器人的伙伴们提供一个自学案例,不要被复杂的知识吓到,逐一击破就能成功!
-
这个系列作者会坚持更新的,在大章结束之前全都免费公开,成体系后可能会做成收费合集赚点生活费,当然如果作者觉得值得。也是用赚米鼓励自己学习下去吧,大家加油,想看作者更新或者嘲讽的都可以关注!
-
废话不多说了,这一系列文章也是继续延续之前的手把手系列,尽可能地分解每一个知识点,每一个步骤,让小白也能轻松学会,不说会运用,至少能看懂每一步吧。第一章主要是对机器人的基础——机器人运动学进行学习和分享。
-
这是我学习这一部分内容看的一些资料:
4.机器人学:(2)位姿描述和坐标变换_abb机器人所说的位姿是什么-CSDN博客
建议大家看完后或者看之前去补习一些线代知识。
二、矩阵
-
开始之前,先放一些基础的矩阵知识点,会的可以跳过
-
什么是矩阵?这篇文章非常好,感兴趣的去看看,不过我只挑需要的放在下面的讲解里
线性代数: 什么是矩阵,以及矩阵的线性代数意义_线性代数矩阵-CSDN博客
1、怎么表示矩阵?(本章涉及三维空间的相关量的表示,常用3x3矩阵)
这就是一个矩阵,用大写字母 A
表示,当然,你可以用其他字母,一般习惯大写。里面的元素 a_11
…… a_33
下标分别表示 行&列
,下面是个实例
当然,这个矩阵没有任何意义,我是瞎给了一些参数,它大概看起来就是这样的
2、矩阵的加减法
-
注意,必须要相同行列数
m x n
的矩阵才能够进行相加减(如果两个矩阵都是m x n
个数组成,则称两个矩阵为同型矩阵。) -
对应元素进行加减即可
-
结果任然为一个
m x n
的矩阵 -
这个简单且不是很重要,不作详细介绍
3、矩阵乘法
1、矩阵点乘 (标量乘法)
-
注意,必须要同型矩阵才能够进行点乘
-
很简单,对应位置的元素相乘即可
2、重要:矩阵叉乘(矢量乘法)
-
注意,必须一个矩阵的列数和另一个矩阵的行数互相相等的矩阵才能够进行叉乘,运算过程如下图
-
可以看到,叉乘是左边矩阵的行与右边矩阵的列分别相乘,元素分别相乘再相加的一个过程
-
叉乘是否满足交换律呢,即左右矩阵调换再乘是否结果和上面相等?
-
显然,矩阵的矢量乘法(叉乘)是不满足交换律的,不要搞错了
-
有个显然的规律,结果矩阵是一个
n x n
的方阵(正方形矩阵),n是左边矩阵的行数
4、矩阵转置
- 很简单,看图自己理解
-
一个矩阵是否能转置有无条件? 任何矩阵都可以转置,与是否是方阵没有关系。(作者看了其他资料,很多都是用方阵举例的,导致我产生了这个疑惑,这里着重提一下)
-
转置符号
T
就是Transpose
的意思 -
怎么操作?
作者是这样手动转置的:
1、先看原来的矩阵的形状,这里是 2 x 3 的,那么转置后就是 3 x 2 的矩阵
2、然后目光移到 3 x 2 矩阵的11元素,去找原矩阵的11元素,再看到 3 x 2 矩阵的12元素,然后去找原矩阵的21元素,给它写进来,然后是 3 x 2 矩阵的21元素,去找原矩阵的12元素,写进来……………………口算吧,哈哈
-
还有一些推论,都是想一想就明白的,可以不看
5、(重要)矩阵求逆
-
矩阵中没有除法,所以需要逆矩阵(作者也有点懵逼),这里应该是针对矢量性质的运算
-
只有方阵有逆矩阵
-
PS:作者写到这里的时候也挺懵的,去看了别的博客更懵了,不过还是要坚持理解再转化输出,所以遇到难点不要怕,加油奥里给!
-
前置知识
1、矩阵的行列式
-
行列式只对方阵有效,脑海里依稀飘过这样个声音:有人问我三行四列的行列式怎么算,把我吓死了(汤家凤名场面)
-
行列式的计算方法(含四种,看完就会!)-CSDN博客这篇文章比较好,借鉴一下,本文对三阶方阵的应用比较多,故只讲三阶矩阵的行列式
-
你现在不需要知道行列式有啥用,会用对角线法算就行,如下,将矩阵A转写为三阶行列式D_3
计算行列式:
将左边两列复制到最右边,如图绘制红线和蓝线,只要把每一条线上的元素相乘,再把所有红色线的结果的和减去蓝色线结果的和就行了,如下
2、利用余子式、代数余子式和伴随矩阵求逆
-
不是很难理解,跟着步骤走就行
-
这里以这个矩阵为例
- Step1 求行列式判断这个矩阵是否有逆矩阵
行列式不为0,说明该矩阵存在逆矩阵(如果矩阵的行列式为0,则判断该矩阵为奇异矩阵(singular matrix),即不可逆矩阵。)
- Step2 求余子式矩阵(如下图,别被图片吓到了,其实很简单,红色的是删除线,不用看,绿色的是保留的矩阵元素,橙色和蓝色线就是上面的行列式对角线求法,依次求余下数字组成的矩阵的行列式)
得到新的矩阵称为余子式矩阵:
- Step3 求代数余子式矩阵(余因子矩阵)(加入相隔的正负号)
-
经过上面的符号变换,你就得到了余因子矩阵,也叫代数余子式矩阵
- Step4 求伴随矩阵(就是转置一下)
- Step5 乘上矩阵A的行列式分之一,即(矩阵数乘很简单,不作解释)
- 这样,就求出了矩阵A的逆矩阵
3、更简单,用numpy程序求逆矩阵
- 还是这个A矩阵
-
用以下程序求逆矩阵(python环境,已经安装了numpy库)
-
站内搜索安装
numpy
库,本文章不再详细解释
inverse.py
import numpy as np
# 定义一个函数来计算矩阵的逆矩阵
def calculate_inverse_matrix(matrix):
try:
# 使用numpy的linalg.inv函数来计算逆矩阵
inverse_matrix = np.linalg.inv(matrix)
return inverse_matrix
except np.linalg.LinAlgError:
# 如果矩阵不可逆,捕捉错误并返回提示信息
return "矩阵不可逆"
# 定义一个示例矩阵
example_matrix = np.array([[5, 7, 4],
[2, 1, 6],
[3, 1, 5]])
# 计算逆矩阵
inverse = calculate_inverse_matrix(example_matrix)
# 打印结果
if isinstance(inverse, str):
print(inverse)
else:
print("逆矩阵为:\n", inverse)
运行结果:
PS F:\blog> python .\inverse.py
逆矩阵为:
[[-0.0212766 -0.65957447 0.80851064]
[ 0.17021277 0.27659574 -0.46808511]
[-0.0212766 0.34042553 -0.19148936]]
- 和手算的结果一致,说明手算的步骤正确。
6、零矩阵与单位矩阵
-
零矩阵(这些都是零矩阵,所有元素为0)
-
符合矩阵的加减法运算法则(见上)的矩阵和零矩阵相加减都为它本身
-
符合矩阵乘法运算法则(见上)的矩阵和零矩阵相乘都为零矩阵(矩阵型号有可能会发生变化)
-
-
单位矩阵(单位矩阵都是方阵,主对角线上都是1,其余都是0)
- 任何矩阵与单位矩阵的乘积结果为其本身
三、总结
本章主要是对机器人运动学研究中的数学工具,主要是对矩阵进行了一些知识恶补,当然,这一章没有提到为什么要用矩阵,也没提到任何与机器人相关的内容,我们将在后面的文章中讲解矩阵到底是什么,有什么妙用,以及在机器人研究中的应用。
更多推荐
所有评论(0)