我最近遇到过一些似乎可以访问我的笔记本电脑上的加速度计或陀螺仪的网站,检测方向或运动的变化.
这是怎么做到的?我必须在window对象上订阅某种事件吗?
已知这些设备(笔记本电脑,手机,平板电脑)有效吗?
注意:我实际上已经知道(部分)这个问题的答案,我将立即发布.我在这里张贴问题的原因,是为了让每个人都知道,加速度计数据是在Javascript中可用的(在某些设备上),并挑战社会关于这个问题发表新的研究结果.目前,似乎几乎没有这些功能的文档.
我正在开发一个Android应用程序来跟踪室内位置.我的手机是使用两个传感器的Google Nexus S,第一个是加速度计,第二个是陀螺仪.
我的想法是,从起始参考点(已知的GPS位置),使用2个传感器(用于运动的加速度计和用于方向的陀螺仪)在移动时跟踪手机.并在用户出发时显示在地图上.
但问题是我不知道如何将这两种传感器结合起来给我一个实际位置?
我在互联网上看过一些关于"kalman过滤器"的文章,经过一些研究后我发现那个过滤器对我来说非常复杂/太多了)特别是在java for Android(cpu杀手)中编码
有人有经验可以与我分享使用陀螺仪和加速度计的室内定位系统吗?
我有一个游戏,其中设备的方向影响游戏的状态.用户必须在横向,纵向和反向横向方向之间快速切换.到目前为止,我一直在通过以下方式注册游戏以获取方向通知:
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
Run Code Online (Sandbox Code Playgroud)
但它太慢了 - 旋转电话和通知实际被解雇之间似乎有大约第二个延迟.我需要一种方法来立即检测设备方向的变化.我已经尝试过使用陀螺仪进行试验,但我还不熟悉它,以了解它是否是我正在寻找的解决方案.
既然iOS 4不再是NDA,我想知道Gyroscope为开发人员提供的加速度计.API有区别吗?其他事情?
我想构建一个应用程序,使用陀螺+加速度计计算iPhone(非长距离)的准确行进距离.这里不需要GPS.
我该如何处理这个问题?
在iPhone上使用陀螺仪需要一些帮助.在特定情况下,我无法理解CMAttitude关于俯仰,翻滚和偏航的读数.
这是我的代码
- (void)handleDeviceMotion:(CMDeviceMotion*)motion {
NSLog(@"Yaw %f ",attitude.yaw * 180 / M_PI);
NSLog(@"Pitch %f ",attitude.pitch * 180 / M_PI);
NSLog(@"Roll %f ",attitude.roll * 180 / M_PI);
}
Run Code Online (Sandbox Code Playgroud)
我们假设iPhone正在平面上,如下图所示:

俯仰,滚转和偏航是(几乎)0度,绕轴的任何转弯都会返回可理解的读数.例如,向右转动设备,Yaw减小,Pitch and Roll保持为0.
现在iPhone处于以下位置:

并再次开始测量.
读数为:Yaw = 0,Pitch = 90,Roll = 0
由于设备围绕该轴旋转,因此间距增加.
将iPhone移动到这个位置:

读数为:Yaw = 30,Pitch = 90,Roll = 0
再一次,由于设备围绕偏航轴旋转,因此该值会改变而其他值则不会改变.
围绕Roll轴移动设备:

读数为:Yaw = 0,Pitch = 90,Roll = -20.
现在我无法理解.将iPhone移动到半径为R(R> 0)的圆周,如下图所示:

