jjzjj

旋转矩阵求导

唐僧洗头用飘柔dp 2023-10-23 原文

旋转矩阵的导数

证明

\quad 假设旋转矩阵为 R ( θ ) \mathbf{R}(\theta) R(θ) ,旋转矩阵有 R R T = I \mathbf{RR^T}=I RRT=I ,即旋转矩阵是正交矩阵。现在 R \mathbf{R} R θ \mathbf{\theta} θ 求导数:
[ d d θ R ( θ ) ] R ( θ ) T + R ( θ ) [ d d θ R ( θ ) T ] = 0 \left[\frac{\mathrm{d}}{\mathrm{d} \theta} \mathrm{R}(\theta)\right] \mathrm{R}(\theta)^{\mathrm{T}}+\mathrm{R}(\theta)\left[\frac{\mathrm{d}}{\mathrm{d} \theta} \mathrm{R}(\theta)^{\mathrm{T}}\right]=0 [dθdR(θ)]R(θ)T+R(θ)[dθdR(θ)T]=0
\quad S = [ d d θ R ( θ ) ] R ( θ ) T S=\left[\frac{\mathrm{d}}{\mathrm{d} \theta} \mathrm{R}(\theta)\right] \mathrm{R}(\theta)^{\mathrm{T}} S=[dθdR(θ)]R(θ)T ,则:
S + S T = 0 \mathbf{S}+\mathbf{S^T}=0 S+ST=0
\quad 即:
S = − S T \mathbf{S}=-\mathbf{S^T} S=ST
\quad S S S 是一个反对陈矩阵。由 S = [ d d θ R ( θ ) ] R ( θ ) T S=\left[\frac{\mathrm{d}}{\mathrm{d} \theta} \mathrm{R}(\theta)\right] \mathrm{R}(\theta)^{\mathrm{T}} S=[dθdR(θ)]R(θ)T 两边同时右乘 R ( θ ) \mathbf{R(\theta)} R(θ),则:
d d θ R ( θ ) = S   R ( θ ) \frac{\mathrm{d}}{\mathrm{d} \theta} \mathrm{R}(\theta) =S\ \mathrm{R}(\theta) dθdR(θ)=S R(θ)
\quad 此时,可以总结一下关于 R R R 的导数,对 R R R 求导相当于在原来的基础上右乘了个反对陈矩阵,而我们则关系这个反对陈矩阵的具体形式到底是什么。例如在 IMU 系统中对 R R R 求导后得到的是 d d θ R ( θ ) = S ( w ) R ( θ ) \frac{\mathrm{d}}{\mathrm{d} \theta} \mathrm{R}(\theta)=S(w)R(\theta) dθdR(θ)=S(w)R(θ) ,即 w w w 的反对称矩阵乘以 R R R

\quad 下面以具体的例来进行说明:

\quad 例如, R R R 为绕着 X X X 轴旋转的旋转矩阵,即:
R ( θ ) = [ 1 0 0 0 cos ⁡ θ − sin ⁡ θ 0 sin ⁡ θ cos ⁡ θ ] \begin{array}{c} \mathrm{R}(\theta)=\left[\begin{array}{ccc} 1 & 0 & 0 \\ 0 & \cos \theta & -\sin \theta \\ 0 & \sin \theta & \cos \theta \end{array}\right] \\ \end{array} R(θ)= 1000cosθsinθ0sinθcosθ

\quad 其中 R R R 是关于 θ \theta θ 的函数, R R R θ \theta θ 的导数乘以 R T R^T RT 即得到 S S S

