脚本特技飞行

备注

ArduPlane 4.2 及更高版本具有此功能

ArduPilot 可通过 LUA 脚本执行特技飞行。既可通过自动模式任务项目,也可通过在许多正常飞机飞行模式下执行的脚本,通常通过发射机开关和选择 RC 通道进行控制。

备注

这就要求飞行器能够进行特技飞行,前平移/俯仰、滚转和偏航率控制器调试得当,并且在必要时,飞行员应能够在飞行器处于异常姿态时安全地接管控制权(通过开关或模式转换)。飞行器 ACRO_x_RATE 参数限制每个轴的最大指令速率,与 ACRO 模式相同。

任务 NAV_SCRIPT_TIME

SCRIPT_TIME 航点类型允许使用 LUA 脚本来暂时控制飞行器的滚动/前平移/俯仰/偏航速率。为了防止没有适当的脚本处于活动状态(即没有加载到 SD 卡的 APM/Scripts 目录中)来接管控制,或 LUA 脚本因错误而崩溃,有一个强制参数提供了脚本在执行下一个任务项目之前可以接管的最长时间。在固件执行 NAV_SCRIPT_TIME 命令时提供了额外的保护层,要求脚本在每 200 毫秒内访问该命令,因此对于运行时间较长的特技飞行序列(255 秒),如果已知它们在其他方面表现良好并存在于 SD 卡中,则可将该命令的超时参数 (P2) 设置为 0(无限超时)。

SCRIPT_TIME 项目的格式为

指令字段 特派团规划员外地 说明
参数1 命令 ID 编号,可从运行脚本中获取,以识别所请求的操作
参数2 处理下一个任务项目前的最长时间(1-255 秒)。值为 0 时无时间限制,只能在经过验证的脚本中使用。
参数3 参数1 可从运行脚本中访问的参数,作为第一个变量使用。
参数4 参数,该参数可从运行脚本中获取,作为第二个变量使用。
参数5 参数3 参数,可从运行的脚本中获取,作为第三个变量使用。
参数6 参数4 参数,该参数可从运行脚本中获取,作为第四变量使用。
参数7 Alt 目标高度

当遇到上述任务指令时,需要运行一个 LUA 脚本来识别是否需要进行控制,并开始向(飞行)控制器发送俯仰/左平移/横滚/偏航率输入,以控制其姿态和/或轨迹。它可以使用命令中的四个可变输入参数来控制机动的各个方面,如翻滚/循环速率、重复次数、机动某些部分的时间等。LUA 脚本 Applet 目录中提供了一个示例,名为 plane_aerobatics.lua 用于几种花样和完整的特技表演。

在 NAV_SCRIPT_TIME 项目中运行的脚本的执行可以通过从自动模式切换到其他模式而轻松中断。

备注

返回 AUTO(自动)模式后,自动飞行任务将恢复到切换模式前的最后一项。如果是 NAV_SCRIPT_TIME 命令,则会从头开始。

备注

请确保在 NAV_SCRIPT_TIME 命令序列之前和之后都有有效的航点,以便为脚本建立使用路径(可选),并在尝试此功能之前有足够的高度。

提示

如果您创建了任务,并将打算使用的 LUA 脚本放在 SITL 模拟的 /scripts 子目录中,您就可以测试脚本和任务,而不会危及飞行器。

轨迹精确飞机特技飞行 LUA 脚本(固件 4.4 及更高版本)

LUA 脚本 Applet 目录中提供了一个轨迹精确(试图跟踪精确的地球参照地理空间路径)的飞机特技飞行脚本示例,名为 plane_aerobatics.lua .这个 LUA 小程序包含大量的操作以及完整的例程序列,并能轻松创建和添加新的例程序列。

这些技巧和序列既可以作为任务的一部分,使用上述 NAV_SCRIPT_TIME 任务命令来运行,也可以通过遥控发射机上的开关来激活。

脚本提供了许多单独的技巧,其 ID 表载于 README.md 文件。下面是一个列表,但预计未来会有扩展,请查看 README:

身份证

名称

Arg1

Arg2

Arg3

Arg4

周转

1

图八

半长轴

倾角

没有

2

循环

半长轴

倾角

# 循环

没有

3

横向矩形

长度

宽度

半长轴

倾角

没有

4

攀岩圈

半长轴

高度

倾角

没有

5

垂直箱

长度

高度

半长轴

没有

6

伊默尔曼(FastRoll)

半长轴

7

直辊

长度

数卷

没有

8

滚动圈

半长轴

数卷

没有

9

半古巴八号

半长轴

10

半反向古巴八

半长轴

11

古巴八国集团

半长轴

没有

12

驼峰

半长轴

高度

13

直线飞行

长度

倾角

没有

14

比例图八

半长轴

倾角

没有

15

