机器人运动学林沛群——旋转矩阵

旋转矩阵

基本概念

三个主轴,可以看作是三个向量,为b在a的表达,以a为基准
旋转矩阵

image.png

B相对于A的姿态:
B A R = [ A X B ^ A Y B ^ A Z B ^ ] = [ X ^ B ⋅ X ^ A Y ^ B ⋅ X ^ A Z ^ B ⋅ X ^ A X ^ B ⋅ Y ^ A Y ^ B ⋅ Y ^ A Z ^ B ⋅ Y ^ A X ^ B ⋅ Z ^ A Y ^ B ⋅ Z ^ A Z ^ B ⋅ Z ^ A ] ^A_BR=\begin{bmatrix} ^A\hat{X_B} & ^A\hat{Y_B} & ^A\hat{Z_B}\\ \end{bmatrix} =\begin{bmatrix}\hat{X}_B\cdot\hat{X}_A&\hat{Y}_B\cdot\hat{X}_A&\hat{Z}_B\cdot\hat{X}_A\\\hat{X}_B\cdot\hat{Y}_A&\hat{Y}_B\cdot\hat{Y}_A&\hat{Z}_B\cdot\hat{Y}_A\\\hat{X}_B\cdot\hat{Z}_A&\hat{Y}_B\cdot\hat{Z}_A&\hat{Z}_B\cdot\hat{Z}_A\end{bmatrix} BAR=[AXB^AYB^AZB^]= X^BX^AX^BY^AX^BZ^AY^BX^AY^BY^AY^BZ^AZ^BX^AZ^BY^AZ^BZ^A

用三个列向量分别来表示B坐标系每一个转轴的方向,每一个列向量的组成:即每一个轴的向量在A坐标系的投影,即通过点乘得到投影

以下面的图为例子,蓝色为A坐标系,红色为B坐标系。

image.png

如果要求 B A R = ? ^A_BR=? BAR=? ,需要分析B的三轴与A的三轴的关系。B的X轴与A的Z轴反向,则 A X B ^ = [ 0 0 − 1 ] ^A\hat{X_B}=\begin{bmatrix}0\\0\\-1\end{bmatrix} AXB^= 001 ,如果去分析投影计算方法,则可知是向量 X B ^ = [ 0 0 − 1 ] \hat{X_B}=\begin{bmatrix}0\\0\\-1\end{bmatrix} XB^= 001 分别与 X A ^ = [ 1 0 0 ] \hat{X_A}=\begin{bmatrix}1\\0\\0\end{bmatrix} XA^= 100 Y A ^ = [ 0 1 0 ] \hat{Y_A}=\begin{bmatrix}0\\1\\0\end{bmatrix} YA^= 010 Z A ^ = [ 0 0 1 ] \hat{Z_A}=\begin{bmatrix}0\\0\\1\end{bmatrix} ZA^= 001 ,就可以得到 A X B ^ = [ 0 0 − 1 ] ^A\hat{X_B}=\begin{bmatrix}0\\0\\-1\end{bmatrix} AXB^= 001 了。

B的Y轴与A的Y轴重叠,即 A Y B ^ = [ 0 1 0 ] ^A\hat{Y_B}=\begin{bmatrix}0\\1\\0\end{bmatrix} AYB^= 010
B的Z轴与A的X轴重叠,即 A Z B ^ = [ 1 0 0 ] ^A\hat{Z_B}=\begin{bmatrix}1\\0\\0\end{bmatrix} AZB^= 100
可以得到
B A R = [ 0 0 1 0 1 0 − 1 0 0 ] ^A_BR=\begin{bmatrix}0 &0 &1\\ 0&1&0\\ -1&0&0 \end{bmatrix} BAR= 001010100

image.png

特性

特性1

由于点乘得到的是一个数,左右交换顺序并不改变得到的结果

