aboutsummaryrefslogtreecommitdiff
path: root/src/modules/mc_pos_control
diff options
context:
space:
mode:
authorAnton Babushkin <anton.babushkin@me.com>2014-04-25 22:26:51 +0200
committerAnton Babushkin <anton.babushkin@me.com>2014-04-25 22:26:51 +0200
commit2453b354faa5a6ccdcca6afb94b54967679cc9de (patch)
tree131c488beeffd49c4d576566699d1ea232008a69 /src/modules/mc_pos_control
parent0c1de817852dfcbb00b19bd52a16ce80e3c2bbb4 (diff)
downloadpx4-firmware-2453b354faa5a6ccdcca6afb94b54967679cc9de.tar.gz
px4-firmware-2453b354faa5a6ccdcca6afb94b54967679cc9de.tar.bz2
px4-firmware-2453b354faa5a6ccdcca6afb94b54967679cc9de.zip
Failsafe landing without position control fixed
Diffstat (limited to 'src/modules/mc_pos_control')
-rw-r--r--src/modules/mc_pos_control/mc_pos_control_main.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/modules/mc_pos_control/mc_pos_control_main.cpp b/src/modules/mc_pos_control/mc_pos_control_main.cpp
index 6b797f222..5194ef697 100644
--- a/src/modules/mc_pos_control/mc_pos_control_main.cpp
+++ b/src/modules/mc_pos_control/mc_pos_control_main.cpp
@@ -1001,6 +1001,18 @@ MulticopterPositionControl::task_main()
_att_sp.roll_body = euler(0);
_att_sp.pitch_body = euler(1);
/* yaw already used to construct rot matrix, but actual rotation matrix can have different yaw near singularity */
+
+ } else if (!_control_mode.flag_control_manual_enabled) {
+ /* autonomous altitude control without position control (failsafe landing),
+ * force level attitude, don't change yaw */
+ R.from_euler(0.0f, 0.0f, _att_sp.yaw_body);
+
+ /* copy rotation matrix to attitude setpoint topic */
+ memcpy(&_att_sp.R_body[0][0], R.data, sizeof(_att_sp.R_body));
+ _att_sp.R_valid = true;
+
+ _att_sp.roll_body = 0.0f;
+ _att_sp.pitch_body = 0.0f;
}
_att_sp.thrust = thrust_abs;