无人机在三维空间中的转动问题

前提

这篇博客是对最近一个有关无人机拍摄图像项目中所学到的新知识的一个总结,比较杂乱,没有固定的写作顺序。

无人机坐标系旋转问题

在这里插入图片描述
上图是无人机坐标系,绕x轴是翻滚(Roll),绕y轴是俯仰(Pitch),绕z轴是偏航(Yaw)。在初始位置,无人机坐标系和世界坐标系是对齐的,在坐标系中存在一个原始点 ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0,y0,z0),那么当无人机翻滚、俯仰、偏航后,此时的原始点被转动到了哪个位置处?
首先是绕x轴的翻滚,翻滚角为u,旋转矩阵为:
R x ( u ) = [ 1 0 0 0 c o s ( u ) − s i n ( u ) 0 s i n ( u ) c o s ( u ) ] R_x(u)=\begin{bmatrix} 1 & 0 & 0 \\ 0 & cos(u) & -sin(u) \\ 0 & sin(u) & cos(u) \end{bmatrix} Rx(u)= 1000cos(u)sin(u)0sin(u)cos(u)
可以看到,这个旋转矩阵和三维空间中某一点绕x轴旋转的旋转矩阵一样。
旋转后的坐标则为:
[ x 1 y 1 z 1 ] = R x ( u ) [ x 0 y 0 z 0 ] \begin{bmatrix} x_1 \\ y_1 \\ z_1 \end{bmatrix}= R_x(u)\begin{bmatrix} x_0 \\ y_0 \\ z_0 \end{bmatrix} x1y1z1 =Rx(u) x0y0z0
接下来是绕y轴的俯仰,俯仰角为v,旋转矩阵为:
R y ( v ) = [ c o s ( v ) 0 s i n ( v ) 0 1 0 − s i n ( v ) 0 c o s ( v ) ] R_y(v)=\begin{bmatrix} cos(v) & 0 & sin(v) \\ 0 & 1 & 0 \\ -sin(v) & 0 & cos(v) \end{bmatrix} Ry(v)= cos(v)0sin(v)010sin(v)0cos(v)
可以看到,这个旋转矩阵和三维空间中某一点绕y轴旋转的旋转矩阵一样。
旋转后的坐标则为:
[ x 2 y 2 z 2 ] = R y ( u ) [ x 1 y 1 z 1 ] \begin{bmatrix} x_2 \\ y_2 \\ z_2 \end{bmatrix}= R_y(u)\begin{bmatrix} x_1 \\ y_1 \\ z_1 \end{bmatrix} x2y2z2 =Ry(u) x1y1z1

接下来是绕z轴的偏航,偏航角为w,旋转矩阵为:
R z ( v ) = [ c o s ( w ) − s i n ( w ) 0 s i n ( w ) c o s ( w ) 0 0 0 1 ] R_z(v)=\begin{bmatrix} cos(w) & -sin(w) & 0 \\ sin(w) & cos(w) & 0 \\ 0 & 0 & 1 \end{bmatrix} Rz(v)= cos(w)sin(w)0sin(w)cos(w)0001
可以看到,这个旋转矩阵和三维空间中某一点绕z轴旋转的旋转矩阵一样。
旋转后的坐标则为:
[ x 3 y 3 z 3 ] = R z ( u ) [ x 2 y 2 z 2 ] \begin{bmatrix} x_3 \\ y_3 \\ z_3 \end{bmatrix}= R_z(u)\begin{bmatrix} x_2 \\ y_2 \\ z_2 \end{bmatrix} x3y3z3 =Rz(u) x2y2z2
将三个旋转矩阵结合起来就就是:
[ x 3 y 3 z 3 ] = R z ( w ) × R y ( v ) × R x ( u ) [ x 0 y 0 z 0 ] \begin{bmatrix} x_3 \\ y_3 \\ z_3 \end{bmatrix}= R_z(w)\times R_y(v)\times R_x(u)\begin{bmatrix} x_0 \\ y_0 \\ z_0 \end{bmatrix} x3y3z3 =Rz(w)×Ry(v)×Rx(u) x0y0z0
可以看到这里面有很重要的一点就是: R z ( w ) 、 R y ( v ) 、 R x ( u ) R_z(w)、R_y(v)、R_x(u) Rz(w)Ry(v)Rx(u)相乘时的顺序不能发生改变,一旦发生改变(矩阵相乘没有交换律),则结果也会发生变化。
对上面进行总结,整体上如下图所示:
在这里插入图片描述
已知在无人机坐标系下的一点 ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0,y0,z0),求无人机在翻滚u度,俯仰v度,偏航w度后的点坐标 ( x 3 , y 3 , z 3 ) (x_3,y_3,z_3) (x3,y3,z3)。计算公式如上所示。

图像相关问题

视场角

一般来说,相机的视场角(FOV)有三个,H FOV(水平视场角)、V FOV(垂直视场角),D FOV(对角视场角),如下图所示,一目了然。
在这里插入图片描述

图像的单应性变换

