Convert from raw sensor values to metric units
Signed-off-by: Keith Packard <keithp@keithp.com>
state.set_ms5607(pres(), temp());
AltosIMU imu = new AltosIMU();
state.set_ms5607(pres(), temp());
AltosIMU imu = new AltosIMU();
- imu.accel_x = accel_x();
- imu.accel_y = accel_y();
- imu.accel_z = accel_z();
+ imu.accel_x = AltosIMU.convert_accel(accel_x());
+ imu.accel_y = AltosIMU.convert_accel(accel_y());
+ imu.accel_z = AltosIMU.convert_accel(accel_z());
- imu.gyro_x = gyro_x();
- imu.gyro_y = gyro_y();
- imu.gyro_z = gyro_z();
+ imu.gyro_x = AltosIMU.convert_gyro(gyro_x());
+ imu.gyro_y = AltosIMU.convert_gyro(gyro_y());
+ imu.gyro_z = AltosIMU.convert_gyro(gyro_z());
state.imu = imu;
AltosMag mag = new AltosMag();
state.imu = imu;
AltosMag mag = new AltosMag();
- mag.x = mag_x();
- mag.y = mag_y();
- mag.z = mag_z();
+ mag.x = AltosMag.convert_gauss(mag_x());
+ mag.y = AltosMag.convert_gauss(mag_y());
+ mag.z = AltosMag.convert_gauss(mag_z());
import java.util.concurrent.*;
public class AltosIMU implements Cloneable {
import java.util.concurrent.*;
public class AltosIMU implements Cloneable {
- public int accel_x;
- public int accel_y;
- public int accel_z;
+ public double accel_x;
+ public double accel_y;
+ public double accel_z;
- public int gyro_x;
- public int gyro_y;
- public int gyro_z;
+ public double gyro_x;
+ public double gyro_y;
+ public double gyro_z;
+
+ public static int counts_per_g = 2048;
+
+ public static double convert_accel(int counts) {
+ return (double) counts / (double) counts_per_g * (-AltosConvert.GRAVITATIONAL_ACCELERATION);
+ }
+
+ public static double counts_per_degsec = 16.4;
+
+ public static double convert_gyro(int counts) {
+ return (double) counts / counts_per_degsec;
+ }
public boolean parse_string(String line) {
if (!line.startsWith("Accel:"))
public boolean parse_string(String line) {
if (!line.startsWith("Accel:"))
String[] items = line.split("\\s+");
if (items.length >= 8) {
String[] items = line.split("\\s+");
if (items.length >= 8) {
- accel_x = Integer.parseInt(items[1]);
- accel_y = Integer.parseInt(items[2]);
- accel_z = Integer.parseInt(items[3]);
- gyro_x = Integer.parseInt(items[5]);
- gyro_y = Integer.parseInt(items[6]);
- gyro_z = Integer.parseInt(items[7]);
+ accel_x = convert_accel(Integer.parseInt(items[1]));
+ accel_y = convert_accel(Integer.parseInt(items[2]));
+ accel_z = convert_accel(Integer.parseInt(items[3]));
+ gyro_x = convert_gyro(Integer.parseInt(items[5]));
+ gyro_y = convert_gyro(Integer.parseInt(items[6]));
+ gyro_z = convert_gyro(Integer.parseInt(items[7]));
import java.util.concurrent.*;
public class AltosMag implements Cloneable {
import java.util.concurrent.*;
public class AltosMag implements Cloneable {
- public int x;
- public int y;
- public int z;
+ public double x;
+ public double y;
+ public double z;
+
+ public static double counts_per_gauss = 1090;
+
+ public static double convert_gauss(int counts) {
+ return (double) counts / counts_per_gauss;
+ }
public boolean parse_string(String line) {
// if (line.startsWith("Syntax error")) {
public boolean parse_string(String line) {
// if (line.startsWith("Syntax error")) {
String[] items = line.split("\\s+");
if (items.length >= 6) {
String[] items = line.split("\\s+");
if (items.length >= 6) {
- x = Integer.parseInt(items[1]);
- y = Integer.parseInt(items[3]);
- z = Integer.parseInt(items[5]);
+ x = convert_gauss(Integer.parseInt(items[1]));
+ y = convert_gauss(Integer.parseInt(items[3]));
+ z = convert_gauss(Integer.parseInt(items[5]));
AltosIMU imu = new AltosIMU();
AltosIMU imu = new AltosIMU();
- imu.accel_x = accel_x;
- imu.accel_y = accel_y;
- imu.accel_z = accel_z;
+ imu.accel_x = AltosIMU.convert_accel(accel_x);
+ imu.accel_y = AltosIMU.convert_accel(accel_y);
+ imu.accel_z = AltosIMU.convert_accel(accel_z);
- imu.gyro_x = gyro_x;
- imu.gyro_y = gyro_y;
- imu.gyro_z = gyro_z;
+ imu.gyro_x = AltosIMU.convert_gyro(gyro_x);
+ imu.gyro_y = AltosIMU.convert_gyro(gyro_y);
+ imu.gyro_z = AltosIMU.convert_gyro(gyro_z);
state.imu = imu;
AltosMag mag = new AltosMag();
state.imu = imu;
AltosMag mag = new AltosMag();
- mag.x = mag_x;
- mag.y = mag_y;
- mag.z = mag_z;
+ mag.x = AltosMag.convert_gauss(mag_x);
+ mag.y = AltosMag.convert_gauss(mag_y);
+ mag.z = AltosMag.convert_gauss(mag_z);