S = [ d d θ R ( θ ) ] R ( θ ) T = [ 0 0 0 0 − sin ⁡ θ − cos ⁡ θ 0 cos ⁡ θ − sin ⁡ θ ] ⋅ [ 1 0 0 0 cos ⁡ θ sin ⁡ θ 0 − sin ⁡ θ cos ⁡ θ ] = [ 0 0 0 0 0 − 1 0 1 0 ] \mathrm{S}=\left[\frac{\mathrm{d}}{\mathrm{d} \theta} \mathrm{R}(\theta)\right] \mathrm{R}(\theta)^{\mathrm{T}}=\left[\begin{array}{ccc} 0 & 0 & 0 \\ 0 & -\sin \theta & -\cos \theta \\ 0 & \cos \theta & -\sin \theta \end{array}\right] \cdot\left[\begin{array}{ccc} 1 & 0 & 0 \\ 0 & \cos \theta & \sin \theta \\ 0 & -\sin \theta & \cos \theta \end{array}\right]=\left[\begin{array}{ccc} 0 & 0 & 0 \\ 0 & 0 & -1 \\ 0 & 1 & 0 \end{array}\right] \\ S=[dθdR(θ)]R(θ)T= 0000sinθcosθ0cosθsinθ 1000cosθsinθ0sinθcosθ = 000001010

\quad 进而通过刚刚推倒出的导数的形式,可以得到绕着 X X X 轴旋转的旋转矩阵 R R R 的导数为:
d d θ R = S R ( θ ) = [ 0 0 0 0 0 − 1 0 1 0 ] ⋅ [ 1 0 0 0 cos ⁡ θ − sin ⁡ θ 0 sin ⁡ θ cos ⁡ θ ] = [ 0 0 0 0 − sin ⁡ θ − cos ⁡ θ 0 cos ⁡ θ − sin ⁡ θ ] \frac{\mathrm{d}}{\mathrm{d} \theta} \mathrm{R}=\mathrm{SR}(\theta)=\left[\begin{array}{ccc} 0 & 0 & 0 \\ 0 & 0 & -1 \\ 0 & 1 & 0 \end{array}\right] \cdot\left[\begin{array}{ccc} 1 & 0 & 0 \\ 0 & \cos \theta & -\sin \theta \\ 0 & \sin \theta & \cos \theta \end{array}\right]=\left[\begin{array}{ccc} 0 & 0 & 0 \\ 0 & -\sin \theta & -\cos \theta \\ 0 & \cos \theta & -\sin \theta \end{array}\right] dθdR=SR(θ)= 000001010 1000cosθsinθ0sinθcosθ = 0000sinθcosθ0cosθsinθ
\quad 进一步,如果 θ \theta θ 也是关于时间 t t t 的导数,即 θ ( t ) \theta (t) θ(t) ,那么在之前的基础上,进一步可得:
R ˙ = d R d t = d R d θ d θ d t = S R θ ˙ = θ ˙ S R = S ( ω ( t ) ) R \dot{\mathrm{R}}=\frac{\mathrm{dR}}{\mathrm{dt}}=\frac{\mathrm{dR}}{\mathrm{d} \theta} \frac{\mathrm{d} \theta}{\mathrm{dt}}=\mathrm{SR} \dot{\theta}=\dot{\theta} \mathrm{SR}=\mathrm{S}(\omega(\mathrm{t})) \mathrm{R} R˙=dtdR=dθdRdtdθ=SRθ˙=θ˙SR=S(ω(t))R
\quad 其中 S ( w ( t ) ) S(w(t)) S(w(t)) 为反对陈矩阵, w ( t ) w(t) w(t) 为角速度。