B A R = [ X ^ B ⋅ X ^ A Y ^ B ⋅ X ^ A Z ^ B ⋅ X ^ A X ^ B ⋅ Y ^ A Y ^ B ⋅ Y ^ A Z ^ B ⋅ Y ^ A X ^ B ⋅ Z ^ A Y ^ B ⋅ Z ^ A Z ^ B ⋅ Z ^ A ] = [ X ^ A ⋅ X ^ B X ^ A ⋅ Y ^ B X ^ A ⋅ Z ^ B Y ^ A ⋅ X ^ B Y ^ A ⋅ Y ^ B Y ^ A ⋅ Z ^ B Z ^ A ⋅ X ^ B Z ^ A ⋅ Y ^ B Z ^ A ⋅ Z ^ B ] ^A_BR =\begin{bmatrix}\hat{X}_B\cdot\hat{X}_A&\hat{Y}_B\cdot\hat{X}_A&\hat{Z}_B\cdot\hat{X}_A\\\hat{X}_B\cdot\hat{Y}_A&\hat{Y}_B\cdot\hat{Y}_A&\hat{Z}_B\cdot\hat{Y}_A\\\hat{X}_B\cdot\hat{Z}_A&\hat{Y}_B\cdot\hat{Z}_A&\hat{Z}_B\cdot\hat{Z}_A\end{bmatrix}=\begin{bmatrix}\hat{X}_A\cdot\hat{X}_B&\hat{X}_A\cdot\hat{Y}_B&\hat{X}_A\cdot\hat{Z}_B\\\hat{Y}_A\cdot\hat{X}_B&\hat{Y}_A\cdot\hat{Y}_B&\hat{Y}_A\cdot\hat{Z}_B\\\hat{Z}_A\cdot\hat{X}_B&\hat{Z}_A\cdot\hat{Y}_B&\hat{Z}_A\cdot\hat{Z}_B\end{bmatrix} BAR= X^BX^AX^BY^AX^BZ^AY^BX^AY^BY^AY^BZ^AZ^BX^AZ^BY^AZ^BZ^A = X^AX^BY^AX^BZ^AX^BX^AY^BY^AY^BZ^AY^BX^AZ^BY^AZ^BZ^AZ^B
B A R = [ B X A ^ T B Y A ^ T B Z A ^ T ] = [ B X A ^ B Y A ^ B Z A ^ ] T = A B R T ^A_BR=\begin{bmatrix}^B\hat{X_A}^T\\^B\hat{Y_A}^T\\^B\hat{Z_A}^T\end{bmatrix} =\begin{bmatrix}^B\hat{X_A}&^B\hat{Y_A}&^B\hat{Z_A}\end{bmatrix}^T =^B_AR^T BAR= BXA^TBYA^TBZA^T =[BXA^BYA^BZA^]T=ABRT

特性2

B A R T ⋅ B A R = [ A X B ^ T A Y B ^ T A Z B ^ T ] [ A X B ^ A Y B ^ A Z B ^ ] = [ 1 0 1 0 1 0 0 0 1 ] = I 3 = B A R − 1 ⋅ B A R ^A_BR^T \cdot^A_BR=\begin{bmatrix}^A\hat{X_B}^T\\^A\hat{Y_B}^T\\^A\hat{Z_B}^T\end{bmatrix}\begin{bmatrix} ^A\hat{X_B} & ^A\hat{Y_B} & ^A\hat{Z_B}\\ \end{bmatrix} =\begin{bmatrix} 1 & 0 & 1\\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix} =I_3=^A_BR^{-1} \cdot^A_BR BARTBAR= AXB^TAYB^TAZB^T [AXB^AYB^AZB^]= 100010101 =I3=BAR1BAR
即:
B A R T ⋅ B A R = = B A R − 1 ⋅ B A R ^A_BR^T \cdot^A_BR==^A_BR^{-1} \cdot^A_BR BARTBAR==BAR1BAR
称之为单位正交矩阵。

该矩阵有九个数字,但是有六个限制条件(单位正交、每一行或者列的长度为1,共有三行六列),因此只有三个自由度,与转动只有三个自由度相符。

特性3

坐标点的转换,在B坐标系的P点通过与旋转矩阵相乘,得到A坐标系的P点

A P = B A R B P ^AP=^A_BR^BP AP=BARBP
对于将旋转拆解成三次旋转的连乘

  • 需要明确多次旋转的前后顺序
  • 旋转转轴也需要明确定义,是对固定不动的转轴旋转(Fixed angles),还是对转动之后坐标系下的转轴旋转(Euler angles)

旋转矩阵可以描述物体旋转的状态(以逆时针为正),

image.png

Z A ^ \hat{Z_A} ZA^为旋转轴,旋转角度为 θ \theta θ

R Z A ^ ( θ ) = [ c o s θ − s i n θ 0 s i n θ c o s θ 0 0 0 1 ] R_{\hat{Z_A}}(\theta)=\begin{bmatrix}cos\theta&-sin\theta&0\\sin\theta&cos\theta&0\\0&0&1\end{bmatrix} RZA^(θ)= cosθsinθ0sinθcosθ0001

image.png

