debug过程中,矩阵左乘右乘相关概念梳理

news2024/11/28 16:29:04

变换点或者变换向量

左乘

矩阵左乘通常是指对”目标点“进行左乘,即:
A ′ = R ∗ A A'=R*A A=RA
其中,A为原始3维点,表示一个3*1的列向量,R为33的旋转矩阵,A‘为变换后的点
B ′ = T ∗ B B'=T*B B=TB
其中,B为原始点3维点,表示一个4*1的齐次化列向量,T为4
4的旋转矩阵R|t,B‘为变换后的点
以此类推,
如果是点云 c l o u d s r c = { X s r c ∣ X s r c = A 1 , A 2 … … A n } cloud_{src}=\{X_{src}|X_{src}=A_1,A_2……A_n\} cloudsrc={XsrcXsrc=A1,A2……An},A表示一个3*1的列向量
此时 X s r c X_{src} Xsrc为一个3*n的矩阵,那么变换可以表示为
X A ′ = R ∗ X A X_A'=R*X_A XA=RXA
X B ′ = T ∗ X B X_B'=T*X_B XB=TXB

矩阵与旋转角

上面为3维点的变换,为了方便画图解释下面以2维点进行描述:
在这里插入图片描述
P A = R ∗ P B P_A = R*P_B PA=RPB
将矩阵乘法展开可以写为:
[ P x A P y A P z A ] = [ c o s ( α ) − s i n ( α ) 0 s i n ( α ) c o s ( α ) 0 0 0 1 ] ∗ [ P x B P y B P z B ] \begin{bmatrix} P_{xA}\\P_{yA}\\P_{zA} \end{bmatrix} = \begin{bmatrix} cos(\alpha) & -sin(\alpha) & 0 \\ sin(\alpha) & cos(\alpha) & 0 \\ 0 & 0 & 1 \end{bmatrix}*\begin{bmatrix} P_{xB}\\P_{yB}\\P_{zB} \end{bmatrix} PxAPyAPzA = cos(α)sin(α)0sin(α)cos(α)0001 PxBPyBPzB

上面图片表示的是一个矩阵的左乘,其中旋转矩阵R表达的是B点绕z轴逆时针旋转 α \alpha α度,得到A点。
如果是旋转一个坐标系的话,那么上面的矩阵表示的就是坐标B系绕Z轴顺时针旋转 α \alpha α度,得到A坐标系。

右乘

矩阵左乘通常是指对”目标向量“进行右乘,即:
A ′ = A ∗ R A'=A*R A=AR
B ′ = B ∗ T B'=B*T B=BT

#验证lidar系下的icp匹配结果与mct系下的icp匹配结果相同
# mct系下的icp匹配结果 表达向量
delta_mat_mct = np.array([[0.999725 , -0.023439 , -0.00130324 , -0.127499] , 
[0.0234409 , 0.999724 , 0.00193209 , 0.0205244] , 
[0.00125752 , -0.0019622 , 0.999999 , -0.00368067] , 
[0.0 , 0.0 , 0.0 , 1]])
# lidar系下的icp匹配结果 表达向量
delta_mat_lidar = np.array([[0.999726 , -0.0234405 , 0.00044465 , -0.0937921] , 
[0.0234395 , 0.999723 , 0.00228773 , 0.140559] , 
[-0.000498197 , -0.00227667 , 0.999998 , -0.00616882] , 
[0 , 0 , 0 , 1]])

#之所以不用mct到lidar的完整外参,只用旋转外参Ra,是因为,icp匹配结果是trans可以理解为旋转R+平移向量t。坐标系变化(lidar、mct)可以理解为旋转Ra+平移向量ta,其中两个坐标系下,旋转增量不随坐标系变换而变换icp_mct_R = icp_lidar_R,平移向量t因为坐标系(lidar、mct)不同平移向量t也会不同。
# 又因为平移向量t不受坐标系变化中的ta影响,只受旋转Ra的影响,因此mct2lidar的ta的3个元素置为0
# mct2lidar = np.array([[0.70710678, 0.70710678, 0.0, -1.477],
#           [-0.70710678, 0.70710678, 0.0, -0.77],
#           [0.0, 0.0, 1.0, -0.66],
#           [0.0, 0.0, 0.0, 1.0]])
mct2lidar = np.array([[0.70710678, 0.70710678, 0.0, 0.0],
          [-0.70710678, 0.70710678, 0.0, 0.0],
          [0.0, 0.0, 1.0, 0.0],
          [0.0, 0.0, 0.0, 1.0]])

