【刚体姿态运动学】角速度和欧拉角速率的换算关系的详细推导

0 引言

本文以一种新的角度推导刚体姿态运动学,也即角速度和欧拉角速率之间的换算,不同于相似博文的地方在于,本文旨在从原理上给出直观清晰生动的解释。将详细过程记录于此,便于后续学习科研查找需要。

1 符号

符号含义
{ E } \{E\} {E}地面坐标系(惯性坐标系,牛顿运动定律严格成立)
{ B } \{B\} {B}随体坐标系(固连在刚体上,且原点位于质心)
Φ = [ ϕ , θ , ψ ] T \Phi=[\phi,\theta,\psi]^T Φ=[ϕ,θ,ψ]T姿态角,ZYX欧拉角,分别为roll, pitch, yaw
R X ( ϕ ) , R Y ( θ ) , R z ( ψ ) R_X(\phi),R_Y(\theta),R_z(\psi) RX(ϕ),RY(θ),Rz(ψ)随体坐标系绕地面坐标系X/Y/Z轴旋转 ϕ / θ / ψ \phi/\theta/\psi ϕ/θ/ψ角度得到的旋转矩阵
B E R ^E_BR BER旋转矩阵,随体坐标系姿态在地面坐标系下的表达
c , s c,s c,s c c c表示 c o s cos cos s s s表示 s i n sin sin
ω b = [ ω b x , ω b y , ω b z ] T {\omega_b}=[{\omega_{bx}},{\omega_{by}},{\omega_{bz}}]^T ωb=[ωbx,ωby,ωbz]T刚体相对地面坐标系转动的角速度在 { B } \{B\} {B}系下的表达

2 欧拉角与旋转矩阵

这里我们使用ZYX欧拉角来表达姿态,那么有:
B E R = R Z ( ψ ) R Y ( θ ) R X ( ϕ ) = [ c ψ − s ψ 0 s ψ c ψ 0 0 0 1 ] [ c θ 0 s θ 0 1 0 − s θ 0 c θ ] [ 1 0 0 0 c ϕ − s ϕ 0 s ϕ c ϕ ] = [ c ψ c θ s θ s ϕ c ψ − c ϕ s ψ s θ c ϕ c ψ + s ψ s ϕ s ψ c θ s θ s ϕ s ψ + c ϕ c ψ s θ c ϕ s ψ − c ψ s ϕ − s θ c θ s ϕ c θ c ϕ ] \begin{equation} \begin{split} ^E_BR&=R_Z(\psi)R_Y(\theta)R_X(\phi)\\ &= \begin{bmatrix} c\psi & -s\psi & 0\\ s\psi & c\psi & 0\\ 0&0&1 \end{bmatrix} \begin{bmatrix} c\theta & 0 & s\theta\\ 0 & 1 & 0\\ -s\theta&0&c\theta \end{bmatrix} \begin{bmatrix} 1 & 0 & 0\\ 0 & c\phi & -s\phi \\ 0 & s\phi &c\phi \end{bmatrix}\\ &=\begin{bmatrix} c\psi c\theta & s\theta s\phi c\psi-c\phi s\psi & s\theta c\phi c\psi + s\psi s\phi\\ s\psi c\theta & s\theta s\phi s\psi+c\phi c\psi & s\theta c\phi s\psi - c\psi s\phi\\ -s\theta & c\theta s\phi & c\theta c\phi \end{bmatrix} \end{split} \end{equation} BER=RZ(ψ)RY(θ)RX(ϕ)= cψsψ0sψcψ0001 cθ0sθ010sθ0cθ 1000cϕsϕ0sϕcϕ = cψcθsψcθsθsθsϕcψcϕsψsθsϕsψ+cϕcψcθsϕsθcϕcψ+sψsϕsθcϕsψcψsϕcθcϕ
上述旋转矩阵用欧拉角给出,可以理解为:随体坐标系(1)先绕自身的 Z ^ B \hat Z_B Z^B轴旋转 ψ \psi ψ角度,(2)再绕 Y ^ B \hat Y_B Y^B轴旋转 θ \theta θ角度,(3)最后绕 X ^ B \hat X_B X^B轴旋转 ϕ \phi ϕ角度

欧拉角和固定角的区别为:

  • 欧拉角:刚体绕运动轴旋转的角度(内旋Intrinsic rotations)
  • 固定角:刚体绕固定轴旋转的角度(外旋 Extrinsic rotations)

3 机体下的角速度表达与欧拉角的关系

姿态角速率 Φ ˙ \dot \Phi Φ˙和机体角速度 ω b \omega_b ωb之间的转换关系为:
在这里插入图片描述