伊梅尔曼转弯

半长轴

16

Split-S

半长轴

17

Upline-45

半长轴

增高

没有

18

下线-45

半长轴

高度损失

没有

19

失速转向

半长轴

高度

方向

20

程序转换

半长轴

倾角

退步

21

德里转弯

半长轴

倾角

没有

23

半攀登圈

半长轴

高度

倾角

25

躺下的胖子

半长轴

高度

26

桶卷

半长轴

长度

# 螺旋

没有

27

直持

长度

倾角

没有

28

局部圆

半长轴

倾角

没有

30

八点卷

长度

没有

31

多点滚动

长度

点数

没有

32

侧踏板

半长轴

倾角

没有

要作为任务的一部分使用,可以插入一个 SCRIPT_TIME 任务项目,如图所示:

../_images/nav_script_time.jpg

在上述示例中,一旦到达 WP3,航展(此处显示为 "204",从名为 trick204.txt 的 shedules 文件中加载,见下文的 scheduels 部分)就会执行,完成后进入 WP5。

开关上的技巧

该小程序还提供了在 ACRO、LOITER、CRUISE 或 FBWA 等正常模式下通过遥控开关执行技巧或序列的方法。

设置

  • 确保您已对飞机进行了自动调整,并确保其能够在 ACRO 模式下很好地进行特技飞行(Bixlers 和飞翼一般只能进行翻滚和环绕飞行,因为它们的偏航授权和侧机身面积不足......即必须能够进行刀刃飞行才能发挥全部能力)。这包括自动调整新的偏航率控制器。启用 启用偏航速率 并设置 ACRO_YAW_RATE 适当(90deg/s 是一个好的开始)。在进行自动调整时,不仅要调整俯仰和滚转,还要像调整俯仰和滚转一样,通过使用方向舵来调整偏航。

  • 在具备以下功能的(飞行)控制器(F7 或 H7)上启用脚本功能 SCR_ENABLE =1,重新启动并设置 SCR_HEAP_SIZE = 250000(如果还在运行其他脚本,则需要更多)和 SCR_VM_I_COUNT = 200000.

  • 复制 plane_aerobatic.lua 将脚本复制到 SD 卡 APM/scripts 目录中。使用 RAW 视图并复制到 SD 卡上的文件。重新启动。

  • 如果您想通过 RC 开关激活技巧和计划,请将 RC 通道分配给 RCx_OPTION = 300 用于花样激活开关(低=禁用,中=显示所选花样数,高=执行),一个用于 301,即花样选择。这通常是一个电位器或滑块,但也可以是任何开关(根据开关位置限制花样数量)。设置 TRIK_ENABLE 为 1 并重新启动。然后设置 TRIK_COUNT` 参数改为可由花样选择通道选择的花样数(最多 11 个)。重新启动。

  • 为每个技巧/计划设置相应的 TRIKn_ID/ARG1/ARG2/ARG3/ARG4 参数。例如,如果希望 TRIK3 是一个垂直方框,高 50 米,长 100 米,角半径为 15 米,则设置 TRIK3_ID = 5, TRIK3_ARG1 = 100, TRIK3_ARG2 = 50,以及 TRIK3_ARG3 = 15.其他 TRIK3 参数值将被忽略。

  • 将激活开关设置到中间位置将识别地面站或 TX(如果运行)上的选择频道所选择的窍门编号。 雅浦 遥测。

  • 您可以通过将激活开关置于低位、更改模式或将选择器设置为 0 来终止特技。 如果程序轨迹未达到误差限制,特技或序列也会终止。这通常表明载具调整或动力不足。

记住:高度是您的朋友!不要在 200 英尺以下尝试第一次飞行!如果您在该高度难以看清飞行器,FPV 是一个很好的尝试方式。

AEROM 参数

加载该脚本时会出现许多新参数,这些参数可控制技巧的调整。请参见 README.md 文件中获取最新信息,但在大多数情况下,有几项信息应更改默认值:

  • 路径刻度 这可能是使用示例时间表时最关键的参数。任务中的单个花样或开关上的花样可以使用 TRIKx_ARGy 参数调整花样尺寸。但是,除非经过编辑,否则这些计划表的尺寸都适用于具有显著垂直速度能力的高性能模式飞机。对于普通 3D 飞机或运动型飞机来说,这些尺寸过于激进,可能会在许多特技上中止序列,尤其是在风中。不过,如果将路径刻度从 "1"(无刻度)降低到".75",更多的普通 3D 飞机将能够执行该计划。对于动力较弱(只能勉强垂直悬停)的飞机,甚至可能需要".5 "或更小的缩放系数,将图案的所有半径和长度缩放 50%。

  • AEROM_THR_MIN 应设置为 15-20(%),以保持回路底部的惯性等。

  • AEROM_KE_ANG 大多数飞机都需要为刀刃舵提供一点助力,因此通常需要设置为 10

  • 空速巡航注意:虽然脚本不使用空速传感器,但它使用 GPS 速度跟踪轨迹,并使用该参数设置目标地面速度。因此,即使没有空速传感器,您也可以将该参数设置为飞行器能力范围内的 "快速 "巡航速度。在巡航速度较快的一端飞行有助于应对风的影响。

时间表

该小程序还允许加载特技序列,以执行 F3A 或航展等比赛日程表中的单个特技,这些特技可以从任务中执行,也可以作为 "开关上的特技 "执行。这些文本文件的格式为 trickX.txt,其中 X 为技巧 ID,位于 /scripts 目录下,或 SD 卡上存放 plane_aerobatics.lua 脚本的根目录下。这些数字不应与现有技巧的数字相同。

附表示例如下 trick72.txt 并将作为 TRIKx_ID = 72 通过开关或自动任务指令。计划表启动时将显示其 "名称",当每一招开始时,将向 GCS 发送一条 "信息 "以指示其开始。

若干序列,如 F3A 等,都包含在 时间表文件夹.上面的 "trick72.txt "是 SuperAirshow 序列,由 Loop/HalfReverseCubanEight/ScaleFigureEight/Immelmann/Roll/Split-S/RollingCircle/HumptyBump/Barrel Rool/Cross Box TopHat/Triangular Loop 组成:

./_images/airshow.png

也可以通过计划文件添加新的基本技巧。如超级空中秀计划文件所示,在该文件中创建了一个三角形循环和一个交叉箱顶球技巧,并将其加载到计划序列中。

巧用文件命令

在技巧文件中可以使用多种命令:

  • name:魔术名称;

  • message:<通常是技巧名称> 显示为 GCS 消息。该信息应紧接着技巧

  • <技巧名称> <参数1><参数2>...<参数4> plane_aerobatics 文件中实际执行技巧的子程序名称及其传递的参数

  • align_center(对齐中心): 将等待飞行器对齐中心后再开始下一个特技表演,如果飞行器超出特技飞行框的中心(飞行方向),则立即开始。中心是特技表演开始的位置。

  • align_box x:将下一个魔术的起始点从方框末端 "x "处向行进方向定位,即 "1 "将使魔术在方框末端对齐,而 0.75 将使魔术从方框中心的 3/4 处开始。通常使用的值为 "1"。

特技飞行调试

正常的 ArduPilot 自动调整可为大多数载具提供安全、稳定的 PID 调整。因此,它并不适合需要严格调整的精密特技飞行。请参见下文:

分析性能

通过使用 Plot3d 工具 以图形方式显示编程路径和实际执行路径。时间轴的前半部分追踪编程路径,后半部分追踪实际路径。两者在开始时重叠,以显示路径错误。lua脚本会在执行窍门时记录其他项目,以便该工具显示这些信息。

要使用该工具,请使用 加载 BIN 按钮,选择 "手动 "选址并 复制来源 将视图设置为您的家庭位置。

./_images/plot3d.png

在上图中叠加的是第二个工具:使用 AERT.Perr 日志信息显示了与编程路径的 3D 位置误差,单位为米。从上面可以看出,飞行器在强逆风中一度被吹得顺风偏离滚动圆 15 米。在后来的飞行中,通过提高飞机进行例行飞行的速度(增加 空速巡航)

模拟

使用 SITL,特别是与 RealFlight 和类似于 成瘾X这使得开发和调试更加容易,而无需冒险使用真实飞行器。不过,也可以不使用 RealFlight,仅使用 Mission Planner 和 ArduPilot 提供的 3D 平面模型进行仿真。

下面是一段视频,展示了使用Mission Planner地面站和内置 3D 平面模拟进行的模拟:

如果您使用 RealFlight 进行模拟,下面将介绍如何设置 Addiction 3D 模型以进行脚本轨迹特技飞行:

将脚本调入固件

还可以开发其他脚本,通过 NAV_SCRIPT_TIME 任务项目或正常飞行模式控制飞行器。关键调用包括

  • 通过特定调用 "vehicle:nav_scripting_enable(...) "来启用脚本控制,以覆盖滚动/前平移/俯仰/偏航率和油门,该调用会返回一个布尔值,表示成功或失败。

  • 如果在自动模式下运行,则使用 "vehicle:nav_script_time() "获取 NAV_SCRIPT_TIME 命令的参数。

  • 使用 "vehicle:set_target_throttle_rate_rpy(....) "函数来控制上述速率和油门,必须定期(至少每秒)调用该函数来设置滚转/前平移/俯仰/偏航速率和油门百分比。如果不这样做,控制覆盖将失效,并返回到原始飞行模式。更改飞行模式也会禁用脚本控制。