如何使用 deviceMotion 姿态值(滚动、俯仰和偏航)来检测运动
Posted
技术标签:
【中文标题】如何使用 deviceMotion 姿态值(滚动、俯仰和偏航)来检测运动【英文标题】:How to use deviceMotion attitude values (roll,pitch and yaw) to detect a motion 【发布时间】:2013-05-17 06:30:17 【问题描述】:我在我的应用程序中使用 coreMotion
来检测 ios 设备的运动。我知道如何从coreMotion
获取不同传感器的数据。我从deviceMotion
获得如下滚动、俯仰和偏航数据:
float pitch = (180/M_PI)*self.manager.deviceMotion.attitude.pitch];
float roll = (180/M_PI)*self.manager.deviceMotion.attitude.roll];
float yaw = (180/M_PI)*self.manager.deviceMotion.attitude.yaw];
如何使用这些数据来检测运动?为此我需要进行哪些计算?
【问题讨论】:
先生,您想用这些值做什么?如果您试图在设备移动时监控这些值,则可以将它们显示为标签。 【参考方案1】:姿态值需要设备运动更新启动为:
startDevicemotionUpdates
要在设备移动时监控姿态值,请使用要在标签中显示的姿态值:
[self.cmMotionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMDeviceMotion *devMotion, NSError *error)
float pitch = (180/M_PI)*self.manager.devMotion.attitude.pitch];
float roll = (180/M_PI)*self.manager.devMotion.attitude.roll];
float yaw = (180/M_PI)*self.manager.devMotion.attitude.yaw];
self.rollLabel.text = [NSString stringWithFormat:@"%f", roll];
self.pitchLabel.text = [NSString stringWithFormat:@"%f",pitch];
self.yawLabel.text = [NSString stringWithFormat:@"%f",yaw];
另外最好不要使用横滚、俯仰和偏航(又名欧拉角)。使用四元数或旋转矩阵以获得更好的准确性。欧拉角倾向于处于一种称为万向节锁定的情况,这会导致数据不可靠。
请查看此链接了解如何使用四元数,并将该值转换为横滚、俯仰和偏航值:SO link
【讨论】:
以上是关于如何使用 deviceMotion 姿态值(滚动、俯仰和偏航)来检测运动的主要内容,如果未能解决你的问题,请参考以下文章
deviceMotion.userAcceleration加速度方向
如何使用 OpenCV 绘制 3D 坐标轴以进行人脸姿态估计?