标签: core-motion

iphone - 偏航,俯仰和滚动的核心运动范围

我现在没有iPhone 4,我正在尝试找到一个文档,显示偏航,俯仰和滚动的范围以及设备的相应位置.

我知道加速度计从-1到+1不等,但昨天在我的iPhone上进行的测试显示,滚动从-M_PI变化到+ M_PI,但是偏航和俯仰范围是其中的一半.它是否正确?

我在哪里可以找到有关这些范围的文档?我没有在Apple模糊的文档上看到它.

谢谢.

iphone core-motion

6
推荐指数
1
解决办法
6137
查看次数

NSTimeInterval到unix时间戳

我从CMMotionManager获取 CMDeviceMotion对象.CMDeviceMotion的一个属性是时间戳,表示为NSTimeInterval(double).根据文档,这允许"亚毫秒"时间戳精度.

[motionManager startDeviceMotionUpdatesToQueue:motionQueue withHandler:^(CMDeviceMotion *motion, NSError *error) { 
  NSLog(@"Sample: %d Timestamp: %f ",counter,  motion.timestamp);
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,NSTimeInterval是自上次设备启动以来计算的,对以原始形式使用它提出了重大挑战.

有没有人有一个工作代码将此NSTimeInterval转换为类似时间戳(UTC时区)的Unix?

谢谢!

timestamp nstimeinterval ios core-motion

6
推荐指数
1
解决办法
6164
查看次数

CMAttitude和CATransform3D是否与旋转矩阵相关?

我正在研究核心运动类CMAttitude,它可以将设备的方向表示为3x3旋转矩阵.与此同时,我看了一下CATransform3D,其中包含了视图的态度以及缩放.这CATransform3D是一个4x4矩阵.

我已经看到OpenGL旋转矩阵是4x4,只是在第4行和第4列填充了0001.

如果CMAttitude的旋转矩阵与CATransform的矩阵相关,我就会徘徊?

我可以使用通过旋转矩阵获得的空间中的设备旋转来转换UIView CATransform3D吗?我的目的是让用户移动手机并将相同的变换应用到屏幕上的UIView.

额外问题:如果它们相关,我如何将CMAttitude的旋转矩阵转换为CATransform3D?

iphone matrix catransform3d ios core-motion

6
推荐指数
1
解决办法
853
查看次数

用核心运动计算精益角度

我的申请记录会话.当用户启动记录会话时,我开始从设备的CMMotionManager对象收集数据并将它们存储在CoreData上以便稍后处理和显示.我收集的数据包括gps数据,加速度计数据和陀螺仪数据.数据频率为10Hz.

目前,我正在努力用运动数据计算设备的倾斜角度.可以通过使用重力数据来计算设备的哪一侧着陆,但是我想要计算用户与地面之间的左右角度,而不管行进方向如何.

这个问题需要一些线性代数知识来解决.例如,对于某些点的计算,我必须计算计算平面上的3D线的方程.我正在研究这一天,而且它变得越来越复杂.我根本不擅长数学.一些与该问题相关的数学例子也很受欢迎.

iphone math linear-algebra ios core-motion

6
推荐指数
1
解决办法
4525
查看次数

检测平面上的iPhone移动

我是一名coremotion初学者.

我需要检测平板表面上的iPhone移动 - 到目前为止,我通过访问陀螺仪的偏航来检测其侧向移动,但我想不出一种检测上/下变化的方法.我尝试使用加速度计,但它检测到更多的设备倾斜而不是移动.此外,当运动停止时会有反作用力.

您是否有任何想法,以便能够以相当精确的方式获得运动数据?我需要它来做空气曲棍球比赛.

cocoa-touch accelerometer ios gyroscope core-motion

6
推荐指数
2
解决办法
5059
查看次数

CoreMotion Bump与iPhone上的摇晃

我试图检测用户何时将iPhone撞到另一个物体而不是他们只是摇动手机.我似乎无法让它完全按照我想要的方式工作,因为它要么记录太多的颠簸,没有碰撞,要么认为震动是一个颠簸.

有人可以查看下面的代码并提供建议吗?我需要确定一个或另一个发生.

// SHAKING
- (void) motionEnded: (UIEventSubtype) motion withEvent:(UIEvent *)event
{
if (motion == UIEventSubtypeMotionShake)
{
    [self setNumberOfShakes: [self numberOfShakes] + 1];
    [self reloadAllTapShakeData];
}
}

// TAPPING & BUMPING
- (void) setupAccelerometerMonitoring
{
[self setManager: [[CMMotionManager alloc] init]];
if ([[self manager] isDeviceMotionAvailable])
{
    [[self manager] setDeviceMotionUpdateInterval: 0.02];
    [[self manager] startDeviceMotionUpdatesToQueue: [NSOperationQueue mainQueue] withHandler: ^(CMDeviceMotion * _Nullable motion, NSError * _Nullable error)
    {
        //NSLog(@"x = %f | y = %f | z = %f", [motion userAcceleration].x, [motion userAcceleration].y, [motion …
Run Code Online (Sandbox Code Playgroud)

iphone ios core-motion

6
推荐指数
1
解决办法
305
查看次数

如何避免在Core Motion控制的SceneKit相机中滚动?

我正在CMDeviceMotion使用本答案中描述的CMDeviceMotion扩展将SceneKit相机设置为当前姿态:

func deviceDidMove(motion: CMDeviceMotion?, error: NSError?) {
    if let motion = motion {
        let orientation = motion.gaze(atOrientation: UIApplication.sharedApplication().statusBarOrientation)
        cameraNode.orientation = orientation
    }
}
Run Code Online (Sandbox Code Playgroud)

这很漂亮,但是,我想阻止旋转(滚动)并且只允许相机转动(偏转)和俯仰.

我试图将四元数转换回欧拉角,并将roll保持为0:

cameraNode.eulerAngles = SCNVector3(
            x: orientation.pitch(),
            y: orientation.yaw(),
            z: 0)
Run Code Online (Sandbox Code Playgroud)

然而,这仅适用于偏航运动的一半.另一半,相机倒置.我怀疑这是涉及欧拉角的万向节锁定问题.

四元数对我来说有点像黑魔法,但是有没有办法直接在四元数上去除滚动分量,这样我就可以避免欧拉角?

camera quaternions ios core-motion scenekit

6
推荐指数
0
解决办法
669
查看次数

iOS:同步来自相机和运动数据的帧

我正在尝试从相机和相关运动数据中捕获帧。对于同步,我使用时间戳。视频和动作被写入文件,然后进行处理。在那个过程中,我可以计算每个视频的运动帧偏移。

结果表明,相同时间戳的运动数据和视频数据相互偏移了不同的时间,从 0.2 秒到 0.3 秒不等。该偏移对于一个视频是恒定的,但因视频而异。如果每次都是相同的偏移量,我就可以减去一些校准值,但事实并非如此。

有没有一种同步时间戳的好方法?也许我没有正确记录它们?有没有更好的方法将它们带到相同的参考系?

CoreMotion 返回相对于系统正常运行时间的时间戳,因此我添加偏移量以获得 unix 时间:

uptimeOffset = [[NSDate date] timeIntervalSince1970] - 
                   [NSProcessInfo processInfo].systemUptime;

CMDeviceMotionHandler blk =
    ^(CMDeviceMotion * _Nullable motion, NSError * _Nullable error){
        if(!error){
            motionTimestamp = motion.timestamp + uptimeOffset;
            ...
        }
    };

[motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXTrueNorthZVertical
                                                   toQueue:[NSOperationQueue currentQueue]
                                               withHandler:blk];
Run Code Online (Sandbox Code Playgroud)

为了获得高精度的帧时间戳,我使用了 AVCaptureVideoDataOutputSampleBufferDelegate。它也偏移到 unix 时间:

-(void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
       fromConnection:(AVCaptureConnection *)connection
{
    CMTime frameTime = CMSampleBufferGetOutputPresentationTimeStamp(sampleBuffer);

    if(firstFrame)
    {
        firstFrameTime = CMTimeMake(frameTime.value, frameTime.timescale);
        startOfRecording = [[NSDate date] timeIntervalSince1970];
    }

    CMTime presentationTime = CMTimeSubtract(frameTime, firstFrameTime);
    float seconds = CMTimeGetSeconds(presentationTime);

    frameTimestamp …
Run Code Online (Sandbox Code Playgroud)

video synchronization avfoundation ios core-motion

6
推荐指数
1
解决办法
1002
查看次数

SWIFTUI 和 Core Motion

我正在尝试在 SWIFTUI 视图中显示加速度计数据。此代码可以打印到控制台,但我不明白如何将其放入视图中,以便我可以在 SWIFTUI 中使用它。

import SwiftUI
import CoreMotion


struct AccelerometerView: View {

    let motionManager = CMMotionManager()
    let queue = OperationQueue()


    var body: some View {

        VStack{
            Text("accelerate:").onAppear {
                print("ON APPEAR")
                self.motionManager.startDeviceMotionUpdates(to: self.queue) { (data: CMDeviceMotion?, error: Error?) in
                    guard let data = data else {
                        print("Error: \(error!)")
                        return
                    }
                    let attitude: CMAttitude = data.attitude

                    print("pitch: \(attitude.pitch)")
                    print("yaw: \(attitude.yaw)")
                    print("roll: \(attitude.roll)")
                }
            }//.onappear

            //Text("Pitch:\(attitude.pitch)")

        }//Vstack

    }//view
}//struct

struct AccelerometerView_Previews: PreviewProvider {
    static var previews: some View {
        AccelerometerView()
    }
}
Run Code Online (Sandbox Code Playgroud)

core-motion swiftui

6
推荐指数
1
解决办法
2940
查看次数

5
推荐指数
1
解决办法
310
查看次数