坐标系下的运动旋量转换

坐标系下的运动旋量转换


文章目录

  • 坐标系下的运动旋量转换
  • 前言
  • 一、运动旋量
    • 物体运动旋量
    • 空间运动旋量
  • 二、伴随变换矩阵
  • 三、坐标系下运动旋量的转换
  • 四、力旋量
  • 五、总结
  • 参考资料


前言

对于刚体而言,其角速度可以写为 ω ^ θ ˙ \hat {\omega} \dot \theta ω^θ˙,其中, ω ^ \hat\omega ω^为单位转轴, θ ˙ \dot \theta θ˙为绕着转轴转动的角速度大小。运动旋量则用来描述物体角速度与线速度的组合。由于在机器人学中,运动旋量可能需要描述在不同坐标系之下,本文参考凯文·M.林奇的《现代机器人学》,对运动旋量概念坐标系下的运动旋量转换进行梳理与总结,便于自己后续回忆。


一、运动旋量

首先,定义有单位螺旋轴 S = ( ω , v x , v y , v z ) ( ω = 1 ) S=(\omega,v_x,v_y,v_z)(\omega=1) S=(ω,vx,vy,vz)ω=1,利用旋转速度 θ ˙ \dot\theta θ˙与之相乘,由此可得运动旋量 V = S θ ˙ V=S\dot\theta V=Sθ˙。这里注意:通过绕螺旋轴 S S S转动 θ \theta θ角的位移与以速度 θ ˙ = θ \dot\theta=\theta θ˙=θ绕螺旋轴 S S S转动单位时间完全相等,因此, V = S θ ˙ V=S\dot\theta V=Sθ˙可同样看作为指数坐标(刚体转动的指数坐标,可以等效为单位转轴 ω ^ ( ω ^ ∈ R 3 , ∣ ∣ ω ^ ∣ ∣ = 1 ) \hat\omega(\hat\omega\in R^3,||\hat\omega||=1) ω^(ω^R3,∣∣ω^∣∣=1))与绕该轴线的转角 θ ∈ R \theta\in R θR
在这里插入图片描述

在对运动旋量有了大致了解以后,正式进入正题,即何为物体运动旋量、何为空间运动旋量。

物体运动旋量

首先,用 { s } \{s\} {s} { b } \{b\} {b}分别描述固定(空间)坐标系和移动(物体)坐标系。则有
T s b ( t ) = [ R ( t ) p ( t ) 0 1 ] T_{sb}(t)=\begin{bmatrix} R(t) & p(t) \\ \pmb0 & 1 \end{bmatrix} Tsb(t)=[R(t)0p(t)1]
其中, T s b T_{sb} Tsb表示从空间坐标系到物体坐标系的转换集合矩阵,后续可用 T T T代替。令 T − 1 T ˙ T^{-1}\dot T T1T˙,则有
T − 1 T ˙ = [ R T − R T p 0 1 ] [ R ˙ p ˙ 0 0 ] = [ R T R ˙ R T p ˙ 0 1 ] T^{-1}\dot T=\begin{bmatrix} R^T & -R^Tp \\ \pmb0 & 1 \end{bmatrix}\begin{bmatrix} \dot R & \dot p \\ \pmb0 & 0 \end{bmatrix}=\begin{bmatrix} R^T\dot R & R^T\dot p \\ \pmb0 & 1 \end{bmatrix} T1T˙=[RT0RTp1][R˙0p˙0]=[RTR˙0RTp˙1]
其中, R T R ˙ = R − 1 R ˙ = [ ω b ] R^T\dot R=R^{-1}\dot R=[\omega_b] RTR˙=R1R˙=[ωb],这里的 [ ω b ] [\omega_b] [ωb]即为物体坐标系 { b } \{b\} {b}下的刚体角速度的反对称矩阵, [ ∗ ] [*] []符号代表 ∗ * 的反对称矩阵。具体证明过程可参考书籍,这里不再展开。同理, p ˙ \dot p p˙代表坐标系 { s } \{s\} {s}中描述的 { b } \{b\} {b}的原点的线速度,因此, R T p ˙ = R − 1 p ˙ = v b R^T\dot p=R^{-1}\dot p=v_b RTp˙=R1p˙=vb则为在物体坐标系 { b } \{b\} {b}中描述 { s } \{s\} {s}的原点的线速度。可进一步阐述为: T − 1 T ˙ T^{-1}\dot T T1T˙表示动坐标系相对于当前与其瞬时重合的静坐标系 { b } \{b\} {b}的线速度与角速度。
构造六维向量 V b = [ ω b v b ] V_b=\begin{bmatrix} \omega_b \\ v_b \end{bmatrix} Vb=[ωbvb],定义其为物体坐标系中的速度,简称为物体运动旋量。写为矩阵形式为
T − 1 T ˙ = [ V b ] = [ [ ω b ] v b 0 1 ] ∈ s e ( 3 ) T^{-1}\dot T=[V_b]=\begin{bmatrix} [\omega_b] & v_b \\ \pmb0 & 1 \end{bmatrix} \in se(3) T1T˙=[Vb]=[[ωb]0vb1]se(3)
这里可以注意,六维向量 V b V_b Vb的反对称矩阵的撰写形式,即原部矢量 w b w_b wb取反对称形式,偶部矢量不改变形式

