mirror of https://github.com/ArduPilot/ardupilot
39 lines
1.4 KiB
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 |