机器人位姿变换的坐标系相对性:左乘法则与右乘法则解析​

文章目录

设机器人当前位姿(位置和姿态)表示为齐次变换矩阵 Tcurrent\boldsymbol{T}_{current}Tcurrent,该矩阵将局部坐标系(机器人自身坐标系)的点坐标映射到世界坐标系:
Pworld=Tcurrent⋅Plocal\boldsymbol{P}_{world} = \boldsymbol{T}_{current} \cdot \boldsymbol{P}_{local} Pworld=TcurrentPlocal其中,Plocal\boldsymbol{P}_{local}Plocal 是点在局部坐标系中的坐标,Pworld\boldsymbol{P}_{world}Pworld 是其在世界坐标系中的坐标。

1. 全局坐标系下机器人位姿更新的左乘法则​

若变换基于全局坐标系(例如,沿世界坐标系X轴平移3米),则增量变换 ΔT\Delta \boldsymbol{T}ΔT 的定义需满足:ΔT\Delta \boldsymbol{T}ΔT 的旋转轴/平移方向由​​世界坐标系的轴向​​决定,与机器人当前姿态无关

因此,先将局部坐标 Plocal\boldsymbol{P}_{\text{local}}Plocal 通过 Tcurrent\boldsymbol{T}_{current}Tcurrent 映射到世界坐标系,得 Pworld\boldsymbol{P}_{world}Pworld。再在世界坐标系中应用全局变换 ΔT\Delta \boldsymbol{T}ΔT,得到新坐标 ΔT⋅Pworld\Delta \boldsymbol{T} \cdot \boldsymbol{P}_{world}ΔTPworld。即有:
ΔT⋅(Tcurrent⋅Plocal)=(ΔT⋅Tcurrent)⋅Plocal⇒Tnew=ΔT⋅Tcurrent\Delta \boldsymbol{T} \cdot (\boldsymbol{T}_{current} \cdot \boldsymbol{P}_{\text{local}}) = (\Delta \boldsymbol{T} \cdot \boldsymbol{T}_{current}) \cdot \boldsymbol{P}_{\text{local}} \Rightarrow \boldsymbol{T}_{new} = \Delta \boldsymbol{T} \cdot \boldsymbol{T}_{current} ΔT(TcurrentPlocal)=(ΔTTcurrent)PlocalTnew=ΔTTcurrent此即左乘公式​​,表明新位姿是全局变换与当前位姿的左乘组合

2. 局部坐标系下机器人位姿增量更新的右乘法则​

如果机器人需执行一个在当前局部坐标系(例如机器人自身坐标系)中描述的运动变换 ΔT\Delta \boldsymbol{T}ΔT。例如:

  • 沿自身 X 轴移动 3 米:ΔT=[1003010000100001]\Delta \boldsymbol{T} = \begin{bmatrix} 1 & 0 & 0 & 3 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}ΔT=1000010000103001
  • 绕自身 Z 轴旋转 90°:ΔT=[0−100100000100001]\Delta \boldsymbol{T} = \begin{bmatrix} 0 & -1 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}ΔT=0100100000100001

则执行该运动后的机器人新位姿 Tnew\boldsymbol{T}_{\text{new}}Tnew 为当前位姿 Tcurrent\boldsymbol{T}_{\text{current}}Tcurrent 右乘该增量变换:
Tnew=TcurrentΔT\boldsymbol{T}_{\text{new}} = \boldsymbol{T}_{\text{current}} \Delta \boldsymbol{T} Tnew=TcurrentΔT对于在运动前的局部坐标系中定义的任意点 Plocal\boldsymbol{P}_{\text{local}}Plocal,应用变换 Tnew\boldsymbol{T}_{\text{new}}Tnew 将其映射到世界坐标系的结果,等同于先在原局部坐标系中应用增量变换 ΔT\Delta \boldsymbol{T}ΔT 得到 ΔTPlocal\Delta \boldsymbol{T} \boldsymbol{P}_{\text{local}}ΔTPlocal,然后将该结果再通过原当前位姿 Tcurrent\boldsymbol{T}_{\text{current}}Tcurrent 映射到世界坐标系。即:
TnewPlocal=Tcurrent(ΔTPlocal)\boldsymbol{T}_{\text{new}} \boldsymbol{P}_{\text{local}} = \boldsymbol{T}_{\text{current}} (\Delta \boldsymbol{T} \boldsymbol{P}_{\text{local}}) TnewPlocal=Tcurrent(ΔTPlocal)

3. 相对位姿的计算

相对位姿描述了两个坐标系之间的变换关系,包括旋转和平移,是机器人导航、三维重建、多传感器融合等领域的核心问题。