空间运动旋量

同理,可以推导 T ˙ T − 1 \dot TT^{-1} T˙T1
V s = [ ω s v s ] ∈ R 6 , T ˙ T − 1 = [ V s ] = [ [ w s ] v s 0 1 ] ∈ s e ( 3 ) V_s=\begin{bmatrix} \omega_s \\ v_s \end{bmatrix} \in R^6, \dot TT^{-1}=[V_s]=\begin{bmatrix} [w_s] & v_s \\ \pmb0 & 1 \end{bmatrix} \in se(3) Vs=[ωsvs]R6,T˙T1=[Vs]=[[ws]0vs1]se(3)
此时, V s V_s Vs描述空间固定坐标系中的速度,因此被称为空间运动旋量。

二、伴随变换矩阵

在第一节中,描绘了分别在两个坐标系下的运动旋量,即 V b V_b Vb V s V_s Vs,那么,如果我们已知这两个坐标系的转换矩阵 T s b = ( R s b , p s b ) ∈ S E ( 3 ) T_{sb}=(R_{sb},p_{sb})\in SE(3) Tsb=(Rsb,psb)SE(3),我们是否可以对这两个运动旋量建立联系呢?答案就是伴随变换矩阵。即有
V s = [ ω s v s ] = [ A d T s b ] V b = [ R s b 0 [ p s b ] R s b R s b ] [ ω b v b ] V_s=\begin{bmatrix} \omega_s \\ v_s \end{bmatrix}=[Ad_{T_{sb}}]V_b=\begin{bmatrix} R_{sb} & \pmb 0\\ [p_{sb}]R_{sb} & R_{sb} \end{bmatrix} \begin{bmatrix} \omega_b \\ v_b \end{bmatrix} Vs=[ωsvs]=[AdTsb]Vb=[Rsb[psb]Rsb0Rsb][ωbvb]
其中, [ A d T s b ] = [ R s b 0 [ p s b ] R s b R s b ] ∈ R 6 × 6 [Ad_{T_{sb}}]=\begin{bmatrix} R_{sb} & \pmb 0\\ [p_{sb}]R_{sb} & R_{sb} \end{bmatrix} \in R^{6\times6} [AdTsb]=[Rsb[psb]Rsb0Rsb]R6×6即为该伴随变换矩阵。
将其化为矩阵形式,则有
[ V s ] = T s b [ V b ] T − 1 [V_s]=T_{sb}[V_b]T^{-1} [Vs]=Tsb[Vb]T1

三、坐标系下运动旋量的转换

