ardupilot/libraries/AP_Scripting/applets/ONVIF_Camera_Control.lua

39 lines
1.4 KiB
Lua

local counter = 0
local running = 0
local last_pan_cmd = 0.0
local last_tilt_cmd = 0.0
function update()
if onvif and onvif.start and counter >= 100 and running == 0 then
gcs:send_text(0, "onvif starting")
if onvif:start("user","123456","http://10.211.55.3:10000") then
gcs:send_text(0, "onvif started")
running = 1
end
counter = 0
end
counter = counter + 1
if running == 1 then
pan_norm, tilt_norm = vehicle:get_pan_tilt_norm()
pan_tilt_limit_max = onvif:get_pan_tilt_limit_max()
pan_tilt_limit_min = onvif:get_pan_tilt_limit_min()
pan_norm = ((pan_norm + 1) * (pan_tilt_limit_max:x() - pan_tilt_limit_min:x())/2.0) + pan_tilt_limit_min:x()
tilt_norm = ((tilt_norm + 1) * (pan_tilt_limit_max:y() - pan_tilt_limit_min:y())/2.0) + pan_tilt_limit_min:y()
gcs:send_text(0, string.format("PAN: %f TILT: %f", pan_norm, tilt_norm))
if math.floor(pan_norm*100.0) ~= math.floor(last_pan_cmd*100.0) or
math.floor(tilt_norm*100.0) ~= math.floor(last_tilt_cmd*100.0) then
-- actually send the command
if not onvif:set_absolutemove(pan_norm, tilt_norm, 0.0) then
gcs:send_text(0, "onvif failed to send absolutemove command")
end
last_pan_cmd = pan_norm;
last_tilt_cmd = tilt_norm;
end
end
return update, 20
end
gcs:send_text(0, "Starting ONVIF Control")
return update() -- run immediately before starting to reschedule