T1\boldsymbol{T}_1T1T2\boldsymbol{T}_2T2 分别表示相机在时刻 t1t_1t1t2t_2t2 位姿变换矩阵。现从两个角度计算 T1\boldsymbol{T}_1T1T2\boldsymbol{T}_2T2 的相对位姿 ΔT\Delta \boldsymbol{T}ΔT

3.1. 基于世界坐标系(全局变换)

相对位姿 ΔTglobal\Delta \boldsymbol{T}_{\text{global}}ΔTglobal 在世界坐标系中定义,其数学表达为:
ΔTglobal=T2−1T1\Delta \boldsymbol{T}_{\text{global}} = \boldsymbol{T}_2^{-1} \boldsymbol{T}_1 ΔTglobal=T21T1其中,ΔTglobal\Delta \boldsymbol{T}_{\text{global}}ΔTglobal 的平移和旋转方向由世界坐标系的轴向决定。
推导如下:
世界坐标系中的点 Pw\boldsymbol{P}_wPwt1t_1t1t2t_2t2 时刻相机坐标系中的位置分别为 p1\boldsymbol{p}_1p1p2\boldsymbol{p}_2p2,根据位姿定义:
Pw=T1p1=T2p2\boldsymbol{P}_w = \boldsymbol{T}_1 \boldsymbol{p}_1 = \boldsymbol{T}_2 \boldsymbol{p}_2 Pw=T1p1=T2p2则有:
p2=T2−1Pw=T2−1T1p1⇒ΔTglobal=T2−1T1\boldsymbol{p}_2 = \boldsymbol{T}_2^{-1} \boldsymbol{P}_w = \boldsymbol{T}_2^{-1} \boldsymbol{T}_1 \boldsymbol{p}_1 \Rightarrow \Delta \boldsymbol{T}_{\text{global}} = \boldsymbol{T}_2^{-1} \boldsymbol{T}_1 p2=T21Pw=T21T1p1ΔTglobal=T21T1T1=[R1t10T1]\boldsymbol{T}_1 = \begin{bmatrix} \boldsymbol{R}_1 & \boldsymbol{t}_1 \\ \boldsymbol{0}^T & 1 \end{bmatrix}T1=[R10Tt11]T2=[R2t20T1]\boldsymbol{T}_2 = \begin{bmatrix} \boldsymbol{R}_2 & \boldsymbol{t}_2 \\ \boldsymbol{0}^T & 1 \end{bmatrix}T2=[R20Tt21],则有:
ΔTglobal=T2−1T1=[R2T−R2Tt20T1][R1t10T1]=[R2TR1R2Tt1−R2Tt20T1]\Delta \boldsymbol{T}_{\text{global}} = \boldsymbol{T}_2^{-1} \boldsymbol{T}_1 = \begin{bmatrix} \boldsymbol{R}_2^T & -\boldsymbol{R}_2^T \boldsymbol{t}_2 \\ \boldsymbol{0}^T & 1 \end{bmatrix} \begin{bmatrix} \boldsymbol{R}_1 & \boldsymbol{t}_1 \\ \boldsymbol{0}^T & 1 \end{bmatrix} = \begin{bmatrix} \boldsymbol{R}_2^T \boldsymbol{R}_1 & \boldsymbol{R}_2^T \boldsymbol{t}_1 -\boldsymbol{R}_2^T \boldsymbol{t}_2 \\ \boldsymbol{0}^T & 1 \end{bmatrix} ΔTglobal=T21T1=[R2T0TR2Tt21][R10Tt11]=[R2TR10TR2Tt1R2Tt21]

3.2. 基于 t1t_1t1 时刻相机的局部坐标系(局部变换)

