精华内容
下载资源
问答
  • 三维刚体变换公式

    2021-07-29 21:25:59
    最近在做刚体变换,查阅了许多相关的文献,发现许多文章中对于旋转矩阵的定义都不一致。笔者经过仔细比对终于发现了一些规律,现在总结如下: 第一种: 注意这里的 sin 角的正负号,使用这种方式定义的x,y,z旋转...

    最近在做刚体变换,查阅了许多相关的文献,发现许多文章中对于旋转矩阵的定义都不一致。笔者经过仔细比对终于发现了一些规律,现在总结如下:

    第一种:

    注意这里的 sin 角的正负号,使用这种方式定义的x,y,z旋转矩阵,得到最终的旋转矩阵为:

    R=Rx\cdot Ry\cdot Rz

    第二种:

    同样的,注意这里的 sin 角的正负号,使用这种方式定义的x,y,z旋转矩阵,得到的旋转矩阵为:

    R=Rz\cdot Rx\cdot Ry

    第三种:

    使用这种方式定义的x,y,z旋转矩阵,得到的旋转矩阵为:

    R=Ry\cdot Rx\cdot Rz

    展开全文
  • 2d刚体变换公式笔记

    2021-05-10 19:02:27
    三角形E经过 旋转(绕M点顺时针旋转45度)+平移(M=>N)==三角形F 其中 M=(Mx,My),N=(Nx,Ny) 则 3x3的旋转平移矩阵= [1,0,Nx-Mx] [1,0,Mx] [cos(PI/4),-sin(PI/4),0] [1,0,-Mx] [0,1,Ny-My]X [0,1,My]X[sin(PI/4)...

    刚体变换

    三角形E经过 旋转(绕M点顺时针旋转45度)+平移(M=>N)==三角形F

    其中 M=(Mx,My),N=(Nx,Ny)

    则 3x3的旋转平移矩阵=

    [1,0,Nx-Mx]    [1,0,Mx]    [cos(PI/4),-sin(PI/4),0]   [1,0,-Mx]  

    [0,1,Ny-My] X [0,1,My] X[sin(PI/4),cos(PI/4),0] X [0,1,-My] 

    [0,0,  1]           [0,0,  1]    [0,0,  1]                          [0,0,  1]

     

    展开全文
  • 各类刚体转动惯量公式的推导,包含: (01)转轴通过圆环中心与环面垂直的转动惯量; (02)转轴沿圆环直径的转动惯量; (03)转轴通过薄圆盘中心与圆盘垂直的转动惯量; (04)转轴沿圆筒几何轴的转动惯量; (05)转轴...
  • 本篇继续参照高翔老师《视觉SLAM十四讲从理论到实践》,讲解三维空间刚体运动。博文将原第三讲分为四部分来讲解:1、旋转矩阵和变换矩阵;2、旋转向量与罗德里格斯公式;3、欧拉角表示旋转;4、四元数表示变换。本文...


    序:本篇系列文章参照高翔老师《视觉SLAM十四讲从理论到实践》,讲解三维空间刚体运动,为读者打下坚实的数学基础。博文将原第三讲分为五部分来讲解,其中四元数部分较多较复杂,又分为四部分。如果读者急于实践,可直接阅读第五部分的机器人运动轨迹,此部分详细讲解了安装准备工作。此系列总体目录如下:

    1. 旋转矩阵和变换矩阵
    2. 旋转向量表示旋转
    3. 欧拉角表示旋转
    4. 四元数包括以下部分:
      4-1. 四元数表示变换
      4-2. 四元数线性插值方法:LinEuler/LinMat/Lerp/Nlerp/Slerp
      4-3. 四元数多点插值方法:Squad
      4-4. 四元数多点连续解析解插值方法:Spicv
      4-5. 四元数多点离散数值解插值方法:Sping
    5. 实践:SLAM中显示机器人运动轨迹及相机位姿

    1.旋转向量定义

    对于矩阵表示方式至少有以下两个缺点:
    1. S O ( 3 ) SO(3) SO(3)的旋转矩阵有9个量,但一次旋转只有3个自由度,因此这种表达方式是冗余的,同理 S E ( 4 ) SE(4) SE(4)也是。那么,是否有更紧凑的表示呢?
    2.旋转矩阵和变换矩阵自身带有约束:它必须是正交矩阵且行列式为1。当想估计或优化一个旋转矩阵或变换矩阵时,这些约束会使得求解变的更困难。
    因此,希望有一种方式能够紧凑的描述旋转和平移。

    旋转向量:事实上,任意旋转都可以用一个旋转轴和一个旋转角来刻画,于是,我们可以使用一个向量 u u u(为方便表达,上下文统一采用符号 u u u表示单位向量,其他符号 n , k n,k n,k等也是可以的),其方向与旋转轴一致,其长度等于旋转角 θ \theta θ,那么向量 θ u \theta u θu也可以描述这个旋转,这种向量称为旋转向量(或轴角/角轴,Axis-Angle),只需一个三维向量即可描述旋转。

    在三维空间中定义一个方向只需要用到两个量就可以了(与任意两个坐标轴之间的夹角,比如地球的经纬度就可以确定方向),因此第三个量可以用来定义长度,表示旋转角度。同样,对于变换矩阵,使用一个旋转向量和一个平移向量即可表达一次变换,此时变量维数正好是六维。

    2.罗德里格斯公式-向量转换为矩阵

    2.1 定义

    罗德里格斯公式:旋转向量和旋转矩阵有什么联系吗?事实上,从旋转向量到旋转矩阵的转换过程由罗德里格斯公式(Rodrigues’s Formula)表示。因为任意旋转都可以由一个旋转轴 u u u和一个旋转角 θ \theta θ刻画,故罗德里格斯公式具体形式如下: R = cos ⁡ θ I + ( 1 − cos ⁡ θ ) u u T + sin ⁡ θ u ∧ (2.1) R= \cos \theta I+(1-\cos \theta )uu^{T}+\sin \theta u^{\wedge }\tag{2.1} R=cosθI+(1cosθ)uuT+sinθu(2.1)符号 ∧ ^{\wedge } 是向量到反对称矩阵的转换符,见上一篇博客《三维空间刚体运动1:旋转矩阵与变换矩阵》的公式(1.4)。公式还可以写为: R = I + ( 1 − cos ⁡ θ ) U 2 + sin ⁡ θ U . (2.2) R= I +(1-\cos \theta )U^{2} + \sin \theta U. \tag{2.2} R=I+(1cosθ)U2+sinθU.(2.2)其中U代表向量 u u u转换的反对称矩阵 u ∧ u^{\wedge } u。假设单位旋转向量 u u u的坐标为 u = [ u x u y u z ] u=\begin{bmatrix} u_{x}\\ u_{y}\\ u_{z} \end{bmatrix} u=uxuyuz,旋转角为 θ \theta θ,则R的展开式为: [ cos ⁡ θ + u x 2 ( 1 − cos ⁡ θ ) u x u y ( 1 − cos ⁡ θ ) − u z sin ⁡ θ u y sin ⁡ θ + u x u z ( 1 − cos ⁡ θ ) u z sin ⁡ θ + u x u y ( 1 − cos ⁡ θ ) cos ⁡ θ + u y 2 ( 1 − cos ⁡ θ ) − u x sin ⁡ θ + u y u z ( 1 − cos ⁡ θ ) − u y sin ⁡ θ + u x u z ( 1 − cos ⁡ θ ) u x sin ⁡ θ + u y u z ( 1 − cos ⁡ θ ) cos ⁡ θ + u z 2 ( 1 − cos ⁡ θ ) ] (2.3) \begin{bmatrix} \cos\theta+u_{x}^{2}(1-\cos\theta) & u_{x}u_{y}(1-\cos\theta)-u_{z}\sin\theta & u_{y}\sin\theta+u_{x}u_{z}(1-\cos\theta)\\ u_{z}\sin\theta+u_{x}u_{y}(1-\cos\theta) & \cos\theta+u_{y}^{2}(1-\cos\theta) & -u_{x}\sin\theta+u_{y}u_{z}(1-\cos\theta)\\ -u_{y}\sin\theta + u_{x}u_{z}(1-\cos\theta) & u_{x}\sin\theta+u_{y}u_{z}(1-\cos\theta) & \cos\theta+u_{z}^{2}(1-\cos\theta) \end{bmatrix}\tag{2.3} cosθ+ux2(1cosθ)uzsinθ+uxuy(1cosθ)uysinθ+uxuz(1cosθ)uxuy(1cosθ)uzsinθcosθ+uy2(1cosθ)uxsinθ+uyuz(1cosθ)uysinθ+uxuz(1cosθ)uxsinθ+uyuz(1cosθ)cosθ+uz2(1cosθ)(2.3)

    2.2 推导

    首先,理解下图。定义 u u u是旋转轴的单位向量, v v v为旋转向量, w w w u × v u\times v u×v方向上的单位向量。图中 v v v u u u旋转角度 θ \theta θ得到 v r o t v_{rot} vrot。将 v v v分解为平行于旋转轴 u u u以及正交于 u u u的两个分量: v ∥ v_{∥} v v ⊥ v_{⊥} v。将 v r o t v_{rot} vrot分解为平行于旋转轴 u u u以及正交于 u u u的两个分量: v r o t ∣ ∣ v_{rot||} vrot v r o t ⊥ v_{rot\perp} vrot,其中 v r o t ∣ ∣ = v ∣ ∣ v_{rot||}=v_{||} vrot=v。向量 a a a b b b分别是 v r o t ⊥ v_{rot\perp} vrot w w w v ⊥ v_{\perp } v方向上的分量。
    图2.1:旋转向量3D图(数学绘图软件推荐geogebra
    旋转向量3D图
    所谓推导旋转方程,实则求出一个旋转矩阵,使得 v r o t = R v v_{rot}=Rv vrot=Rv,所以我们要做的就是找出 v r o t v_{rot} vrot v v v,并用矩阵来表示。
    此公式有2种形式,故而也有2种推导方法,两者推导方法的不同主要在 v ⊥ v_{\perp } v的表示上。具体推导过程如下。

    2.2.1 推导一

    推导一推导过程如下:

    1. v v v:对 v v v进行向量分解: v = v ⊥ + v ∣ ∣ v = v_{\perp } + v_{||} v=v+v,根据向量减法可得: v ⊥ = v − v ∣ ∣ (2.4) v_{\perp } = v - v_{||}\tag{2.4} v=vv(2.4) v r o t ∣ ∣ v_{rot||} vrot进行向量分解 v r o t = v r o t ∣ ∣ + v r o t ⊥ (2.5) v_{rot}=v_{rot||}+v_{rot\perp } \tag{2.5} vrot=vrot+vrot(2.5)下边分别推导 v r o t ∣ ∣ v_{rot||} vrot v r o t ⊥ v_{rot\perp} vrot
    2. v r o t ∣ ∣ v_{rot||} vrot:由于旋转过程平行向量的不变性可得 v r o t ∣ ∣ = v ∣ ∣ v_{rot||} = v_{||} vrot=v v ∣ ∣ v_{||} v其实就是 v v v u u u上的正交投影(Orthogonal Projection),根据正交投影公式: v ∣ ∣ = p r o j u ( v ) = u ⋅ v u ⋅ u u = u ⋅ v ∣ ∣ u ∣ ∣ 2 u = ( u ⋅ v ) u (2.6) \begin{aligned} v_{||} &= proj_{u}(v) &= \frac{u\cdot v}{u\cdot u}u &= \frac{u\cdot v}{||u||^{2}}u &= (u\cdot v)u \end{aligned}\tag{2.6} v=proju(v)=uuuvu=u2uvu=(uv)u(2.6)其中 u ⋅ u = ∣ ∣ u ∣ ∣ 2 u\cdot u=||u||^{2} uu=u2 ∣ ∣ u ∣ ∣ = 1 ||u||=1 u=1,点积 ( u ⋅ v ) (u\cdot v) (uv)为标量,所以再乘向量 u u u得到一个矢量。
    3. v r o t ⊥ v_{rot\perp} vrot:下面画出 v r o t ⊥ v_{rot\perp} vrot的俯视图:
      图2.2:旋转向量俯视图
      旋转向量俯视图

    我们需要处理正交于 u u u v ⊥ v_{⊥} v,因为这两个向量是正交的,这个旋转可以看做是平面内的一个旋转,因为旋转不改变 v ⊥ v_{⊥} v的长度,所以路径是一个圆。现在,3D的旋转被转化为了2D平面上的旋转。由于在这个平面上只有一个向量 v ⊥ v_{⊥} v,用它来表示一个旋转是不够的,我们还需要构造一个同时正交于 u u u v ⊥ v_{⊥} v的向量 w w w,这个可以通过叉乘来获得: w = u × v ⊥ (2.7) w=u\times v_{⊥}\tag{2.7} w=u×v(2.7)注意叉乘的顺序,因为我们使用的是右手坐标系统,按照右手定则你可以发现这 个新的向量 w w w指向 v ⊥ v_{⊥} v逆时针旋转 ( π / 2 ) (π/2) (π/2)后的方向,并且和 v ⊥ v_{⊥} v一样也处于正交于 u u u 的平面内。因为 ∥ u ∥ ∥u∥ u = 1,我们可以发现: ∣ ∣ w ∣ ∣ = ∣ ∣ u × v ⊥ ∣ ∣ = ∣ ∣ u ∣ ∣ ⋅ ∣ ∣ v ⊥ ∣ ∣ ⋅ sin ⁡ ( π 2 ) = ∣ ∣ v ⊥ ∣ ∣ (2.8) \begin{aligned} ||w|| &= ||u\times v_{⊥}|| \\ &= ||u||\cdot ||v_{⊥}||\cdot \sin(\frac{\pi}{2})\\ &=||v_{⊥}|| \end{aligned}\tag{2.8} w=u×v=uvsin(2π)=v(2.8)也就是说, w w w v ⊥ v_{⊥} v的模长是相同的,所以, w w w也位于圆上。有了这个新的向量 w w w, 就相当于在平面内有了两个坐标轴。我们现在可以把 v r o t ∣ ∣ v_{rot||} vrot投影到 w w w v ⊥ v_{⊥} v上,将其分解为向量 a a a b b b,使用一些三角知识可以得到: v r o t ⊥ = a + b = sin ⁡ θ w + cos ⁡ θ v ⊥ = sin ⁡ θ ( u × v ⊥ ) + cos ⁡ θ v ⊥ (2.9) \begin{aligned} v_{rot⊥} &= a + b \\ &= \sin \theta w + \cos \theta v_{⊥} \\ &= \sin \theta (u\times v_{⊥}) + \cos \theta v_{⊥} \end{aligned}\tag{2.9} vrot=a+b=sinθw+cosθv=sinθ(u×v)+cosθv(2.9)因为叉乘遵守分配律,且 u u u平行于 v ∣ ∣ v_{||} v,故: u × v ⊥ = u × ( v − v ∣ ∣ ) = u × v − u × v ∣ ∣ = u × v (2.10) \begin{aligned} u\times v_{⊥} &=u\times (v-v_{||})\\ &=u\times v - u \times v_{||}\\ &=u \times v\end{aligned}\tag{2.10} u×v=u×(vv)=u×vu×v=u×v(2.10)另外,向量 a a a b b b还有另外一种证法,稍显繁琐,有兴趣的同学请参见后两小节。

    1. 综上可得:
      v r o t = v r o t ⊥ + v r o t ∣ ∣ = a + b + v ∣ ∣ = sin ⁡ θ u × v ⊥ + cos ⁡ θ v ⊥ + ( u ⋅ v ) u = sin ⁡ θ u × v + cos ⁡ θ ( v − v ∣ ∣ ) + ( u ⋅ v ) u = sin ⁡ θ u × v + cos ⁡ θ ( v − ( u ⋅ v ) u ) + ( u ⋅ v ) u = cos ⁡ θ v + ( 1 − cos ⁡ θ ) ( u ⋅ v ) u + sin ⁡ θ u × v (2.11) \begin{aligned} v_{rot} &= v_{rot\perp}+v_{rot||} \\ &=a+b+v_{||} \\ &=\sin \theta u\times v_{⊥} +\cos \theta v_{\perp } + (u\cdot v)u \\ &=\sin \theta u\times v +\cos \theta (v - v_{||}) + (u\cdot v)u \\ &=\sin \theta u\times v +\cos \theta (v - (u\cdot v)u ) + (u\cdot v)u \\ &=\cos \theta v+(1-\cos \theta )(u\cdot v)u + \sin \theta u\times v \end{aligned}\tag{2.11} vrot=vrot+vrot=a+b+v=sinθu×v+cosθv+(uv)u=sinθu×v+cosθ(vv)+(uv)u=sinθu×v+cosθ(v(uv)u)+(uv)u=cosθv+(1cosθ)(uv)u+sinθu×v(2.11)
    2. 显然:到此步,我们还无法将其用矩阵来表示,所以需要对 ( u ⋅ v ) u (u\cdot v)u (uv)u u × v u\times v u×v 进行矩阵转换,由点积的交换律和结合律得: ( u ⋅ v ) u = u ⋅ ( u ⋅ v ) = u ⋅ ( u T v ) = u ⋅ u T v (2.12) (u\cdot v)u=u\cdot(u\cdot v)=u\cdot (u^{T} v)=u\cdot u^{T} v\tag{2.12} (uv)u=u(uv)=u(uTv)=uuTv(2.12)其中的向量都是列向量,点积展开规则为: x ⋅ y = [ x , y ] = x T y x\cdot y = [x, y] =x^{T}y xy=[x,y]=xTy
      对于 u × v u\times v u×v可用叉乘矩阵来化简为 U v Uv Uv u × v = [ ( u × v ) x ( u × v ) y ( u × v ) z ] = [ u y v z − u z v y u z v x − u x v z u x v y − u y v x ] = [ 0 − u z u y u z 0 − u x u y u x 0 ] [ v x v y v z ] = U v (2.13) u\times v =\begin{bmatrix} (u\times v)_{x}\\ (u\times v)_{y}\\ (u\times v)_{z} \end{bmatrix}= \begin{bmatrix} u_{y}v_{z}- u_{z}v_{y}\\ u_{z}v_{x}- u_{x}v_{z}\\ u_{x}v_{y}- u_{y}v_{x} \end{bmatrix}= \begin{bmatrix} 0 & -u_{z} & u_{y}\\ u_{z} & 0 & -u_{x}\\ u_{y} & u_{x} & 0 \end{bmatrix}\begin{bmatrix} v_{x}\\ v_{y}\\ v_{z} \end{bmatrix}= Uv\tag{2.13} u×v=(u×v)x(u×v)y(u×v)z=uyvzuzvyuzvxuxvzuxvyuyvx=0uzuyuz0uxuyux0vxvyvz=Uv(2.13)其中 U = [ 0 − u z u y u z 0 − u x u y u x 0 ] (2.14) U= \begin{bmatrix} 0 & -u_{z} & u_{y}\\ u_{z} & 0 & -u_{x}\\ u_{y} & u_{x} & 0 \end{bmatrix}\tag{2.14} U=0uzuyuz0uxuyux0(2.14)
    3. ( u ⋅ v ) u (u\cdot v)u (uv)u u × v u\times v u×v 转换的矩阵代入式(2.10)得: v r o t = cos ⁡ θ v + ( 1 − cos ⁡ θ ) ( v ⋅ u ) u + sin ⁡ θ u × v = cos ⁡ θ v + ( 1 − cos ⁡ θ ) u u T v + sin ⁡ θ U v = ( cos ⁡ θ I + ( 1 − cos ⁡ θ ) u u T + sin ⁡ θ U ) v (2.15) \begin{aligned} v_{rot}&=\cos \theta v+(1-\cos \theta )(v\cdot u)u+ \sin \theta u\times v\\ &=\cos \theta v+(1-\cos \theta )uu^{T}v + \sin \theta U v\\ &=(\cos \theta I +(1-\cos \theta )uu^{T} + \sin \theta U)v \end{aligned}\tag{2.15} vrot=cosθv+(1cosθ)(vu)u+sinθu×v=cosθv+(1cosθ)uuTv+sinθUv=(cosθI+(1cosθ)uuT+sinθU)v(2.15)故旋转矩阵 R = cos ⁡ θ I + ( 1 − cos ⁡ θ ) u u T + sin ⁡ θ U . (2.16) R= \cos \theta I +(1-\cos \theta )uu^{T} + \sin \theta U. \tag{2.16} R=cosθI+(1cosθ)uuT+sinθU.(2.16)其中 I I I为单位矩阵。

    2.2.2 推导二

    与推导一相比,推导二的不同主要在于用叉乘去表示一些数据。用叉乘来表示 v ⊥ v_{\perp } v v ⊥ = − u × ( u × v ) (2.17) v_{\perp } =-u\times (u\times v)\tag{2.17} v=u×(u×v)(2.17)联立推导一中各式得:
    v r o t = v r o t ⊥ + v r o t ∣ ∣ = a + b + v ∣ ∣ = sin ⁡ θ u × v + cos ⁡ θ v ⊥ + v − v ⊥ = sin ⁡ θ u × v − cos ⁡ θ u × ( u × v ) + v + u × ( u × v ) = v + ( 1 − cos ⁡ θ ) u × ( u × v ) + sin ⁡ θ u × v = v + ( 1 − cos ⁡ θ ) U 2 v + sin ⁡ θ U v ( 叉 乘 矩 阵 表 示 ) = ( I + ( 1 − cos ⁡ θ ) U 2 + sin ⁡ θ U ) v = R v (2.18) \begin{aligned} v_{rot} &=v_{rot\perp}+v_{rot||}\\ &=a+b+v_{||}\\ &=\sin \theta u\times v +\cos \theta v_{\perp } + v-v_{\perp }\\ &=\sin \theta u\times v -\cos \theta u\times (u\times v) + v + u\times (u\times v)\\ &=v + (1 - \cos \theta )u\times (u\times v) + \sin \theta u\times v \\ &=v + (1 - \cos \theta )U^{2}v+ \sin \theta Uv(叉乘矩阵表示) \\ &=(I + (1 - \cos \theta )U^{2}+ \sin \theta U)v \\ &=Rv \end{aligned}\tag{2.18} vrot=vrot+vrot=a+b+v=sinθu×v+cosθv+vv=sinθu×vcosθu×(u×v)+v+u×(u×v)=v+(1cosθ)u×(u×v)+sinθu×v=v+(1cosθ)U2v+sinθUv()=(I+(1cosθ)U2+sinθU)v=Rv(2.18)
    从而得出第二种表达式 R = I + ( 1 − cos ⁡ θ ) U 2 + sin ⁡ θ U . (2.19) R= I +(1-\cos \theta )U^{2} + \sin \theta U. \tag{2.19} R=I+(1cosθ)U2+sinθU.(2.19)显然,第二种表达式更为简便,在计算的过程中涉及的参数更少,所以这也是在进行旋转操作时常用的公式。

    2.2.3 推导向量 a a a b b b

    此处单独推导罗德里格斯公式的向量 a a a b b b,仅做参考,也可以忽略不看。 a a a b b b是由 v r o t ⊥ v_{rot\perp } vrot正交分解得到的矢量,既有大小又有方向,所以在求解时,我们要对其大小和方向分别求解。
    a a a大小
    θ 1 = π − θ \theta_{1}= \pi -\theta θ1=πθ θ 2 \theta_{2} θ2是向量 v v v u u u的夹角, u u u为单位向量,则对于 a a a的大小 ∣ a ∣ |a| a有:
    ∣ a ∣ = sin ⁡ θ 1 ∣ v r o t ⊥ ∣ = sin ⁡ θ 1 ∣ v ⊥ ∣ = sin ⁡ ( π − θ ) ∣ v ⊥ ∣ = sin ⁡ θ ∣ v ⊥ ∣ = sin ⁡ θ sin ⁡ θ 2 ∣ v ∣ = sin ⁡ θ sin ⁡ θ 2 ∣ v ∣ ∣ u ∣ (2.20) \begin{aligned}|a| &=\sin \theta_{1}|v_{rot\perp }|\\ &=\sin \theta_{1}|v_{\perp }| \\ &=\sin (\pi -\theta)|v_{\perp }|\\ &=\sin \theta|v_{\perp }|\\ &=\sin \theta \sin \theta_{2}|v|\\ &=\sin \theta \sin \theta_{2}|v||u| \end{aligned}\tag{2.20} a=sinθ1vrot=sinθ1v=sin(πθ)v=sinθv=sinθsinθ2v=sinθsinθ2vu(2.20)由三角公式 ∣ a × b ∣ = sin ⁡ θ ∣ a ∣ ∣ b ∣ |a\times b| = \sin \theta |a||b| a×b=sinθab知: sin ⁡ θ 2 ∣ v ∣ ∣ u ∣ = ∣ u × v ∣ \sin \theta_{2}|v||u|=|u \times v| sinθ2vu=u×v,所以:
    ∣ a ∣ = sin ⁡ θ ∣ u × v ∣ (2.21) |a|=\sin \theta |u \times v|\tag{2.21} a=sinθu×v(2.21)

    a a a方向
    由叉乘方向可得 a a a的单位方向向量为: u × v / ∣ u × v ∣ (2.22) u \times v /|u \times v|\tag{2.22} u×v/u×v(2.22)

    综上可得:
    a = ( u × v / ∣ u × v ∣ ) ∣ a ∣ = ( u × v / ∣ u × v ∣ ) sin ⁡ θ ∣ u × v ∣ = sin ⁡ θ u × v (2.23) \begin{aligned} a&=(u \times v /|u \times v|)|a|\\ &=(u \times v /|u \times v|)\sin \theta |u \times v|\\ &=\sin \theta u\times v \end{aligned}\tag{2.23} a=(u×v/u×v)a=(u×v/u×v)sinθu×v=sinθu×v(2.23)

    b b b大小
    由图得, θ 1 \theta_{1} θ1 b b b v r o t ⊥ v_{rot\perp } vrot的夹角,则:
    ∣ b ∣ = cos ⁡ θ 1 ∣ v r o t ⊥ ∣ = cos ⁡ ( π − θ ) ∣ v ⊥ ∣ = − cos ⁡ θ ∣ v ⊥ ∣ (2.24) \begin{aligned} |b| &=\cos \theta_{1}|v_{rot\perp }| \\ &=\cos (\pi -\theta)|v_{\perp }|\\ &= -\cos \theta|v_{\perp }| \end{aligned}\tag{2.24} b=cosθ1vrot=cos(πθ)v=cosθv(2.24)

    b b b方向
    由于 b b b的方向与 v ⊥ v_{\perp } v方向相反,可得 b b b的单位方向向量为: − v ⊥ / ∣ v ⊥ ∣ (2.25) -v_{\perp }/|v_{\perp }|\tag{2.25} v/v(2.25)

    综上可得:
    b = ( − v ⊥ / ∣ v ⊥ ∣ ) ∣ b ∣ = cos ⁡ θ v ⊥ (2.26) \begin{aligned} b &=(-v_{\perp }/|v_{\perp }|)|b|\\ &=\cos \theta v_{\perp } \end{aligned}\tag{2.26} b=(v/v)b=cosθv(2.26)

    至此,罗德里格斯公式的证明全部结束。此外,如果读者希望获得关于Oxyz坐标系的旋转变换关系,可以参考这篇博客:图形变换之旋转变换公式推导
    罗德里格斯公式反应的是旋转向量到旋转矩阵的转换关系,如果已知旋转矩阵 R R R,如何推导旋转向量 v v v呢?下边给出旋转矩阵到旋转向量的反向转换关系。

    3.旋转矩阵到旋转向量

    这里计算从一个旋转矩阵到旋转向量的转换。对于旋转角 θ \theta θ,取旋转矩阵 R R R两边的迹,有: t r ( R ) = cos ⁡ θ t r ( I ) + ( 1 − cos ⁡ θ ) t r ( u u T ) + sin ⁡ θ t r ( u ∧ ) = 3 cos ⁡ θ + ( 1 − cos ⁡ θ ) = 1 + 2 cos ⁡ θ . (3.1) \begin{aligned} tr(R) &= \cos \theta tr(I)+(1-\cos \theta )tr(uu^{T})+\sin \theta tr(u^{\wedge })\\ &=3\cos \theta + (1- \cos \theta) \\ &=1+2\cos \theta. \tag{3.1} \end{aligned} tr(R)=cosθtr(I)+(1cosθ)tr(uuT)+sinθtr(u)=3cosθ+(1cosθ)=1+2cosθ.(3.1)因此: θ = arccos ⁡ t r ( R ) − 1 2 . (3.2) \theta = \arccos \frac{tr(R)-1}{2} .\tag{3.2} θ=arccos2tr(R)1.(3.2)关于转轴 u u u,旋转轴上的向量在旋转后不发生改变,说明: R u = u . (3.3) Ru=u.\tag{3.3} Ru=u.(3.3)因此,转轴 u u u是矩阵 R R R特征值1对应的特征向量。求解此方程,再归一化,就得到了旋转轴 u u u。由 v = θ u v=\theta u v=θu得到旋转向量 v v v

    至此,推导结束。实践部分代码放到第三部分一起演示。

    本文基于《视觉SLAM十四讲:从理论到实践》和《Quaternions, Interpolation and Animation》编写,但相对于原文会适当精简,同时为便于全面理解,会收集其他网络好文,根据作者理解,加入一些注解和扩展知识点,如果您觉得还不错,请一键四连(点赞关注收藏评论),让更多的人看到。

    参考文献:
    1.《视觉SLAM十四讲:从理论到实践》,高翔、张涛等著,中国工信出版社
    2. 罗德里格斯公式推导
    3. 四元数与三维旋转

    展开全文
  • 刚体变换

    万次阅读 2017-08-06 23:07:53
    向量叉乘(Cross Product) ---------------------------------------------------------------------------------------------------------------------------------------------------------- ...刚体变换

    向量叉乘(Cross Product)

    ----------------------------------------------------------------------------------------------------------------------------------------------------------



    刚体变换(Rigid Transformation)

     刚体变换 变换前后两点间的距离依旧保持不变则被称为刚体变换Rigid Transform)。 刚体变换可分解为平移变换、旋转变换和反转(镜像)变换。

    ----------------------------------------------------------------------------------------------------------------------------------------------------------

    (1)让g(x)是三维向量空间到三维空间的一个映射函数。如果该函数满足下列性质,则被称为刚体变换(Rigid Transformation):



    (2)刚体变化能够通过下式表示:


    在该式中,矩阵,R,被称为旋转矩阵(Rotation Matrix),并且满足下列特殊性质:



    (3)拥有下述性质的矩阵,连同矩阵乘法运算,构成一个组(Group):SO(3)


    上式是一个旋转矩阵。

    性质:



    组(Group)

    ----------------------------------------------------------------------------------------------------------------------------------------------------------

    组(Group)是一种代数结构,由一个集合,G,和一组组上的操作组成,满足下列公理:

    (1)封闭性(Closure):

                                              

    (2)结合性(Associativity):

                                              

    (3)同一性和可逆性(Identity and Inverse):

                                              

                                              


    罗德里格斯公式(Rodrigues Formula)

    ----------------------------------------------------------------------------------------------------------------------------------------------------------

    表示物体的旋转有三种方式:转轴和转角,旋转矩阵,四元素。

    罗德里格斯公式用来将转轴转角表示方式转换成旋转矩阵表示方式:


    其中theta是转角,omega是转轴的单位向量。


    四元素(Quaternion)

    ----------------------------------------------------------------------------------------------------------------------------------------------------------

    四元素可以被看做是由一个标量和一个矢量构成:

                                               

    四元素乘法计算如下:

                                             

    单位四元素是四个分量平方和为一的四元素,对于转轴和转角表示方式也可以用单位四元素方式表示:

                                              

    同样也可以从四元素得到旋转矩阵

                                              

    四元数共轭(Quaternion Conjugate)

                                               

    值得注意的是:

    (1)如果一个四元素对应一个旋转矩阵,则该四元素的共轭对应于同一旋转矩阵的转置;

    (2)四元素乘法与对应旋转矩阵乘法的等价性:

                                              

    展开全文
  • 使用说明 撰写本指导的目的是...书本的公式推导过程基本上很清晰。本指导的主要内容是精简的公式推导和常用结论总结。如果有时间,会增加课后思考题和习题指导。 在上册的复习指导写完后,我会放出这几章原文档的...
  • 刚体的瞬时螺旋运动

    2021-03-25 00:27:51
    对于瞬时运动,刚体的角速度可以认为是...反过来,一个螺旋可以分解成一个纯转动螺旋和一个纯移动螺旋之和,我们可以通过“原偶原方”公式来计算这个螺旋的节距,从而计算出纯转动的线矢量及其轴线矢量方程和纯移动的偶
  • 刚体转动的基本概念

    2020-05-16 17:58:07
    目录一、刚体的定轴转动1. 刚体转动的角速度和角加速度【ω,α】2. 匀变速转动公式3.... 刚体绕定轴转动的动能定理附录1:转动惯量附录2:角量与线量公式的比较 一、刚体的定轴转动 1. 刚体转动的角速度和
  • 刚体转动是力学中最重要的部分之一,学生在学习刚体转动的过程中存在着很多学习困难。本次研究的主要目的就是研究学生在学习刚体转动过程中存在的前概念,并基于学生的前概念提出教学上的改进建议。1.2 国内外研究...
  • 基本公式 考虑刚体由质量为mim_imi​的一系列质点iii组成,总质量为m=∑imi\text m=\sum_i\text m_im=∑i​mi​。物体坐标系原点建立在刚体质心处ri=(xi,yi,zi)r_i=(x_i,y_i,z_i)ri​=(xi​,yi​,zi​),则有∑imiri...
  • 三维刚体变换

    2021-01-30 10:55:04
    第三章:三维刚体变换 刚体:形状和大小不发生变化的物体,刚体不光有位置,还有自身的姿态,姿态是指物体的朝向。 点:点是空间中的基本元素,没有长度没有体积,两个点连接起来,构成了向量。 向量:可以看成从某...
  • 医疗图像非刚体配准

    2021-08-16 13:18:58
    公式待补充…… 评估函数: 均方差 MSE 理想值为0 两个二维灰度直方图,进行Z轴的相关,查看峰值, 理想灰度直方图是narrow 且tall peak 归一化互相关 NCC 理想值为1 正规化互信息 NMI 会获得很好的效果 互信息 ...
  • Unity中的刚体

    千次阅读 2019-03-29 18:26:52
    但是一旦GameObject上附带有刚体组件,这种方式就会带来性能的损失。对于有刚体的游戏物体官方强烈建议使用物理方式使其移动 一:Rigibody2D —— 1.BodyType: 2.Material:物理材质 3.Simulated: 4.Use A...
  • 如果模型中某个部件的刚度远远大于其他部件,其变形远远小于其他部件,就可以将其定义为刚体部件。在分析过程中刚体部件不发生变形,而只发生整体的平动和转动。将部件定义为刚体的主要目的是为了提高计算效率,使...
  • 三维空间刚体旋转

    2020-03-17 08:43:41
    文章目录三维空间中刚体旋转的表示矩阵线性代数运算库Eigen三维空间中刚体旋转的表示矩阵线性代数运算库Eigen 刚体:运动过程中不会产生形变的物体,运动过程中同一个向量的长度和夹角都不会发生变化。刚体变换也...
  • 三维空间刚体运动

    2019-06-27 22:36:53
    三维空间的刚体运动点与坐标系旋转矩阵旋转向量和欧拉角四元数 点与坐标系 2D的情况:用两个坐标加旋转角表达 3D的情况:? 在描述3D的情况前,可以先描述一些基本概念: 坐标系、点、向量、向量的坐标 坐标系(参考...
  • 刚体的旋转

    2019-07-02 17:07:26
    文章目录Eigen中的旋转操作旋转矩阵四元数欧拉角角轴变换矩阵各种旋转之间的转化四元数和角轴四元数和旋转矩阵四元数和欧拉角角轴和旋转矩阵角轴和欧拉角欧拉角和旋转矩阵 Eigen中的旋转操作 旋转矩阵 ...
  • 下面公式中上标表示为基于某系,下标表示当前系。设k为第k时刻,R为旋转3*3,P为平移3*1,T表示旋转和平移。设k时刻刚体在世界坐标系下的位姿(包括旋转和平移)表示为TkwT^w_{k}Tkw​,刚体运动后k+1时刻...
  • 刚体转动的定律及定理

    千次阅读 2020-07-04 13:10:34
    刚体绕定轴转动的动能定理 1. 转动定律 M:和外力矩。 α: 角加速度。 2. 平行轴定理 2. 角动量定理 质点的角动量定理 刚体的角动量定理 3. 角动量守恒定律 质点的角动量守恒定律 *默认相对于某点 刚体的...
  • 刚体动力学基础学习 1 符号 rrr:刚体上某个质量微元对固定点O的位置矢径 rPr_PrP​:刚体上一点P对固定点O的位置矢径 ρ\rhoρ:刚体上某个质量微元对基点P的位置矢径 ρc\rho_cρc​:刚体质心C对P的位置矢径 mmm...
  • 经典力学(动力学)——刚体的转动

    千次阅读 多人点赞 2020-04-08 10:26:55
    目录刚体的定轴转动 力矩刚体刚体转动的角速度和角加速度匀变速转动公式角量与线量的关系力矩转动惯量 转动定律质点的转动惯量角动量 角动量守恒定律角动量刚体定轴转动的角动量力矩做功 刚体定轴转动的动能定理力矩...
  • 刚体就是 "刚性物体",它在运动过程中,内部各质点间的相对位置不会改变,也即每两个质点间的距离保持不变 假设刚体内任意两个质点,坐标分别为 $(x_1, y_1, z_1)$ 和 $(x_2, y_2, z_2)$,则在刚体运动过程中,这...
  • 刚体的惯性张量计算

    千次阅读 2019-12-23 15:42:33
    刚体的惯性张量计算 原文:https://blog.csdn.net/libing403/article/details/83718796 【机器人学】刚体的惯性张量及其物理意义 原文:https://blog.csdn.net/gpeng832/article/details/88717481 ...
  • 三维空间的刚体运动

    2020-05-13 17:18:18
    三维空间的刚体运动1)旋转矩阵2)变换矩阵3)欧拉角4)四元数 一个刚体在三维空间中的运动如何描述? 我们知道是由旋转加平移组成的,平移很简单,但是旋转有点麻烦。 三维空间的刚体运动的描述方式:旋转矩阵、...
  • 但是两者的影响是互换的,容易从旋转矩阵的合成公式看出:沿着固定坐标系沿着 X − Y − Z X-Y-Z X−Y−Z 序列进行旋转,其结果与沿着运动坐标系进行 Z − Y − X Z-Y-X Z−Y−X 反向序列旋转得到的结果是一致的。...
  • 本文用四元数矩阵法研究了多刚体的相对运动,系统地建立了多刚体在相对运动中用四元数矩阵表示的位置、速度和加速度等的一系列基本公式。这些公式可用于对空间开链和闭链刚体系统的分析与研究。
  • 本博客使用numpy模块来实现戴建生《机构学与...#已知变换前的刚体上某条线的位姿旋量L,过原点旋转轴的方向s和转角theta,以及刚体的平移向量d #求变换之后刚体上直线的位姿旋量Lp L = [0.707,0.5,0.5,0.5,-1,0.293]
  • 刚体的概念,刚体运动分类和运动状态描述。 力矩、转动惯量的概念,刚体定轴转动定律。 力矩的功、转动动能、刚体定轴转动的功能原理。 刚体定轴转动角动量定理和角动量守恒定律。 刚体平面运动的概念和平面动力学。
  • 根据伪刚体模型对该六杆柔顺机构进行了变形分析,推导出六杆柔顺机构伪刚体模型的力-位移关系的一般理论计算公式,进而得到该机构实例的分析结果.用ANSYS软件对该设计实例进行了力-位移关系的有限元仿真分析,同时...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,060
精华内容 1,224
关键字:

刚体公式