【多视图几何】TUM 课程 第2章 刚体运动

课程的 YouTube 地址为:https://www.youtube.com/playlist?list=PLTBdjV_4f-EJn6udZ34tht9EVIW7lbeo4 。视频评论区可以找到课程所使用课件与练习题的下载地址。

课程第2章从李群与李代数的角度介绍三维空间的刚体运动。李群即常见的旋转矩阵、变换矩阵,李代数与李群对应,李代数 \(se(3)\) 是所有三维反对称阵的集合。

将李代数映射到李群,使得旋转与变换可微,并且消除了旋转矩阵的约束条件($ R^TR = I, det(R) = 1 $)对优化的约束,能够在无约束条件下进行位姿的优化。

1. 三维空间与刚体运动

三维空间是三维欧几里德空间(Euclidean Space)的简称,一般使用笛卡尔坐标系(Cartesian Coordinate System)描述欧式空间中的点,笛卡尔坐标描述是 $ (x, y, z) \in \mathbb{E}^3 $ 的形式,这种形式可以用 \(\mathbb{R}^3\) 定义。

于是使用三维向量 $ \mathbb{R}^3 $ 描述一个三维点坐标 $ \mathbb{E}^3 $。本笔记使用 \(\mathbb{R}^3\) 替代 $ \mathbb{E}^3 $,严格意义上将 \(\mathbb{E}^3\) 是笛卡尔坐标,$ \mathbb{R}^3 $ 是三维向量。

1.1 叉乘与反对称阵

叉乘(Cross Product)是将两个三维向量映射到一个三维向量:

\[ \times : \mathbb{R}^3 \times \mathbb{R}^3 \rightarrow \mathbb{R}^3 : u \times v = \begin{bmatrix} u_2v_3 - u_3v_2 \\ u_3v_1 - u_1v_3 \\ u_1v_2 - u_2v_1 \end{bmatrix} \in \mathbb{R}^3 \]

叉乘可以可以转化为一个矩阵与向量点乘的形式,方便计算:

\[ u \times v = \hat{u} \cdot v, \hat{u} = \begin{bmatrix} 0 \quad -u_3 \quad u_2 \\ u_3 \quad 0 \quad -u_1 \\ -u_2 \quad u_1 \quad 0 \end{bmatrix} \]

1.2 刚体运动

刚体运动是三维坐标到三维坐标的映射:

\[ g_t : \mathbb{R}^3 \rightarrow \mathbb{R}^3; X \mapsto g_t(X), t \in [0, T] \]

$ t $ 是时刻。

刚体运动保持范数(norm)与叉乘不变:

\[ | g_t(v) | = | v |, \forall v \in \mathbb{R}^3 \]

\[ g_t(u) \times g_t(v) = g_t(u \times v), \forall u, v \in \mathbb{R}^3 \]

由以上两个性质与极化恒等式(Polarization Identity)可知刚体运动也保持内积不变。三重积(Triple Product)也是保持变不变,三重积的几何意义是三个向量表示的平行六面体的体积,所以刚体运动保持体积不变。

\[ <g_t(u), g_t(v) \times g_t(w)> = <u, v \times w> \]

刚体运动可以表示为:

\[ g_t(x) = Rx + T \]

2. 李群与李代数

2.1 旋转矩阵的导数

在任意时刻的旋转矩阵都是正交的,$ R(t)R^T(t) = I, \forall t $,对这个式子左右求导:

\[ {d \over dt}(RR^T) = \dot RR^T + R {\dot R}^T = 0 \Rightarrow \dot RR^T = -(\dot RR^T)^T \]

所以 \(\dot RR^T\) 是一个反对称阵,所以在任意时刻存在一个向量 \(w(t) \in \mathbb{R}^3\) 与 $ \dot RR^T $ 对应:

\[ \dot R(t)R^T(t) = \hat w(t) \Leftrightarrow \dot R(t) = \hat w R(t) \]

上式表明了任意时刻 $ t $ 的旋转矩阵 \(R(t)\) 的导数 \(\dot R(t)\) 的计算方法——用一个反对称阵左乘旋转矩阵 \(R(t)\)

0时刻的旋转矩阵 $ R(0) = I $,在0时刻附近展开:

\[ R(dt) = R(0) + dR = I + \hat w(0) dt \]

2.2 李群 \(SO(3)\) 与李代数 \(so(3)\)

