定义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;
}