1 changed files with 53 additions and 0 deletions
@ -0,0 +1,53 @@ |
|||||||
|
-- performs the equivalent of a simple RTL in Guided mode using set_target_location |
||||||
|
-- |
||||||
|
-- CAUTION: This script only works for Copter |
||||||
|
-- this script checks for RC input > 1800 and then: |
||||||
|
-- a) switches to Guided mode |
||||||
|
-- b) sets the target location to be 10m above home |
||||||
|
-- c) switches the vehicle to land once it is within a couple of meters of home |
||||||
|
|
||||||
|
local wp_radius = 2 |
||||||
|
local target_alt_above_home = 10 |
||||||
|
local copter_guided_mode_num = 4 |
||||||
|
local copter_land_mode_num = 9 |
||||||
|
local sent_target = false |
||||||
|
|
||||||
|
-- the main update function that is used to decide when we should do a failsafe |
||||||
|
function update() |
||||||
|
if not arming:is_armed() then -- reset state when disarmed |
||||||
|
sent_target = false |
||||||
|
else |
||||||
|
pwm7 = rc:get_pwm(7) |
||||||
|
if pwm7 and pwm7 > 1800 then -- check if RC input 7 has moved high |
||||||
|
local mode = vehicle:get_mode() -- get current mode |
||||||
|
if not sent_target then -- if we haven't sent the target yet |
||||||
|
if not (mode == copter_guided_mode_num) then -- change to guided mode |
||||||
|
vehicle:set_mode(copter_guided_mode_num) |
||||||
|
else |
||||||
|
local above_home = ahrs:get_home() -- get home location |
||||||
|
if above_home then |
||||||
|
above_home:alt(above_home:alt() + (target_alt_above_home * 100)) |
||||||
|
sent_target = vehicle:set_target_location(above_home) -- set target above home |
||||||
|
end |
||||||
|
end |
||||||
|
else |
||||||
|
|
||||||
|
-- change to land mode when within 2m of home |
||||||
|
if not (mode == copter_land_mode_num) then |
||||||
|
local home = ahrs:get_home() |
||||||
|
local curr_loc = ahrs:get_position() |
||||||
|
if home and curr_loc then |
||||||
|
local home_dist = curr_loc:get_distance(home) -- get horizontal distance to home |
||||||
|
if (home_dist < wp_radius) then -- change to land mode if close |
||||||
|
vehicle:set_mode(copter_land_mode_num) |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
return update, 1000 |
||||||
|
end |
||||||
|
|
||||||
|
return update() |
Loading…
Reference in new issue