草庐IT

android - 垂直运动传感器

coder 2023-12-04 原文

我正在开发一个需要检测垂直运动的 Android 应用程序。向上移动平板电脑时,陀螺仪、加速度计和线性加速度传感器会给出相应的值,指示向上或向下运动。

我遇到的问题是,当您将平板电脑向用户倾斜或远离用户时,这些传感器也会读取向上/向下的运动。例如陀螺仪中的x值代表垂直面。但是当你向前倾斜设备时,x 值会改变。 当我做这个 Action 时,读取垂直运动的同一个传感器会为此读取一个值。

其余传感器也是如此。我曾尝试使用方向和陀螺仪来制作条件语句,如果音高没有变化,但 x 变量在上升/下降,那么我们就有垂直运动。这样做的问题是,如果用户将其向上移动但稍微倾斜,它将不再起作用。我也尝试过这样做,如果倾斜度发生变化,则不会有垂直运动。但它的迭代速度如此之快,倾斜度可能会在 1/100 秒内发生变化,但接下来就不会发生变化。

有什么方法可以只读取垂直变化而不读取设备间距的变化?

这是我要检测的内容:

编辑:

“请对你认为的‘向上移动’给出一个数学上合理的定义。” 这是我最初的问题,如何编写一个函数来定义平板电脑何时向上或向下移动?我考虑向上移动的垂直翻译。现在我该如何检测呢?我根本不知道从哪里开始,谢谢。

最佳答案

好吧,尽管这个问题已经很老了,但我在目前的答案和评论中看到了很多困惑,所以如果有人发现这个问题,我打算澄清一些事情。

陀螺仪

首先,陀螺仪不会根据您的定义测量垂直运动(平移运动)。它测量围绕每个轴的旋转,其定义如下图所示。因此,让您向前和向后倾斜设备确实会绕 x 轴旋转,因此您会在陀螺仪传感器的 x 值中看到非零值。

the x value in the gyroscope represents the vertical plane.

我不确定“垂直平面”是什么意思,但是 x 值肯定不代表平面本身,也不代表设备在平面内的方向。

陀螺仪传感器的x值表示设备当前绕x轴的角速度(例如旋转的变化)。

But when you tilt the device forwards, the x value will change. When I make this motion, the same sensor that reads vertical motion reads a value for this.

不太确定您在这里指的是什么。 “读取垂直运动的同一传感器”我假设是陀螺仪,但如前所述,它不读取垂直运动。它完全按照 jar 头上的说明进行操作。

设备坐标系

与原始问题相比,这更像是对用户 Ali 的回答的回应,但在任何一种情况下它仍然相关。

线性加速度传感器(或与此相关的任何其他传感器)的各个输出在设备的坐标系中表示,如上图所示。这意味着如果您稍微旋转设备,输出将不再平行于它们之前重合的任何世界轴。因此,您要么必须强制设备在您的应用程序中处于特定方向,要么考虑新的方向。

ROTATION_VECTOR 传感器与四元数数学或 getRotationMatrixFromVector() 方法相结合,是一种将测量值从设备坐标转换为世界坐标的方法。还有其他方法可以实现相同的目标,但一旦实现,您握持设备的方式就不会影响测量垂直运动。

无论哪种情况,您要查找的轴都是 y 轴,而不是 z 轴。

(如果你有任何机会将“沿设备 y 轴”理解为“垂直”,那么就忽略所有方向,只使用线性加速度传感器)

噪音

你在问题​​中提到了一些噪音和更新率的问题,所以我就在这里提一下。从经常变化的事物中获得良好、一致的数据的最简单也是最常见的方法之一是使用低通滤波器。哪种类型的过滤器最好取决于应用程序,但我发现 exponential moving average filter在大多数情况下是可行的。

结束语

请注意,如果您适当注意方向,转换后的线性加速度输出将很好地近似于垂直运动(嗯,运动的变化),而不会过滤任何噪声。

此外,如果您想测量垂直“运动”,如速度,您需要对加速度计输出进行积分。由于各种原因,这在大多数情况下并没有真正得到很好的结果,尽管它在速度的情况下比尝试测量位置时没有那么严重。

关于android - 垂直运动传感器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13201788/