通过旋转,得到下面的坐标 A P ′ = R ( θ ) A P {}^AP^{\prime}=R(\theta)^AP AP=R(θ)AP

Fix Angles

image.png

依次按照XYZ轴旋转,可得:
B A R X Y Z ( γ , β , α ) = R Z ( α ) R Y ( β ) R X ( γ ) _B^AR_{XYZ}(\gamma,\beta,\alpha)=R_Z(\alpha)R_Y(\beta)R_X(\gamma) BARXYZ(γ,β,α)=RZ(α)RY(β)RX(γ)
先转的在后面,即先与矩阵相乘(需要乘的矩阵在最右侧),先进行变换,后转在前面。

在fix angles下,先对X轴旋转60°、后对Y轴旋转30°与先对Y轴旋转30°,在对X轴旋转60°的旋转矩阵。
先对X轴旋转60°、后对Y轴旋转30°:
B A R X Y Z ( γ , β , α ) = R Z ( 0 ) R Y ( 30 ) R X ( 60 ) = [ 0.866 0.433 0.25 0 0.5 − 0.866 − 0.5 0.75 0.433 ] ^A_BR_{XYZ}(\gamma,\beta,\alpha)=R_Z(0)R_Y(30)R_X(60)=\begin{bmatrix}0.866&0.433&0.25\\0&0.5&-0.866\\-0.5&0.75&0.433\end{bmatrix} BARXYZ(γ,β,α)=RZ(0)RY(30)RX(60)= 0.86600.50.4330.50.750.250.8660.433
先对Y轴旋转30°,在对X轴旋转60°的旋转矩阵:
B A R X Y Z ( γ , β , α ) = R Z ( 0 ) R X ( 60 ) R Y ( 30 ) = [ 0.866 0 0.5 0.433 0.5 − 0.75 − 0.25 0.866 0.433 ] _B^AR_{XYZ}(\gamma,\beta,\alpha)=R_Z(0)R_X(60)R_Y(30)=\begin{bmatrix}0.866&0&0.5\\0.433&0.5&-0.75\\-0.25&0.866&0.433\end{bmatrix} BARXYZ(γ,β,α)=RZ(0)RX(60)RY(30)= 0.8660.4330.2500.50.8660.50.750.433

可以通过旋转矩阵倒推角度:
B A R X Y Z ( γ , β , α ) = [ c α c β c α s β s γ − s α c γ c α s β c γ + s α s γ s α c β s α s β s γ + c α c γ s α s β c γ − c α s γ − s β c β s γ c β c γ ] = [ r 11 r 12 r 13 r 21 r 22 r 23 r 31 r 32 r 33 ] ^A_BR_{XYZ}(\gamma,\beta,\alpha)=\begin{bmatrix}c\alpha c\beta&c\alpha s\beta s\gamma-s\alpha c\gamma&c\alpha s\beta c\gamma+s\alpha s\gamma\\s\alpha c\beta&s\alpha s\beta s\gamma+c\alpha c\gamma&s\alpha s\beta c\gamma-c\alpha s\gamma\\-s\beta&c\beta s\gamma&c\beta c\gamma\end{bmatrix}=\begin{bmatrix}r_{11}&r_{12}&r_{13}\\r_{21}&r_{22}&r_{23}\\r_{31}&r_{32}&r_{33}\end{bmatrix} BARXYZ(γ,β,α)= cαcβsαcβsβcαsβsγsαcγsαsβsγ+cαcγcβsγcαsβcγ+sαsγsαsβcγcαsγcβcγ = r11r21r31r12r22r32r13r23r33
β ≠ 90 \beta \neq 90 β=90 :
β = A t a n 2 ( − r 31 , r 11 2 + r 21 2 ) α = A t a n 2 ( r 21 / c β , r 11 / c β ) γ = A t a n 2 ( r 32 / c β , r 33 / c β ) \begin{aligned} &\beta=Atan2(-r_{31},\sqrt{{r_{11}}^{2}+{r_{21}}^{2}}) \\ &\alpha=Atan2(r_{21}/c\beta,r_{11}/c\beta) \\ &\gamma=Atan2(r_{32}/c\beta,r_{33}/c\beta) \end{aligned} β=Atan2(r31,r112+r212 )α=Atan2(r21/cβ,r11/cβ)γ=Atan2(r32/cβ,r33/cβ)
I f β = 9 0 ∘ α = 0 ∘ γ = A t a n 2 ( r 12 , r 22 ) \begin{aligned}\mathsf{If}\beta&=90^\circ\\\alpha&=0^\circ\\\gamma&=Atan2(r_{12},r_{22})\end{aligned} Ifβαγ=90=0=Atan2(r12,r22)
I f β = − 9 0 ∘ α = 0 ∘ γ = − A t a n 2 ( r 12 , r 22 ) \begin{aligned}\mathsf{If}\beta&=-90^\circ\\\alpha&=0^\circ\\\gamma&=-Atan2(r_{12},r_{22})\end{aligned} Ifβαγ=90=0=Atan2(r12,r22)