lidar2mct = np.linalg.inv(mct2lidar)
print("mct2lidar : ")
print(mct2lidar)
print("lidar2mct : ")
print(lidar2mct)
print("delta_mat_mct:")
print(delta_mat_mct)
#icp匹配结果是trans可以理解为旋转R+平移向量t,其中icp_mct_R = icp_lidar_R,t是不相等的。t表示的是两个点云变换的结果,是一个向量,并不是一个点,因此要用右乘。
#$B'=BT$ delta_mat_lidar表示位移向量,lidar2mct表示变换矩阵
print(np.dot( delta_mat_lidar,lidar2mct))
print(delta_mat_lidar)
#$B'=BT$
print(np.dot( delta_mat_mct,mct2lidar))

变换矩阵左右乘/旋转矩阵左右乘

与变换某个目标不同,当一个坐标系发生连续变化时,如何描述这个坐标系的最终变换。
例如,先绕x轴顺时针转180度,然后绕z轴顺时针转45,最后绕y轴转30°
这个时候就会出现两种情况:
1.原始坐标系称为a0,先绕x轴(a0的x轴)顺时针转180度得到坐标系a1,然后绕z轴(这个z轴是a0的z轴)顺时针转45得到坐标系a2,最后绕y轴(这个y轴是a0的y轴)转30°
2.原始坐标系称为a0,先绕x轴(a0的x轴)顺时针转180度得到坐标系a1,然后绕z轴(这个z轴是a1的z轴)顺时针转45得到坐标系a2,最后绕y轴(这个y轴是a2的y轴)转30°
也就是,绕固定坐标系旋转还是绕自身坐标系旋转
此时有个口诀
左乘旋转矩阵绕固定坐标系旋转,右乘旋转矩阵绕自身坐标系旋转

左乘

右乘

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

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

相关文章

Oracle 游标子程序触发器

文章目录 一、游标1.隐式游标2.显示游标3.REF游标 二、子程序1.存储过程1.1 语法结构1.2 案例讲解 2.存储函数2.1 语法结构2.2 案例讲解 3.程序包 三、触发器1.触发器的基本讲解2.触发器的类型2.1 语句级触发器2.2 行级触发器2.3 限制行级触发器 一、游标 游标的作用&#xff…

基于微信小程序的语言课学习系统设计与实现(源码+lw+部署文档+讲解等)

前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻…

windows nginx 本地部署访问静态资源zip文件 配置以及bug解决

步骤 配置nginx服务器以提供静态资源zip文件的访问可以按照以下步骤进行: 安装并配置Nginx:首先确保已正确安装和配置了Nginx服务器。你可以从Nginx官方网站下载和安装Nginx,然后根据操作系统的要求进行配置。 准备静态资源zip文件&#xf…

数学建模__线性规划Python实现

我使用到的是python库中scipy。 线性规划 #目标函数的系数 # min z 2x13x2-5x3 c np.array([-2,-3,5])#不等式限制条件的系数&#xff0c;转化为小于等于 # 2x1-5x2x3 < 10, x13x2x3<12 Aup np.array([[-2,5,-1],[-1,-3,-1]]) #必须是二维 #右侧系数 bup np.array(…

物联网网络安全:保护物理世界和数字世界的融合

我们正在见证数字技术如何成为我们日常生活和经济系统的一部分&#xff0c;从而提高福利并增强竞争力。尽管如此&#xff0c;新的尖端互联技术的迅速出现和采用也对政府、企业和整个社会构成了重大威胁。 长期以来&#xff0c;网络安全威胁一直是电影行业的一个现成的灵感来源&…

数据不小心泄露会有哪些风险?

数据不小心泄露会带来一系列严重的风险&#xff0c;可能导致客户隐私泄露、法律责任、财务损失等严重后果。安策对于这一现象进行解析&#xff0c;以下是一些可能会发生的风险&#xff1a; 业务风险&#xff1a;当敏感或个人身份信息(PII)不小心泄露时&#xff0c;可能会导致客…

java的JSR、JCP访问地址

JSRs&#xff08;Java Specification Requests&#xff09; &#xff1a;java规范请求 https://jcp.org/en/jsr/all JCP&#xff08;Java Community Process&#xff09;&#xff1a;java社区流程&#xff0c;即按照什么流程来开发java标准技术规范。 https://jcp.org/en/hom…

Minio入门系列【5】JAVA集成Minio之存储桶操作API使用详解

1 前言 1.1 官方文档和SDK 官方文档&#xff1a;https://min.io/docs/minio/kubernetes/upstream/index.html?refdocs-redirect SDK&#xff1a;https://github.com/minio/minio-java Minio 提供了多种语言的SDK&#xff0c;比如java、go、python等。JAVA开发平台可以选择JS…

【ubuntu】修改系统及硬件时间