Yaw改变同时Pitch and Roll没有.
我原以为Yaw保持不变而Roll已经改变了.
如何补偿这一点,因为我对用户制作的偏航轴周围的旋转感兴趣?
我遇到的另一个问题是漂移.iPhone处于第二个图中描述的位置,长时间(1分钟或更长时间)在我的手中拍摄.偏航不断增加.知道如何补偿漂流吗?
先感谢您
更新 我跟随凯的建议,但没有任何改变.关于我的代码的更多细节.我想仅在用户围绕偏航轴旋转设备时使用Yaw旋转UIImage.这是有效的,但是当用户围绕其自己的垂直轴旋转时,偏转会发生变化.我认为这是不正确的,因为当用户围绕其垂直轴移动时,设备不会围绕其自己的偏航轴旋转.可能是我错了.这是我的原始代码:
- (void)handleDeviceMotion:(CMDeviceMotion*)motion {
CMAttitude *attitude = motion.attitude;
NSLog(@"Yaw %f ",attitude.yaw * …Run Code Online (Sandbox Code Playgroud) 可以假设大多数用户设备都有陀螺仪吗?换句话说,我会在我的应用中使用陀螺仪排除相当多的人吗?
我正在制作儿童故事书应用程序,我希望用户能够围绕偏航轴倾斜设备,来回移动摇椅.它只是应用程序的一小部分,并不一定非常精确.我应该使用一个传感器吗?
我一直在试验iPhone 4上的指南针和陀螺仪,并希望得到一些我正在解决的问题的帮助.我想通过使用陀螺仪的数据来弥补指南针的缓慢.
使用CMMotionManager和它的CMDeviceMotionobject(motionManager.deviceMotion),我得到了CMAttitude对象.如果我错了(请),请纠正我,但这是我从CMAttitude对象的yaw属性中推断出来的(我不需要pitch也不是roll为了我的目的):
yaw范围从0到PI当手机正在指向下方(由所指示的deviceMotion.gravity.z)和逆时针方向摆动,并0以-PI顺时针方向摆动时yaw范围分别为-PIto 0和PIto0locationManager.heading.magneticHeading),我看到罗盘给出了从值0到360与值顺时针摆动时增加好吧,所以一起使用所有这些信息,我能够得到一个我称之为的值horizontal,无论设备是向上还是向下,都会给出值0,360并在设备顺时针摆动时增加(尽管我我在deviceManager.gravity.z周围时仍然遇到麻烦0- yaw价值在这个gravity.z价值上变得非常惊人).
在我看来,我可以使用映射到的计算值"同步" horizontal和magneticHeading值,并在我感觉指南针"赶上"时"同步"该值.horizontalmagneticHeadinghorizontalmagneticHeading
所以我的问题:
CMDeviceMotion是否正确使用陀螺仪数据并且上面列出的假设是正确的?yaw在 …我想用CMAttitude来了解iPad/iPhone屏幕玻璃的正常向量(相对于地面).因此,我会得到以下矢量:

请注意,这与方向不同,因为我不关心设备如何围绕z轴旋转.因此,如果我把iPad放在我的头顶朝下,它会读取(0,-1,0),即使我将它旋转到我头顶上方(如直升机),它仍将继续读取(0, - 1,0):

我觉得这可能很简单,但由于我是四元数的新手,并且不完全理解设备运动的参考框架选项,所以它一整天都在躲避我.
传感器融合视频看起来很棒,但没有代码:http://www.youtube.com/watch?v = C7JQ7Rpwn2k&feature = player_detailpage#t = 1315s
这是我的代码,它只使用加速度计和指南针.我还在3个方向值上使用卡尔曼滤波器,但这里显示的代码太多了.最终,这可行,但结果是太过于紧张或太迟,这取决于我对结果的处理方式以及制作滤波因子的程度.
/** Just accelerometer and magnetic sensors */
public abstract class SensorsListener2
implements
SensorEventListener
{
/** The lower this is, the greater the preference which is given to previous values. (slows change) */
private static final float accelFilteringFactor = 0.1f;
private static final float magFilteringFactor = 0.01f;
public abstract boolean getIsLandscape();
@Override
public void onSensorChanged(SensorEvent event) {
Sensor sensor = event.sensor;
int type = sensor.getType();
switch (type) {
case Sensor.TYPE_MAGNETIC_FIELD: …Run Code Online (Sandbox Code Playgroud) gyroscope ×10
iphone ×5
ios ×4
android ×3
orientation ×2
core-motion ×1
distance ×1
ios4 ×1
ipad ×1
iphone-4 ×1
javascript ×1
location ×1
objective-c ×1
position ×1