计算沿y轴方向的方向(角度测量)变化率是多少?

3
我希望计算iPhone绕y轴方向的方向变化率。 1. 首先需要将参考定义为y轴, 2. 然后测量相对于定义参考的方向的方向变化率(角度测量)。
CMAttitude是否提供可靠的角度测量来实现此目的?或者我可以使用旋转矩阵或集成陀螺仪数据(我实现了这种方法,但由于陀螺仪漂移而无法正常工作)。因此,请建议一个可靠的方法来完成此操作?
谢谢!
1个回答

2
首先,需要澄清的是:旋转速率不是从任何轴测量的,而是围绕一个轴测量的。您不需要提供初始参考框架,因为您只关心随时间的变化。
无论如何,最好的选择是CMDeviceMotionrotationRate属性,文档中说:
“CMRotationRate结构包含指定设备围绕三个轴的旋转速率的数据。此属性的值包含通过Core Motion算法去除了陀螺仪漂移读数的陀螺仪数据的测量。”
它表示集成来自多个源(加速度计)的传感器数据,以试图从读数中消除陀螺仪漂移,而不是CMGyroData类,关于这一点文档说:
这个属性提供了设备绕三个轴旋转的速率测量。虽然此属性提供了陀螺仪的原始数据,但CMDeviceMotion的同名属性提供了一个CMRotationRate结构,用于测量被Core Motion算法去偏置后的陀螺仪数据。

从这些参考资料中可以得出结论:如果需要最准确的旋转速率数据,应该使用类似以下的内容:
CMMotionManager* manager = [[CMMotionManager alloc] init];
[manager startDeviceMotionUpdates];

// Later, in some other scope...
double rotationAroundY = [[manager deviceMotion] rotationRate].y;

1
@sam,当你开始朝另一个方向旋转时,旋转速率会改变其符号,而不是在你经过原始参考系时。如果你想绘制相对于参考系的旋转偏移随时间的变化情况,你根本不需要使用rotationRate。最好直接在一些规则的时间间隔内对attitude属性进行采样,并准确地绘制它给出的内容。 - Matt Wilding
我直接绘制了姿态的读数,但在旋转偏移在不同级别之间改变的点处,信号会突然漂移。但是在这里,我没有使用来自参考姿态的更新。使用参考姿态的更新是否比普通更新更有优势?除了使用姿态属性以更高的计算成本外,还有其他准确的方法吗?谢谢! - sam
@sam 从参考姿态更新对读数的准确性没有影响。这只是一种方便的方式来改变完全相同数据的表示方式。CMDeviceMotion是读取数据最昂贵和最准确的方法,因为CoreMotion正在为您处理传感器数据的集合。CMGyroData更便宜但不太准确,因为它只是原始陀螺仪数据。不幸的是,即使是最准确的版本仍然明显受到漂移的影响,除了希望苹果未来可以改进框架之外,我们无能为力。 - Matt Wilding
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/16387/discussion-between-sam-and-matt-wilding - sam
@sam 你可能想看一下这个 - Hammer
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接