我正在尝试制作一个应用程序来检测您使用加速度计使用iPhone制作的形状.例如,如果您用手拿着iPhone绘制一个圆圈,该应用程序将能够在屏幕上重绘它.这也适用于正方形,甚至更复杂的形状.我见过这样做的唯一应用示例是AirPaint(http://vimeo.com/2276713),但它似乎无法实时完成.
我的第一个尝试是对加速度计的X和Y参数应用低通滤波器,并使指针移动到这些值,与屏幕的大小成比例.但这显然没有用,我的精度非常低,如果我摇动设备它也会使指针移动......
关于那个的任何想法?您认为加速度计数据是否应该这样做?或者我应该考虑使用其他数据,例如指南针?
提前致谢 !
在我的cocos2d游戏中,我有我的玩家精灵,我希望让他朝我倾斜iPhone的方向移动.我可以解决这个问题,我无法解决的最困难的是:
如何让我的精灵旋转指向我倾斜的方向?这在应用程序商店的"Tilt to Live"游戏中得到了很好的体现.我想要像这样的控件.
我的精灵(对于那些不熟悉cocos2d的人)确实有旋转值,如果有帮助的话.
谢谢.
在Kotlin,我正在开发一个程序,用户可以移动手机来控制虚拟蝴蝶网.位置信息被发送到MQTT broker,UI应用程序将获取数据.
我的问题是准确地显示了这个位置.如果手机是捕手的净部分,那么理想情况下,当您移动手机时,使用加速度计我应该知道您正在移动哪个方向,并且可以发送该数据.
理论上很好,在实践中更难.
为了减少代码,我只想知道手机向上移动多少,意识到它最多会向上移动两到三英尺,所以如果移动六英寸,我想告诉用户界面向上移动六英寸.
我想在开始部分根据手机的方向进行调整.
如何准确跟踪位置信息?
override fun onSensorChanged(sensorEvent: SensorEvent?) {
val mySensor = sensorEvent!!.sensor
if (mySensor.type == Sensor.TYPE_ACCELEROMETER) {
var mSensorZ: Float= 0F
when (mDisplay?.getRotation()) {
Surface.ROTATION_0 -> {
mSensorZ = sensorEvent.values[2];
}
Surface.ROTATION_90 -> {
mSensorZ = sensorEvent.values[2];
}
Surface.ROTATION_180 -> {
mSensorZ = sensorEvent.values[2];
}
Surface.ROTATION_270 -> {
mSensorZ = sensorEvent.values[2];
}
}
val alpha = 0.8;
var gravity = DoubleArray(3)
var linear_acceleration = DoubleArray(3)
// Isolate the force of gravity with the low-pass …Run Code Online (Sandbox Code Playgroud) 我需要实现一个原生iPhone应用程序来测量手机的速度(基本上是速度计).我知道你可以很容易地通过CoreLocation API这样做,但我担心电池消耗,因为这是一个可以一次使用长达几个小时的实时测量.我的理解是,当您主动监控来自LocationManager的事件时(即使我实际上并不关心GPS位置),它是电池密集型的.
探索的另一个明显选择是使用加速度计来尝试计算速度,但API中没有任何内容可以帮助您这样做.根据我的研究,应该可以做到这一点,但看起来非常复杂且容易出错.从加速到速度的转换可能很难开始,加上iPhone加速度计数据可能会"嘈杂".我熟悉使用低/高通滤波等的SDK示例 - 但我没有看到任何显示计算速度的好例子.
有没有人有他们可以分享的任何实际经验?代码会很棒,但实际上我只是想知道是否有人成功完成了这项工作(对于一个长期存在的应用程序)以及他们采取了什么方法.
编辑:我有一个使用LocationManager API的工作原型.它工作正常,但更新周期远非理想的速度实时测量.根据具体情况,有时可能需要4-5秒才能更新.以给定速度巡航往往可以正常工作,但是从用户交互的角度来看,加速/减速往往会非常严重.另外,我需要将速度提供给我正在进行的其他一些计算,而精度并不是我真正需要的.
它似乎可能基于(很少)我见过的其他应用程序,特别是gMeter声称不使用GPS但准确计算速度.我真的很惊讶没有任何参考或任何示例代码可以在任何我能找到的地方展示这一点.我意识到这很复杂,但肯定有一些东西在那里.
我想使用iPhone的加速度计来获取加速度计值的日志文件(可能是24小时).在其他应用程序运行时,是否可以让加速度计在后台运行?
如果这是一个非常基本的问题,我真的很抱歉,但我没有选择,只能问:如何将加速度计数据从设备坐标转换为真实世界坐标?
我的意思是,假设加速度计让我像(Ax,Ay,Az)那样在设备的坐标中,我应该应用什么样的变换来将值转换成(Ax',Ay',Az') - 在现实世界的坐标中 - ,所以我可以使用真实世界坐标中的加速度矢量来计算设备是在加速北,东,西南等?
过去几天我一直在解决这个问题.起初我认为这很难,但在搜索了几十页后,我还没有提出任何功能.
顺便说一句,这里有一些代码,我到目前为止已经实现了:
private SensorEventListener mSensorEventListener = new SensorEventListener() {
public void onAccuracyChanged(Sensor sensor, int accuracy){
}
public void onSensorChanged(SensorEvent event) {
switch(event.sensor.getType()){
case Sensor.TYPE_ACCELEROMETER:
accelerometervalues = event.values.clone();
AX.setText(accelerometervalues[0]+"");
AY.setText(accelerometervalues[1]+"");
AZ.setText(accelerometervalues[2]+"");
break;
case Sensor.TYPE_ORIENTATION:
orientationvalues = event.values.clone();
azimuth.setText(orientationvalues[0]+"");
pitch.setText(orientationvalues[1]+"");
roll.setText(orientationvalues[2]+"");
break;
case Sensor.TYPE_MAGNETIC_FIELD:
geomagneticmatrix =event.values.clone();
TAX.setText(geomagneticmatrix[0]+"");
TAY.setText(geomagneticmatrix[1]+"");
TAZ.setText(geomagneticmatrix[2]+"");
break;
}
if (geomagneticmatrix != null && accelerometervalues != null) {
float[] R = new float[16];
float[] I = new float[16];
SensorManager.getRotationMatrix(R, I, accelerometervalues, geomagneticmatrix); …Run Code Online (Sandbox Code Playgroud) 我试图找出如何开始在iPhone上实现传感器融合.我从大卫萨克斯的演讲开始:
尽管David的演讲非常具有说明性,但它并没有显示任何代码(这很有意义).我已经看过GLGravity(提取重力矢量)和AccelerometerGraph示例,但我需要一些帮助或至少指导如何组合加速度计,陀螺仪和罗盘输入,以便结果类似于David所示.
谢谢
我希望能够编写代码,从加速度计获取信号来执行以下操作:
我对Android手机中的加速度计特别感兴趣,但我对各种关于从加速度计读取信号并使其有用的一般信息持开放态度.我听说过有关DSP的一些好读,但是,我真的很喜欢以代码为中心的资源.无论这些示例是什么编程语言,我都希望在代码中看到一些东西.任何人都可以建议适合该法案的东西吗?我也有兴趣在Android手机上利用其他传感器,但是,我主要是询问加速度计.
如何获得表示设备背面相对于地球坐标指向方向的方向向量?
例如,如果放在桌子上(屏幕朝上),它应该读取[0,0,-1],如果垂直朝北,则应该读取[1,0,0]等.
我知道如何从航向,俯仰和滚转计算它,只要它们相对于地球坐标.要清楚这里,我不是在寻找角速度,而是寻找相对于与地球相切的平面的实际当前角度.因此,如果设备垂直保持朝北,角度"alpha"应为0或360,角度"beta"应为90,"gamma"应为0.我无法弄清楚如何获取这些值无论是.
我整天都在阅读API,但我仍然无法找到如何获得这些东西.
public void onSensorChanged(SensorEvent event) {
// ?
}
Run Code Online (Sandbox Code Playgroud)
感谢您的任何见解.
我正在为Android Wear开发一个应用程序.它从加速计传感器监听坐标并找到模式.
为此,当用户单击按钮时,服务将启动并开始在List中存储坐标.通常,加速计传感器每秒记录4到5个坐标.
问题是有时onSensorChanged()方法在几秒钟内不会接收数据,从而导致数据丢失和查找模式的麻烦.
以下是我的服务要点:https://gist.github.com/cpalosrejano/8f0e59e47124275136fc3d5d941faa07
我试过的事情:
我究竟做错了什么?还有另一种方法可以从加速计传感器接收回调而不会导致数据丢失吗?
提前致谢.
accelerometer ×10
android ×5
iphone ×5
gyroscope ×2
objective-c ×2
sensor ×2
coordinates ×1
device ×1
drawing ×1
electronics ×1
ios ×1
rotation ×1
service ×1
vector ×1
wear-os ×1