Euler Angles

image.png

B A R Z ′ Y ′ X ′ ( α , β , γ ) = B ′ A R B ′ ′ B ′ R B ′ ′ B R = R Z ′ ( α ) R Y ′ ( β ) R X ′ ( γ ) {}_{B}^{A}R_{Z^{\prime}Y^{\prime}X^{\prime}}(\alpha,\beta,\gamma)={}^A_{B^{\prime}}R_{B^{\prime\prime}}^{B^{\prime}}R^{B^{\prime\prime}}{}_{B}R=R_{Z^{\prime}}(\alpha)R_{Y^{\prime}}(\beta)R_{X^{\prime}}(\gamma) BARZYX(α,β,γ)=BARB′′BRB′′BR=RZ(α)RY(β)RX(γ)

先对哪个轴转,哪个轴的旋转矩阵在最前面。大概理解为,如果要从旋转后的坐标系恢复至原来的坐标系,需要从最后一个旋转的轴,依次往前复原

如果三个角度相同,那么最终结果与FixAngles相同

image.png

可以通过多种旋转方法得到相同的旋转矩阵,即旋转到相同的姿态

image.png

Euler和Fix各有十二种方法,第一个旋转的轴有三种选择,第二个有两种(排除掉第一个旋转的轴),第三个有两种(排除掉第二个旋转的轴)

还存在四元数法,之后会去介绍。

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

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

相关文章

牛客网SQL264:查询每个日期新用户的次日留存率

