mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-01-10 18:08:30 -04:00
AP_Scripting: pause quicktune during pilot input
thanks to Marco for the suggestion
This commit is contained in:
parent
8320b90a01
commit
c2af9a9154
@ -38,8 +38,17 @@ local QUIK_YAW_D_MAX = bind_add_param('YAW_D_MAX', 7, 0.01)
|
|||||||
|
|
||||||
local INS_GYRO_FILTER = bind_param("INS_GYRO_FILTER")
|
local INS_GYRO_FILTER = bind_param("INS_GYRO_FILTER")
|
||||||
|
|
||||||
|
local RCMAP_ROLL = bind_param("RCMAP_ROLL")
|
||||||
|
local RCMAP_PITCH = bind_param("RCMAP_PITCH")
|
||||||
|
local RCMAP_YAW = bind_param("RCMAP_YAW")
|
||||||
|
|
||||||
|
local RCIN_ROLL = rc:get_channel(RCMAP_ROLL:get())
|
||||||
|
local RCIN_PITCH = rc:get_channel(RCMAP_PITCH:get())
|
||||||
|
local RCIN_YAW = rc:get_channel(RCMAP_YAW:get())
|
||||||
|
|
||||||
local UPDATE_RATE_HZ = 40
|
local UPDATE_RATE_HZ = 40
|
||||||
local STAGE_DELAY = 4.0
|
local STAGE_DELAY = 4.0
|
||||||
|
local PILOT_INPUT_DELAY = 4.0
|
||||||
|
|
||||||
local YAW_FLTE_MAX = 2.0
|
local YAW_FLTE_MAX = 2.0
|
||||||
local FLTD_MUL = 0.5
|
local FLTD_MUL = 0.5
|
||||||
@ -72,6 +81,7 @@ local stages = { "D", "P" }
|
|||||||
local stage = stages[1]
|
local stage = stages[1]
|
||||||
local last_stage_change = get_time()
|
local last_stage_change = get_time()
|
||||||
local last_gain_report = get_time()
|
local last_gain_report = get_time()
|
||||||
|
local last_pilot_input = get_time()
|
||||||
local slew_parm = nil
|
local slew_parm = nil
|
||||||
local slew_target = 0
|
local slew_target = 0
|
||||||
local slew_delta = 0
|
local slew_delta = 0
|
||||||
@ -157,6 +167,16 @@ function setup_filters()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- check for pilot input to pause tune
|
||||||
|
function have_pilot_input()
|
||||||
|
if (math.abs(RCIN_ROLL:norm_input_dz()) > 0 or
|
||||||
|
math.abs(RCIN_PITCH:norm_input_dz()) > 0 or
|
||||||
|
math.abs(RCIN_YAW:norm_input_dz()) > 0) then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
reset_axes_done()
|
reset_axes_done()
|
||||||
get_all_params()
|
get_all_params()
|
||||||
|
|
||||||
@ -294,6 +314,11 @@ function update()
|
|||||||
if quick_switch == nil or QUIK_ENABLE:get() < 1 then
|
if quick_switch == nil or QUIK_ENABLE:get() < 1 then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if have_pilot_input() then
|
||||||
|
last_pilot_input = get_time()
|
||||||
|
end
|
||||||
|
|
||||||
local sw_pos = quick_switch:get_aux_switch_pos()
|
local sw_pos = quick_switch:get_aux_switch_pos()
|
||||||
if sw_pos == 0 or not arming:is_armed() or not vehicle:get_likely_flying() then
|
if sw_pos == 0 or not arming:is_armed() or not vehicle:get_likely_flying() then
|
||||||
-- abort, revert parameters
|
-- abort, revert parameters
|
||||||
@ -336,6 +361,10 @@ function update()
|
|||||||
setup_filters()
|
setup_filters()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if get_time() - last_pilot_input < PILOT_INPUT_DELAY then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
local srate = get_slew_rate(axis)
|
local srate = get_slew_rate(axis)
|
||||||
local pname = get_pname(axis, stage)
|
local pname = get_pname(axis, stage)
|
||||||
local P = params[pname]
|
local P = params[pname]
|
||||||
|
@ -114,3 +114,5 @@ If you move the switch to the low position at any time in the tune
|
|||||||
then all parameters will be reverted to their original
|
then all parameters will be reverted to their original
|
||||||
values. Parameters will also be reverted if you disarm.
|
values. Parameters will also be reverted if you disarm.
|
||||||
|
|
||||||
|
If the pilot gives roll, pitch or yaw input while tuning then the tune
|
||||||
|
is paused until 4 seconds after the pilot input stops.
|
||||||
|
Loading…
Reference in New Issue
Block a user