首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINEAR_ACCELERATION所需传感器

LINEAR_ACCELERATION所需传感器
EN

Stack Overflow用户
提问于 2016-02-14 14:46:38
回答 3查看 551关注 0票数 0

背景:我正在开发一个应用程序,其核心功能包括从安卓手机获取线性加速值等。我还计划提供设备和应用程序安装,因为我们的目标客户主要是组织,该系统是本地部署,而不是通过商店。

困境:现在在选择设备时,设备中需要哪些硬件传感器才能可靠地获得LINEAR_ACCELERATION度量?

在搜索过程中,我发现LINEAR_ACCELERATION是一个“融合”传感器,它使用硬件和/或软件实现的组合,从ACCELEROMETER读数中减去重力因子。

我找到了这个这里

TYPE_LINEAR_ACCELERATION,TYPE_GRAVITY,TYPE_ROTATION_VECTOR是“融合”传感器,它们分别返回线性加速度、重力和旋转矢量(四元数)。没有定义这些实现的方式。在某些设备上,它们是以h/w实现的,在某些设备上,它们使用加速度计+磁强计,在其他设备上,它们使用陀螺仪。

关于这件事没有多少其他的信息。那么谁能提供更多关于这个的信息吗?

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-29 14:18:11

在对各种设备进行了多次尝试和错误之后,我现在有了一个粗略的想法:

首先,从这个android-开发者论坛帖子

TYPE_LINEAR_ACCELERATION,TYPE_GRAVITY,TYPE_ROTATION_VECTOR 是“融合”传感器,分别返回线性加速度、重力和旋转矢量(四元数)。没有定义这些是如何实现的。在某些设备上,它们是以h/w实现的,在某些设备上,它们使用加速度计+磁强计,在其他设备上,它们使用陀螺仪。

就是这样。

现在,我从试验和错误中发现,只有加速度计的设备不提供LINEAR_ACCELERATION传感器(可能会有例外,有些设备可能仍然有传感器,但我尝试过的设备中没有一个有这种传感器)。

因此,要获得LINEAR_ACCELERATION传感器,至少需要一个磁强计或陀螺仪,这在低于INR 8000 (120美元)的智能手机中是非常罕见的。

现在,不是问题的一部分,而是,您如何编写代码来在这两种设备上运行?

我最后做的是:

首先,检查设备是否有传感器:

代码语言:javascript
复制
Sensor linearAcceleration = sMgr.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION),

if (linearAcceleration==null){
   hasLinearAccSensor = false;
}
else {
   hasLinearAccSensor = true;
}

如果你有感应器,那就酷!但如果你不这样做,那么你可以使用TYPE_ACCELEROMETER传感器,自己训练直线加速度。就像这样:

代码语言:javascript
复制
public void processPseudoAcceleration(SensorEvent event)
{
    // alpha is calculated as t / (t + dT)
    // with t, the low-pass filter's time-constant
    // and dT, the event delivery rate

    final float alpha = 0.8f;

    gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
    gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
    gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];

    float linear_acceleration[] = {0,0,0};

    linear_acceleration[0] = event.values[0] - gravity[0];
    linear_acceleration[1] = event.values[1] - gravity[1];
    linear_acceleration[2] = event.values[2] - gravity[2];

    setAccValues(linear_acceleration[0],linear_acceleration[1],linear_acceleration[2]);
}

但是请注意,在我的测试中,我发现这个功能不像实际的传感器读数那么可靠,但是它可以用于大多数应用程序。

希望有人能找到有用的东西。干杯。

票数 2
EN

Stack Overflow用户

发布于 2016-02-14 15:10:05

不是一个确切的答案,但据我所尝试,加速度计并不是一个非常精确的传感器。如果设备没有移动,它应该向下显示9.8。嗯,我做了一个应用程序,只是显示X,Y,Z读数,并运行在许多不同的设备。Z读数从8到11,两个装置放在同一个移动推车上,显示不同的X和Y读数.

票数 1
EN

Stack Overflow用户

发布于 2016-02-18 16:20:59

TYPE_LINEAR_ACCELERATION需要一个陀螺仪。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35393028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档