相对位姿 ΔTlocal\Delta \boldsymbol{T}_{\text{local}}ΔTlocal t1t_1t1 时刻相机自身的坐标系中定义,其数学表达为:
ΔTlocal=T1−1⋅T2\Delta \boldsymbol{T}_{\text{local}} = \boldsymbol{T}_1^{-1} \cdot \boldsymbol{T}_2 ΔTlocal=T11T2其中,ΔTlocal\Delta \boldsymbol{T}_{\text{local}}ΔTlocal 的平移和旋转方向由 t1t_1t1 时刻相机的朝向决定。
上述公式根据局部坐标系下机器人位姿增量更新的右乘法则​易得,且有:
ΔTlocal=T1−1⋅T2=[R1T−R1Tt10T1][R2t20T1]=[R1TR2R1Tt2−R1Tt10T1]\Delta \boldsymbol{T}_{\text{local}} = \boldsymbol{T}_1^{-1} \cdot \boldsymbol{T}_2 = \begin{bmatrix} \boldsymbol{R}_1^T & -\boldsymbol{R}_1^T \boldsymbol{t}_1 \\ \boldsymbol{0}^T & 1 \end{bmatrix} \begin{bmatrix} \boldsymbol{R}_2 & \boldsymbol{t}_2 \\ \boldsymbol{0}^T & 1 \end{bmatrix} = \begin{bmatrix} \boldsymbol{R}_1^T \boldsymbol{R}_2 & \boldsymbol{R}_1^T \boldsymbol{t}_2 - \boldsymbol{R}_1^T \boldsymbol{t}_1 \\ \boldsymbol{0}^T & 1 \end{bmatrix} ΔTlocal=T11T2=[R1T0TR1Tt11][R20Tt21]=[R1TR20TR1Tt2R1Tt11]

3.3. 两者区别

角度数学公式坐标系依赖乘法顺序
世界坐标系(全局)ΔTglobal=T2−1T1\Delta \boldsymbol{T}_{\text{global}} = \boldsymbol{T}_2^{-1} \boldsymbol{T}_1ΔTglobal=T21T1世界坐标系轴向固定左乘
t1t_1t1 相机坐标系(局部)ΔTlocal=T1−1T2\Delta \boldsymbol{T}_{\text{local}} = \boldsymbol{T}_1^{-1} \boldsymbol{T}_2ΔTlocal=T11T2依赖 t1t_1t1 时刻相机自身朝向右乘

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

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

相关文章

代码随想录算法训练营65期第20天

代码随想录算法训练营65期第20天 本文中使用到一些代码随想录里面的图片或者链接,在这里致敬程序员Carl 二叉搜索树的最近公共祖先 相对于 二叉树的最近公共祖先 本题就简单一些了,因为 可以利用二叉搜索树的特性。 题目链接:代码随想录&…

LLaMA.cpp HTTP 服务参数: --pooling 嵌入模型 池化类型详解

LLaMA.cpp HTTP 服务参数: --pooling 嵌入模型 池化类型详解 --pooling {none,mean,cls,last,rank} 在 llama.cpp 的 embedding server 中,--pooling {none,mean,cls,last,rank} 参数用于指定 如何将输入文本的 token 级嵌入向量聚合为句向量。以下是各选项的详细解…

「日拱一码」027 深度学习库——PyTorch Geometric(PyG)

目录 数据处理与转换 数据表示 数据加载 数据转换 特征归一化 添加自环 随机扰动 组合转换 图神经网络层 图卷积层(GCNConv) 图注意力层(GATConv) 池化 全局池化(Global Pooling) 全局平均池…

IoC容器深度解析:架构、原理与实现

🌟 IoC容器深度解析:架构、原理与实现 引用: .NET IoC容器原理与实现等巫山的雲彩都消散撒下的碧色如何看淡 🔍 一、引言:从服务定位器到IoC的演进 #mermaid-svg-BmRIuI4iMgiUqFVN {font-family:"trebuchet ms&…

从零开始学前端html篇3

表单基本结构表单是 HTML 中用于创建用户输入区域的标签。它允许用户输入数据&#xff08;例如文本、选择选项、文件等&#xff09;&#xff0c;并将这些数据提交到服务器进行处理。<form>&#xff0c;表单标签&#xff0c;用于创建表单常用属性&#xff1a;action&#…

Linux系统调优和工具

Linux系统调优和问题定位需要掌握一系列强大的工具&#xff0c;涵盖系统监控、性能分析、故障排查等多个方面。以下是一些核心工具和它们的典型应用场景&#xff0c;分类整理如下&#xff1a; 一、系统资源监控&#xff08;实时概览&#xff09;top / htop 功能&#xff1a; 实…

如何快速有效地在WordPress中添加Instagram动态

在当今社交媒体的时代&#xff0c;通过展示Instagram的最新动态&#xff0c;可以有效吸引读者的目光&#xff0c;同时丰富网站内容。很多人想知道&#xff0c;如何把自己精心运营的Instagram内容无缝嵌入WordPress网站呢&#xff1f;别担心&#xff0c;操作并不复杂&#xff0c…

spring容器加载工具类

在Spring框架中&#xff0c;工具类通常不需要被Spring容器管理&#xff0c;但如果确实需要获取Spring容器中的Bean实例&#xff0c;可以通过静态方法设置和获取ApplicationContext。下面是一个典型的Spring容器加载工具类的实现&#xff1a;这个工具类通过实现ApplicationConte…