补充

  • 反对陈矩阵

    向量 a = ( a x , a y , a z ) T a=(a_x,a_y,a_z)^{T} a=(ax,ay,az)T 则其对应的反对陈矩阵为
    S ( a ) = [ 0 − a z a y a z 0 − a x − a y a x 0 ] \begin{array}{c} \mathrm{S}(a)=\left[\begin{array}{ccc} 0 & -a_z & a_y \\ a_z & 0 & -a_x \\ -a_y & a_x & 0 \end{array}\right] \\ \end{array} S(a)= 0azayaz0axayax0

  • 性质

    1. S ( α a + β b ) = α S ( a ) + β S ( b ) \mathrm{S}(\alpha \mathrm{a}+\beta \mathrm{b})=\alpha \mathrm{S}(\mathrm{a})+\beta \mathrm{S}(\mathrm{b}) S(αa+βb)=αS(a)+βS(b)
    2. S ( a ) b = a × b \mathrm{S}(\mathrm{a}) \mathrm{b}=\mathrm{a} \times \mathrm{b} S(a)b=a×b
    3. R ( a × b ) = R ( a ) × R ( b ) R(a \times b)=R(a) \times R(b) R(a×b)=R(a)×R(b)
    4. R S ( a ) R T = S ( R a ) R S(a) R^{T}=S(R a) RS(a)RT=S(Ra)
      其中 R R R 3 3 3 阶矩阵, a a a b b b 是向量, α \alpha α β \beta β 是常数。

