通过加速计和地磁传感器实现方位角

定义6个变量接收加速计的x y z和地磁传感器x y z

  var ax = 0;
  var ay = 0;
  var az = 0;
  var mx = 0;
  var my = 0;
  var mz = 0;

开发平台用的是Apicloud所以采用平台的方法获取加速计的参数和地磁传感器的参数

地磁传感器

function a() {
        api.startSensor({
            type: 'magnetic_field'
        }, function (ret, err) {
            if (ret && ret.status) {
                mx=ret.x
                my=ret.y 
                mz=ret.z
            } else {

            }
        });
    }

加速计传感器

function b() {
        api.startSensor({
            type: 'accelerometer'
        }, function (ret, err) {
            if (ret && ret.status) {
                ax = ret.x
                ay = ret.y
                az = ret.z
            } else {

            }
        });
    }

计算方位角

 function c() {
        var accVals = [ax, ay, az];
        var magVals = [mx, my, mz];
        ftemp = getYaw(accVals, magVals) * 180.0 / 3.141593;
        if (ftemp > 0) ftemp = -180.0 + (ftemp - 180.0);
        ftemp = 0.0 - ftemp;
        ftemp += 90.0;
        ftemp += -2.0;	//补偿磁偏角,不同地区会不一样
        if (ftemp > 360.0) { ftemp -= 360.0 };
        console.log(ftemp);
    }
function getYaw(accVals, magVals) {
        roll = Math.atan2(accVals[0], accVals[2]);
        pitch = -Math.atan(accVals[1] / (accVals[0] * Math.sin(roll) + accVals[2] * Math.sin(roll)));
        yaw = Math.atan2(magVals[0] * Math.sin(roll) * Math.sin(pitch) + magVals[2] * Math.cos(roll) * Math.sin(pitch) + magVals[1] * Math.cos(pitch),
            magVals[0] * Math.cos(roll) - magVals[2] * Math.sin(roll));
        return yaw;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值