mirror of https://github.com/ArduPilot/ardupilot
AP_Scripting: re-work multi-point roll using roll_sequence
This commit is contained in:
parent
486787937a
commit
e09ae7bc43
|
@ -42,15 +42,12 @@ the ground track.
|
||||||
| 19 | Stall Turn | radius | height | direction | | Yes |
|
| 19 | Stall Turn | radius | height | direction | | Yes |
|
||||||
| 20 | Procedure Turn | radius | bank angle | step-out | | Yes |
|
| 20 | Procedure Turn | radius | bank angle | step-out | | Yes |
|
||||||
| 21 | Derry Turn | radius | bank angle | | | No |
|
| 21 | Derry Turn | radius | bank angle | | | No |
|
||||||
| 22 | Two Point Roll | length | | | | No |
|
|
||||||
| 23 | Half Climbing Circle | radius | height | bank angle | | Yes |
|
| 23 | Half Climbing Circle | radius | height | bank angle | | Yes |
|
||||||
| 24 | Crossbox Humpty | radius | height | | | Yes |
|
| 24 | Crossbox Humpty | radius | height | | | Yes |
|
||||||
| 25 | Laydown Humpty | radius | height | | | Yes |
|
| 25 | Laydown Humpty | radius | height | | | Yes |
|
||||||
| 25 | Barrel Roll | radius | length | num spirals | | No |
|
| 25 | Barrel Roll | radius | length | num spirals | | No |
|
||||||
| 26 | Straight Hold | length | bank angle | | | No |
|
| 26 | Straight Hold | length | bank angle | | | No |
|
||||||
| 29 | Four Point Roll | length | | | | No |
|
| 31 | Multi Point Roll | length | num points | hold frac | | No |
|
||||||
| 30 | Eight Point Roll | length | | | | No |
|
|
||||||
| 31 | Multi Point Roll | length | num points | | | No |
|
|
||||||
|
|
||||||
Note: In the script you will find other (specialised) manouvers which do not appear in the
|
Note: In the script you will find other (specialised) manouvers which do not appear in the
|
||||||
'command table'. These tend to be specialised manouvers which may expect an inverted entry or
|
'command table'. These tend to be specialised manouvers which may expect an inverted entry or
|
||||||
|
|
|
@ -1220,28 +1220,39 @@ function vertical_aerobatic_box(total_length, total_width, r, bank_angle)
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
function multi_point_roll(length, N, arg3, arg4)
|
--[[
|
||||||
local paths = {}
|
a multi-point roll
|
||||||
local len_roll = length * (N-1) / (N*4-1)
|
- length = total length of straight flight
|
||||||
local len_hold = length / (N*4-1)
|
- N = number of points of roll for full 360
|
||||||
local ang = 360 / N
|
- hold_frac = proportion of each segment to hold attitude, will use 0.2 if 0
|
||||||
for i = 1, N do
|
- num_points = number of points of the N point roll to do, will use N if 0
|
||||||
paths[#paths+1] = { path_straight(len_roll), roll_angle(ang) }
|
|
||||||
paths[#paths+1] = { path_straight(len_hold), roll_angle(0) }
|
Note that num_points can be greater than N, for example do 6 points
|
||||||
|
of a 4 point roll, resulting in inverted flight
|
||||||
|
--]]
|
||||||
|
function multi_point_roll(length, N, hold_frac, num_points)
|
||||||
|
if hold_frac <= 0 then
|
||||||
|
hold_frac = 0.2
|
||||||
end
|
end
|
||||||
return make_paths("multi_point_roll", paths)
|
if num_points <= 0 then
|
||||||
end
|
num_points = N
|
||||||
|
end
|
||||||
function two_point_roll(length, arg2, arg3, arg4)
|
--[[
|
||||||
return multi_point_roll(length, 2)
|
construct a roll sequence to use over the full length
|
||||||
end
|
--]]
|
||||||
|
local seq = {}
|
||||||
function four_point_roll(length, arg2, arg3, arg4)
|
local roll_frac = 1.0 - hold_frac
|
||||||
return multi_point_roll(length, 4)
|
for i = 1, num_points do
|
||||||
|
seq[#seq+1] = { roll_frac, 360 / N }
|
||||||
|
if i < num_points then
|
||||||
|
seq[#seq+1] = { hold_frac, 0 }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return make_paths("multi_point_roll", {{ path_straight(length), roll_sequence(seq) }})
|
||||||
end
|
end
|
||||||
|
|
||||||
function eight_point_roll(length, arg2, arg3, arg4)
|
function eight_point_roll(length, arg2, arg3, arg4)
|
||||||
return multi_point_roll(length, 8)
|
return multi_point_roll(length, 8, 0.5)
|
||||||
end
|
end
|
||||||
|
|
||||||
function procedure_turn(radius, bank_angle, step_out, arg4)
|
function procedure_turn(radius, bank_angle, step_out, arg4)
|
||||||
|
@ -1556,7 +1567,7 @@ function nz_clubman() -- positioned for a flight l
|
||||||
{ straight_align, { -180, 0 } },
|
{ straight_align, { -180, 0 } },
|
||||||
{ half_reverse_cuban_eight, { 90 } },
|
{ half_reverse_cuban_eight, { 90 } },
|
||||||
{ straight_align, { -120, 0 } },
|
{ straight_align, { -120, 0 } },
|
||||||
{ two_point_roll, { 240 }, message="Two Point Roll"},
|
{ multi_point_roll, { 240, 2, 0.5 }, message="Two Point Roll"},
|
||||||
{ straight_align, { 150, 0 } },
|
{ straight_align, { 150, 0 } },
|
||||||
{ half_reverse_cuban_eight, { 90 } },
|
{ half_reverse_cuban_eight, { 90 } },
|
||||||
{ straight_align, { 106, 0 } },
|
{ straight_align, { 106, 0 } },
|
||||||
|
@ -2360,15 +2371,15 @@ command_table[18]= PathFunction(downline_45, "Downline-45")
|
||||||
command_table[19]= PathFunction(stall_turn, "Stall Turn")
|
command_table[19]= PathFunction(stall_turn, "Stall Turn")
|
||||||
command_table[20]= PathFunction(procedure_turn, "Procedure Turn")
|
command_table[20]= PathFunction(procedure_turn, "Procedure Turn")
|
||||||
command_table[21]= PathFunction(derry_turn, "Derry Turn")
|
command_table[21]= PathFunction(derry_turn, "Derry Turn")
|
||||||
command_table[22]= PathFunction(two_point_roll, "Two Point Roll")
|
-- 22 was Two Point Roll - use multi point roll instead
|
||||||
command_table[23]= PathFunction(half_climbing_circle, "Half Climbing Circle")
|
command_table[23]= PathFunction(half_climbing_circle, "Half Climbing Circle")
|
||||||
command_table[24]= PathFunction(crossbox_humpty, "Crossbox Humpty")
|
command_table[24]= PathFunction(crossbox_humpty, "Crossbox Humpty")
|
||||||
command_table[25]= PathFunction(laydown_humpty, "Laydown Humpty")
|
command_table[25]= PathFunction(laydown_humpty, "Laydown Humpty")
|
||||||
command_table[26]= PathFunction(barrel_roll, "Barrel Roll")
|
command_table[26]= PathFunction(barrel_roll, "Barrel Roll")
|
||||||
command_table[27]= PathFunction(straight_flight, "Straight Hold")
|
command_table[27]= PathFunction(straight_flight, "Straight Hold")
|
||||||
command_table[28]= PathFunction(partial_circle, "Partial Circle")
|
command_table[28]= PathFunction(partial_circle, "Partial Circle")
|
||||||
command_table[29]= PathFunction(four_point_roll, "Four Point Roll")
|
-- 29 was Four Point Roll - use multi point roll instead
|
||||||
command_table[30]= PathFunction(eight_point_roll, "Eight Point Roll")
|
-- 30 was Eight Point Roll - use multi point roll instead
|
||||||
command_table[31]= PathFunction(multi_point_roll, "Multi Point Roll")
|
command_table[31]= PathFunction(multi_point_roll, "Multi Point Roll")
|
||||||
command_table[32]= PathFunction(side_step, "Side Step")
|
command_table[32]= PathFunction(side_step, "Side Step")
|
||||||
command_table[200] = PathFunction(test_all_paths, "Test Suite")
|
command_table[200] = PathFunction(test_all_paths, "Test Suite")
|
||||||
|
|
Loading…
Reference in New Issue