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

前提

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

无人机坐标系旋转问题

在这里插入图片描述
上图是无人机坐标系,绕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.mzph.cn/news/652612.shtml

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

相关文章

力扣日记1.27-【回溯算法篇】131. 分割回文串

力扣日记:【回溯算法篇】131. 分割回文串 日期:2023.1.27 参考:代码随想录、力扣 131. 分割回文串 题目描述 难度:中等 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可…

D. Epic Transformation(堆+贪心)

思路&#xff1a;我们删的策略是从次数多的数开始删&#xff0c;每次取两种不同的数&#xff0c;每种删去一个&#xff0c;然后放回堆中。 代码&#xff1a; void solve(){int n;cin >> n;map<int,int>mp;for(int i 1;i < n;i ){int x;cin >> x;mp[x] …

Java笔记 --- 四、异常

四、异常 Java.lang.Throwable Error Exception&#xff08;异常&#xff09; 异常的作用 异常的处理方式 JVM默认的处理方式 捕获异常&#xff08;自己处理&#xff09; try里面没有出现异常&#xff0c;就不会运行catch里面的代码 如果出现多个异常&#xff0c;需要多个c…

【归并排序】【图论】【动态规划】【 深度游戏搜索】1569将子数组重新排序得到同一个二叉搜索树的方案数

本文涉及知识点 动态规划汇总 图论 深度游戏搜索 归并排序 组合 LeetCoce1569将子数组重新排序得到同一个二叉搜索树的方案数 给你一个数组 nums 表示 1 到 n 的一个排列。我们按照元素在 nums 中的顺序依次插入一个初始为空的二叉搜索树&#xff08;BST&#xff09;。请你统…

精选6款前端动画特效分享(附在线演示)

分享6款好玩的前端动画特效 其中有CSS动画、canvas动画、js小游戏等等 下方效果图可能不是特别的生动 那么你可以点击在线预览进行查看相应的动画特效 同时也是可以下载该资源的 CSS日食与太阳碰撞动画 一款基于CSS实现的日食动画特效 碰撞物体会从右侧旋转向太阳靠近重合而后…

程序员成被裁最多的职业,互联网成围城,“转码”神话破灭?

随着互联网蓬勃发展&#xff0c;“转码”一直被视为找不到工作时的灵丹妙药。所谓转码&#xff0c;就是转行成为程序员。专业太偏&#xff1f;没关系&#xff0c;可以转码。失业了&#xff1f;没关系&#xff0c;可以转码。不知道该做什么工作&#xff1f;那就转码吧。程序员薪…

idea提交代码到git或svn上时,怎么忽略.class、.iml文件和文件夹等不必要的文件

第一种方法 在Setings–> Editor --> File Types -->Ignore files and folders中添加需要忽略的文件和文件夹&#xff1a; .idea 忽略 .idea 的文件或者文件夹 *.iml 忽略后缀为iml的文件 target 忽略target 文件或目录以及目录下的所有文件注…

Linux学习之文件系统与动静态库

目录 一&#xff0c;文件的管理 什么是磁盘&#xff1f; 磁盘的逻辑抽象结构 格式化 inode 挂载 软硬链接 二&#xff0c;动静态库 什么是动静态库&#xff1f; 1.站在库的制作者角度 静态库&#xff1a; 制作一个静态库 2.站在静态库使用者的角度 动态库 作为制…

80.网游逆向分析与插件开发-背包的获取-自动化助手显示物品数据1

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;升级Notice类获得背包基址-CSDN博客 码云地址&#xff08;ui显示角色数据 分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号&#xff1a;3be017de38c50653b…

操作日志应记录编辑的前后内容变化

总体思路是增加一个注解类&#xff0c;将注解加到要进行记录变化的Java类属性上却可。 上代码&#xff1a; 1. 实现注解类&#xff1a; Target(ElementType.FIELD) Retention(RetentionPolicy.RUNTIME) public interface FieldName {String value();boolean isIgnoreNull()…

