aboutsummaryrefslogtreecommitdiff
path: root/src/modules/bottle_drop/bottle_drop.cpp
diff options
context:
space:
mode:
authorLorenz Meier <lm@inf.ethz.ch>2014-09-11 01:04:02 +0200
committerLorenz Meier <lm@inf.ethz.ch>2014-09-11 01:04:02 +0200
commit1512bf727c7ad19400fc4777fbccce7b6e951437 (patch)
treeb50181def8d8d83703ceb6d55f352cc59a36c19c /src/modules/bottle_drop/bottle_drop.cpp
parentbc880a3ff9a297d39c7f53068bbe3ad1be572d44 (diff)
downloadpx4-firmware-1512bf727c7ad19400fc4777fbccce7b6e951437.tar.gz
px4-firmware-1512bf727c7ad19400fc4777fbccce7b6e951437.tar.bz2
px4-firmware-1512bf727c7ad19400fc4777fbccce7b6e951437.zip
Remove useless modulo throttling, which is a nice source of potential non-trivial non-determinism / timing issues.
Diffstat (limited to 'src/modules/bottle_drop/bottle_drop.cpp')
-rw-r--r--src/modules/bottle_drop/bottle_drop.cpp86
1 files changed, 41 insertions, 45 deletions
diff --git a/src/modules/bottle_drop/bottle_drop.cpp b/src/modules/bottle_drop/bottle_drop.cpp
index 811470308..128e40619 100644
--- a/src/modules/bottle_drop/bottle_drop.cpp
+++ b/src/modules/bottle_drop/bottle_drop.cpp
@@ -517,53 +517,49 @@ BottleDrop::task_main()
case DROP_STATE_TARGET_VALID:
{
- // Update drop point at 10 Hz
- if (counter % 10 == 0) {
-
- az = g; // acceleration in z direction[m/s^2]
- vz = 0; // velocity in z direction [m/s]
- z = 0; // fallen distance [m]
- h_0 = _global_pos.alt - _target_position.alt; // height over target at start[m]
- h = h_0; // height over target [m]
- ax = 0; // acceleration in x direction [m/s^2]
- vx = groundspeed_body;// XXX project // ground speed in x direction [m/s]
- x = 0; // traveled distance in x direction [m]
- vw = 0; // wind speed [m/s]
- vrx = 0; // relative velocity in x direction [m/s]
- v = groundspeed_body; // relative speed vector [m/s]
- Fd = 0; // Drag force [N]
- Fdx = 0; // Drag force in x direction [N]
- Fdz = 0; // Drag force in z direction [N]
-
-
- // Compute the distance the bottle will travel after it is dropped in body frame coordinates --> x
- while (h > 0.05f) {
- // z-direction
- vz = vz + az * dt_freefall_prediction;
- z = z + vz * dt_freefall_prediction;
- h = h_0 - z;
-
- // x-direction
- vw = windspeed_norm * logf(h / z_0) / logf(ground_distance / z_0);
- vx = vx + ax * dt_freefall_prediction;
- x = x + vx * dt_freefall_prediction;
- vrx = vx + vw;
-
- // drag force
- v = sqrtf(vz * vz + vrx * vrx);
- Fd = 0.5f * rho * A * cd * (v * v);
- Fdx = Fd * vrx / v;
- Fdz = Fd * vz / v;
-
- // acceleration
- az = g - Fdz / m;
- ax = -Fdx / m;
- }
-
- // compute drop vector
- x = groundspeed_body * t_signal + x;
+ az = g; // acceleration in z direction[m/s^2]
+ vz = 0; // velocity in z direction [m/s]
+ z = 0; // fallen distance [m]
+ h_0 = _global_pos.alt - _target_position.alt; // height over target at start[m]
+ h = h_0; // height over target [m]
+ ax = 0; // acceleration in x direction [m/s^2]
+ vx = groundspeed_body;// XXX project // ground speed in x direction [m/s]
+ x = 0; // traveled distance in x direction [m]
+ vw = 0; // wind speed [m/s]
+ vrx = 0; // relative velocity in x direction [m/s]
+ v = groundspeed_body; // relative speed vector [m/s]
+ Fd = 0; // Drag force [N]
+ Fdx = 0; // Drag force in x direction [N]
+ Fdz = 0; // Drag force in z direction [N]
+
+
+ // Compute the distance the bottle will travel after it is dropped in body frame coordinates --> x
+ while (h > 0.05f) {
+ // z-direction
+ vz = vz + az * dt_freefall_prediction;
+ z = z + vz * dt_freefall_prediction;
+ h = h_0 - z;
+
+ // x-direction
+ vw = windspeed_norm * logf(h / z_0) / logf(ground_distance / z_0);
+ vx = vx + ax * dt_freefall_prediction;
+ x = x + vx * dt_freefall_prediction;
+ vrx = vx + vw;
+
+ // drag force
+ v = sqrtf(vz * vz + vrx * vrx);
+ Fd = 0.5f * rho * A * cd * (v * v);
+ Fdx = Fd * vrx / v;
+ Fdz = Fd * vz / v;
+
+ // acceleration
+ az = g - Fdz / m;
+ ax = -Fdx / m;
}
+ // compute drop vector
+ x = groundspeed_body * t_signal + x;
+
x_t = 0.0f;
y_t = 0.0f;