当前位置: 首页 > news >正文

视觉SLAM十四讲2nd—学习笔记(一)

3.1旋转矩阵

点、向量、坐标系

向量 a a a a = e a e = Σ 1 3 a i e i a=e a_e = \Sigma_1^3 a_i e_i a=eae=Σ13aiei e = [ e 1 , e 2 , e 3 ] e=[e_1, e_2, e_3] e=[e1,e2,e3]为三维空间的一组基(是一个矩阵,每个元素 e i e_i ei是一个列向量), a e a_e ae a a a在这组基下的坐标(是一个列向量)。
内积: a ⋅ b = a e T b e = Σ a i b i = ∣ a ∣ ∣ b ∣ c o s < a , b > a\cdot b = a_e^T b_e = \Sigma a_i b_i = |a| |b| cos<a,b> ab=aeTbe=Σaibi=a∣∣bcos<a,b>,向量的坐标与基有关,所以右小角有一个 ⋅ e \cdot_e e,但向量的长度、夹角都与基无关,所以不加 ⋅ e \cdot_e e a i , b i a_i,b_i ai,bi分别是 a e , b e a_e,b_e ae,be的元素。
外积: a × b = d e t ( [ e a e T b e T ] ) = [ a 2 b 3 − a 3 b 2 a 3 b 1 − a 1 b 3 a 1 b 2 − a 2 b 1 ] = [ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ] b e a\times b = det(\begin{bmatrix} e \\ a_e^T \\ b_e^T \end{bmatrix}) = \begin{bmatrix} a_2b_3 - a_3b_2 \\ a_3b_1 - a_1b_3 \\ a_1b_2 - a_2b_1 \end{bmatrix} = \begin{bmatrix} 0 & -a_3 & a_2 \\ a_3 & 0 & -a_1 \\ -a_2 & a_1 & 0 \end{bmatrix} b_e a×b=det( eaeTbeT )= a2b3a3b2a3b1a1b3a1b2a2b1 = 0a3a2a30a1a2a10 be
[ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ] \begin{bmatrix} 0 & -a_3 & a_2 \\ a_3 & 0 & -a_1 \\ -a_2 & a_1 & 0 \end{bmatrix} 0a3a2a30a1a2a10 是一个由 a e a_e ae改写成的反对称矩阵。
注:这么写有点麻烦,后面无特殊说明, a , b a,b a,b就指用同一组基表示的向量。
注:反对称矩阵满足 A T = − A A^T = -A AT=A

坐标系间的欧式变换

世界坐标系或惯性坐标系是一个静坐标系,相机坐标系是一个动坐标系。
刚体运动:如果相机运动是一个刚体运动,则两个坐标系间的运动由一个旋转加一个平移组成。或者说两个坐标系间相差一个欧式变换(Euclidean Transform)。

