首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMMotionManager deviceMotion态度值中的过度“闪烁”

CMMotionManager deviceMotion态度值中的过度“闪烁”
EN

Stack Overflow用户
提问于 2013-04-09 19:03:16
回答 3查看 595关注 0票数 2

我在一个CMMotionManager deviceMotion回调中记录从CADisplayLink获得的“态度”值(我需要基于设备旋转来执行动画)。

这些值似乎每隔几毫秒就“抽动”一次(高达30%)。这看起来很不稳定,让我怀疑我是做错了什么,还是设备出了什么问题。

请在下面找到原木。印刷的“角度”是“态度”的“滚动”部分,转换为学位:

2013-04-10 00:07:12.683 MyApp[450:707] Angle: -92.91

2013-04-10 00:07:12.712 MyApp[450:707] Angle: -70.52

2013-04-10 00:07:12.714 MyApp[450:707] Angle: -92.25

2013-04-10 00:07:12.745 MyApp[450:707] Angle: -70.03

2013-04-10 00:07:12.747 MyApp[450:707] Angle: -91.74

2013-04-10 00:07:12.779 MyApp[450:707] Angle: -69.67

2013-04-10 00:07:12.784 MyApp[450:707] Angle: -91.23

2013-04-10 00:07:12.812 MyApp[450:707] Angle: -69.43

2013-04-10 00:07:12.815 MyApp[450:707] Angle: -91.19

2013-04-10 00:07:12.846 MyApp[450:707] Angle: -69.53

2013-04-10 00:07:12.849 MyApp[450:707] Angle: -91.33

2013-04-10 00:07:12.879 MyApp[450:707] Angle: -69.74

2013-04-10 00:07:12.881 MyApp[450:707] Angle: -91.57

2013-04-10 00:07:12.912 MyApp[450:707] Angle: -70.01

2013-04-10 00:07:12.915 MyApp[450:707] Angle: -91.85

2013-04-10 00:07:12.945 MyApp[450:707] Angle: -70.13

2013-04-10 00:07:12.949 MyApp[450:707] Angle: -91.99

2013-04-10 00:07:12.979 MyApp[450:707] Angle: -70.03

2013-04-10 00:07:12.983 MyApp[450:707] Angle: -91.93

2013-04-10 00:07:13.012 MyApp[450:707] Angle: -69.76

2013-04-10 00:07:13.016 MyApp[450:707] Angle: -91.71

2013-04-10 00:07:13.046 MyApp[450:707] Angle: -69.34

2013-04-10 00:07:13.051 MyApp[450:707] Angle: -91.19

2013-04-10 00:07:13.079 MyApp[450:707] Angle: -68.89

2013-04-10 00:07:13.082 MyApp[450:707] Angle: -90.94

2013-04-10 00:07:13.112 MyApp[450:707] Angle: -68.52

2013-04-10 00:07:13.114 MyApp[450:707] Angle: -90.66

2013-04-10 00:07:13.151 MyApp[450:707] Angle: -67.85

2013-04-10 00:07:13.156 MyApp[450:707] Angle: -89.47

2013-04-10 00:07:13.179 MyApp[450:707] Angle: -65.66

2013-04-10 00:07:13.181 MyApp[450:707] Angle: -88.10

2013-04-10 00:07:13.212 MyApp[450:707] Angle: -63.81

2013-04-10 00:07:13.216 MyApp[450:707] Angle: -86.33

2013-04-10 00:07:13.245 MyApp[450:707] Angle: -61.07

2013-04-10 00:07:13.248 MyApp[450:707] Angle: -83.63

2013-04-10 00:07:13.279 MyApp[450:707] Angle: -58.95

2013-04-10 00:07:13.282 MyApp[450:707] Angle: -81.46

2013-04-10 00:07:13.312 MyApp[450:707] Angle: -56.71

2013-04-10 00:07:13.314 MyApp[450:707] Angle: -79.06

