mirror of https://github.com/ArduPilot/ardupilot
AP_Scripting: added QUIK_ANGLE_MAX for lua quicktune
this brings the same protection to the lua script as was added for the C++ implementation
This commit is contained in:
parent
9503744e6a
commit
613b835d67
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
local MAV_SEVERITY_INFO = 6
|
local MAV_SEVERITY_INFO = 6
|
||||||
local MAV_SEVERITY_NOTICE = 5
|
local MAV_SEVERITY_NOTICE = 5
|
||||||
|
local MAV_SEVERITY_CRITICAL = 2
|
||||||
local MAV_SEVERITY_EMERGENCY = 0
|
local MAV_SEVERITY_EMERGENCY = 0
|
||||||
|
|
||||||
local PARAM_TABLE_KEY = 8
|
local PARAM_TABLE_KEY = 8
|
||||||
|
@ -40,7 +41,7 @@ function bind_add_param(name, idx, default_value)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- setup quicktune specific parameters
|
-- setup quicktune specific parameters
|
||||||
assert(param:add_table(PARAM_TABLE_KEY, PARAM_TABLE_PREFIX, 14), 'could not add param table')
|
assert(param:add_table(PARAM_TABLE_KEY, PARAM_TABLE_PREFIX, 15), 'could not add param table')
|
||||||
|
|
||||||
--[[
|
--[[
|
||||||
// @Param: QUIK_ENABLE
|
// @Param: QUIK_ENABLE
|
||||||
|
@ -170,6 +171,15 @@ local QUIK_MAX_REDUCE = bind_add_param('MAX_REDUCE', 13, 20)
|
||||||
--]]
|
--]]
|
||||||
local QUIK_OPTIONS = bind_add_param('OPTIONS', 14, 0)
|
local QUIK_OPTIONS = bind_add_param('OPTIONS', 14, 0)
|
||||||
|
|
||||||
|
--[[
|
||||||
|
// @Param: QUIK_ANGLE_MAX
|
||||||
|
// @DisplayName: maximum angle error for tune abort
|
||||||
|
// @Description: If while tuning the angle error goes over this limit then the tune will aborts to prevent a bad oscillation in the case of the tuning algorithm failing. If you get an error "Tuning: attitude error ABORTING" and you think it is a false positive then you can either raise this parameter or you can try increasing the QUIK_DOUBLE_TIME to do the tune more slowly. A value of zero disables this check.
|
||||||
|
// @Units: deg
|
||||||
|
// @User: Standard
|
||||||
|
--]]
|
||||||
|
local QUIK_ANGLE_MAX = bind_add_param('ANGLE_MAX', 15, 10)
|
||||||
|
|
||||||
local OPTIONS_TWO_POSITION = (1<<0)
|
local OPTIONS_TWO_POSITION = (1<<0)
|
||||||
|
|
||||||
local INS_GYRO_FILTER = bind_param("INS_GYRO_FILTER")
|
local INS_GYRO_FILTER = bind_param("INS_GYRO_FILTER")
|
||||||
|
@ -222,6 +232,7 @@ local tune_done_time = nil
|
||||||
local slew_parm = nil
|
local slew_parm = nil
|
||||||
local slew_target = 0
|
local slew_target = 0
|
||||||
local slew_delta = 0
|
local slew_delta = 0
|
||||||
|
local aborted = false
|
||||||
|
|
||||||
local axes_done = {}
|
local axes_done = {}
|
||||||
local filters_done = {}
|
local filters_done = {}
|
||||||
|
@ -511,6 +522,14 @@ function update()
|
||||||
sw_pos_tune = 2
|
sw_pos_tune = 2
|
||||||
sw_pos_save = -1
|
sw_pos_save = -1
|
||||||
end
|
end
|
||||||
|
if aborted then
|
||||||
|
if sw_pos == 0 then
|
||||||
|
aborted = false
|
||||||
|
else
|
||||||
|
-- after an abort require low switch position to reset
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
if sw_pos == sw_pos_tune and (not arming:is_armed() or not vehicle:get_likely_flying()) and get_time() > last_warning + 5 then
|
if sw_pos == sw_pos_tune and (not arming:is_armed() or not vehicle:get_likely_flying()) and get_time() > last_warning + 5 then
|
||||||
gcs:send_text(MAV_SEVERITY_EMERGENCY, string.format("Tuning: Must be flying to tune"))
|
gcs:send_text(MAV_SEVERITY_EMERGENCY, string.format("Tuning: Must be flying to tune"))
|
||||||
last_warning = get_time()
|
last_warning = get_time()
|
||||||
|
@ -523,6 +542,7 @@ function update()
|
||||||
restore_all_params()
|
restore_all_params()
|
||||||
gcs:send_text(MAV_SEVERITY_EMERGENCY, string.format("Tuning: reverted"))
|
gcs:send_text(MAV_SEVERITY_EMERGENCY, string.format("Tuning: reverted"))
|
||||||
tune_done_time = nil
|
tune_done_time = nil
|
||||||
|
aborted = true
|
||||||
end
|
end
|
||||||
reset_axes_done()
|
reset_axes_done()
|
||||||
return
|
return
|
||||||
|
@ -539,6 +559,19 @@ function update()
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if QUIK_ANGLE_MAX:get() > 0 and need_restore then
|
||||||
|
local att_error = AC_AttitudeControl:get_att_error_angle_deg()
|
||||||
|
if att_error > QUIK_ANGLE_MAX:get() then
|
||||||
|
need_restore = false
|
||||||
|
restore_all_params()
|
||||||
|
gcs:send_text(MAV_SEVERITY_CRITICAL, string.format("Tuning: attitude error %.1fdeg - ABORTING", att_error))
|
||||||
|
tune_done_time = nil
|
||||||
|
aborted = true
|
||||||
|
reset_axes_done()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
if get_time() - last_stage_change < STAGE_DELAY then
|
if get_time() - last_stage_change < STAGE_DELAY then
|
||||||
update_slew_gain()
|
update_slew_gain()
|
||||||
return
|
return
|
||||||
|
|
Loading…
Reference in New Issue