该公式不便于记忆,但是需要知道如何推导,并且最重要的是理解其原理,关键的时候查找即可。我几乎把高赞和高收藏的博客都看了一遍,但是都没能理解作者的意思,写的也有一定模糊性,后来还是自己琢磨才明白的,于是将自己能够理解的推导过程记录如下。

4 推导

假设当前姿态角为 Φ = [ ϕ , θ , ψ ] T \Phi=[\phi,\theta,\psi]^T Φ=[ϕ,θ,ψ]T,为了使角速度的表达更直观,这里用 ω b = [ ω b x , ω b y , ω b z ] T {\omega_b}=[{\omega_{bx}},{\omega_{by}},{\omega_{bz}}]^T ωb=[ωbx,ωby,ωbz]T代替上图所示的 ω b = [ p , q , r ] T {\omega_b}=[p,q,r]^T ωb=[p,q,r]T,那么:
由偏航角速率 ψ ˙ \dot \psi ψ˙引起的角速度在最终的 { B } \{B\} {B}系下可以表达为:
[ ω b x ω b y ω b z ] ψ ˙ = B z B z , y , x R [ 0 0 ψ ˙ ] \begin{bmatrix}\omega_{bx}\\ \omega_{by}\\ \omega_{bz}\end{bmatrix}_{\dot\psi}= {^{B_{z,y,x}}_{B_{z}}R}\begin{bmatrix}0\\0\\\dot\psi\end{bmatrix} ωbxωbyωbz ψ˙=BzBz,y,xR 00ψ˙
其中,
B z B z , y , x R = R X T ( ϕ ) R Y T ( θ ) B z , y B z , y , x R = R X T ( ϕ ) B z B z , y R = R Y T ( θ ) \begin{split} ^{B_{z,y,x}}_{B_{z}}R&=R^T_X(\phi)R^T_Y(\theta)\\ {{^{B_{z,y,x}}_{B_{z,y}}}R}&=R^T_X(\phi)\\ {{^{B_{z,y}}_{B_{z}}}R}&=R^T_Y(\theta)\\ \end{split} BzBz,y,xRBz,yBz,y,xRBzBz,yR=RXT(ϕ)RYT(θ)=RXT(ϕ)=RYT(θ)
在这里插入图片描述
为了便于理解,我特地画了一个示意图,如上图所示。
这里假设物体有一个预设的姿态角(本文与其他文章最大的不同):

  • 第一幅图只有绕绿色 z z z轴的 ψ \psi ψ运动,为了与后面的情况作区分,这里 { B z } \{B_z\} {Bz}用下标 z _z z 表示第一步绕机体 z z z轴的运动时的随体坐标系, ω b z = ψ ˙ \omega_{bz}=\dot \psi ωbz=ψ˙
  • 第二幅图,在第一幅图的基础上,俯仰角 θ \theta θ不为0,虽然引入了 θ \theta θ,但是却没有绕 y y y轴的运动,也即此时仍然只有 ψ \psi ψ变化,请大家想象第二幅图下方的圆柱,在倾斜的情况下,仍然绕“竖直”方向转动,那么显然,在这个时候的随体坐标系 { B z , y } \{B_{z,y}\} {Bz,y}下,出现了角速度的 x x x轴分量,而不仅仅有 z z z轴分量,也即角速度(注意橙色的 ϕ ˙ \dot\phi ϕ˙箭头)在新的坐标系下的表达。
  • 同理,第三幅图,引入了 ϕ \phi ϕ角,但没有绕 x x x轴的运动( ϕ ˙ = 0 \dot \phi=0 ϕ˙=0),此时的机体角速度就是 ψ ˙ \dot \psi ψ˙角速度(注意橙色的 ϕ ˙ \dot\phi ϕ˙箭头)在姿态角 Φ \Phi Φ表示的坐标系下的表达。

类似的,如果 θ ˙ \dot \theta θ˙不为0,则由俯仰角速率 θ ˙ \dot \theta θ˙引起的角速度在最终的 { B } \{B\} {B}系下可以表达为:
[ ω b x ω b y ω b z ] θ ˙ = B z , y B z , y , x R [ 0 θ ˙ 0 ] \begin{bmatrix}\omega_{bx}\\ \omega_{by}\\ \omega_{bz}\end{bmatrix}_{\dot\theta}= {^{B_{z,y,x}}_{B_{z,y}}R}\begin{bmatrix}0\\\dot\theta\\0\end{bmatrix} ωbxωbyωbz θ˙=Bz,yBz,y,xR 0θ˙0