2013-04-10 00:07:13.346 MyApp[450:707] Angle: -53.29

2013-04-10 00:07:13.350 MyApp[450:707] Angle: -75.23

2013-04-10 00:07:13.380 MyApp[450:707] Angle: -51.63

2013-04-10 00:07:13.383 MyApp[450:707] Angle: -73.37

2013-04-10 00:07:13.414 MyApp[450:707] Angle: -50.35

2013-04-10 00:07:13.418 MyApp[450:707] Angle: -72.11

2013-04-10 00:07:13.446 MyApp[450:707] Angle: -50.08

2013-04-10 00:07:13.450 MyApp[450:707] Angle: -72.01

2013-04-10 00:07:13.479 MyApp[450:707] Angle: -50.50

2013-04-10 00:07:13.488 MyApp[450:707] Angle: -73.51

2013-04-10 00:07:13.512 MyApp[450:707] Angle: -51.25

2013-04-10 00:07:13.514 MyApp[450:707] Angle: -74.14

2013-04-10 00:07:13.545 MyApp[450:707] Angle: -49.98

2013-04-10 00:07:13.547 MyApp[450:707] Angle: -72.96

2013-04-10 00:07:13.579 MyApp[450:707] Angle: -46.99

2013-04-10 00:07:13.582 MyApp[450:707] Angle: -68.58

2013-04-10 00:07:13.612 MyApp[450:707] Angle: -43.01

2013-04-10 00:07:13.616 MyApp[450:707] Angle: -65.32

2013-04-10 00:07:13.645 MyApp[450:707] Angle: -40.92

2013-04-10 00:07:13.647 MyApp[450:707] Angle: -62.80

2013-04-10 00:07:13.680 MyApp[450:707] Angle: -39.70

2013-04-10 00:07:13.683 MyApp[450:707] Angle: -61.30

2013-04-10 00:07:13.712 MyApp[450:707] Angle: -40.74

2013-04-10 00:07:13.714 MyApp[450:707] Angle: -63.06

2013-04-10 00:07:13.745 MyApp[450:707] Angle: -42.29

2013-04-10 00:07:13.747 MyApp[450:707] Angle: -65.68

2013-04-10 00:07:13.779 MyApp[450:707] Angle: -43.18

2013-04-10 00:07:13.780 MyApp[450:707] Angle: -67.58

2013-04-10 00:07:13.812 MyApp[450:707] Angle: -42.13

2013-04-10 00:07:13.815 MyApp[450:707] Angle: -66.35

2013-04-10 00:07:13.845 MyApp[450:707] Angle: -40.95

2013-04-10 00:07:13.848 MyApp[450:707] Angle: -64.67

2013-04-10 00:07:13.879 MyApp[450:707] Angle: -39.73

2013-04-10 00:07:13.881 MyApp[450:707] Angle: -62.90

2013-04-10 00:07:13.913 MyApp[450:707] Angle: -40.06

2013-04-10 00:07:13.916 MyApp[450:707] Angle: -63.12

2013-04-10 00:07:13.947 MyApp[450:707] Angle: -40.78

2013-04-10 00:07:13.949 MyApp[450:707] Angle: -63.39

2013-04-10 00:07:13.979 MyApp[450:707] Angle: -41.51

2013-04-10 00:07:13.981 MyApp[450:707] Angle: -62.78

2013-04-10 00:07:14.012 MyApp[450:707] Angle: -42.06

2013-04-10 00:07:14.014 MyApp[450:707] Angle: -61.77

2013-04-10 00:07:14.045 MyApp[450:707] Angle: -43.89

2013-04-10 00:07:14.047 MyApp[450:707] Angle: -61.02

2013-04-10 00:07:14.079 MyApp[450:707] Angle: -45.41

2013-04-10 00:07:14.080 MyApp[450:707] Angle: -61.20

2013-04-10 00:07:14.112 MyApp[450:707] Angle: -46.93