结合第二、三节内容,即可总结空间、物体坐标系下运动旋量的转换关系: T s b ( t ) = T ( t ) = [ R ( t ) p ( t ) 0 1 ] ∈ S E ( 3 ) T_{sb}(t)=T(t)=\begin{bmatrix} R(t) & p(t)\\ \pmb0 & 1 \end{bmatrix}\in SE(3) Tsb(t)=T(t)=[R(t)0p(t)1]SE(3)仍表示固定坐标系 { s } \{s\} {s}到物体坐标系 { b } \{b\} {b}的位姿转换矩阵(这里的 S E ( 3 ) SE(3) SE(3)即为一种特殊李群)。则有
物体运动旋量(body twist)
T − 1 T ˙ = [ V b ] = [ [ ω b ] v b 0 1 ] ∈ s e ( 3 ) T^{-1}\dot T=[V_b]=\begin{bmatrix} [\omega_b] & v_b \\ \pmb0 & 1 \end{bmatrix} \in se(3) T1T˙=[Vb]=[[ωb]0vb1]se(3)
空间运动旋量(spatial twist)
T ˙ T − 1 = [ V s ] = [ [ ω s ] v s 0 1 ] ∈ s e ( 3 ) \dot TT^{-1}=[V_s]=\begin{bmatrix} [\omega_s] & v_s \\ \pmb0 & 1 \end{bmatrix} \in se(3) T˙T1=[Vs]=[[ωs]0vs1]se(3)
运动旋量 V b V_b Vb V s V_s Vs存在关系为
V s = [ ω s v s ] = [ R s b 0 [ p s b ] R s b R s b ] [ ω b v b ] = [ A d T s b ] V b V_s=\begin{bmatrix} \omega_s \\ v_s \end{bmatrix}=\begin{bmatrix} R_{sb} & \pmb 0\\ [p_{sb}]R_{sb} & R_{sb} \end{bmatrix} \begin{bmatrix} \omega_b \\ v_b \end{bmatrix}=[Ad_{T_{sb}}]V_b Vs=[ωsvs]=[Rsb[psb]Rsb0Rsb][ωbvb]=[AdTsb]Vb
V b = [ ω b v b ] = [ R s b T 0 − R s b T [ p s b ] R s b T ] [ ω s v s ] = [ A d T s b ] V s V_b=\begin{bmatrix} \omega_b \\ v_b \end{bmatrix}=\begin{bmatrix} R_{sb}^T & \pmb 0\\ -R_{sb}^T[p_{sb}] & R_{sb}^T \end{bmatrix} \begin{bmatrix} \omega_s \\ v_s \end{bmatrix}=[Ad_{T_{sb}}]V_s Vb=[ωbvb]=[RsbTRsbT[psb]0RsbT][ωsvs]=[AdTsb]Vs
这里友情提示下,在《现代机器人学》第三次印刷本中,对于 V s V_s Vs V b V_b Vb的转换似乎存在小错误,不过问题不大,一般都能看出来,自行矫正即可。

四、力旋量

与运动旋量对应的,也存在着力旋量的定义。对作用于空间物体上的力矩 m a m_a ma f a f_a fa,同样可将其合成为六维的空间力的形式,其称为力旋量(wrench),在坐标系 { a } \{a\} {a}中可描述为
F a = [ m a f a ] ∈ R 6 F_a=\begin{bmatrix} m_a \\ f_a \end{bmatrix} \in R^6 Fa=[mafa]R6
如若作用于刚体的力旋量不唯一,即将其通过力旋量的六维形式直接相加即可。无力元素的力旋量则被称为纯力偶(pure moment)
关于力旋量的转换关系,基于系统功率一定原则,最终可推导出:
F b = [ A d T a b T ] F a F_b=[Ad_{T_{ab}}^T]F_a Fb=[AdTabT]Fa
其中, F a F_a Fa F b F_b Fb分别为坐标系 { a } \{a\} {a}与坐标系 { b } \{b\} {b}中的力旋量, T a b T_{ab} Tab为坐标系 { a } \{a\} {a}到坐标系 { b } \{b\} {b}的转换矩阵。

五、总结

在学习运动旋量与李群李代数时,一开始感觉确实有些晦涩且难以理解,但是在反复学习时,又感觉其形式简洁且非常实用,因此在这里学习记录,供后续参考。

参考资料