由滚转角速率 ϕ ˙ \dot \phi ϕ˙引起的角速度在最终的 { B } \{B\} {B}系下就更直接了,就是:
[ ω b x ω b y ω b z ] ϕ ˙ = [ ϕ ˙ 0 0 ] \begin{bmatrix}\omega_{bx}\\ \omega_{by}\\ \omega_{bz}\end{bmatrix}_{\dot\phi}= \begin{bmatrix}\dot\phi\\0\\0\end{bmatrix} ωbxωbyωbz ϕ˙= ϕ˙00

以上三个成分相加:
[ ω b x ω b y ω b z ] = [ ω b x ω b y ω b z ] ψ ˙ + [ ω b x ω b y ω b z ] θ ˙ + [ ω b x ω b y ω b z ] ϕ ˙ = R X T ( ϕ ) R Y T ( θ ) [ 0 0 ψ ˙ ] + R X T ( ϕ ) [ 0 θ ˙ 0 ] + [ ϕ ˙ 0 0 ] = [ c θ 0 − s θ s θ s ϕ c ϕ c θ s ϕ s θ c ϕ − s ϕ c θ c ϕ ] [ 0 0 ψ ˙ ] + [ 1 0 0 0 c ϕ s ϕ 0 − s ϕ c ϕ ] [ 0 θ ˙ 0 ] + [ 1 0 0 0 1 0 0 0 1 ] [ ϕ ˙ 0 0 ] = [ 1 0 − s θ 0 c ϕ c θ s ϕ 0 − s ϕ c θ c ϕ ] [ ϕ ˙ θ ˙ ψ ˙ ] \begin{split} \begin{bmatrix}\omega_{bx}\\ \omega_{by}\\ \omega_{bz}\end{bmatrix}&= \begin{bmatrix}\omega_{bx}\\ \omega_{by}\\ \omega_{bz}\end{bmatrix}_{\dot\psi}+\begin{bmatrix}\omega_{bx}\\ \omega_{by}\\ \omega_{bz}\end{bmatrix}_{\dot\theta}+\begin{bmatrix}\omega_{bx}\\ \omega_{by}\\ \omega_{bz}\end{bmatrix}_{\dot\phi}\\ &= R^T_X(\phi)R^T_Y(\theta)\begin{bmatrix}0\\0\\\dot\psi\end{bmatrix} +R^T_X(\phi)\begin{bmatrix}0\\\dot \theta\\0\end{bmatrix} +\begin{bmatrix}\dot\phi\\0\\0\end{bmatrix}\\ &= \begin{bmatrix} c\theta & 0 & -s\theta\\ s\theta s\phi & c\phi & c\theta s\phi \\ s\theta c\phi & -s\phi & c\theta c\phi \end{bmatrix} \begin{bmatrix}0\\0\\\dot\psi\end{bmatrix} + \begin{bmatrix} 1 & 0 & 0\\ 0 & c\phi & s\phi\\ 0 & -s\phi & c\phi \end{bmatrix} \begin{bmatrix}0\\\dot \theta\\0\end{bmatrix} +\begin{bmatrix}1&0&0\\0&1&0\\0&0&1\end{bmatrix} \begin{bmatrix}\dot\phi\\0\\0\end{bmatrix}\\ &= \begin{bmatrix} 1& 0& -s\theta \\ 0& c\phi& c\theta s\phi \\ 0&-s\phi& c\theta c\phi \end{bmatrix} \begin{bmatrix} \dot\phi\\\dot\theta\\\dot\psi \end{bmatrix} \end{split} ωbxωbyωbz = ωbxωbyωbz ψ˙+ ωbxωbyωbz θ˙+ ωbxωbyωbz ϕ˙=RXT(ϕ)RYT(θ) 00ψ˙ +RXT(ϕ) 0θ˙0 + ϕ˙00 = cθsθsϕsθcϕ0cϕsϕsθcθsϕcθcϕ 00ψ˙ + 1000cϕsϕ0sϕcϕ 0θ˙0 + 100010001 ϕ˙00 = 1000cϕsϕsθcθsϕcθcϕ ϕ˙θ˙ψ˙
也即:
[ ω b x ω b y ω b z ] = [ 1 0 − sin θ 0 cos ϕ cos θ sin ϕ 0 − sin ϕ cos θ cos ϕ ] [ ϕ ˙ θ ˙ ψ ˙ ] \begin{bmatrix}\omega_{bx}\\ \omega_{by}\\ \omega_{bz}\end{bmatrix}= \begin{bmatrix} 1& 0& -\text{sin}\theta \\ 0& \text{cos}\phi& \text{cos}\theta \text{sin}\phi \\ 0&-\text{sin}\phi& \text{cos}\theta \text{cos}\phi \end{bmatrix} \begin{bmatrix} \dot\phi\\\dot\theta\\\dot\psi \end{bmatrix} ωbxωbyωbz = 1000cosϕsinϕsinθcosθsinϕcosθcosϕ ϕ˙θ˙ψ˙
上述矩阵的逆,由matlab代码求出:

syms theta phi real
A=[1,0,-sin(theta);0,cos(phi),cos(theta)*sin(phi);0,-sin(phi),cos(theta)*cos(phi)];
A_inv = simplify(inv(A))

在这里插入图片描述
也即:
[ ϕ ˙ θ ˙ ψ ˙ ] = [ 1 sin ϕ tan θ cos ϕ tan θ 0 cos ϕ − sin ϕ 0 sin ϕ / cos θ cos ϕ / cos θ ] [ ω b x ω b y ω b z ] \begin{bmatrix} \dot\phi\\\dot\theta\\\dot\psi \end{bmatrix}= \begin{bmatrix} 1 & \text{sin}\phi \text{tan}\theta & \text{cos}\phi \text{tan}\theta\\ 0 & \text{cos}\phi & -\text{sin}\phi \\ 0 & \text{sin}\phi/\text{cos}\theta & \text{cos}\phi/\text{cos}\theta \end{bmatrix} \begin{bmatrix}\omega_{bx}\\ \omega_{by}\\ \omega_{bz}\end{bmatrix} ϕ˙θ˙ψ˙ = 100sinϕtanθcosϕsinϕ/cosθcosϕtanθsinϕcosϕ/cosθ ωbxωbyωbz

参考

刚体姿态运动学(二)旋转的微分形式——角速度、欧拉角速度、四元数导数、旋转矩阵导数
控制笔记
姿态角速度和机体角速度,横摆角速度(Yaw Rate)估算
欧拉角速度和机体角速度

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32 GPIO

STM32 GPIO GPIO简介 GPIO(General Purpose Input Output)通用输入输出口,也就是我们俗称的IO口 根据使用场景,可配置为8种输入输出模式 引脚电平:0V~3.3V,部分引脚可容忍5V 数据0就是低电平&#xff0c…

一篇带你精通php

华子目录 什么是phpphp发展史平台支持和数据库支持网站静态网站和动态网站的区别静态网站动态网站的特点 关键名词解析服务器概念IP的概念域名DNS端口 web程序的访问流程静态网站访问流程动态网站访问流程 php标记脚本标记标准标记(常用) php注释 什么是…

Linux Hadoop平台伪分布式安装

Linux Hadoop 伪分布式安装 1. JDK2. Hadoop3. MysqlHive3.1 Mysql8安装3.2 Hive安装 4. Spark4.1 Maven安装4.2 Scala安装4.3 Spark编译并安装 5. Zookeeper6. HBase 版本概要: jdk: jdk-8u391-linux-x64.tar.gzhadoop:hadoop-3.3.1.tar.gzh…

Spring Ioc 容器启动流程