2013-04-10 00:07:14.114 MyApp[450:707] Angle: -61.53

2013-04-10 00:07:14.146 MyApp[450:707] Angle: -49.21

2013-04-10 00:07:14.147 MyApp[450:707] Angle: -62.76

2013-04-10 00:07:14.179 MyApp[450:707] Angle: -51.34

2013-04-10 00:07:14.182 MyApp[450:707] Angle: -64.51

2013-04-10 00:07:14.212 MyApp[450:707] Angle: -53.39

2013-04-10 00:07:14.214 MyApp[450:707] Angle: -66.41

2013-04-10 00:07:14.245 MyApp[450:707] Angle: -56.29

2013-04-10 00:07:14.248 MyApp[450:707] Angle: -69.30

2013-04-10 00:07:14.279 MyApp[450:707] Angle: -57.85

2013-04-10 00:07:14.280 MyApp[450:707] Angle: -70.88

2013-04-10 00:07:14.312 MyApp[450:707] Angle: -60.23

测量到的角度是“闪烁”几乎每几毫秒20度。根据我到目前为止所读到的关于CoreMotion的内容,我期待错误,但不是这个范围的错误。

我可能做错了什么--我没有测量正确的东西吗?

编辑:下面的代码-不好意思格式化。“代码”和“区块引号”似乎都不能正常工作。

//我让用户在启动运动更新之前稍微放松一下。 //目前,这是一个天真的空闲计时器的形式,这个计时器是在 //启动应用程序的前9秒(正当原因)

  • (void)didFireIdleTimer:(id)theTimer { [mReferenceAttitude release]; mReferenceAttitude = [[[sSharedMotionManager deviceMotion] attitude] retain]; [self stopIdleTimer]; }

//sSharedMotionManager是CMMotionManager //的一个实例,我正在设置一个显示链接回调,其中“当前”deviceMotion //每次检索与当前“态度”之间的差异 //和参照“态度”计算。正是这种不同 //转换为学位并打印//这是显示链接回调,名为延迟。::)

  • (Void)didRefreshScreen:(Id)发件人{ CMAttitude \*thisAttitude = [[sSharedMotionManager deviceMotion] attitude]; [thisAttitude multiplyByInverseOfAttitude:mReferenceAttitude]; NSLog(@"Angle: %0.2f", thisAttitude.roll \* 180 / 3.14159); //Rest of the code //.... }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-12 07:09:40

几个小时的测试证实,出现此问题是因为deviceMotionUpdateInterval没有在CMMotionManager实例上设置。将其设置为1.0/60.0 (或任何其他有效值)将修复此“闪烁”,并导致值的平稳变化。

票数 1
EN

Stack Overflow用户

发布于 2013-04-10 08:42:23

看看这些值,我注意到,每秒钟的测量序列似乎都是正常的。意思是1,3,5,7,.和2,4,6,8 .都是膨胀稳定的序列。在大多数情况下,这意味着有2个实例正在运行,或者参考态度被切换。

票数 0
EN

Stack Overflow用户

发布于 2014-05-23 02:57:34

下面是我的代码,以避免在五月应用程序中闪烁:

代码语言:javascript
复制
float xAxis,yAxis, zAxis;
xAxis = self.manager.accelerometerData.acceleration.x;
yAxis = self.manager.accelerometerData.acceleration.y;
zAxis = self.manager.accelerometerData.acceleration.z;

// returns if the phone is lying on the table:
if (zAxis < -0.8 || zAxis > 0.8) return;

CGFloat angle =  atan2f(xAxis, yAxis ); // The angle!!!

float noise = 0.011; // Flicker noise (the noise you want to filter)

// max and min are global variables
if (angle > max){
    max = angle;
    min = max - noise;
}
if (angle < min){
    min = angle;
    max = min + noise;
}

// Average: (no flickering):
angle = min + (max - min) / 2.0;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15910402

复制
相关文章

相似问题

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