李群(Lie Group)指连续可微的群,三维空间的旋转是连续的,所以特殊正交集 \(SO(3)\) 是三维旋转李群对应的矩阵表示。连续是关键。

Def.: A Lie group (or infinitesimal group) is a smooth manifold that is also a group, such that the group operations multiplication and inversion are smooth maps.

$ SO(3) $ 中的微分可以使用反对称阵逼近,反对称阵所在的群叫做李代数(Lie Algebra):

\[ so(3) \equiv \left\{ \hat w \right. \left| w \in \mathbb{R}^3 \right\} \]

李代数是李群在 \(I\) 处的切空间(Tangent Space)。$ I $ 对应的是0时刻,以0时刻为基准,认为0时刻不存在旋转。

2.2.1 指数映射

前面推导得到了 $ \dot R(t) = \hat w R(t) $ 的结论,解微分方程

\[ \begin{cases} \dot R(t) = \hat w R(t) \\ R(0) = I\end{cases} \]

得到

\[ R(t) = e^{\hat w t} = \Sigma_{n = 0}^{\infty}{ {(\hat w t)}^n \over n !} = I + \hat w t + {{(\hat w t)}^2\over 2!} + \dots \]

当 $ |w| = 1 $ 时 \(R(t)\) 是绕着轴 $ w \in \mathbb{R}^3 $ 的旋转,如果将时间 \(t\) 写入到 \(\hat w\) 中($ \hat w = \hat w t $),这样就得到了从李代数到李群的映射:

\[ exp: so(3) \rightarrow SO(3); \hat w \mapsto e^{\hat w} \]

2.2.2 对数映射

对数映射是将指数映射的逆映射,是从李群 $ SO(3) $ 到李代数 $ so(3) $ 的映射, 可以表示为

\[ log: SO(3) \rightarrow so(3); R \mapsto \hat w \]

当 $ R \ne I $ 时,
\[ \|w\| = {\cos}^{-1}\left. \right({trace(R) - 1\over 2}\left. \right), {w \over \| w \|} = {1 \over \sin(\|w\|)} \begin{bmatrix} r_{32} - r_{23} \\ r_{13} - r_{31} \\ r_{21} - r_{12} \end{bmatrix} \]
当 $ R = I $ 时,\[ w = 0 \]

2.2.3 罗德里格公式