单应性的一个不严谨定义是:用无镜头畸变的相机从不同位置拍摄同一平面物体的图像之间存在单应性,可以用透视变换表示。
在这里插入图片描述
也就是说,给Right view的图像上的点经过透视变换可以变到left view图像上对应位置,透视变换也就是一个矩阵,我们称之为单应性矩阵。
这里不对单应性矩阵进行详细介绍,只是说求解单应性矩阵有8个参数,因此需要四组对应点。
一种常见的方法是寻找两张图像中的相似特征点,然后用来求解单应性矩阵,参考此链接中有相关代码,以及对单应性矩阵的具体介绍。

findHomography函数和getPerspectiveTransform函数

两个函数都可以用来求单应性矩阵,结果一样。但getPerspectiveTransform只会拿四组点去计算,findHomography会拿多组点(大于等于4组)点去计算。

参考链接

  1. https://danceswithcode.net/engineeringnotes/rotations_in_3d/rotations_in_3d_part1.html
  2. https://www.sohu.com/a/657116799_121116014
  3. https://zhuanlan.zhihu.com/p/74597564
  4. https://blog.csdn.net/Sunshine_in_Moon/article/details/45478351

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发工具git分支冲突解决

在团队协作的软件开发过程中,Git是一款广泛使用的版本控制系统。然而,当多个开发者同时修改同一文件或代码段时,就会产生分支冲突。解决这些冲突需要仔细的协调和技术知识。本篇博客将介绍Git分支冲突的解决方法,以及开发工具和最…

代码随想录 Leetcode108. 将有序数组转换为二叉搜索树

题目&#xff1a; 代码(首刷自解 2024年1月31日&#xff09;&#xff1a; class Solution { public:TreeNode* recursion(vector<int>& nums, int left, int right) {if (left > right) return nullptr;int mid left (right-left)/2;TreeNode* node new TreeN…

2024西湖论剑misc方向wp

每年的misc都是最无聊坐牢的 数据安全-easy_tables import pandas as pd import hashlib from datetime import datetimeusers_df pd.read_csv(users.csv) permissions_df pd.read_csv(permissions.csv) tables_df pd.read_csv(tables.csv) actionlog_df pd.read_csv(acti…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例5-5 Canvas 绘制三角形

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>Canvas 绘制三角形</title> </head><body><canvas id"cavsElem">您的浏览器不支持Canvas&#xff0c;请升级浏览器</canvas…

数据恢复之道:DevicData-P-XXXXXXXX勒索病毒的预防与恢复攻略

尊敬的读者&#xff1a; 随着科技的发展&#xff0c;网络安全问题愈发突出&#xff0c;而勒索病毒作为其中的一种恶意软件&#xff0c;正不断演进成为威胁用户数据安全的严重问题。本文将深入介绍.DevicData-P-XXXXXXXX勒索病毒的特征&#xff0c;提供被感染文件的恢复方法&am…

【算法与数据结构】300、LeetCode最长递增子序列

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;   程序如下&#xff1a; class Solution { public:int lengthOfLIS(vector<int>& nums)…

1.30号c++

浅拷贝和深拷贝&#xff08;重点&#xff09; 1> 每个类中系统都会提供一个默认的拷贝构造函数&#xff0c;如果程序员显性定义出拷贝构造函数&#xff0c;则系统取消默认提供。 2> 系统提供的拷贝构造函数&#xff0c;是将一个类对象的所有数据成员给另一个对象的所有…

iview DatePicker 日期选择组件在弹窗中使用transfer,导致选择日期弹窗会关闭的问题

背景&#xff1a;在弹窗里面使用日期选择组件&#xff0c;选择组件的面板被弹窗遮挡了部分&#xff0c;所以需要使用transfer属性&#xff0c;但是使用之后组件面板插入body中了&#xff0c;面板的事件会导致弹窗关闭。 解决方案&#xff1a; 添加上transfer属性和指定的date-…

ONLYOFFICE 文档 8.0 现已发布:PDF 表单、RTL、单变量求解、图表向导、插件界面设计等更新

我们最新版本的在线编辑器现已推出&#xff0c;为整个套件优化了多项功能。阅读下文&#xff0c;了解详细更新内容。 什么是 ONLYOFFICE 文档 ONLYOFFICE 文档是一款开源的办公套件&#xff0c;由总部位于拉脱维亚的Ascensio System SIA开发。它支持处理文本文档、电子表格、演…

【数据结构 08】红黑树

一、概述 红黑树,是一种二叉搜索树,每一个节点上有一个存储位表示节点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长上两倍,因而是接进平衡的。 红黑树性质: 根节点是黑色红节点的两个孩子…

热仿真中稳态与瞬态的区别

对于热仿真&#xff0c;根据是否随时间变化&#xff0c;可分为稳态&#xff08;steady&#xff09;仿真和瞬态&#xff08;transient&#xff09;仿真两类。 从数学计算的角度&#xff0c;所谓稳态是指物理量不随时间变化的定常过程&#xff0c;即计算域中所有物理量均满足关系…

【Cocos入门】Cocos中的定时器 (setTimeOut 、setInterval、Schedule )

目录 一、setTimeOut二、setInterval三、Schedule四、全局的schedule 一、setTimeOut 只执行一次 3秒后打印abc。 setTimeout(()>{console.log("abc"); }, 3000);删除计时器&#xff0c;3秒后不会输出abc。 let timeIndex; timeIndex setTimeout(()>{conso…