搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
凡人多烦事01
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
VS-Code为什么无法调试Python文件_vs code没有用于调试python扩展
2
深度学习进阶:揭秘强化学习原理,实战应用全解析!_深度强化学习
3
22、Flutter - 混合开发(三)iOS原生调用Flutter_ios原生跳转到flutter模块中官方使用
4
AI 绘画Stable Diffusion 研究(七) 一文读懂 Stable Diffusion 工作原理
5
36.not comply with the UI component syntax不允许在UI描述里直接使用_does not comply with the ui component syntax
6
stm32 app 连上阿里云_stm32与云平台或者app之间的通信方法
7
Mac上配置ffmpeg 并且将h264视频转h265_264无损转265
8
执行过 git add 和commit后如何撤销_idea误点了git add
9
一些vba知识20200909_vba 如果d2不为空时,则d2写入b2乘c2的值,否则不写入
10
Testbench编写方法_testbench怎么写
当前位置:
article
> 正文
简单VR照片 使用陀螺仪、姿态角(Roll、Pitch、Yaw )、四元数实现_手机 pitch roll yaw
作者:凡人多烦事01 | 2024-06-08 08:24:32
赞
踩
手机 pitch roll yaw
最近在做一个类似VR照片的demo,跟全景图片也很像,只是VR照片与全景720度显示,我只做了180度。但我发现他们实现的原理有一丝相似,希望可以给一些想入行AR、VR的朋友一些提示吧。
要想根据用户摇晃手机的行为轨迹展示相应的场景,那必须要使用移动端的陀螺仪、加速器等传感器来做相应的协调。现在的移动端已经提供了很多传感器,你可以根据自己的需要获取相应的数据。
刚开始的时候,我使用传感器提供的姿态角,也称为欧拉角:pitch yaw roll 来显示。这种 姿态角/欧拉角 比较常用在航空上,无人机技术应该也使用到了这个技术点。我用飞机的模型来展示一下这三个角,就一目了然了(不同作者使用不同的坐标系,使用哪种坐标系,个人而定。):
图一
姿态角/欧拉角 在数学上理解起来会有点抽象,我也是稍理解一点。在维基百科上,欧拉角定义为:用来描述刚体在三维欧几里得空间的取向
,
对于任何参考系,一个刚体的取向,是依照顺序,从这参考系,做三个欧拉角的旋转而设定的。有兴趣了解得深入一点,可以参考(需翻墙):
https://zh.wikipedia.org/wiki/%E6%AC%A7%E6%8B%89%E8%A7%92
我们也可以简单理解这三个角代表什么意思:
1、
俯仰角θ(
pitch
):
围绕Y轴旋转的。
图二
2、偏航角ψ(yaw):围绕Z轴旋转的角度。
图三
3、滚转角Φ(roll):围绕X轴旋转的角度。
图四
手机的坐标系:
手机定义的坐标系统:X轴是水平且指向右边,Y轴是垂直且指向前方,Z轴指向屏幕的正面正上方。
当手机左右摇摆时(绕 y 轴旋转),得到变化的 滚转角Φ(roll),范围为 (-90 to 90)
当手机前后摇摆时(绕 x 轴旋转),
得到变化的 俯仰角θ(pitch)
,范围为 (-180 to 180)
当手机横屏转换成竖屏或竖屏转换成横屏时(绕 z 轴旋转),即得到变化的 偏航角ψ(yaw)。
当手机旋转得到相应的角度时,我们把屏幕的图片替换成相应角度的图片,这让你感觉身临其境,屏幕里的场景会跟着我们视觉和谐变化,这就是VR大概实现的原理吧。
Android提供了类似这个 姿态角/欧拉角 的数据,但两者有些区别,Android 把 偏航角ψ(yaw)定义为
方位角
Azimuth。具体可查看Android官方文档:
https://developer.android.google.cn/reference/android/hardware/SensorEvent.html#values
接收的传感器类型为:
Sensor.TYPE_ORIENTATION
(Android官方已经摈弃,换了其它方法来获取)
使用这种方式去获取的数据有些波动,当拿着手机不动的时候,数据有时变化也比较大,所以后期我改用了 四元数 来处理这个问题。后来听说了一个方案,通过滤波方法,可以把 姿态角/欧拉角 一些波动比较大的数据过滤点, 得到的数据就比较平滑了。(这个方式,我还没有去试,大家可以去了解了解)
使用 “四元数” 也可以实现。四元数理解起来也很抽象:简单的超复数
,
是复数的不可交换延伸。
我是这么简单理解:我们都知道向量,向量是用来形容一个二维空间的轨迹与方向,
形象化地表示为带箭头的线段。四元数则表示为在一个四维空间的轨迹与方向。
来看一个四元数的表现形式:
公式一
这是 A 到 B 的四元数表示,由四个元素组成的数组。我主要讲一些实现方法,里面有一些名词的含义,需要大家找其它的资料慢慢参透。
我们再来看一个公式,
x、y、z轴的偏移量分别为:
公式二
由该公式我们看得出,只要知道一个四元数的值, 我们就能算出 A 到 B 的x、y、z轴的偏移量。
我们从陀螺仪传感器获得的四元数数据,是相对于手机平放在桌面的 xyz 轴的偏移量,我们需要转换成相对上一个位置的偏移量,然后根据偏移量更换相应的图片。
现在我们看一下,怎么获取相对的偏移量:
在平面二维向量中,我们知道向量的运算: 向量AC = 向量AB + 向量BC
公式三
那么在四元数中,我们假设从传感器获取到
第一个 四元数为
,
假设A点原点,即手机平放在桌面水平位置上。第二个四元数为:
,
我们需要得到四元数:
这样才能算出B 到C 的相对 xyz 轴相对位移。通过下面公式可以得到
:
公式四
现在知道
和
由下面公式可以得到:
公式五
从A到B的 四元数 转换成 B到A 的四元数公式,只需把第二、第三、第四个元素取负。
知道了
和
我们用 公式四 得出
,然后通过公式二求出 xyz 轴的偏移量。
四元数 x 轴的偏移量 与 欧拉角的
俯仰角θ(
pitch
)类似,都是指手机竖屏时,左右摇摆的数值。
四元数 y 轴的偏移量 与 欧拉角的滚转角Φ(roll)
类似,都是指手机竖屏时,前后摇摆的数值。
四元数 z 轴的偏移量 与 欧拉角的偏航角ψ(yaw)
类似,都是指手机竖屏时,左右旋转的数值。
在移动端比较常用到 x、y轴偏移量,就是手机左右摇摆与前后摇摆间的偏移。
我做了一个Android demo,用的就是四元数 实现方案,通过四元数得到的y轴偏移量,不断替换图片。
<-------------------------------
当手机横屏,向左倾斜的时候,就会看到右边的视野。也就是判断y轴的相对偏移量,替换不同角度的图片。(gif 图做得有些卡顿,demo里的例子就平滑多了)
-------------------------------->
当手机横屏,向右倾斜的时候,就会看到左边的视野。
demo 链接:https://github.com/xiaoxiaoqingyi/VRPhoto
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/凡人多烦事01/article/detail/689120
推荐阅读
article
RabbitMQ - 基于
SpringAMQP
带你实现五种消息队列模型_
spring
消息队列_o...
*遇到的问题:**当消息进入 queue 时,消费者1 和 消费者2 都会先做一个操作叫做“消息预取”,也就是先取消息,...
赞
踩
article
微信
小
程序
选择
图片
并转
base64
_
微信
小
程序
图片
转
base64
...
一般上传
图片
给后台更多情况是通过
base64
的形式,这样占存小,使用时也可以减少了服务器访问次数。
微信
官方提供的API又...
赞
踩
article
XmlDocument
.
Load
(
url
)
url
是
https
远程
时
,
报错
"
基础连接已经关闭: ...
XmlDocument
.
Load
(
url
)
url
是
https
远程
时
,
报错
"
基础连接已经关闭: 未能为
SSL
/
TLS
...
赞
踩
article
一分钟
快速搭建属于
自己
的
服务器
...
在做移动端应用
的
时候,本地
服务器
生成
的
localhost地址不能在移动端打开,因此我们还需要一个反向代理,下面就来讲一下...
赞
踩
article
【深度
学习
】
卷积
神经网络
CNN
入门介绍...
这篇文章介绍了
卷积
神经网络
CNN
的结构、各层作用和发展历程,包括
卷积
层、池化层和全连接层等,强调了其在图像分类中的应用以...
赞
踩
article
CCF
农产品
价格
预测
-复赛
rank2
代码公布...
向AI转型的程序员都关注了这个号????????????人工智能大数据与深度学习 公众号:datayx项目背景
农产品
价格
...
赞
踩
article
imx6ull
uboot
使用
tftp
加载内核
zImage
及设备树
dtb
文件
...
本文介绍了在基于嵌入式Linux开发过程中,使用
tftp
加载内核
zImage
及设备树
dtb
文件
的方法。通过搭建
tftp
服...
赞
踩
article
C#
发送
邮件
异常:根据
验证
过程
,
远程
证书
无效...
using log4net;using System;using System.Collections.Generic;...
赞
踩
article
ESP8266
01sWiFi
模块保姆级教程
烧录
和联网,
连接
华为
云_
esp8266wifi
模块如何...
乱码,
烧录
,
华为
云IOT平台,联网,_
esp8266wifi
模块如何
连接
网络
esp8266wifi
模块如何
连接
网络 ...
赞
踩
article
The
following
untracked
working
tree
files
would
b...
保留远程服务器中的内容,覆盖本地的内容git clean -d -fxgit pull_he
following
unt...
赞
踩
article
mysql
5.7
安装
教程_
mysql
5.7
下载
...
mysql
5.7
安装
教程1.
下载
mysql
下载
地址:https://dev.
mysql
.com/downloads/my...
赞
踩
article
马逊
s3
云
存储
接口
_技术分享
QingStor
对象
存储
对接指北...
编者按:
对象
存储
是面向海量非结构化数据的通用数据
存储
平台,提供安全可靠、低成本的
云
端
存储
服务。作为企业的数据
存储
和流转中...
赞
踩
article
目前
IT行业最流行
的
九大
前端
框架
_
前端
框架
主流
...
目前
IT行业最流行
的
九大
前端
框架
_
前端
框架
主流
前端
框架
主流
1. React React – A...
赞
踩
article
C语言
与
无人机
飞行
控制
系统
开发:
姿态
解算、
PID
控制
与航路规划(二)_
无人机
编程...
欧拉角是一种常用的空间旋转参数表示法,通过三个互不干涉的旋转角(一般为偏航角、俯仰角、翻滚角)来描述一个刚体相对于固定参...
赞
踩
article
【
花雕
学
AI
】
深入浅出
:
Kimi
的八大功能,让
AI
不再
高不可攀
_
kimi
使用技巧...
用户“驴友
花雕
”拥有多个专栏,包括但不限于“Arduino 168种传感器实验”、“MicroPython动手做”、“花...
赞
踩
article
云计算云存储的一些
基本概念
_
rbd
csi
、
rbd
cinder
、
is
csi
csi
、
is
csi
c...
我们在学习云计算和云存储之前,需要先了解一些很常见的
基本概念
,否则在学习过程中和选型时会比较晕。云计算的三种服务模式:I...
赞
踩
article
【
算法
系列
篇】
哈希
表
...
算法
系列
篇-
哈希
表
:两数之和、判定是否为字符重排、存在重复元素、存在重复元素II、字母异位词分组【
算法
系列
篇】
哈希
表
...
赞
踩
article
Git
与
Git
Hub
的快速使用指北
_
git
如何
连接
git
hub...
**- 在一台电脑建立本地
Git
和
Git
Hub
连接
**1、使用
Git
Bash输入以下命令:(1)在SHH目录生成新的秘...
赞
踩
article
Windows
11
Beta
22635.3646
预览版发布:中国大陆地区新增“
微软
电脑管家”应...
微软
今天面向
Beta
频道的
Windows
Insider 项目成员,发布了适用于
Windows
11 的 KB5...
赞
踩
article
在
linux
下
安装
mysql5.7
_
mysql5.7
aarch64
下载...
我选择的mysql
安装
目录:/www/server/
mysql5.7
一、下载
mysql5.7
安装
包下载地址:https:...
赞
踩
相关标签
java-rabbitmq
rabbitmq
spring
微信小程序
javascript
前端
服务器
nodejs
httpserver
ngrok
npm
深度学习
cnn
神经网络
linux
驱动开发
1024程序员节
c#
git
json
华为云
esp
WiFi
mysql