aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLorenz Meier <lm@inf.ethz.ch>2015-03-15 17:25:55 +0100
committerLorenz Meier <lm@inf.ethz.ch>2015-03-15 17:25:55 +0100
commit3436f089768c31f0d925faf36b41626b78ddb6f5 (patch)
treec273bff0e23cc17e2bf0b9de1b0fa41182b044a1 /src
parentf36f43db6f2ad545c5b102d6010ecc8176f151a7 (diff)
downloadpx4-firmware-3436f089768c31f0d925faf36b41626b78ddb6f5.tar.gz
px4-firmware-3436f089768c31f0d925faf36b41626b78ddb6f5.tar.bz2
px4-firmware-3436f089768c31f0d925faf36b41626b78ddb6f5.zip
LSM303D driver: Rotate before applying offsets.
Diffstat (limited to 'src')
-rw-r--r--src/drivers/lsm303d/lsm303d.cpp33
1 files changed, 21 insertions, 12 deletions
diff --git a/src/drivers/lsm303d/lsm303d.cpp b/src/drivers/lsm303d/lsm303d.cpp
index b5f01b942..84f7fb5c8 100644
--- a/src/drivers/lsm303d/lsm303d.cpp
+++ b/src/drivers/lsm303d/lsm303d.cpp
@@ -1517,9 +1517,16 @@ LSM303D::measure()
accel_report.y_raw = raw_accel_report.y;
accel_report.z_raw = raw_accel_report.z;
- float x_in_new = ((accel_report.x_raw * _accel_range_scale) - _accel_scale.x_offset) * _accel_scale.x_scale;
- float y_in_new = ((accel_report.y_raw * _accel_range_scale) - _accel_scale.y_offset) * _accel_scale.y_scale;
- float z_in_new = ((accel_report.z_raw * _accel_range_scale) - _accel_scale.z_offset) * _accel_scale.z_scale;
+ float xraw_f = raw_accel_report.x;
+ float yraw_f = raw_accel_report.y;
+ float zraw_f = raw_accel_report.z;
+
+ // apply user specified rotation
+ rotate_3f(_rotation, xraw_f, yraw_f, zraw_f);
+
+ float x_in_new = ((xraw_f * _accel_range_scale) - _accel_scale.x_offset) * _accel_scale.x_scale;
+ float y_in_new = ((yraw_f * _accel_range_scale) - _accel_scale.y_offset) * _accel_scale.y_scale;
+ float z_in_new = ((zraw_f * _accel_range_scale) - _accel_scale.z_offset) * _accel_scale.z_scale;
/*
we have logs where the accelerometers get stuck at a fixed
@@ -1555,9 +1562,6 @@ LSM303D::measure()
accel_report.y = _accel_filter_y.apply(y_in_new);
accel_report.z = _accel_filter_z.apply(z_in_new);
- // apply user specified rotation
- rotate_3f(_rotation, accel_report.x, accel_report.y, accel_report.z);
-
accel_report.scaling = _accel_range_scale;
accel_report.range_m_s2 = _accel_range_m_s2;
@@ -1623,16 +1627,21 @@ LSM303D::mag_measure()
mag_report.x_raw = raw_mag_report.x;
mag_report.y_raw = raw_mag_report.y;
mag_report.z_raw = raw_mag_report.z;
- mag_report.x = ((mag_report.x_raw * _mag_range_scale) - _mag_scale.x_offset) * _mag_scale.x_scale;
- mag_report.y = ((mag_report.y_raw * _mag_range_scale) - _mag_scale.y_offset) * _mag_scale.y_scale;
- mag_report.z = ((mag_report.z_raw * _mag_range_scale) - _mag_scale.z_offset) * _mag_scale.z_scale;
+
+ float xraw_f = mag_report.x_raw;
+ float yraw_f = mag_report.y_raw;
+ float zraw_f = mag_report.z_raw;
+
+ // apply user specified rotation
+ rotate_3f(_rotation, xraw_f, yraw_f, zraw_f);
+
+ mag_report.x = ((xraw_f * _mag_range_scale) - _mag_scale.x_offset) * _mag_scale.x_scale;
+ mag_report.y = ((yraw_f * _mag_range_scale) - _mag_scale.y_offset) * _mag_scale.y_scale;
+ mag_report.z = ((zraw_f * _mag_range_scale) - _mag_scale.z_offset) * _mag_scale.z_scale;
mag_report.scaling = _mag_range_scale;
mag_report.range_ga = (float)_mag_range_ga;
mag_report.error_count = perf_event_count(_bad_registers) + perf_event_count(_bad_values);
- // apply user specified rotation
- rotate_3f(_rotation, mag_report.x, mag_report.y, mag_report.z);
-
_mag_reports->force(&mag_report);
/* XXX please check this poll_notify, is it the right one? */