ardupilot/libraries/AP_Scripting/applets/Gimbal_Camera_Mode.lua

114 lines
4.6 KiB
Lua

-- This script is a useful tool when using gimbal and camera. You can use it to switch between manual
-- and auto control for mission mode. It is meant for use with a transmitter that has a free switch
-- available.
-- The camera is setup for picture trigger during auto but can do other things e.g. video during
-- manual mode also. The script changes parameters but does not store them.
-- Setup Gimbal and Camera incl. manual control channels, then setting SCR_USER1 to 1 enables this script.
-- (known issue is that manual and auto mode do not have same travel as SERVOn_ settings are ignored
-- for "pass-through" RCINn channels - a scaled and bounded variant must be introduced and used here)
-- Tested and working as of 25th Aug 2020 (Copter Dev)
-- Derived from Heli_IM_COL_Tune.lua in https://github.com/ArduPilot/ardupilot/tree/master/libraries/AP_Scripting/applets
-- Tested and working as of 9th and 24th of Oct 2021 (drtrigon)
function update()
-- read switch input from designated scripting RCx_OPTION
local rcin_select = select_switch_ch:get_aux_switch_pos()
-- Save params only if switch changed
if rcin_select ~= rcin_select_pre then
if rcin_select == 0 then
-- low: set gimbal and cam to manual mode (RCIN9, RCIN10, RCIN12)
set_save_param('SERVO8_FUNCTION',59,false)
set_save_param('SERVO9_FUNCTION',60,false)
set_save_param('SERVO10_FUNCTION',62,false)
gcs:send_text(6, 'LUA: Gimbal-Cam mode manual') -- MAV_SEVERITY_INFO
elseif rcin_select == 1 then
-- middle: set gimbal to auto and cam to manual mode (mount_tilt, mount_roll, RCIN12)
set_save_param('SERVO8_FUNCTION',7,false)
set_save_param('SERVO9_FUNCTION',8,false)
set_save_param('SERVO10_FUNCTION',62,false)
gcs:send_text(6, 'LUA: Gimbal-Cam mode auto/manual') -- MAV_SEVERITY_INFO
else
-- high: set gimbal and cam to auto mode (mount_tilt, mount_roll, camera_trigger)
set_save_param('SERVO8_FUNCTION',7,false)
set_save_param('SERVO9_FUNCTION',8,false)
set_save_param('SERVO10_FUNCTION',10,false)
gcs:send_text(6, 'LUA: Gimbal-Cam mode auto') -- MAV_SEVERITY_INFO
-- No script exit condition (runs always)
end
rcin_select_pre = rcin_select
end
-- Reschedule
return script_cont_stop()
end
-- Standardised function for stopping or continuing
function script_cont_stop()
-- Get SCR_USER1 parameter value and check whether to run or not
if param:get('SCR_USER1') ~= 1 then -- DISABLED (any number) or FAULT (nil)
-- gcs:send_text(6, string.format('LUA: %s = %i',param_name,value)) -- MAV_SEVERITY_INFO
-- gcs:send_text(6, 'LUA: Gimbal-Cam mode disabled') -- MAV_SEVERITY_INFO
rcin_select_pre = -1
-- return -- stop running until reboot of FC
return script_cont_stop, 10000 -- stop running until change of param +10s
end
-- Set RC channels to use to control gimbal and cam servo params
-- SERVOn_FUNCTION = 7 (mount_tilt) -> SERVO8_FUNCTION and MNT_RC_IN_TILT -> RC9 -> RCIN9 (59)
-- SERVOn_FUNCTION = 8 (mount_roll) -> SERVO9_FUNCTION and MNT_RC_IN_ROLL -> RC10 -> RCIN10 (60)
-- SERVOn_FUNCTION = ? (mount_pan) -> ...
-- SERVOn_FUNCTION = 10 (camera_trigger) -> SERVO10_FUNCTION and RCn_OPTION = 9 (Camera Trigger) -> RC12_OPTION -> RCIN12 (62)
-- Set RC channels to use to control gimbal and cam servo params
select_switch_ch = rc:find_channel_for_option(300) --scripting ch 1
if (select_switch_ch == nil) then -- NORC
gcs:send_text(3, 'LUA: RC channels not set') -- MAV_SEVERITY_ERROR
return script_cont_stop, 10000 -- stop running until valid param +10s
end
-- Script is HEALTHY, continue running update() (in fast loop)
-- return update, 500
return update, 1000
end
-- function for setting and saving parameter
function set_save_param(str,val,save)
if save then
-- Set and save
if param:set_and_save(str,val) then
gcs:send_text(2, 'LUA: params saved') -- MAV_SEVERITY_CRITICAL
else
gcs:send_text(2, 'LUA: param set failed') -- MAV_SEVERITY_CRITICAL
end
else
-- Just set
if not(param:set(str,val)) then
gcs:send_text(2, 'LUA: param set failed') -- MAV_SEVERITY_CRITICAL
end
end
end
--- -- -- Initial Setup --- --- ---
-- Script status buffers
rcin_select_pre = -1
gcs:send_text(6, 'LUA: Gimbal-Cam mode started') -- MAV_SEVERITY_INFO
-- Only continue running script if healthy
return script_cont_stop()