有关android - 垂直运动传感器的更多相关文章

  1. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  2. STM32读取串口传感器数据(颗粒物传感器,主动上传) - 2

    文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,

  3. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  4. ruby - 在 Ruby 中,垂直线是什么? - 2

    1.upto(9){|x|printx}为什么这行不通?{printx|x}}y呢? 最佳答案 它用于传递给您的block的参数。即在您的示例中,upto将使用1到9中的每个数字调用您的block,当前值可作为x获得。block参数可以有任何名称,就像方法参数一样。例如1.upto(9){|num|putsnum是有效的。就像一个方法的参数一样,一个block也可以有多个参数。例如hash.each_pair{|key,value|puts"#{key}is#{value}"} 关于ru

  5. 建模分析 | 平面2R机器人(二连杆)运动学与动力学建模(附Matlab仿真) - 2

    目录0专栏介绍1平面2R机器人概述2运动学建模2.1正运动学模型2.2逆运动学模型2.3机器人运动学仿真3动力学建模3.1计算动能3.2势能计算与动力学方程3.3动力学仿真0专栏介绍?附C++/Python/Matlab全套代码?课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。?详情:图解自动驾驶中的运动规划(MotionPlanning),附几十种规划算法1平面2R机器人概述如图1所示为本文的研究本体——平面2R机器人。对参数进行如下定义:机器人广义坐标

  6. ABB-IRB-1200运动学分析MATLAB RVC工具分析+Simulink-Adams联合仿真 - 2

    一、机器人介绍        此处是基于MATLABRVC工具箱,对ABB-IRB-1200型号的微型机械臂进行正逆向运动学分析,并利Simulink工具实现对机械臂进行具有动力学参数的末端轨迹规划仿真,最后根据机械模型设计Simulink-Adams联合仿真。 图1.ABBIRB 1200尺寸参数示意图ABBIRB 1200提供的两种型号广泛适用于各作业,且两者间零部件通用,两种型号的工作范围分别为700 mm 和 900 mm,大有效负载分别为 7 kg 和5 kg。 IRB 1200 能够在狭小空间内能发挥其工作范围与性能优势,具有全新的设计、小型化的体积、高效的性能、易于集成、便捷的接

  7. ruby - Prawn :有没有办法让一个盒子里的所有内容垂直对齐? - 2

    我正在尝试将一些内容垂直居中放置在bounding_box中。对于单个文本,这没问题:bounding_box([0,bounds.top],:width=>pdf.bounds.right,:height=>pdf.bounds.top)dotext"verticallyalignedinthesurroundingbox",:valign=>:centerend但是如果我的边界框中有多个元素,我该怎么办:bounding_box([0,bounds.top],:width=>pdf.bounds.right,:height=>pdf.bounds.top)dotext"vertic

  8. Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信) - 2

    运行有问题或需要源码请点赞关注收藏后评论区留言一、利用ContentResolver读写联系人在实际开发中,普通App很少会开放数据接口给其他应用访问。内容组件能够派上用场的情况往往是App想要访问系统应用的通讯数据,比如查看联系人,短信,通话记录等等,以及对这些通讯数据及逆行增删改查。首先要给AndroidMaifest.xml中添加响应的权限配置 下面是往手机通讯录添加联系人信息的例子效果如下分成三个步骤先查出联系人的基本信息,然后查询联系人号码,再查询联系人邮箱代码 ContactAddActivity类packagecom.example.chapter07;importandroid

  9. Android 10.0 设置默认launcher后安装另外launcher后默认Launcher失效的功能修复 - 2

    1.前言 在10.0的系统rom定制化开发中,在系统中有多个launcher的时候,会在开机进入launcher的时候弹窗launcher列表,让用户选择进入哪个launcher,这样显得特别的不方便所以产品开发中,要求用RoleManager的相关api来设置默认Launcher,但是在设置完默认Launcher以后,在安装一款Launcher的时候,默认Launcher就会失效,在系统设置的默认应用中Launcher选项就为空,点击home键的时候会弹出默认Launcher列表,让选择进入哪个默认Launcher.所以需要从安装Launcher的流程来分析相关的设置。来解决问题设置默认La

  10. AiBote 2022 新研发的自动化框架,支持 Android 和 Windows 系统。速度非常快 - 2

    Ai-Bot基于流行的Node.js和JavaScript语言的一款新自动化框架,支持Windows和Android自动化。1、Windowsxpath元素定位算法支持支持Windows应用、.NET、WPF、Qt、Java和Electron客户端程序和ie、edgechrome浏览器2、Android支持原生APP和H5界面,元素定位速度是appium十倍,无线远程自动化操作多台安卓设备3、基于opencv图色算法,支持找图和多点找色,1080*2340全分辨率找图50MS以内4、内置免费OCR人工智能技术,无限制获取图片文字和找字功能。5、框架协议开源,除官方node.jsSDK外,用户可

随机推荐