有关旋转矩阵求导的更多相关文章

  1. 旋转矩阵的几何意义 - 2

    点向量坐标矩阵的几何意义介绍旋转矩阵的几何含义之前,先介绍一下点向量坐标矩阵的几何含义点:在一维空间下就是一个标量,如同一条直线上,以任意某一个位置为0点,以一定的尺度间隔为1,2,3...,相反方向为-1,-2,-3...;如此就形成了一维坐标系,这时候任何一个点都可以用一个数值表示,如点p1=5,即即从原点出发沿着x轴正方向移动5个尺度;点p2=-3,负方向移动3个尺度;     在一维坐标系上过原点做垂直于一维坐标系的直线,则形成了二维坐标系,此时描述一个点需要两个数值来表示点p3=(3,2),即从原点出发沿着x轴正方向移动3个尺度,在此基础上沿着y轴正方向移动两个尺度的位置就是点p3。

  2. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  3. 华为OD机试真题 C++ 实现【带传送阵的矩阵游离】【2023 Q2 | 200分】 - 2

            所有题目均有五种语言实现。C实现目录、C++实现目录、Python实现目录、Java实现目录、JavaScript实现目录题目n行m列的矩阵,每个位置上有一个元素你可以上下左右行走,代价是前后两个位置元素值差的绝对值.另外,你最多可以使用一次传送阵(只能从一个数跳到另外一个相同的数)求从走上角走到右下角最少需要多少时间。输入描述:第一行两个整数n,m,分别代表矩阵的行和列。后面n行,每行m个整数,分别代表矩阵中的元素。输出描述:一个整数,表示最少需要多少时间。

  4. 欧拉角表示的姿态矩阵(313和312转序) - 2

    一、习惯约定图片来自PSINS(高精度捷联惯导算法)PSINS工具箱入门与详解.pptx二、基本旋转矩阵绕x轴逆时钟旋转α\alphaα角度Rx(α)=[ 1000cos⁡αsin⁡α0−sin⁡αcos⁡α]R_x(\alpha)=\begin{bmatrix}\1&0&0\\0&\cos\alpha&\sin\alpha\\0&-\sin\alpha&\cos\alpha\end{bmatrix}Rx​(α)=​ 100​0cosα−sinα​0sinαcosα​​绕y轴逆时钟旋转α\alphaα角度Ry(α)=[ cos⁡α0−sin⁡α010sin⁡α0cos⁡α]R_y(\alpha

  5. 欧拉角、旋转矩阵及四元数 - 2

    欧拉角、旋转矩阵及四元数1.简介2.欧拉角2.1欧拉角定义2.2右手系和左手系2.3转换流程3.旋转矩阵4.四元数4.1四元数与欧拉角和旋转矩阵之间等效变换4.2测试Matlab代码5.总结1.简介常用姿态参数表达方式包括方向余弦矩阵、欧拉轴/角参数、欧拉角、四元数以及罗德里格参数等。高分辨率光学遥感卫星主要采用欧拉角与四元数对姿态参数进行描述。这里着重讲解欧拉角、旋转矩阵和四元数。2.欧拉角2.1欧拉角定义欧拉角是表征刚体旋转的一种方法之一,由莱昂哈德·欧拉引入的三个角度,用于描述刚体相对于固定坐标系的方向。在摄影测量、空间科学或其它技术领域,一般用一组(三个)欧拉角描述两个空间坐标之间的旋

  6. ruby - 如何修改矩阵(Ruby std-lib Matrix 类)? - 2

    我理解RubystdlibMatrix是不可修改的,也就是说,例如。m=Matrix.zero(3,4)不会写m[0,1]=7但我非常想做...我可以用笨拙的编程来做,比如defmodify_value_in_a_matrix(matrix,row,col,newval)ary=(0...m.row_size).map{|i|m.rowi}.map(&:to_a)ary[row][col]=newvalMatrix[*ary]end...或者作弊,比如Matrix.send:[]=,0,1,7但我想知道,这一定是人们一直遇到的问题。有没有一些标准的、习惯的方法可以做到这一点,而不必使用

  7. 线性代数让我想想:快速求三阶矩阵的逆矩阵 - 2

    快速求三阶矩阵的逆矩阵前言一般情况下,我们求解伴随矩阵是要注意符号问题和位置问题的(如下所示)A−1=1[  ][−[  ]−[  ]−[  ]  −[  ]]=A−1=1[  ][   M11−[M12]   M13−[M21]   M22−[M23]     M31−[M32]   M33]⊤\begin{aligned}&A^{-1}=\frac{1}{[\\]}\left[\begin{array}{cccccc}&-[\\]&\\-[\\]&&-[\\]\\\\&-[\\]&\\\end{array}\right]=\\\\&A^{-1}=\frac{1}{[\\]}\left[\b

  8. 相机校准—外参矩阵 - 2

    在本文中,我们将探讨摄影机的外参,并通过Python中的一个实践示例来加强我们的理解。相机外参摄像头可以位于世界任何地方,并且可以指向任何方向。我们想从摄像机的角度来观察世界上的物体,这种从世界坐标系到摄像机坐标系的转换被称为摄像机外参。那么,我们怎样才能找到相机外参呢?一旦我们弄清楚相机是如何变换的,我们就可以找到从世界坐标系到相机坐标系的基变换的变化。我们将详细探讨这个想法。具体来说,我们需要知道相机是如何定位的,以及它在世界空间中的位置,有两种转换可以帮助我们:有助于确定摄影机方向的旋转变换。有助于移动相机的平移变换。让我们详细看看每一个。旋转通过旋转改变坐标让我们看一下将点旋转一个角度

  9. ruby - Ruby 中的有限矩阵 - 2

    为什么Matrix类没有方法来编辑它的向量和组件?似乎矩阵中的所有内容都可以读取但不能写入。我错了吗?是否有一些类似于Matrix的第三方优雅类允许我删除行并有意地编辑它们?如果没有这样的类(class),请通知我——我将停止搜索。 最佳答案 Matrix类的设计者一定是不可变数据结构和函数式编程的爱好者。是的,你是对的。无论如何,总有一个简单的解决方案可以满足您的需求。使用Matrix它可以做的事情,然后,只需使用.to_a来获得一个真正的数组。>>Matrix.identity(2).to_a=>[[1,0],[0,1]]另见N

  10. 华为OD机试 -旋转骰子(Python) | 机试题算法思路 【2023】 - 2

    最近更新的博客华为OD机试-卡片组成的最大数字(Python)|机试题算法思路华为OD机试-网上商城优惠活动(一)(Python)|机试题算法思路华为OD机试-统计匹配的二元组个数(Python)|机试题算法思路华为OD机试-找到它(Python)|机试题算法思路华为OD机试-九宫格按键输入(Python)|机试算法备考思路华为OD机试-身高排序(Python)|备考思路使用说明参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。华为OD清单查看地址:blog.csdn.net/hihell/catego

随机推荐