指数映射部分将 \(R(t)\) 用一无穷级数表示,如何求取这个无穷级数呢?这就需要用到罗格里格公式(Rodrigues' Rotation Formula),对于 $ \hat w \in so(3) $:

\[ e^{\hat w} = I + {\hat w \over \| w \|}\sin(\| w \|) + {\hat w^2 \over \| w \|^2}(1- \cos(\| w \|)) \]

2.3 李群 \(SE(3)\) 与李代数 \(se(3)\)

$ SE(3) $ 表示刚体运动,包括旋转和平移,在齐次坐标下定义为:

\[ SE(3) \equiv \left\{ g = \begin{bmatrix} R \quad T \\ 0 \quad 1 \end{bmatrix}\left. \right| R \in SO(3), T \in \mathbb{R}^3 \right\} \subset \mathbb{R}^{4 \times 4}\]

旋转矩阵求导能够直接得出旋转矩阵的导数 $ \dot R(t) = \hat w R(t) $,但 $ SE(3) $ 不具有这种性质,为了保持表达形式的一致,仿照 \(SO(3)\)\(so(3)\) 定义 \(se(3)\)

$ g $ 是刚体变换映射:

\[ g: \mathbb{R} \rightarrow SE(3); g(t) = \begin{bmatrix} R(t) & T(t) \\ 0 & 1 \end{bmatrix} \in \mathbb{R}^{4 \times 4} \]

$ g $ 是一个 \(4 \times 4\) 的矩阵,但是并不是一个正交阵,不具备 $ g g^T = I $ 的性质,但是作为一个可逆矩阵 $ gg^{-1} = I \Rightarrow \dot g g^{-1} = (\dot g g)^{-1}$,然后就如下考虑:

\[ \dot g (t) g^{-1}(t) = \begin{bmatrix} \dot R R^T & \dot T - \dot R R^T T \\ 0 & 0\end{bmatrix} \in \mathbb{R}^{4\times4} \]

前面 $ SO(3) $ 部分可知 $ \dot R R^T = \hat w, \hat w\in so(3) $,定义一个新的向量 $ v(t) \equiv \dot T(t) - \hat w(t)T(t) $,于是有:

\[ \dot g (t) g^{-1}(t) = \begin{bmatrix} \hat w(t) & v(t) \\ 0 & 0\end{bmatrix} \equiv \hat \xi(t) \in \mathbb{R}^{4\times4} \]

进一步求 \(\dot g\)

\[ \dot g = \dot g g^{-1}g = \hat \xi g \]

公式中的 \(\hat\xi\) 称作 twist (twist 有旋转运动加平移运动的意思,可查 Screw Theory)。

\(se(3)\) 的定义:

\[ se(3) \equiv \left\{ \hat \xi = \begin{bmatrix} \hat w & v \\ 0 & 0 \end{bmatrix} \left. \right| \hat w \in so(3), v \in \mathbb{R}^3 \right\} \subset \mathbb{R}^{4 \times 4} \]

$ \hat \xi $ 是 twist,$ \xi \in \mathbb{R}^6 $ 称作 twist coordinates,两者的完整定义如下:

\[ \hat \xi \equiv { \begin{bmatrix} v \\ w \end{bmatrix} }^{\hat{}} \equiv \begin{bmatrix} \hat w & v \\ 0 & 0 \end{bmatrix} \in \mathbb{R}^{4\times4} \]

\[ \xi \equiv { \begin{bmatrix} v \\ w \end{bmatrix} } \equiv {\begin{bmatrix} \hat w & v \\ 0 & 0 \end{bmatrix}}^{\check{}} \in \mathbb{R}^{6} \]

$ v $ 是在 \(R\) 旋转后的坐标系的线速度,\(w\) 是角速度。

2.3.1 指数映射

\(se(3)\),解微分方程

\[ \begin{cases} \dot g(t) = \hat \xi g(t), \hat xi = const \\ g(0) = I \end{cases} \]

\[ g(t) = e^{\hat \xi t} = \Sigma_{n = 0}^{\infty} { (\hat \xi t)^n \over n !} \]

\(w = 0\) 时,

\[ e^{\hat \xi} = \begin{bmatrix} I & v \\ 0 & 1 \end{bmatrix} \]

\(w \ne 0\) 时,

\[ e^{\hat \xi} = \begin{bmatrix} e^{\hat w} & {(1 - e^{\hat w})\hat wv + ww^Tv \over \|w\|^2} \\ 0 & 1 \end{bmatrix} \]

2.3.2 对数映射

先利用 $ e^{\hat \xi} $ 左上角 \(3\times3\) 的矩阵计算出 \(w\) ,随后用右上角 \(3\times1\) 的式子计算 \(v\)

3. 相机运动

相机是刚体,相机的运动是刚体运动,可以使用旋转和平移表示。

一般使用 \(g(t)\) 表示相机在 \(t\) 时刻相对世界坐标系的位置姿态:

\[ g(t) = \begin{bmatrix} R(t) & T(t) \\ 0 & 1 \end{bmatrix} \in SE(3) \]

一般定义相机在0时刻的坐标系为世界坐标系,在世界坐标系中一点的坐标为 \(X_0\),该点在 \(t\) 时刻的相机坐标系下的坐标为 \(X(t)\)

\[ X(t) = R(t) X_0 + T(t) \]

在齐次坐标系下:

\[ X(t) = g(t) X_0 \]

3.1 相机运动的链接

两个不同时刻 \(t_1, t_2\) 世界坐标系下的点 \(X_0\) 的坐标为 \(X(t_2), X(t_1)\)\(X(t_2), X(t_1)\) 之间的关系是:

\[ X(t_2) = g(t2, t1)X(t_1) \]

$ g(t_2, t_1) $ 表示 \(t_2\) 相对 \(t_1\) 的位姿,通过以下方程即可得到 \(g(t_2, t_1)\) 与 $ g(t_1), g(t_2) $ 的关系。

\[ \begin{cases} X(t_2) = g(t_2)X_0 \\ X(t_1) = g(t_1)X_0 \end{cases} \]

如果存在3个时刻 $ t_1, t_2, t_3 $ :

\[ X(t_3) = g(t_3, t_2) X_2 = g(t_3, t_2) g(t_2, t_1) X_1 = g(t_3, t_1)X_1 \]

\[ g(t_3, t_1) = g(t_3, t_2) g(t_2, t_1) \]

$ g(t_2, t_1) $ 的逆是 \(t_1\) 相对 \(t_2\) 的位姿 $ g(t_1, t_2) $:

\[ g(t_1, t_2)g(t_2, t_1)=I \Leftrightarrow g^{-1}(t_2, t_1)=g(t_1, t_2) \]

3.2 速度变换

对 $ X(t) = g(t) X_0 $ 求导:

\[ \dot X(t) = \dot g(t) X_0 = \dot g(t)g^{-1}(t)X(t) \]

定义

\[ \hat V(t) \equiv \dot g(t)g^{-1}(t) = \begin{bmatrix} \hat w(t) & v(t) \\ 0 & 0 \end{bmatrix} \in se(3) \]

于是

\[ \dot X(t) = \hat V(t)X(t) \]

在非齐次坐标系中

\[ \dot X(t) = \hat w(t) X(t) + v(t) \]

转载于:https://www.cnblogs.com/JingeTU/p/6390859.html

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

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

相关文章

计算机教师成长计划,2020年信息技术教师个人工作计划

本学期我主要担任以下几个方面的工作&#xff1a;初二1到10班的信息技术课的教学工作以及学生的信息学奥赛小组的辅导工作以及学校安排的信息技术方面的日常工作等。同时本学期还有一个重要工作就是做一个完整的信息技术课题——初中信息技术基于小组协作竞争环境的“任务驱动”…

查询成绩小于85且是计算机的一项应用,查询练习2

查询练习创建表学生表student学号姓名性别出生日期班级create table student(sno varchar(20) primary key,sname varchar(20) not null,ssex varchar(10)not null,sbirthday datetime,class varchar(20));课程表Course课程号课程名称教师编号create table course(cno varchar(…

NTP时间服务器

1. NTP简介NTP&#xff08;Network Time Protocol&#xff0c;网络时间协议&#xff09;是用来使网络中的各个计算机时间同步的一种协议。它的用途是把计算机的时钟同步到世界协调时UTC&#xff0c;其精度在局域网内可达0.1ms&#xff0c;在互联网上绝大多数的地方其精度可以达…

计算机高办报名时间,前方高能!计算机信息技术证报名入口、考试时间已发布...

前方高能&#xff01;计算机信息技术证报名入口、考试时间已发布和发达***相比&#xff0c;我国的计算机信息技术在实际应用的过程中&#xff0c;还存在着许多的局限性&#xff0c;这就使其在使用是计算机信息技术的应用效果无法达到理想的状态。计算机信息技术证报名入口、考试…

API文档工具-Swagger的集成

最近安装了API文档工具swagger&#xff0c;因为Github上已有详细安装教程&#xff0c;且安装过程中没有碰到大的阻碍&#xff0c;所以此文仅对这次安装做一份大致记录 相关网站 Swagger 官方地址&#xff1a;http://swagger.wordnik.com Github安装详解【springmvc集成swagger】…

计算机翻译辅助工具安卓版,计算机辅助翻译软件

OmegaT是一款电脑翻译软件&#xff0c;此软件能够帮助用户对一些机器专业语言进行快速翻译&#xff0c;目前软件支持任何Java的操作系统&#xff0c;用户无需担心系统不支持的问题。另外&#xff0c;软件可以在任意目录中搜索所支持的格式的文件&#xff0c;翻译速度快、准确性…

计算机应用基础试模块5ACCSE,2015年计算机二级《Access》上机最后冲刺卷(1)

二、基本操作题41在考生文件夹下的“Acc1.mdb”数据库中已建立表对象“职工”。试按以下操作要求&#xff0c;完成对表“职工”的编辑修改和操作&#xff1a;(1)将“职工号”字段改名为“编号”&#xff0c;并设置为主键。(2)设置“年龄”字段的有效性规则为“年龄>20”。(3…

情人节引发的血案

首先&#xff0c; 如果你能看到这句话&#xff0c;那我就应该恭喜你&#xff0c;你已经被此文的标题所吸引。不过&#xff0c;千万不要想太多&#xff0c;此文不是什么《今日说法》&#xff0c;但也与法有那么一丁点的关系&#xff1b;此文也不是什么《我们约会吧》&#xff0c…

css 可编辑,如何设置DIV可编辑

「来源: &#xff5c;web前端开发 ID&#xff1a;web_qdkf」如何让一个div变成可编辑状态&#xff0c;比如富文本的输入框就可以用可编辑的div(自定义一个富文本时可用)&#xff0c;类似textare。有2种方案可以实现&#xff1a;1是通过contenteditable属性设置为true&#xff0…

Java中的局部变量表及使用jclasslib进行查看

直接上下载地址 jclasslib是一个独立的工具&#xff0c;不是包含在JDK中的工具&#xff0c;需要自己进行下载&#xff0c;下载地址如下&#xff1a; http://downfile.downcc.com/down/JClassLib_windows.zip 什么是局部变量表 在《java中的栈》中我们说到了一个栈帧至少需要包含…

在线学ajax,ajax学习

AJAX&#xff1a;1. 概念&#xff1a; ASynchronous JavaScript And XML异步的JavaScript 和 XML1. 异步和同步&#xff1a;客户端和服务器端相互通信的基础上* 客户端必须等待服务器端的响应。在等待的期间客户端不能做其他操作。* 客户端不需要等待服务器端的响应。在服务器处…

绝对定位和浮动的区别和运用

当一个元素使用绝对定位后&#xff0c;它的位置将依据浏览器左上角开始计算或相对于父容器&#xff08;在父容器使用相对定位时&#xff09;。 绝对定位使元素脱离文档流&#xff0c;因此不占据空间。普通文档流中元素的布局就当绝对定位的元素不存在时一样。因为绝对定位的框与…

服务器网盘系统怎么装,云服务器上怎么安装操作系统

云服务器上怎么安装操作系统 内容精选换一换安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具&#xff0c;将文件上传到云服务器。例如QQ.exe。在本地主机和Windows云服务器上分别安装数据传输工具&#xff0c;将文件上传到云服务器。例如QQ.exe。本地磁盘映射(…

Ubuntu 16.04 64位安装YouCompleteMe

之前记录在OneNote上感觉有点乱&#xff0c;而且不适合保存shell&#xff0c;这次重新安装又出问题了&#xff0c;干脆写篇博客记录。 从零开始 1、git&#xff08;用来下载vim和相关插件&#xff09; sudo apt-get install git2、cmake&#xff08;用来编译clang-llvm&#xf…

学大数据找IT十八掌

《IT十八掌大数据内功修炼到企业实战2.0课程》免费自学马拉松计划 1、关于十八掌 学了大数据&#xff0c;还是不敢找工作&#xff1f; 内功不够&#xff01;跟随十八掌掌门徐培成炼内功&#xff01; 十八掌教育努力打造一套地表最强【大数据云计算】内功修炼系列课程&#xff…

OSG设置警告等级

osg::setNotifyLevel(osg::FATAL);//控制台只输出严重错误信息转载于:https://www.cnblogs.com/coolbear/p/6420494.html

spring源码分析2本最高清带书目PDF百度网盘分享

SPRING技术内幕__深入解析SPRING架构与设计原理完整版 Spring源码深度解析 [郝佳编著][人民邮电出版社][2013.09][386页] 链接&#xff1a;http://pan.baidu.com/s/1kVQDcIN 密码&#xff1a;u3od 转载于:https://www.cnblogs.com/kool/p/6695530.html

POJ2891 Strange Way to Express Integers (扩展欧几里德)

本文为博主原创文章&#xff0c;欢迎转载&#xff0c;请注明出处 www.cnblogs.com/yangyaojia 题目大意 &#xfeff;求解一组同余方程 x ≡ r1 (mod a1) x ≡ r2 (mod a2) x ≡ r3 (mod a3) ...... x ≡ rk (mod ak) 的解x&#xff08;a1,a2,a3,.....ak 并不一定互质&#xff…

js中的回调函数的理解和使用方法

一. 回调函数的作用 js代码会至上而下一条线执行下去&#xff0c;但是有时候我们需要等到一个操作结束之后再进行下一个操作&#xff0c;这时候就需要用到回调函数。 二. 回调函数的解释 因为函数实际上是一种对象&#xff0c;它可以存储在变量中&#xff0c;通过参数传递给另一…

C语言中的小数取整和四舍五入

将小数直接抹掉的取整1自动类型转换 例如 &#xff1a;#include <stdio.h> main() {int a;a2.7;printf("a %d",a); } // a 22强制类型转换例如&#xff1a;#include <stdio.h> main() {printf("%d",(int)3.75); //输出结果为 …