定时器更新中断与串口中断

问题&#xff1a;我想把打印姿态传感器的角度&#xff0c;但是重定向的打印函数突然打印不出来。尝试&#xff1a;我怀疑是优先级的问题&#xff0c;故调整了串口&#xff0c;定时器&#xff0c;dma的优先级可是发现调了还是没有用&#xff0c;最终发现&#xff0c;我把定时器中…

用Python向PDF添加文本:精确插入文本到PDF文档

PDF 文档的版式特性使其适用于输出不可变格式的报告与合同。但若要在此类文档中插入或修改文本&#xff0c;常规方式难以实现。借助Python&#xff0c;我们可以高效地向 PDF 添加文本&#xff0c;实现从文档生成到内容管理的自动化流程。 本文将从以下方面介绍Python实现PDF中…

Quick API:赋能能源行业,化解数据痛点

随着全球能源结构的转型和数字化的深入推进&#xff0c;能源行业正面临前所未有的机遇与挑战。海量的实时数据、复杂的业务系统、以及对数据安全和高效利用的迫切需求&#xff0c;都成为了能源企业在数字化转型道路上的核心痛点。本文将深入探讨麦聪Quick API如何凭借其独特优势…

Google Chrome V8< 13.6.86 类型混淆漏洞

【高危】Google Chrome V8< 13.6.86 类型混淆漏洞 漏洞描述 Google Chrome 是美国谷歌&#xff08;Google&#xff09;公司的一款Web浏览器&#xff0c;V8 是 Google 开发的高性能开源 JavaScript 和 WebAssembly 引擎&#xff0c;广泛应用于 Chrome 浏览器和 Node.js 等环…

力扣经典算法篇-23-环形链表(哈希映射法,快慢指针法)

1、题干 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&…

HarmonyOS DevEco Studio 小技巧 42 - 鸿蒙单向数据流

在鸿蒙应用开发中&#xff0c;状态管理是构建响应式界面的核心支柱&#xff0c;而 单向数据流&#xff08;Unidirectional Data Flow, UDF&#xff09;作为鸿蒙架构的重要设计原则&#xff0c;贯穿于组件通信、状态更新和界面渲染的全流程。本文将结合鸿蒙 ArkUI 框架特性&…

【LeetCode 3136. 有效单词】解析

目录LeetCode中国站原文原始题目题目描述示例 1&#xff1a;示例 2&#xff1a;示例 3&#xff1a;提示&#xff1a;讲解化繁为简&#xff1a;如何优雅地“盘”逻辑判断题第一部分&#xff1a;算法思想 —— “清单核对”与“一票否决”第二部分&#xff1a;代码实现 —— 清晰…

前端面试专栏-算法篇:24. 算法时间与空间复杂度分析

&#x1f525; 欢迎来到前端面试通关指南专栏&#xff01;从js精讲到框架到实战&#xff0c;渐进系统化学习&#xff0c;坚持解锁新技能&#xff0c;祝你轻松拿下心仪offer。 前端面试通关指南专栏主页 前端面试专栏规划详情 算法时间与空间复杂度分析&#xff1a;从理论到实践…

bash中||与的区别

在 Bash 中&#xff0c;|| 和 && 是两种常用的逻辑操作符&#xff0c;用于控制命令的执行流程。它们的核心区别如下&#xff1a;1. ||&#xff08;逻辑 OR&#xff09; 作用&#xff1a;如果前一个命令失败&#xff08;返回非零退出码&#xff09;&#xff0c;则执行后…

OpenCV实现感知哈希(Perceptual Hash)算法的类cv::img_hash::PHash

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 PHash是OpenCV中实现感知哈希&#xff08;Perceptual Hash&#xff09;算法的类。该算法用于快速比较图像的视觉相似性。它将图像压缩为一个简短的…

数据库迁移人大金仓数据库

迁移前的准备工作 安装官方的kdts和KStudio工具 方案说明 一、数据库迁移&#xff1a;可以使用kdts进行数据库的按照先迁移表结构、后数据的顺序迁移&#xff08;kdts的使用可以参考官方文档&#xff09; 其他参考文档 人大金仓官网&#xff1a;https://download.kingbase…

uniapp 微信小程序Vue3项目使用内置组件movable-area封装悬浮可拖拽按钮(拖拽结束时自动吸附到最近的屏幕边缘)

一、最终效果 二、具体详情请看movable-area与movable-view官方文档说明 三、参数配置 1、代码示例 <TFab title"新建订单" click"addOrder" /> // title:表按钮文案 // addOrder:点击按钮事件四、组件源码 <template><movable-area cl…