【1】https://www.bilibili.com/video/BV1KV411Z7sC/?p=17&vd_source=029a7426f7a6cecb96f1969e1ce8aff7。
【2】现代机器人学:机构、规划与控制。

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

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

相关文章

Pytorch torch.exp()的使用举例

代码实验展示: Microsoft Windows [版本 10.0.18363.1256] (c) 2019 Microsoft Corporation。保留所有权利。C:\Users\chenxuqi>conda activate ssd4pytorch1_2_0(ssd4pytorch1_2_0) C:\Users\chenxuqi>python Python 3.7.7 (default, May 6 2020, 11:45:54) [MSC v.191…

STL总结

STL vector 头文件<vector> 初始化,定义,定义长度&#xff0c;定义长度并且赋值&#xff0c;从数组中获取数据返回元素个数size()判断是否为空empty()返回第一个元素front()返回最后一个数back()删除最后一个数pop_back()插入push_back(x)清空clear()begin()end()使用s…

SQL SERVER 2008安装教程

SQL SERVER 2008安装教程 本篇文章介绍了安装SQL Server 2008企业版的软硬件配置要求&#xff0c;安装过程的详细步骤&#xff0c;以及需要注意的事项。 安装步骤 (1). 在安装文件setup.exe上&#xff0c;单击鼠标右键选择“以管理员的身份运行”&#xff0c;如下图所示&#…

皮肤性病科专家谭巍主任提出HPV转阴后饮食七点建议

HPV转阴是每一位感染者都期盼的&#xff0c;因为转阴所以健康&#xff0c;只有转为阴性才意味着不具备传染性&#xff0c;从此也不必再害怕将病毒传染给家人的风险&#xff0c;也不必再担忧持续感染而引发的健康风险。总之&#xff0c;HPV转阴是预示感染者恢复健康与否的主要标…

《洛谷深入浅出进阶篇》P1995 程序自动分析——并查集,离散化

上链接&#xff1a;P1955 [NOI2015] 程序自动分析 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P1955 上题干&#xff1a; 首先给你一个整数t&#xff0c;代表t次操作。 每一次操作包含以下内容&#xff1a; 1.给你一个整数n&#xff0c;让…

【机器学习13】生成对抗网络

1 GANs的基本思想和训练过程 生成器用于合成“假”样本&#xff0c; 判别器用于判断输入的样本是真实的还是合成的。 生成器从先验分布中采得随机信号&#xff0c;经过神经网络的变换&#xff0c; 得到模拟样本&#xff1b; 判别器既接收来自生成器的模拟样本&#xff0c; 也接…

数据结构:红黑树讲解(C++)

红黑树 1.前言2.红黑树简述2.1概念2.2性质 3.红黑树的插入3.1关于新插入节点的颜色3.2节点的定义3.3插入新节点3.4判断插入后是否需要调整3.5插入后维持红黑树结构&#xff08;重点&#xff09;3.5.1cur、p、u为红&#xff0c;g为黑3.5.2cur、p为红&#xff0c;g为黑&#xff0…

【【VDMA彩条显示实验之三 之 RGB LCD 彩条显示实验 】】

VDMA彩条显示实验之三 之 RGB LCD 彩条显示实验 VDMA彩条显示实验之三 之 RGB LCD 彩条显示实验 LCD 的构造是在两片平行的玻璃基板当中放置液晶盒&#xff0c;下基板玻璃上设置 TFT&#xff08;薄膜晶体管&#xff09;&#xff0c;上基板玻璃上设置彩色滤光片&#xff0c;通…

Flutter 应用启动从闪屏页短暂黑屏再到第一个页面

由于应用初始状态启动会有白屏现象&#xff0c;便使用 flutter_native_splash 2.3.5 插件生成了启动相关的配置&#xff0c;并且按照示例使用了 import package:flutter_native_splash/flutter_native_splash.dart;void main() {WidgetsBinding widgetsBinding WidgetsFlutte…

牛客 —— 链表中倒数第k个结点(C语言,快慢指针,配图)

目录 1. 思路1&#xff1a;倒数第K个节点&#xff0c;就是整数第N-K1的节点 2. 思路2&#xff1a;快慢指针 1. 思路1&#xff1a;倒数第K个节点&#xff0c;就是整数第N-K1的节点 链表中&#xff0c;一共有N个节点&#xff0c;如果我们想要得出倒数第K个节点&#xff0c;我们…

图像倾斜角度求取-Radon变换

Radon算法 Radon&#xff08;拉东&#xff09;算法是一种通过定方向投影叠加&#xff0c;找到最大投影值时角度&#xff0c;从而确定图像倾斜角度的算法。具体过程如图所示 图1 Radon变换算法 Radon计算示例 对于纹理方向明显的图像&#xff0c;如图2所示&#xff0c;可以通…

【设计模式】聊聊模板模式

原理和实现 设计模式的原理和实现是比较简单的&#xff0c;难的是掌握具体的应用场景和解决什么问题。而模板模式是为来解决复用和拓展两个问题。 模板模式在一个方法中定义好一个算法框架&#xff0c;然后将某些步骤推迟到子类中实现&#xff0c;子类可以在不修改父类流程的时…

qsort使用举例和qsort函数的模拟实现

qsort使用举例 qsort是C语言中的一个标准库函数&#xff0c;用于对数组或者其他数据结构中的元素进行排序。它的原型如下&#xff1a; void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); 我们可以去官网搜来看一看&#xff1a;…

lxml基本使用

lxml是python的一个解析库&#xff0c;支持HTML和XML的解析&#xff0c;支持XPath解析方式&#xff0c;而且解析效率非常高 XPath&#xff0c;全称XML Path Language&#xff0c;即XML路径语言&#xff0c;它是一门在XML文档中查找信息的语言&#xff0c;它最初是用来搜寻XML文…

2024全网最新最全的Pytest接口自动化测试框架教程

pytest编写的规则&#xff1a; 1、测试文件以test_开头&#xff08;以_test结尾也可以&#xff09; 2、测试类以Test开头&#xff0c;并且不能带有__init__方法 3、测试函数以test_开头 4、断言必须使用assert pytest.main([-s,-v]) &#xff1a;用来执行测试用例 -s 打印prin…

卷积神经网络(CNN)天气识别

文章目录 前期工作1. 设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;我的环境&#xff1a; 2. 导入数据3. 查看数据 二、数据预处理1. 加载数据2. 可视化数据3. 再次检查数据4. 配置数据集 三、构建CNN网络四、编译五、训练模型六、模型评估 前期工作 1. 设置GP…

EEPROM与Flash的区别

EEPROM与Flash的区别 EEPROMEEPROM内部功能框图实现写入数据内部结构存储管在充电或放电状态下有着不同的阈值电压 问题点EEPROM是如何失效的呢&#xff1f;为何EEPROM不能做大呢&#xff1f; ------------------------------------------------------------------------------…

Java多线程(3)

Java多线程(3) 深入剖析Java线程的生命周期&#xff0c;探秘JVM的线程状态&#xff01; 线程的生命周期 Java 线程的生命周期主要包括五个阶段&#xff1a;新建、就绪、运行、阻塞和销毁。 **新建&#xff08;New&#xff09;&#xff1a;**线程对象通过 new 关键字创建&…

tamarin运行

首先我们找到安装tamarin的文件位置&#xff0c;找到以后进入该文件夹下 ubuntuubuntu:~$ sudo find / -name tamarin-prover /home/linuxbrew/.linuxbrew/var/homebrew/linked/tamarin-prover /home/linuxbrew/.linuxbrew/Cellar/tamarin-prover /home/linuxbrew/.linuxbrew/…

mac下vue-cli从2.9.6升级到最新版本

由于mac之前安装了 vue 2.9.6 的版本&#xff0c;现在想升级到最新版本&#xff0c;用官方给的命令&#xff1a; npm uninstall vue-cli -g 发现不行。 1、究其原因&#xff1a;从vue-cli 3.0版本开始原来的npm install -g vue-cli 安装的都是旧版&#xff0c;最高到2.9.6。安…