mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-19 01:13:34 +08:00
Stabilization enabling / switching
This commit is contained in:
+52
-47
@@ -1684,63 +1684,63 @@ int commander_thread_main(int argc, char *argv[])
|
||||
|
||||
if ((hrt_absolute_time() - sp_man.timestamp) < 100000) {
|
||||
|
||||
/*
|
||||
* Check if manual control modes have to be switched
|
||||
*/
|
||||
if (!isfinite(sp_man.manual_mode_switch)) {
|
||||
printf("man mode sw not finite\n");
|
||||
// /*
|
||||
// * Check if manual control modes have to be switched
|
||||
// */
|
||||
// if (!isfinite(sp_man.manual_mode_switch)) {
|
||||
// printf("man mode sw not finite\n");
|
||||
|
||||
/* this switch is not properly mapped, set default */
|
||||
if ((current_status.system_type == MAV_TYPE_QUADROTOR) ||
|
||||
(current_status.system_type == MAV_TYPE_HEXAROTOR) ||
|
||||
(current_status.system_type == MAV_TYPE_OCTOROTOR)) {
|
||||
// /* this switch is not properly mapped, set default */
|
||||
// if ((current_status.system_type == MAV_TYPE_QUADROTOR) ||
|
||||
// (current_status.system_type == MAV_TYPE_HEXAROTOR) ||
|
||||
// (current_status.system_type == MAV_TYPE_OCTOROTOR)) {
|
||||
|
||||
/* assuming a rotary wing, fall back to SAS */
|
||||
current_status.manual_control_mode = VEHICLE_MANUAL_CONTROL_MODE_SAS;
|
||||
current_status.flag_control_attitude_enabled = true;
|
||||
current_status.flag_control_rates_enabled = true;
|
||||
} else {
|
||||
// /* assuming a rotary wing, fall back to SAS */
|
||||
// current_status.manual_control_mode = VEHICLE_MANUAL_CONTROL_MODE_SAS;
|
||||
// current_status.flag_control_attitude_enabled = true;
|
||||
// current_status.flag_control_rates_enabled = true;
|
||||
// } else {
|
||||
|
||||
/* assuming a fixed wing, fall back to direct pass-through */
|
||||
current_status.manual_control_mode = VEHICLE_MANUAL_CONTROL_MODE_DIRECT;
|
||||
current_status.flag_control_attitude_enabled = false;
|
||||
current_status.flag_control_rates_enabled = false;
|
||||
}
|
||||
// /* assuming a fixed wing, fall back to direct pass-through */
|
||||
// current_status.manual_control_mode = VEHICLE_MANUAL_CONTROL_MODE_DIRECT;
|
||||
// current_status.flag_control_attitude_enabled = false;
|
||||
// current_status.flag_control_rates_enabled = false;
|
||||
// }
|
||||
|
||||
} else if (sp_man.manual_mode_switch < -STICK_ON_OFF_LIMIT) {
|
||||
// } else if (sp_man.manual_mode_switch < -STICK_ON_OFF_LIMIT) {
|
||||
|
||||
/* bottom stick position, set direct mode for vehicles supporting it */
|
||||
if ((current_status.system_type == MAV_TYPE_QUADROTOR) ||
|
||||
(current_status.system_type == MAV_TYPE_HEXAROTOR) ||
|
||||
(current_status.system_type == MAV_TYPE_OCTOROTOR)) {
|
||||
// /* bottom stick position, set direct mode for vehicles supporting it */
|
||||
// if ((current_status.system_type == MAV_TYPE_QUADROTOR) ||
|
||||
// (current_status.system_type == MAV_TYPE_HEXAROTOR) ||
|
||||
// (current_status.system_type == MAV_TYPE_OCTOROTOR)) {
|
||||
|
||||
/* assuming a rotary wing, fall back to SAS */
|
||||
current_status.manual_control_mode = VEHICLE_MANUAL_CONTROL_MODE_SAS;
|
||||
current_status.flag_control_attitude_enabled = true;
|
||||
current_status.flag_control_rates_enabled = true;
|
||||
} else {
|
||||
// /* assuming a rotary wing, fall back to SAS */
|
||||
// current_status.manual_control_mode = VEHICLE_MANUAL_CONTROL_MODE_SAS;
|
||||
// current_status.flag_control_attitude_enabled = true;
|
||||
// current_status.flag_control_rates_enabled = true;
|
||||
// } else {
|
||||
|
||||
/* assuming a fixed wing, set to direct pass-through as requested */
|
||||
current_status.manual_control_mode = VEHICLE_MANUAL_CONTROL_MODE_DIRECT;
|
||||
current_status.flag_control_attitude_enabled = false;
|
||||
current_status.flag_control_rates_enabled = false;
|
||||
}
|
||||
// /* assuming a fixed wing, set to direct pass-through as requested */
|
||||
// current_status.manual_control_mode = VEHICLE_MANUAL_CONTROL_MODE_DIRECT;
|
||||
// current_status.flag_control_attitude_enabled = false;
|
||||
// current_status.flag_control_rates_enabled = false;
|
||||
// }
|
||||
|
||||
} else if (sp_man.manual_mode_switch > STICK_ON_OFF_LIMIT) {
|
||||
// } else if (sp_man.manual_mode_switch > STICK_ON_OFF_LIMIT) {
|
||||
|
||||
/* top stick position, set SAS for all vehicle types */
|
||||
current_status.manual_control_mode = VEHICLE_MANUAL_CONTROL_MODE_SAS;
|
||||
current_status.flag_control_attitude_enabled = true;
|
||||
current_status.flag_control_rates_enabled = true;
|
||||
// /* top stick position, set SAS for all vehicle types */
|
||||
// current_status.manual_control_mode = VEHICLE_MANUAL_CONTROL_MODE_SAS;
|
||||
// current_status.flag_control_attitude_enabled = true;
|
||||
// current_status.flag_control_rates_enabled = true;
|
||||
|
||||
} else {
|
||||
/* center stick position, set rate control */
|
||||
current_status.manual_control_mode = VEHICLE_MANUAL_CONTROL_MODE_RATES;
|
||||
current_status.flag_control_attitude_enabled = false;
|
||||
current_status.flag_control_rates_enabled = true;
|
||||
}
|
||||
// } else {
|
||||
// /* center stick position, set rate control */
|
||||
// current_status.manual_control_mode = VEHICLE_MANUAL_CONTROL_MODE_RATES;
|
||||
// current_status.flag_control_attitude_enabled = false;
|
||||
// current_status.flag_control_rates_enabled = true;
|
||||
// }
|
||||
|
||||
printf("man ctrl mode: %d\n", (int)current_status.manual_control_mode);
|
||||
// printf("man ctrl mode: %d\n", (int)current_status.manual_control_mode);
|
||||
|
||||
/*
|
||||
* Check if manual stability control modes have to be switched
|
||||
@@ -1801,7 +1801,7 @@ int commander_thread_main(int argc, char *argv[])
|
||||
if (sp_man.manual_override_switch > STICK_ON_OFF_LIMIT) {
|
||||
/* enable manual override */
|
||||
update_state_machine_mode_manual(stat_pub, ¤t_status, mavlink_fd);
|
||||
} else {
|
||||
} else if (sp_man.manual_override_switch < -STICK_ON_OFF_LIMIT) {
|
||||
/* check auto mode switch for correct mode */
|
||||
if (sp_man.auto_mode_switch > STICK_ON_OFF_LIMIT) {
|
||||
/* enable stabilized mode */
|
||||
@@ -1813,6 +1813,11 @@ int commander_thread_main(int argc, char *argv[])
|
||||
} else {
|
||||
update_state_machine_mode_hold(stat_pub, ¤t_status, mavlink_fd);
|
||||
}
|
||||
} else {
|
||||
/* center stick position, set SAS for all vehicle types */
|
||||
current_status.manual_control_mode = VEHICLE_MANUAL_CONTROL_MODE_SAS;
|
||||
current_status.flag_control_attitude_enabled = true;
|
||||
current_status.flag_control_rates_enabled = true;
|
||||
}
|
||||
|
||||
/* handle the case where RC signal was regained */
|
||||
|
||||
@@ -520,9 +520,24 @@ void update_state_machine_mode_manual(int status_pub, struct vehicle_status_s *c
|
||||
current_status->flight_mode = VEHICLE_FLIGHT_MODE_MANUAL;
|
||||
|
||||
current_status->flag_control_manual_enabled = true;
|
||||
/* enable attitude control per default */
|
||||
current_status->flag_control_attitude_enabled = true;
|
||||
current_status->flag_control_rates_enabled = true;
|
||||
|
||||
/* set behaviour based on airframe */
|
||||
if ((current_status.system_type == MAV_TYPE_QUADROTOR) ||
|
||||
(current_status.system_type == MAV_TYPE_HEXAROTOR) ||
|
||||
(current_status.system_type == MAV_TYPE_OCTOROTOR)) {
|
||||
|
||||
/* assuming a rotary wing, set to SAS */
|
||||
current_status.manual_control_mode = VEHICLE_MANUAL_CONTROL_MODE_SAS;
|
||||
current_status.flag_control_attitude_enabled = true;
|
||||
current_status.flag_control_rates_enabled = true;
|
||||
} else {
|
||||
|
||||
/* assuming a fixed wing, set to direct pass-through */
|
||||
current_status.manual_control_mode = VEHICLE_MANUAL_CONTROL_MODE_DIRECT;
|
||||
current_status.flag_control_attitude_enabled = false;
|
||||
current_status.flag_control_rates_enabled = false;
|
||||
}
|
||||
|
||||
if (old_mode != current_status->flight_mode) state_machine_publish(status_pub, current_status, mavlink_fd);
|
||||
|
||||
if (current_status->state_machine == SYSTEM_STATE_GROUND_READY || current_status->state_machine == SYSTEM_STATE_STABILIZED || current_status->state_machine == SYSTEM_STATE_AUTO) {
|
||||
|
||||
Reference in New Issue
Block a user