官网链接: 牛客每个人最近的登录日期(五)_牛客题霸_牛客网牛客每天有很多人登录,请你统计一下牛客每个日期新用户的次日留存率。 有一个登录(login。题目来自【牛客题霸】https://www.nowcoder.com/practice/ea0c56cd700344b590182aad03cc61b8?tpId82 …

C语言笔试题之实现C库函数 strstr()(设置标志位)

实例要求: 1、请你实现C库函数strstr()(stdio.h & string.h),请在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始);2、函数声明:int strStr(char* h…

聊聊PowerJob Server的高可用

序 本文主要研究一下PowerJob Server的高可用 PowerJobSpringWorker tech/powerjob/worker/PowerJobSpringWorker.java public class PowerJobSpringWorker implements ApplicationContextAware, InitializingBean, DisposableBean {/*** 组合优于继承,持有 Pow…

5G NR 信道号计算

一、5G NR的频段 增加带宽是增加容量和传输速率最直接的方法,目前5G最大带宽将会达到400MHz,考虑到目前频率占用情况,5G将不得不使用高频进行通信。 3GPP协议定义了从Sub6G(FR1)到毫米波(FR2)的5G目标频谱。 其中FR1是5G的核心频段&#xff0…

米贸搜|Facebook在购物季使用的Meta广告投放流程

一、账户简化 当广告系列开始投放后,每个广告组都会经历一个初始的“机器学习阶段”。简化账户架构可以帮助AI系统更快获得广告主所需的成效。例如: 每周转化次数超过50次的广告组,其单次购物费用要低28%;成功结束机器学习阶段的…

MySQL索引怎么提高查询的速度?

目录 一、MySQL介绍 二、什么是索引 三、为什么要用索引 四、索引如何提高查询速度 一、MySQL介绍 MySQL是一个开源的关系型数据库管理系统(RDBMS),它是目前最流行和广泛使用的数据库之一。MySQL由瑞典MySQL AB公司开发,并在…

NXP恩智浦电源管理芯片 PIMC VR5510 (配套S32G)芯片手册(I2C通信)-翻译版

文章目录 1. 基本概述2. 简化应用视图3. 特点4. 应用5. 订购信息6. 芯片内部区块视图7. Pin脚信息7.1 Pin 描述7.2 Pinning 8. 产品特性概述8.1 最大额定值8.2 电气特性8.3 操作范围8.4 热力范围8.5 EMC合规性8.6 功能状态图8.7 功能设备操作8.8 主要状态机8.9 深度故障安全状态…

PyTorch中基础模块torch的详细介绍

torch 是 PyTorch 库的核心模块,提供了以下关键功能: 张量(Tensor):类似于 NumPy 的 ndarray,但可以无缝地在 CPU 或 GPU 上运行,并且支持自动微分,是深度学习模型中数据的主要表示形…

帮写祝福、年味卡片,属于Mate X5 折叠屏手机的用户过年指南

怎样过一个舒心愉快的新年? 春运往返的漫漫旅途上,手机总是忠实陪伴我们打发那些无聊的时光——用Mate X5的悬停观影模式,相当于自带手机支架,解放你拿着零食的双手,旅途观影更快乐! 同时,此模…

Linux(Ubuntu)环境下安装卸载Python3(避免踩坑)

一、安装 第一步: 进入/usr/local/目录,下载Python3,这里我下载的是python 3.8.10,如果要下载其他版本改下链接中的版本号,需与官网版本号对应。 wget https://www.python.org/ftp/python/3.8.10/Python-3.8.10.tgz第…

Ubuntu安装SVN服务并结合内网穿透实现公网访问本地存储文件

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默&…

重装系统---首次安装java的JDK

1、去官网或者百度资源选择自己想要下载的jdk版本即可 2、 3、按照步骤安装即可,路径不要更改,默认c盘安装就好,避免后面发生错误。 4、打开电脑的设置,编辑环境变量 这是添加之后的效果 5、再新建一个系统环境变量 6、编辑环境变量Path 添

appium抓包总结

appium抓包总结 背景:有些app通过抓包工具charles等抓不到接口数据,应为这一类抓包工具只能抓到应用层的数据包,而某些app的接口是走的传输层协议,所以此时只能通过AppIUM工具来进行抓包。 1、Appium 是什么? Appium…

【Flink状态管理(二)各状态初始化入口】状态初始化流程详解与源码剖析

文章目录 1. 状态初始化总流程梳理2.创建StreamOperatorStateContext3. StateInitializationContext的接口设计。4. 状态初始化举例:UDF状态初始化 在TaskManager中启动Task线程后,会调用StreamTask.invoke()方法触发当前Task中算子的执行,在…

Netty中解决粘包/半包

目录 什么是TCP粘包半包? TCP 粘包/半包发生的原因 解决粘包半包 channelRead和channelReadComplete区别 什么是TCP粘包半包? 假设客户端分别发送了两个数据包 D1 和 D2 给服务端,由于服务端一次读取到的字节数是不确定的,故可…

STM32——FLASH(1)简单介绍、分类、读写流程及注意事项

文章目录 FLASH的特点Nor flash和nand flashflash的读写flash 的存储单位 flash的读写过程 FLASH的特点 可擦写数据可修改可重写访问速度<ROM Nor flash和nand flash Nor flash 1、与SDRAM相似&#xff0c;用户可以直接运行装载到NORFLASH里面的代码&#xff0c;减少SRAM…

Zoho Mail企业邮箱商业扩展第3部分:计算财务状况

在Zoho Mail商业扩展系列的压轴篇章中&#xff0c;王雪琳利用Zoho Mail的集成功能成功地完成了各项工作&#xff0c;并顺利地建立了自己的营销代理机构。让我们快速回顾一下她的成功之路。 一、使用Zoho Mail成功方法概述 首先她通过Zoho Mail为其电子邮件地址设置了自定义域…

js实现LFU算法

LFU LFU算法是最近最少使用次数算法&#xff0c;针对的是使用次数&#xff1b; 补充一点&#xff1a;对于相同使用次数应该需要加上时间戳&#xff0c;看他人实现LFU算法都没有考虑这一点。 本文通过全局nextId来表示第几次使用功能&#xff1b; class LFU {constructor(capa…

spring boot打完jar包后使用命令行启动,提示xxx.jar 中没有主清单属性

在对springBoot接口中间件开发完毕后&#xff0c;本地启动没有任何问题&#xff0c;在使用package命令打包也没异常&#xff0c;打完包后使用命令行&#xff1a;java -jar xxx.jar启动发现报异常&#xff1a;xxx.jar 中没有主清单属性&#xff0c;具体解决方法如下&#xff1a;…

TI毫米波雷达开发——High Accuracy Demo 串口数据接收及TLV协议解析 matlab 源码

TI毫米波雷达开发——串口数据接收及TLV协议解析 matlab 源码 前置基础源代码功能说明功能演示视频文件结构01.bin / 02.binParseData.mread_file_and_plot_object_location.mread_serial_port_and_plot_object_location.m函数解析configureSport(comportSnum)readUartCallback…