Linux系统时间分为两种&#xff1a;系统时间&#xff08;S有stem Clock&#xff09;和硬件&#xff08;Realtime Clock&#xff0c;简称RTC&#xff09;时间。 上网找了好多教程&#xff0c;每次修改完后&#xff0c;不到几秒钟&#xff0c;时间又恢复成之前的时间了。 -------…

R300升级款无人车开发平台,助力开发者快速上手、高效验证算法

R300升级款是一款科研无人车开发平台&#xff0c;旨在为无人车开发者提供快速上手开发和高效验证算法的解决方案。该平台集成了多款无人车底盘&#xff0c;包括履带式、四轮差速、阿克曼、麦克纳姆轮底盘等&#xff0c;以满足不同形式和配置的需求&#xff0c;并搭载了RTK定位系…

1600*G. Special Permutation(构造找规律)

解析&#xff1a; 要求每两个数之间的差为2或3或4&#xff0c;首先想到分奇偶 但是奇偶两端的差太大&#xff0c;所以可以将一个反转&#xff0c;即将两端小的拼在中间。 但是 1、2之间为1&#xff0c;所以可以反转一下2&#xff0c;4 n小于3&#xff0c;不符题意 输出-1 即 7 …

计算机竞赛 大数据疫情分析及可视化系统

文章目录 0 前言2 开发简介3 数据集4 实现技术4.1 系统架构4.2 开发环境4.3 疫情地图4.3.1 填充图(Choropleth maps)4.3.2 气泡图 4.4 全国疫情实时追踪4.6 其他页面 5 关键代码最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 大数据疫…

基于uniapp开发 软盒APP系统源码 软件库系统源码 全开源

软盒APP前端-基于uniapp&#xff0c;一个开源的软件库系统 前端开源地址&#xff1a;软盒APP前端-基于uniapp: 软盒APP前端-基于uniapp (gitee.com) 更新说明 更新日期&#xff1a;2023.07.24 v1.0.8.23724 1.修复部分接口 2.删除根据标签获取软件列表接口&#xff0c;整合…

2023第十二届中国智能产业高峰论坛

大会主题报告 大模型时代的元宇宙 人工智能在智慧农业中的应用 算网系统 基于AI的电磁波信号语义分析与目标识别 知识增强大语言模型 从大模型到Al for Science 金融大模型重塑金融产业全链路 高端数控机床的创新发展 大数据智能专题论坛 Chace-KO:一片连通、综合、容纳、制衡…

配置OSPFv3基本功能 华为笔记

1.1 实验介绍 1.1.1 关于本实验 OSPF协议是为IP协议提供路由功能的路由协议。OSPFv2&#xff08;OSPF版本2&#xff09;是支持IPv4的路由协议&#xff0c;为了让OSPF协议支持IPv6&#xff0c;技术人员开发了OSPFv3&#xff08;OSPF版本3&#xff09;。 无论是OSPFv2还是OSPFv…

[EI复现】基于主从博弈的新型城镇配电系统产消者竞价策略(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

说说Object类下面有几种方法呢?

今天说一道基础题型&#xff0c;不过很多人会忽略或者至少说不完整&#xff0c;但是面试时被问到的几率还是很大的。 面试题 Object有几种方法呢&#xff1f; Java语言是一种单继承结构语言&#xff0c;Java中所有的类都有一个共同的祖先。这个祖先就是Object类。 如果一个类没…

Docker Compose部署Mysql8

Docker Compose部署Mysql8 介绍 MySQL是一个广泛使用的开源关系型数据库管理系统&#xff0c;它被用于许多Web应用程序的数据存储和管理。MySQL提供了高性能、可靠性和灵活性&#xff0c;让开发者能够轻松处理各种规模的数据处理需求。 下面是一些关于MySQL的重要特点和功能…

CATTI考试,拿证必看篇:CATTI备考,你不可不知的东西都在这里!

打工人&#xff0c;打工魂&#xff0c;打工都是人上人。 在人才拥挤的就业市场里&#xff0c;我们如何能够脱颖而出&#xff0c;赢得一份好工作呢&#xff1f;于是很多人把目光投向了CATTI。 CATTI是一项面向全社会的职业资格考试&#xff0c;全称为全国翻译专业资格&#xff0…

ubuntu搭建sftp服务

安装OpenSSH服务器 Ubuntu通常已经预装了OpenSSH客户端&#xff0c;但如果您还没有OpenSSH服务器&#xff0c;请在终端中执行以下命令来安装&#xff1a; sudo apt update sudo apt install openssh-server 创建SFTP用户和组 创建一个新的用户组&#xff08;例如 sftp_users&a…