向量 a a a在两个坐标系下的坐标为 a e , a e ′ a_e, a_{e'} ae,ae,两个坐标系是经过一次旋转的关系,则有:
a e = R a e ′ a_e = R a_{e'} ae=Rae,其中 R = e T e ′ R= e^T e' R=eTe称为旋转矩阵或方向余弦矩阵(direction cosine)。
旋转矩阵是行列式为1的正交矩阵;行列式为1的正交矩阵是旋转矩阵。
注:正交矩阵满足 A T = A − 1 A^T=A^{-1} AT=A1,则有 a e ′ = R − 1 a e a_{e'} = R^{-1} a_e ae=R1ae,矩阵求逆描述了反向旋转
注:行列式为-1的正交矩阵是瑕旋转矩阵(一次旋转加一次反射)。

n n n维旋转矩阵的集合: S O ( n ) = { R ∈ R n × n ∣ R R T = I , d e t ( R ) = I } SO(n) = \{R \in \mathbb R^{n\times n} | RR^T = I, det(R)=I \} SO(n)={RRn×nRRT=I,det(R)=I} S O ( n ) SO(n) SO(n)是特殊正交群的意思。

欧式变换:两个坐标系是一次旋转加一次平移的关系, a e ′ = R a e + t a_{e'} = R a_e + t ae=Rae+t t t t为平移向量
注:将 a e ′ = R a e + t a_{e'} = R a_e + t ae=Rae+t简写为 a ′ = R a + t a' = R a + t a=Ra+t

变换矩阵与齐次坐标

如果向量 a a a c c c经过两次欧式变换,则有: c = R 2 ( R 1 a + t 1 ) + t 2 c = R_2(R_1 a + t_1) + t_2 c=R2(R1a+t1)+t2
为了简便表示,引入齐次坐标,将 a ′ = R a + t a' = R a + t a=Ra+t表示为:
[ a ′ 1 ] = [ R t 0 1 ] [ a 1 ] = T [ a 1 ] \begin{bmatrix} a' \\ 1 \end{bmatrix} = \begin{bmatrix} R & t \\ 0 & 1 \end{bmatrix} \begin{bmatrix} a \\1 \end{bmatrix} = T \begin{bmatrix} a \\1 \end{bmatrix} [a1]=[R0t1][a1]=T[a1]
用变换矩阵 T T T表示欧式变换, a a a用齐次坐标 [ a 1 ] \begin{bmatrix} a \\1 \end{bmatrix} [a1]代替(为简便表示, a a a就是齐次坐标),则两次欧式变换可写作: c = T 2 T 1 a c = T_2T_1 a c=T2T1a

特殊欧式群: S E ( 3 ) = { T = [ R t 0 1 ] ∈ R 4 × 4 ∣ R ∈ S O ( 3 ) , t ∈ R 3 } SE(3) = \{T = \begin{bmatrix} R & t \\ 0 & 1 \end{bmatrix} \in \mathbb{R}^{4\times 4} | R \in SO(3), t\in \mathbb{R}^3 \} SE(3)={T=[R0t1]R4×4RSO(3),tR3}
欧式变换的逆: T − 1 = [ R T − R T t 0 1 ] T^{-1} = \begin{bmatrix} R^T & -R^Tt \\ 0 & 1 \end{bmatrix} T1=[RT0RTt1]

3.3 旋转向量与欧拉角

旋转向量

旋转矩阵有9个分量,但一次旋转只有3个自由度,是否有更紧凑的表达?
答:罗德里格斯公式(Rodrigues),用一个向量 n n n和一个标量 θ \theta θ表示

任意旋转都可以用一个旋转轴和一个旋转角表示,转轴是单位向量 n n n,转角为 θ \theta θ,则有:
R = c o s θ I + ( 1 − c o s θ ) n n T + s i n θ n s s m R = cos\theta I + (1-cos \theta) n n^T + sin \theta n^{ssm} R=cosθI+(1cosθ)nnT+sinθnssm
其中, ⋅ s s m \cdot^{ssm} ssm表示向量的反对称矩阵
缺点:具有奇异性, θ = 0 \theta=0 θ=0时, R = I R=I R=I n n n可以是任意向量,即转轴不唯一。

R R R计算 n , θ n,\theta n,θ
θ = a r c c o s ( t r ( R ) − 1 2 ) \theta = arccos(\frac{tr(R) - 1}{2}) θ=arccos(2tr(R)1)
因为 R n = n Rn=n Rn=n,所以 n n n R R R的特征值为1对应的特征向量。

欧拉角

欧拉角:将一个旋转分解为三次绕不同轴的旋转,最常见的是采用偏航-俯仰-滚转描述旋转。
偏航-俯仰-滚转:绕Z轴旋转 α \alpha α,绕旋转后的Y轴旋转 β \beta β,绕旋转后的X轴旋转 γ \gamma γ
缺点:用三个标量表示旋转会出现奇异性问题(万向锁问题)。

万向锁:如果绕Y轴旋转90度,那么系统丢失一个自由度(绕X轴的旋转)。绕Z轴旋转 α \alpha α再绕旋转后的Y轴旋转 90 90 90再绕旋转后的X轴旋转 β \beta β 等于 绕Z轴旋转 α ± β \alpha \pm \beta α±β再绕旋转后的Y轴旋转 90 90 90
欧拉角演示网站 https://danceswithcode.net/engineeringnotes/rotations_in_3d/demo3D/rotations_in_3d_tool.html

3.4 四元数

四元数即紧凑也没有奇异性
平面旋转可由单位复数描述 e i θ = c o s θ + i s i n θ e^{i \theta} = cos\theta + i sin\theta eiθ=cosθ+isinθ,三维旋转可由单位四元数描述。

四元数 q = [ s , v ] T , s = q 0 ∈ R , v = [ q 1 , q 2 , q 3 ] T ∈ R 3 q=[s,v]^T, s=q_0 \in \mathbb{R}, v=[q_1,q_2,q_3]^T \in \mathbb{R}^3 q=[s,v]T,s=q0R,v=[q1,q2,q3]TR3,四元数有三个虚部一个实部。
四元数的加减、乘、逆、数乘和复数类似。

用四元数描述旋转: p ′ = q p q − 1 p'=qpq^{-1} p=qpq1,等效为 p ′ = R p p'=Rp p=Rp
其中,三维空间点 p = [ 0 , x , y , z ] T p=[0,x,y,z]^T p=[0,x,y,z]T(用虚四元数表示),单位四元数 q q q
注:用四元数表示旋转,则 p p p为虚四元数;用旋转矩阵表示旋转,则 p p p为三维向量。需要读者带入当前语境中自行理解。

旋转即可用单位四元数 q = [ s , v ] T q=[s,v]^T q=[s,v]T表示,也可用旋转矩阵表示,则前者转换为后者的公式为:
R = v v T + s 2 I + 2 s v s s m + ( v s s m ) 2 R=vv^T + s^2 I + 2s v^{ssm} + (v^{ssm})^2 R=vvT+s2I+2svssm+(vssm)2
反过来的转换公式:
θ = 2 a r c c o s ( s ) , n = [ q 1 , q 2 , q 3 ] / s i n ( θ / 2 ) \theta = 2arccos(s), n=[q_1,q_2,q_3]/sin(\theta/2) θ=2arccos(s),n=[q1,q2,q3]/sin(θ/2)

3.5 相似、仿射、射影变换

相似变换比欧式变换多了一个自由度:缩放,变换矩阵为:
T S = [ s R t 0 1 ] T_S = \begin{bmatrix} sR & t \\ 0 & 1 \end{bmatrix} TS=[sR0t1]
S i m ( 3 ) Sim(3) Sim(3)表示三维相似变换的集合(相似变换群)

仿射变换(正交投影)仅要求 A A A是一个可逆矩阵,不是必须为一个可逆矩阵,变换矩阵为:
T A = [ A t 0 1 ] T_A = \begin{bmatrix} A & t \\ 0 & 1 \end{bmatrix} TA=[A0t1]

射影变换是最一般的变换,变换矩阵为:
T A = [ A t a T v ] T_A = \begin{bmatrix} A & t \\ a^T & v \end{bmatrix} TA=[AaTtv]
其中, A A A是一个可逆矩阵,左下角为缩放,右上角为平移

真实世界到相机照片的变换,如果焦距有限是射影变换,焦距无限是仿射变换。

欧式变换:保持长度、夹角、体积,6自由度;
相似变换:保持体积比,7自由度;
仿射变换:保持平行性、体积比,12自由度;
射影变换:保持接触平面的相交和相切,15自由度。
注:欧式变换的旋转矩阵有正交性,将其自由度缩减为3,再加上平移向量,共6个自由度。
注:射影变换右下角的 v = 0 v=0 v=0 1 1 1,共15个自由度

有空继续补充一下,编程及其运行结果。

相关文章:

  • isce+mintpy水体掩膜
  • “堆积木”式话云原生微服务架构(第一回)
  • Autosar Nm开发问题-部分网络管理报文无法维持网络唤醒
  • 论文阅读笔记——Reactive Diffusion Policy
  • 基于51单片机的正负5V数字电压表( proteus仿真+程序+设计报告+讲解视频)
  • Maven java 项目引入2.0.16版本的slf4j-api后,提示jedis:5.1.0的子依赖slf4j-api:1.7.36与2.0.16冲突
  • (PC+WAP)大气滚屏网站模板 电气电力设备网站源码下载
  • llm开发框架新秀
  • 从 MySQL 切换到国产 YashanDB 数据库时,需要在数据库字段和应用连接方面进行适配 ,使用总结
  • HarmonyOS-ArkUI V2装饰器: @Provider和@Consumer装饰器:跨组件层级双向同步
  • 聊天室项目day4(redis实现验证码期限,实现redis连接池)
  • 2025年3月 Scratch图形化三级 真题解析 中国电子学会全国青少年软件编程等级考试
  • 【愚公系列】《Python网络爬虫从入门到精通》050-搭建 Scrapy 爬虫框架
  • oracle COUNT(1) 和 COUNT(*)
  • HTTP实现心跳模块
  • 吴恩达深度学习复盘(15)精度和召回率
  • 八大排序算法
  • JavaScript 定时器
  • Go语言--语法基础4--基本数据类型--整数类型
  • 深度学习(一)
  • 辽宁工程建设信息网诚信库怎么填/seo搜索铺文章
  • 专业企业网站设计/上海seo推广方法
  • 新密郑州网站建设/在百度上怎么卖自己的产品
  • 自学程序员的步骤/搜索引擎优化效果
  • 做网站哪种域名好记/竞价软件哪个好
  • 网站配色的原理和方法/百度入口