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

旋转矩阵

基本概念

三个主轴,可以看作是三个向量,为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…

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 深度故障安全状态…

帮写祝福、年味卡片,属于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 添

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

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

Netty中解决粘包/半包

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

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

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

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

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

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…

day06.C++排序(整理)

一.直接插入排序 void Insertsort(int *a,int n){int i,j;for( i1;i<n;i){if(a[i]<a[i-1]){int tempa[i];//哨兵for( ji-1;temp<a[j];j--){a[j1]a[j];//记录后移}a[j1]temp;//插入到正确位置}} }二.希尔排序 void Shellsort(int *a,int n){for(int dltan/2;dlta>…

(2024 了,这文也太水了)审查 GAN 的 FID 和 SID 指标

Reviewing FID and SID Metrics on Generative Adversarial Networks 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 2. 相关工作 3. 方法 4. 实验 0. 摘要 生成对抗网络&…

如何利用IP定位技术锁定网络攻击者

在当今高度互联的数字世界中&#xff0c;网络安全威胁日益猖獗。为了维护网络空间的安全与稳定&#xff0c;追踪并锁定网络攻击者成为了关键一环。而IP定位技术&#xff0c;作为一种重要的追踪手段&#xff0c;正发挥着越来越重要的作用。 IP定位技术&#xff0c;简而言之&…

Django模板(二)

标签if 标签在渲染过程中提供使用逻辑的方法,比如:if和for 标签被 {% 和 %} 包围,如下所示: 由于在模板中,没有办法通过代码缩进判断代码块,所以控制标签都需要有结束的标签 if判断标签{% if %} {% endif %} : # athlete_list 不为空 {% if athlete_list %}# 输出 ath…

vue实现购物车案例

话不多说&#xff0c;先上效果图。 安装elementui组件库&#xff0c;可直接食用。 <template><div><!-- 购物车部分 --><el-container><el-header><h1>购物车案例一条龙</h1></el-header><el-main><!-- 折叠面板…