Spring容器的启动流程 本文基于 Spring 5.3.23 基于XML文件 public void test() {ApplicationContext applicationContext new ClassPathXmlApplicationContext("applicationContext.xml");User user applicationContext.getBean("user", User.class)…

MySQL大表数据导入到MongoDB

修改参数 &#xff0c;开启into outfile的功能 secure_file_priv/home/backups/mysql_outfile 重启数据库是参数生效 按条件导出MySQL数据 select * from receipt_receive_log where gmt_create > 2020-04-13 00:00:00 and gmt_create< 2020-07-13 00:00:00 INTO O…

微信小程序真机调试连接状态一直在正常和未链接之间反复横跳?

背景&#xff1a;小程序真机调试的时候&#xff0c;发现真机的network不显示接口调用情况&#xff0c;控制台也没有输出内容。具体如下所示&#xff1b; 解决方法&#xff1a; 1、确保手机端连接的网络和微信开发者工具网络一致&#xff0c;比如用同一个WiFi 2、真机自动调试…

极狐GitLab CI 助力 .Net 项目研发效率和质量双提升

目录 .NET nuget 自动生成测试包&#xff08;prerelease&#xff09;版本号 .NET 版本号规范 持续集成自动打包 持续集成自动修改版本号 .NET 行级增量代码规范——拯救老项目 本地全量代码规范 行级增量代码规范 很多团队或开发者都会使用 C#、VB 等语言开发 .Net 应用…

ROS源码安装应用,VSCode

ROS源码安装应用 安装一下VSCode 前置文章 到安装程序的目录中: 完成克隆 编译 catkin_make打开ros核心 roscore打开应用程序 rosrun turtlesim turtlesim_node安装一下VSCode deb下载地址 sudo dpkg -i code_1.84.1-1699275408_amd64.deb添加项目工程到工作空间&#xff…

MyBatis中文网

MyBatis中文网https://mybatis.net.cn/ MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Ja…

go语法入门2

字符串 使用双引号或反引号引起来的任意个字符。它是字面常量。 func main() {var a "abc\n测试" // \n换行fmt.Println(a) } abc 测试func main() {var a "abc\n\t测试" \\换行后在tabfmt.Println(a) } abc测试func main() {var a abc测试 …

MySQL binlog 日志解析后的exec_time导致表示什么时间?

1. exec_time 到底表示什么时间&#xff1f; MySQL binlog日志解析后&#xff0c;我们能看到会有 exec_time &#xff0c;从字面意思理解这个记录的是执行时间&#xff0c;那这个记录的到底是单条sql的执行时间&#xff1f;还是事务的执行时间&#xff1f;下面通过测试来解读一…

ruoyi前后端分离版本开发框架解读---让你快速入门

后端结构 com.ruoyi ├── common // 工具类 │ └── annotation // 自定义注解 │ └── config // 全局配置 │ └── constant // 通用常量 │ └── core …

AcWing99. 激光炸弹

题目 地图上有 N N N 个目标&#xff0c;用整数 X i , Y i X_i,Y_i Xi​,Yi​ 表示目标在地图上的位置&#xff0c;每个目标都有一个价值 W i W_i Wi​。 注意&#xff1a;不同目标可能在同一位置。 现在有一种新型的激光炸弹&#xff0c;可以摧毁一个包含 R R RR RR 个…

“Git 在团队协作中的优化实践“

文章目录 引言&#xff1a;一、Git 简介1.1 Git 基本概念1.2 Git 原理与工作流程 二、 Git 与 SVN 的区别三、Git 的常用命令及操作四、Git 的理论知识&#xff1a;总结&#xff1a; 引言&#xff1a; 随着技术的不断演进和团队的不断发展&#xff0c;代码管理变得越来越重要。…

不用流氓软件,如何在户外使用手机听下载到家中电脑里的音乐文件呢?

文章目录 本教程解决的问题是&#xff1a;按照本教程方法操作后&#xff0c;达到的效果是本教程使用环境&#xff1a;1 群晖系统安装audiostation套件2 下载移动端app 很多老铁想在上班路上听点喜欢的歌或者相声解解闷儿&#xff0c;于是打开手机上的某雅软件和某音乐软件点进去…

2.docker镜像的导入导出

目录 概述docker 常用命令下载导出导入镜像结束 概述 docker 常用命令 本章节使用到的命令&#xff0c;总结在此&#xff0c;后面有使用案例。 命令作用docker images显示镜像docker rmi $(docker images -q)删除系统上所有的镜像docker rmi -f强制删除多个镜像 &#xff1a…

istio 学习笔记

参考&#xff1a;istio简介和基础组件原理&#xff08;服务网格Service Mesh&#xff09;-CSDN博客 Istio 微服务框架 服务治理。 Istio的关键功能: HTTP/1.1&#xff0c;HTTP/2&#xff0c;gRPC和TCP流量的自动区域感知负载平衡和故障切换。 通过丰富的路由规则&#xf…

module ‘torch‘ has no attribute ‘_six‘

主要问题是torchvision的问题 在122服务器上的scvi-env2环境中 import torch import torch.nn as nnimport numpy as npfrom tqdm import tqdm from torchvision.utils import save_image, make_grid # Model Hyperparametersdataset_path ./datasetscuda True DEVICE tor…

小白学爬虫:通过商品ID获取1688跨境属性数据接口|1688商品属性接口|1688一件代发数据接口|1688商品详情接口

通过商品ID获取1688跨境属性数据接口可以使用1688开放平台提供的API接口实现。以下是获取跨境属性数据的基本步骤&#xff1a; 1、点击获取测试key和secret 2、构造请求参数&#xff0c;包括商品ID和其他必要参数&#xff0c;如接口权限、请求类型等。 3、通过API接口链接&…

机器视觉工程师注意,没有经历过公司倒闭看下文章,机器视觉公司即将要倒闭的征兆是什么?

很多机器视觉工程师没有经历过公司倒闭&#xff0c;谁也不想自己的公司倒闭&#xff0c;毕竟我们是打工人&#xff0c;拿固定工资的。 机器视觉公司即将要倒闭的征兆有哪些迹象​&#xff1f;​ 1、PM&#xff0c;机器视觉工程师频繁开会&#xff0c;甚至周末强制开会。 2.停…