mirror of https://github.com/ArduPilot/ardupilot
102 lines
3.8 KiB
Plaintext
102 lines
3.8 KiB
Plaintext
# example airshow in a loadable file
|
|
# to use the airshow put the file on your microSD in the root
|
|
# directory with name trickNN.txt where NN is the command ID you want
|
|
# to assign. The trick can then be used in auto missions or in
|
|
# TRIKn_ID commands for tricks on a switch
|
|
|
|
# you can use name: to give your sequence a name
|
|
name: SuperAirShow
|
|
|
|
# you can add new path functions, following the same syntax
|
|
# as in the main plane_aerobatics.lua
|
|
function triangular_loop(radius, height, arg3, arg4) -- triangle
|
|
local h1 = radius * math.sin(math.rad(45))
|
|
local h2 = (2 * radius) - (radius * math.cos(math.rad(45)))
|
|
local h3 = height - (2 * radius)
|
|
local side = h3 / math.cos(math.rad(45))
|
|
--local base = (h3 + (2 * (radius - radius * math.cos(math.rad(45))))) - (2 * radius)
|
|
local base = (2 * (h3 + radius)) - 2 * radius
|
|
return make_paths("triangular_loop", {
|
|
{ path_straight(base * 1/5), roll_angle(180) },
|
|
{ path_straight(base * 2/5), roll_angle(0) },
|
|
{ path_vertical_arc(radius, 135) , roll_angle(0) },
|
|
{ path_straight(side*2/9), roll_angle(0) },
|
|
{ path_straight(side*2/9), roll_angle(90) },
|
|
{ path_straight(side*1/9), roll_angle(0) },
|
|
{ path_straight(side*2/9), roll_angle(90) },
|
|
{ path_straight(side*2/9), roll_angle(0) },
|
|
{ path_vertical_arc(radius, 90), roll_angle(0) },
|
|
{ path_straight(side*2/9), roll_angle(0) },
|
|
{ path_straight(side*2/9), roll_angle(90) },
|
|
{ path_straight(side*1/9), roll_angle(0) },
|
|
{ path_straight(side*2/9), roll_angle(90) },
|
|
{ path_straight(side*2/9), roll_angle(0) },
|
|
{ path_vertical_arc(radius, 135), roll_angle(0) },
|
|
{ path_straight(base * 2/5), roll_angle(0) },
|
|
{ path_straight(base * 1/5), roll_angle(180) },
|
|
{ path_straight(base * 2/5), roll_angle(0) },
|
|
})
|
|
end
|
|
|
|
# a cross-box tophat, used to get us back on track after the barrell roll
|
|
function crossbox_tophat(radius, height, width, arg4) -- top hat
|
|
local w = width - 2*radius
|
|
return make_paths('crossbox_tophat', {
|
|
{ path_vertical_arc(radius, 90), roll_angle(0) },
|
|
{ path_straight((height-2*radius)), roll_sequence({{1,0}, {1, 90}, {1, 0}}), set_orient=qorient(0,90,90) },
|
|
{ path_vertical_arc(-radius, 90), roll_angle(0), set_orient=qorient(180,0,90) },
|
|
{ path_straight(w), roll_angle(0) },
|
|
{ path_vertical_arc(radius, 90), roll_angle(0), set_orient=qorient(0,-90,90) },
|
|
{ path_straight((height-2*radius)), roll_sequence({{1,0}, {1, -90}, {1, 0}}), set_orient=qorient(0,-90,180) },
|
|
{ path_vertical_arc(radius, 90), roll_angle(0), set_orient=qorient(0,0,180) },
|
|
})
|
|
end
|
|
|
|
# you can add messages to display on the GCS/OSD while flying
|
|
message: Loop
|
|
loop 25 0 1
|
|
|
|
align_box 1
|
|
message: HalfReverseCubanEight
|
|
half_reverse_cuban_eight 25
|
|
|
|
align_center
|
|
message: ScaleFigureEight
|
|
scale_figure_eight -40 -45
|
|
|
|
align_box 1
|
|
message: Immelmann
|
|
immelmann_turn 30
|
|
|
|
align_center
|
|
message: Roll
|
|
straight_roll 80 2
|
|
|
|
align_box 1
|
|
message: Split-S
|
|
split_s 30
|
|
|
|
align_center
|
|
message: RollingCircle
|
|
rolling_circle -75 1
|
|
|
|
align_box 1
|
|
message: HumptyBump
|
|
humpty_bump 20 60
|
|
|
|
align_box 1
|
|
message: HalfCubanEight
|
|
half_cuban_eight 25
|
|
|
|
align_center
|
|
message: BarrelRoll
|
|
barrel_roll 30 100 2
|
|
|
|
align_box 1
|
|
message: CrossBoxTopHat
|
|
crossbox_tophat 20 60 60
|
|
|
|
align_center
|
|
message: TriangularLoop
|
|
triangular_loop 20 60
|