day34_js

今日内容 0 复习昨日 1 事件 1.1 事件介绍 1.2 事件绑定方式 1.3 不同事件的演示 2 DOM操作 2.1 概述 2.2 查找元素 2.3 元素内容的查找和设置 2.4 元素属性的查找和设置 2.5 元素CSS样式的查找和设置 2.6 创建元素 2.7 创建文本节点 2.8 追加元素 2.9 删除元素 3 案例练习 0 复…

TCP 异常断开连接【重点】

参考链接 https://xiaolincoding.com/network/3_tcp/tcp_down_and_crash.html https://xiaolincoding.com/network/3_tcp/tcp_unplug_the_network_cable.html#%E6%8B%94%E6%8E%89%E7%BD%91%E7%BA%BF%E5%90%8E-%E6%9C%89%E6%95%B0%E6%8D%AE%E4%BC%A0%E8%BE%93 关键词&#xff1a…

无际线复选框

效果演示 实现了一个网格布局&#xff0c;其中每个网格是一个复选框&#xff0c;可以选择是否显示。每个复选框都有一个漂浮的天花板&#xff0c;表示它是一个房间的天花板。每个房间的天花板都有一个不同的形状和颜色&#xff0c;分别对应不同的房间。整个页面的背景是一个由两…

echarts多个折线图共用X轴,实现tooltip合并和分离

echarts共享X轴案例&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document</…

DevSecOps核心流程基本组成分析

目录 一、DevSecOps核心流程基本组成 1.1 核心流程概述 1.2 DevSecOps 核心流程说明 1.2.1 核心流程图 1.2.2 流程说明 1.2.2.1 持续开发 1.2.2.2 持续构建 1.2.2.3 持续运维 1.2.2.4 持续监控 二、DevSecOps核心流程经典场景 2.1 Azure DevSecOps核心流程 2.1.1 核…

HCIA-HarmonyOS设备开发认证-3.内核基础

目录 前言目标一、进程与线程待续。。。 前言 对于任何一个操作系统而言&#xff0c;内核的运行机制与原理是最为关键的部分。本章内容从多角度了解HarmonyOS的内核运行机制&#xff0c;涵盖进程与线程的概念&#xff0c;内存管理机制&#xff0c;网络特性&#xff0c;文件系统…

HTTP连接池在Java中的应用:轻松应对网络拥堵

网络拥堵是现代生活中无法避免的问题&#xff0c;尤其是在我们这个“点点点”时代&#xff0c;网页加载速度直接影响到我们的心情。此时&#xff0c;我们需要一位“救世主”——HTTP连接池。今天&#xff0c;就让我们一起探讨一下&#xff0c;这位“救世主”如何在Java中大显神…

Linux下安装openresty

Linux下安装openresty 十一、Linux下安装openresty11.1.概述11.2.下载OpenResty并安装相关依赖&#xff1a;11.3.使用wget下载:11.4.解压缩:11.5.进入OpenResty目录:11.6.编译和安装11.7.进入OpenResty的目录&#xff0c;找到nginx&#xff1a;11.8.在conf目录下的nginx.conf添…

C# 获取计算机信息

目录 一、本机信息 1、本机名 2、获得本机MAC地址 3、获得计算机名 4、显示器分辨率 5、主显示器分辨率 6、系统路径 二、操作系统信息 1、操作系统类型 2、获得操作系统位数 3、获得操作系统版本 三、处理器信息 1 、处理器个数 四、CPU信息 1、CPU的个数 2、…

【分布式技术专题】「探索高性能远程通信」基于Netty的分布式通信框架实现(附通信协议和代码)(上)

基于Netty的分布式通信框架实现 前提介绍回顾Dubbo分布式通信框架组成元素程序执行流程消息协议设计实现机制ChannelInboundHandlerAdapter自定义事件处理 ChannelOutboundHandlerAdapter 编(解)码处理器编码过程阶段ChannelOutboundHandlerAdapter序列化实现ChannelOutboundHa…