旋转矩阵求导

2023-05-16

旋转矩阵的导数

证明

\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 β 是常数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

旋转矩阵求导 的相关文章

  • 一篇文章搞定Github API 调用 (v3)

    收藏 segmentfault 作者 SolomonXie 文章 xff1a 一篇文章搞定Github API 调用 v3 xff09
  • (3)安装ROS报错sh: 0: Illegal option -h解决办法及国内源ROS安装教程

    从ROS官网安装ROS报错 sh 0 Illegal option h 可能是软件源的原因 xff0c 使用国内的软件源可以解决此问题 1 安装软件源 xff0c 建议采用国内软件源 xff0c 下面的为USTC的软件源 sudo sh c
  • (1)robot_pose_ekf扩展卡尔曼滤波功能包的使用方法

    这里写自定义目录标题 robot pose ekf功能包的编译安装如何使用机器人姿势EKF 编译运行robot pose ekf订阅的话题发布的话题机器人姿态ekf如何工作参考文章 robot pose ekf功能包的编译安装 ros wi
  • (15)sudo rosdep init报错的解决方式及rosdep update解决方案

    Ubuntu16 04下安装ROS时 xff0c 执行到sudo rosdep init这一步时会遇到问题 xff0c 如下图所示 xff1a 解决办法 xff1a 步骤一 xff1a 1 查询现有真实IP 输入网址 xff1a IPAdd
  • (16)Ubuntu下PCL库安装和测试程序

    安装PCL库 PCL库Github下载地址 xff1a https github com PointCloudLibrary pcl 安装依赖项 xff1a sudo add apt repository ppa v launchpad j
  • 【Vue】条纹进度条

    一 效果演示及使用 作为组件引入到项目 xff08 引入地址修改为自己实际的存放地址 xff09 xff0c 注册到components import stripeloading from 34 64 components LSUI loa
  • c++中 . 和 -> 的区别是什么

    c 43 43 中 和 gt 主要是用法上的不同 1 A B则A为对象或者结构体 xff1b 2 A gt B则A为指针 xff0c gt 是成员提取 xff0c A gt B是提取A中的成员B xff0c A只能是指向类 结构 联合的指针
  • rosdep update报错解决

    一 报错 reading in sources list data from etc ros rosdep sources list d ERROR error loading sources list 39 The read operat
  • 解决多个Ardupilot运行仿真环境冲突问题

    情况说明 分别安装了4 2和4 3两个版本的ardupilot工作环境 xff0c 出现运行4 3版本sim vehicle py时路径链接到4 2版本工作路径 解决 为防止文件识别错误 xff0c 更改sim vehicle py文件名为
  • yum、apt-get、curl、wget你了解吗?

    在这里整理一些自己想要了解的一些概念 内容来自网络博客 一般来说著名的linux系统基本上分两大类 xff1a RedHat系列 xff1a Redhat Centos Fedora等Debian系列 xff1a Debian Ubuntu
  • 2020电赛备战总结(一)

    你有多渴望 xff0c 就要有多努力 2020 xff0c 注定被载入史册的一个年份 xff0c 希望2020电赛也能让我永远记住 机会来的突然 xff0c 有一点小幸运吧 xff0c 在寒假回家的时候我带上了我的32 xff0c 然后在无
  • StringBuilder的容量capacity变化规则

    StringBuilder的容量capacity变化 xff0c 是每次2倍增长吗 xff1f xff08 jdk1 8 xff09 测试代码 1 StringBuilder sb 61 span class hljs keyword ne
  • Mavros Client md5sum Error

    ERROR Client mavros wants topic State to have datatype md5sum mavros msgs State 4048c9de2a16f4ae8e0538085ebf1b97 but our
  • Chrome安装Proxy SwitchyOmega插件&Ubuntu20.04安装Proxychains

    目录 1 Chrome浏览器1 1 安装Proxy SwitchyOmega插件1 2 安装Proxy SwitchyOmega插件 2 Ubuntu服务器2 1 安装2 2 配置2 3 测试2 4 异常处理 1 Chrome浏览器 1 1
  • ozone-1.1.0(最新版)单节点搭建教程

    目录 1 搭建环境说明2 Java环境配置 xff08 Linux xff09 2 1 jdk下载2 2 源码包解压2 3 配置jdk环境变量2 4 测试 3 Ozone配置 1 搭建环境说明 服务器 xff1a Ubuntu20 4 JA
  • aws: command not found

    安装aws前先要安装pip3 环境 xff1a centos 安装pip3 yum install span class token operator span y python3 span class token operator spa
  • Linux命令总结

    记录一下在工作中遇到的命令 xff0c 碰到一个就总结一个吧 xff01 uname i uname span class token operator span i 查看linux是多少位的 ps aux span class token
  • 【Windows安装pip全过程详解】

    1 Ctrl 43 A全选并复制get pip py文件官方链接地址 链接1 get pip py 2 在python文件中建立get pip py文件 2 1 进入python文件 2 2 新建一个 txt文档 xff0c Ctrl 43

随机推荐