You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.4 KiB
39 lines
1.4 KiB
|
|
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 |