Java - вычислить градусы компаса с помощью значений акселерометра и компаса - PullRequest
0 голосов
/ 06 мая 2020

Я работаю с датчиком Lorawan, чтобы вычислить градусы компаса. К сожалению, я пока не могу этого сделать, несмотря на то, что прочитал множество ссылок и сообщений на Stackoverflow и других сайтах.

Я запускаю код, который пробую в The Things Network, в java.

Моей первой попыткой был этот код, но мне все еще нужно использовать значения акселерометра в моих расчетах. По крайней мере, полученное значение сильно отличается от моего значения компаса на моем iPhone.

(Расчет / 10 и * 0.92 связан с документацией моих поставщиков, единственная документация, которая у них есть, - это )

Надеюсь, кто-то сможет сделать меня еще на шаг в правильном направлении.

function Decoder(bytes, port)
{
    // Decode an uplink message from a buffer

    var accel_x = (bytes[16] << 8) * 2/32768 ;
    var accel_y = (bytes[17] << 8) * 2/32768 ;
    var accel_z = (bytes[18] << 8) * 2/32768 ;

    // (array) of bytes to an object of fields.
    var compass_x = bytes[19] << 24 >> 16 | bytes[20];
    var compass_y = bytes[21] << 24 >> 16 | bytes[20];
    var compass_z = bytes[23] << 24 >> 16 | bytes[20];

    var x = (compass_x / 10) * 0.92;
    var y = (compass_y / 10) * 0.92;
    var z = (compass_z / 10) * 0.92;

     if (Math.atan2(y, x) >= 0) {
        angle = Math.atan2(y, x) * (180 / Math.PI)
      } else {
        angle = (Math.atan2(y, x) + 2 * Math.PI) * (180 / Math.PI)
      }

    var angle2 = Math.round(angle)


    return {
    angle2:angle2
     x:x
     y:y
     z:z
     compass_x: compass_x
     compass_y:compass_y
     compass_z:compass_z
     accel_x:accel_x
     accel_y:accel_y
     accel_z:accel_z
     angle:angle
    };
}

Например: код java дает угол 107 градусов, а мой iPhone 38 .

Пример вывода:

{
  "accel_x": 3.875,
  "accel_y": 0.015625,
  "accel_z": 0.96875,
  "angle": 106.72594406120638,
  "angle2": 107,
  "compass_x": -769,
  "compass_y": 2559,
  "compass_z": -1025,
  "x": -70.748,
  "y": 235.42800000000003,
  "z": -94.3
}
...