用户位置,来自加速度计的数据

时间:2018-10-29 21:47:03

标签: ios swift position accelerometer

任务是通过加速度计相对于初始位置的数据获取用户位置。我有两个数组:IntegratedValues(用于保存速度)和IntegratedValues2(用于位置),并首先向这些数组添加零初始条件。然后,我接收coremotion数据并将用户加速度矢量两次传递到集成函数中以获得位置:


主要部分如下:

 if(self.onButClickedFirstTime) {
                                self.initialFrame = dmData.attitude
                                self.onButClickedFirstTime = false
                                self.currentRotationMatrix = dmData.attitude.rotationMatrix
                                self.curAttitude = dmData.attitude
                            }

                            var calculatedAcceleration = self.multiplyMatrixOnVector(rotMat:
                                dmData.attitude.rotationMatrix, acceleration: [Double](arrayLiteral: dmData.userAcceleration.x,
                                                                                       dmData.userAcceleration.y,
                                                                                       dmData.userAcceleration.z)
                            )

                            for index in 0 ..< 3{
                                if(calculatedAcceleration[index] > -0.1 && calculatedAcceleration[index] < 0.1) {
                                    calculatedAcceleration[index] = 0.0
                                }

                            }

                            self.calculatedAccelerations.append(calculatedAcceleration)
                            if(self.calculatedAccelerations.count >= 2) {
                                //receive velocity in integratedValues array
                                self.integratedValues.append(self.trapezoid())
                                //receive position in integratedValues array
                                self.integratedValues2.append(self.trapezoid2())
                            }
                            else {
                                //receive velocity in integratedValues array
                                self.integratedValues.append(self.rectangle())
                                //receive position in integratedValues array
                                self.integratedValues2.append(self.rectangle2())
                            }

集成功能

func trapezoid() -> [Double]{
    let step = 0.01
    var innerArray:[Double] = [Double].init(repeating: 0, count: 3)

    for k in 0..<3 {

        innerArray[k] =  integratedValues[integratedValues.count-1][k] + (step/2.0)*(calculatedAccelerations[calculatedAccelerations.count-2][k] + calculatedAccelerations[calculatedAccelerations.count-1][k])
    }
    return innerArray
}

func rectangle() -> [Double]{
    let step:Double = 0.01
    var temporary:[Double] = [Double].init(repeating: 0, count: 3)
    for k in 0..<3 {

        temporary[k] =  integratedValues[integratedValues.count-1][k] + (step*calculatedAccelerations[calculatedAccelerations.count-1][k])
    }
    return temporary
}

它不起作用。我得到的坐标值(x,y或z)在我第一次移动手机后一直都分别增加或减少。例如,x和y增大,z永久减小:

x:2.45885665392312 y:12.0701960347246 z:-7.70172802770194

x:2.46064406756483 y:12.0903748004539 z:-7.71571460119331

x:2.46241602875171 y:12.1105587446889 z:-7.72968592982189

x:2.46418465445463 y:12.1307452781769 z:-7.74362066535627

x:2.4659587846542 y:12.1509318116648 z:-7.75751655337187

我在做什么错?谢谢。

0 个答案:

没有答案
相关问题