Articles of android sensors

使用线性加速度计算距离android

可能重复: Android加速计精度(惯性导航) 我正在使用下面的代码来计算距离。 tnew和tnew是分别包含时间戳和加速度的 tnew 。 double distance=0; double init_vel=0; long time_prev=tnew.next(); while(anew.hasNext()) { float temp_acc=anew.next(); long temp_time=tnew.next(); interval=(temp_time-time_prev)/1000f; //milliseconds to seconds double fin_vel=init_vel+(temp_acc*interval); distance+=(init_vel*interval)+0.5f*temp_acc*interval*interval; init_vel=fin_vel; time_prev=temp_time; } 代码中是否有逻辑错误? 因为我得到的值比实际长度要小得多。 LogCat输出: ——— beginning of /dev/log/system ——— beginning of /dev/log/main V/PhonetapeActivity( 8842): Sensor Listener Registered V/PhonetapeActivity( 8842): Sensor Unregistered V/PhonetapeActivity( 8842): No. of Iterations : 49 […]

用Android手机在空气中

我正在研究一个应用程序,用Android手机在空中画。 当我的手机正在移动,感谢加速度计,我检索每个轴上的加速度ax,ay,az。 我感兴趣的是:x,y,z。 从我在论坛和一些教程中读到的内容来看,两次加速都会带来巨大的错误。 那么,获取关于手机取代信息的最佳解决scheme是什么? 谢谢你的帮助。

线性加速度方向跟踪手机的上下移动

我试图跟踪设备的运动只在垂直方向上,即向上和向下移动。 这应该与设备的方向无关。 事情,我已经知道或尝试过这些 线性加速度由传感器TYPE_LINEAR_ACCELERATION给出,轴是电话轴,因此跟踪任何特定的轴没有什么区别。 我尝试应用旋转vector的转置或反转(对于旋转vector的反转或转置相同),然后尝试跟踪线性加速度vector的z方向。 似乎没有帮助。 我正在尝试使用重力值(TYPE_GRAVITY)来获得点积,以获得加速的方向,但似乎很容易出错。 即使当我快速移动我的设备,它说下降。 我将在这里概述这个方法 dotProduct = vectorA[0]*vectorB[0]+vectorA[1]*vectorB[1] + vectorA[2]*vectorB[2]; cosineVal = dotProduct/(|vectorA|*|vectorB|) if(cosineVal > 0 ) down else Up. 这个方法有什么缺点? 请帮忙,我一直在这一段时间卡住了。

在Android上实现JKalman

关于从加速度计数据,其他传感器的数据,计算时空状态,以及在Android和其他设备中使用卡尔曼滤波器,有许多问题。 显然,这样做的最简单的方法是在Android上实现JKalman滤波器,例如用于汽车的稳定移动设备。 但是看看JKalman代码包中的示例实现,它并不多说,实际上和其他的Kalman实现有很大不同。 他们像这样实例化一个卡尔曼类: JKalman kalman = new JKalman(4, 2); 根据定义在哪里 public JKalman(int dynam_params, int measure_params) throws Exception { this(dynam_params, measure_params, 0); } dynam_params是“测量向量维度的数量”,而measure_params是“状态向量维度的数量” 。 Android中读取的传感器数据应该如何映射到这些? 以下是来自加速度计的数据,每500ms采样一次。 在其他听众有陀螺仪和指南针的数据。 我应该如何转换这些数据以input到卡尔曼? @Override public void onSensorChanged(SensorEvent event) { actualTime = System.currentTimeMillis(); if(actualTime – lastUpdateAcc < 500) return; else{ lastUpdateAcc = actualTime; //update myPosition TextView tv = (TextView)findViewById(R.id.textView3); tv.setText(String.format("X: […]

使用Androidaudio和方向传感器的机械安全破解

我正在编写一个应用程序,通过安全操作来帮助锁匠,主要是通过创build他们需要的图表。 当试图通过操纵进入安全区时,需要对“轮组”进行详细分析,并通过绘制“围栏”在“门”上的相对深度来完成。 如果所有的门都排列在包装上,围栏杆将落入凸轮门,锁将打开。 如果有人对更详细的解释感兴趣,你可以在这里findMatt Blaze的一个很棒的对待(从3.3开始):www.crypto.com/papers/safelocks.pdf 制作图表很重要,而且真正需要的是精确测量表盘上的两个位置,并logging两个声音之间的拨号距离。 所以说,“落入”点在10到15之间,可能发生在11.5和14.5的声音事件,或者下一次可能发生在12和15之间。数字,在图表上查找数字,缩小数字,也可能只是图表上的最低点。 我正在通过我的Android耳机插孔使用一个老式的收音机电话听筒(吸盘式麦克风)来收听声音事件。 为了在发生事件的表盘上精确测量,我简单的用魔术贴将手机挂在表盘上,并使用SensorManager根据手机从audio尖峰事件旋转到峰值的距离来计算声音之间的距离-事件。 这很好,但我想这样做,而不需要把手机挂在拨号盘上。 一些公司曾经通过networking摄像头来观察拨号盘本身,但是这样做似乎远不如安装手机那么准确,因为我可以使用小数的旋转angular度来获得更高的精度。 一旦你进入放置位置,你总是会打一个声音,然后将拨号盘备份到下一个声音,所以我想我可以简单地听声音事件,然后一旦拨盘反转方向测量到下一个声音事件,但是这将要求拨号盘不断移动,这在现实生活中不会发生。 而且我想我可以通过使用dynamic像素或舵机来为锁匠移动表盘,但是这不是一个好的解决scheme。 所以我的问题是,如果你们中的任何一个聪明的人都可以想象的方式,这些相关的速度(声音事件之间的距离和拨号位置的变化)可以量化,而无需将电话挂在拨号?

S-View盖板检测

我想写一个三星S-View封面的应用程序。 要了解封面是否closures,我想使用封面上的磁铁而不是光线传感器。 我用自己的Android磁性API试了一下自己: SensorManager manager = (SensorManager) getSystemService(SENSOR_SERVICE); Sensor s = manager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); manager.registerListener(this, s, SensorManager.SENSOR_DELAY_NORMAL); tv.setText(event.values[2]); 但我不知道如何解释数字。 当然,我也尝试了X轴和Y轴。 他们取决于我如何握住我的手机的轴,如果我的手机后面或前面有翻盖,没有太大的区别。 你有什么想法,我怎么能找出盖子是否在我的手机前面使用磁性传感器? 我必须使用未校准的传感器还是我做了其他的错误?

如何检测用户在Android的存在?

我知道银河三星SIII有可能在设置中configuration一个选项,以避免当用户正在看屏幕时屏幕closures。 我认为手机使用相机或存在的传感器。 是否有可能以编程方式? 即使是的话,一些设备也无法做到这一点。 我想象一下这里的一些可能性:使用相机,加速度计,甚至用户活动:如果屏幕打开,触摸,我不知道。 有一个关于“用户存在”到android的特定的图书馆? 在可用时使用所有传感器中最好的?

我们怎样才能测量物体和android手机相机之间的距离

我想计算相机和识别对象之间的距离。为此,我尝试了很多方法,我尝试使用加速计find对象和相机之间的angular度,然后使用 d = h * tan a h是从底部算起的高度,一般是1.4 我试图用get方法来计算angular度。 请让我知道我在哪里做错了。 已经有两天多的时间了,我一直在努力满足这个要求。 我们已经研究了Android Store上可用的各种Camera应用程序,并试图了解相同的function,但没有任何结果。 mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); accSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); magnetSensor = mSensorManager .getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { // TODO Auto-generated method stub } @Override public void onSensorChanged(SensorEvent event) { // TODO Auto-generated method stub if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) gravity = […]

陀螺问题与设备方向

我使用本教程获取设备陀螺仪的俯仰和滚动数据: http : //www.thousand-thoughts.com/2012/03/android-sensor-fusion-tutorial/ 所有的读数都非常准确(在教程中有一个滤波器应用于代码,以消除陀螺漂移)。 不幸的是,代码仅在我的设备平放在与地面平行的表面上时才起作用。 我的应用程序工作的最理想的位置是设备的顶部朝上(即,设备垂直于地面,屏幕面向用户)。 每当我把我的装置定位在这个位置时,音调值就会变成+90度(如预期的那样)。 我想要做的就是将这个位置设置为我的设备的0度点(或者初始位置),这样当我的设备朝向竖直(纵向模式),屏幕面向用户时,音高读数为0度。 我问了这个教程的作者在这个问题上的帮助,他回答说: “如果你想把直立的位置作为最初的位置,你将不得不旋转你的参照系,最简单的方法是将产生的旋转matrix围绕X轴旋转-90度,但是你必须一定要记住旋转不是交换操作,为了更具体的说明,我必须再次查看代码,因为我还没有用过一段时间现在。” 我真的很困惑和难住,如何旋转我的参考框架。 我想底线是,我不知道如何旋转matrix围绕X轴-90度。 如果有人能帮助我这个部分,这将是太棒了。 这里是我的代码,以防有人想要提及它: public class AttitudeDisplayIndicator extends SherlockActivity implements SensorEventListener { private SensorManager mSensorManager = null; // angular speeds from gyro private float[] gyro = new float[3]; // rotation matrix from gyro data private float[] gyroMatrix = new float[9]; // orientation angles from […]

SENSOR_DELAY_GAME:多less钱?

我正在做一个游戏,我需要同步两个播放器对象控制机制:一个是屏幕上的触摸控制器,另一个是G-Sensor。 屏幕上的控制器必须以秒为单位进行初始化,所以我需要知道SENSOR_DELAY_GAME意思。 提前致谢。