对于 4.1 及更高版本(零一飞控全系均支持),Plane 使用以家点为中心的圆柱形围栏(见 圆柱形围栏)和/或包含/排除围栏(见 包含与排除围栏)。
注意
在 Plane 中,必须绘制围栏边界,地理围栏参数才能生效。而在 Copter 中,即使没有绘制围栏边界,也可以设置最大飞行高度,但 Plane 必须绘制边界,才能使围栏参数(包括最大/最小高度)生效。
当启用地理围栏后,如果飞机飞出围栏区域,它将自动切换到 GUIDED 模式,飞回预设的返航点,并在该点上空盘旋,等待你重新接管控制。你可以通过遥控器开关或地面站(GCS)命令重新获得控制权。

地理围栏的主要用途之一是用于遥控飞行训练。当你设置了合适的地理围栏后,飞机很难坠毁,你可以尝试一些通常容易导致坠机的飞行动作,相信 APM 会在飞行灾难发生前通过“反弹”飞机来避免事故。
地理围栏可以与任何飞行模式结合使用。对于完全的新手,可以将其与稳定模式(如 STABILIZE 或 FBWA)结合使用。当飞行员逐渐建立信心后,可以将其与 MANUAL 模式结合使用,该模式提供直接的飞机控制,允许进行最有趣的特技飞行。以这种方式使用时,自动驾驶仪将完全不会干预你的操作,只是将控制信号直接传递给舵机,只有当你飞出围栏区域或超出设定的高度范围时,才会接管控制权。
在完全自主飞行中,地理围栏可以作为一种失效保护措施,确保飞机始终保持在预定的飞行区域内。在完全自主飞行中,使用 FENCE_AUTOENABLE 参数,飞机将在起飞完成后自动启用围栏,并在到达降落航点时自动禁用。将该参数设置为 1 即可启用此功能。有关设置起飞和降落航点的详细信息,请参阅使用航点和事件规划任务页面。
当然,地理围栏也可以用于半自主任务(例如,起飞和/或降落是手动的)——在这种情况下,围栏仍然可以通过遥控器或地面站启用/禁用——FENCE_AUTOENABLE 是可选的。
要在 Plane 中设置地理围栏,你需要配置以下几项:
FENCE_RET_RALLY 参数让飞机返回到最近的Rally 点,而不是围栏返航点。FENCE_AUTOENABLE)——是否希望在自主起飞后自动启用围栏,并在自主降落后自动禁用所有这些都可以通过 Mission Planner 进行设置。
设置围栏边界时必须遵守以下规则:
如果你使用 APM Planner 设置围栏,它会确保你遵守这些规则。
请记住,当飞机撞上围栏时,它具有一定的惯性,需要时间才能掉头返回返航点。对于像 SkyWalker 这样的飞机,我们建议在真实飞行边界内再增加约 30 米的安全边距。同样,最低高度也要设置得足够高,以便 APM 有时间从高速俯冲中恢复。你需要多大的安全边距取决于你的飞机的飞行特性。
除了围栏边界外,以下 MAVLink 参数控制地理围栏行为:
FENCE_ACTION —— 围栏被突破时的动作。默认为 0,表示禁用地理围栏。设置为 1 表示启用地理围栏,并在突破时飞回返航点。设置为 2 表示向地面站报告突破但不采取其他动作。设置为 3 表示在突破时飞向返航点,但飞行员仍保持手动油门控制。FENCE_ALT_MIN —— 最低飞行高度(单位:米)。如果为 0,则表示不限制最低高度。FENCE_ALT_MAX —— 最大飞行高度(单位:米)。如果为 0,则表示不限制最大高度。FENCE_CHANNEL(4.1 之前的版本),RCx_OPTION = 11 —— 用于启用地理围栏的 RC 输入通道。默认为 0,表示禁用地理围栏。你应将其设置为遥控器上一个空闲的两段开关通道。当该通道的 PWM 值高于 1750 时,围栏将被启用。如果你的遥控器支持,建议启用声音反馈(每隔几秒发出一声蜂鸣),这样你可以在不低头看的情况下知道围栏是否已启用。FENCE_TOTAL —— 围栏点的数量(返航点 + 封闭边界)。创建围栏时,规划器会自动为你设置该值。FENCE_RETALT —— 飞机在返回返航点时的飞行高度(单位:米)。注意,当 FENCE_RET_RALLY 设置为 1 时,该参数将被忽略,而是使用最近的 Rally 点的盘旋高度。如果该参数为 0 且 FENCE_RET_RALLY 也为 0,则返回高度为 FENCE_ALT_MAX 和 FENCE_ALT_MIN 的中间值。FENCE_AUTOENABLE —— 如果设置为 1,飞机在启动时围栏为禁用状态。自主起飞完成后,围栏将自动启用。当自主任务到达降落航点时,围栏将自动禁用。FENCE_RET_RALLY —— 如果设置为 1,当围栏被突破时,飞机将飞往最近的 Rally 点,而不是围栏返航点。注意,将使用 Rally 点的盘旋高度作为返回高度。注意
Rally 点可以设置在地理围栏之外,但不推荐这样做。如果你将 Rally 点设置在围栏之外,你需要使用
FENCE_CHANNEL禁用地理围栏,否则飞机将永远在 GUIDED 模式下盘旋 Rally 点。一旦禁用地理围栏,你应将飞机飞回围栏内,然后重新启用围栏。
还有一个额外的参数可能对你充分利用地理围栏很有帮助。当你突破围栏时,飞机将切换到 GUIDED 模式并飞回返航点(如果 FENCE_RET_RALLY 设置为 1,则飞往最近的 Rally 点)。一旦你回到围栏内部,你就可以重新获得控制权,你需要告诉 APM 你想要重新获得控制权。你可以通过以下三种方式之一实现:
RST_SWITCH_CH MAVLink 参数为另一个两段通道,该通道连接到一个弹簧开关。RST_SWITCH 参数默认为 0,表示禁用。如果你将其设置为某个通道,你可以使用该通道开关在围栏突破后重新获得控制权。如果不是完全自主飞行,我发现使用 RST_SWITCH_CH 是地理围栏的最佳选择,因为它意味着 APM 在整个飞行过程中都启用了围栏,你不会因为切换模式而改变行为。不过它会占用另一个通道,所以有些人可能没有足够的通道来使用它。
Mission Planner 的操作流程非常相似。首先,在你希望开始绘制地理围栏边界的位置右键点击。

继续点击地图以设置地理围栏边界,多边形将显示出来。你可以拖动任意点进行调整。然后,在地图上右键点击你希望飞机在地理围栏被突破时返回的位置。

最后,上传地理围栏。

如果你将 FENCE_RET_RALLY 参数设置为 1,则返回高度将是最近的 Rally 点的盘旋高度。如果 FENCE_RET_RALLY 设置为 0,则你可以使用 FENCE_RETALT 参数设置返航高度(单位:米,相对于家点)。否则:
如果你设置了 FENCE_MINALT 和 FENCE_MAXALT(即不为零,且 FENCE_MAXALT 大于 FENCE_MINALT),则返航点高度将是 FENCE_MINALT 和 FENCE_MAXALT 的中间值。
如果你没有设置 FENCE_MINALT 和 FENCE_MAXALT(即保持为 0),则返航点高度将由 RTL_ALTITUDE 参数决定,该参数也用于 RTL 模式。注意,RTL_ALTITUDE 的单位是厘米,而 FENCE_MINALT 和 FENCE_MAXALT 的单位是米。
如果你的飞行俱乐部和当地飞行规则没有设定最大飞行高度,我们建议你使用最大高度不超过 122 米(约 400 英尺)。超过这个高度,很难与模型保持良好的视觉联系。
将 FENCE_MINALT 设置为 30 米(以留出俯冲余量),FENCE_MAXALT 设置为 122 米,则返航点高度为 76 米,这是一个非常适合让飞机盘旋等待你准备再次飞行的飞行高度。
ArduPilot 在自动模式下默认启用“摇杆混合”功能。这意味着你可以通过遥控器摇杆改变盘旋路径等。
当使用地理围栏时,在围栏突破时摇杆混合将被禁用,直到飞机回到围栏内部。这是为了确保导致围栏突破的错误控制输入不会阻止飞机恢复到返航点。
一旦你回到围栏内部,摇杆混合将重新启用,允许你控制飞机所在的 GUIDED 模式。如果你通过摇杆混合再次将飞机飞出围栏,摇杆混合将再次禁用,直到你回到围栏内部。
在地面和起飞时,地理围栏应处于禁用状态。小心不要在地面启用它,否则它可能会宣布围栏突破并试图飞往返航点。如果完全自主飞行,你可以使用 FENCE_AUTOENABLE 参数来避免这种复杂情况。
同样,记得在降落时禁用它,因为降落时的高度突破将使降落变得非常困难!
如果你使用的是 APM1,并希望将地理围栏与 MANUAL 模式结合使用,请记住,在 APM1 上,当使用通道 8 进行模式切换且开关 PWM 值高于 1750 时,APM 软件将被绕过(这称为 APM1 上的“硬件手动”模式)。因此,你需要设置另一个开关位置为 MANUAL 模式,或使用另一个模式开关控制通道(并设置 FLTMODE_CH 为你正在使用的通道)。
在你起飞并使用地理围栏飞行之前,请确保所有参数都如上所述设置好,并且 GPS 信号良好。如果失去 GPS 信号,地理围栏将自行禁用,直到重新获得 GPS 信号,因此不要在 GPS 信号不稳定的情况下使用它。
我还建议你在初次使用时谨慎测试。慢慢接近围栏边界,确保它能正确地“反弹”回返航点。然后,在重新获得控制权后,慢慢接近最低高度,确保它能从你设置的 FENCE_MINALT 高度反弹回来。
在开发地理围栏功能时,我发现将其与 MANUAL 模式结合使用是最有趣的。它提供了手动飞行的所有刺激,包括急转弯和花式特技,同时在你犯错时保护你的飞机。
这是我在当地飞行俱乐部使用地理围栏飞行 SkyWalker 时的飞行轨迹。白色线条显示了地理围栏边界,你可以看到中间的返航点。你还可以看到飞机在北侧、西侧和南侧突破地理围栏的点。还有许多高度突破,因为我使用这次飞行来提高我在 MANUAL 模式下的倒飞技能。如果没有地理围栏,飞机将无法幸存!
请注意,此示例中的地理围栏沿着跑道中间设置,以符合当地飞行俱乐部的规定。起飞和降落时围栏是禁用的。我将 FENCE_CHANNEL 设置为 7,RST_SWITCH_CH 设置为 6。这样,我可以在起飞后使用一个开关启用围栏,然后在围栏突破后使用弹簧教练开关重新获得控制权。

注意
在 4.1 及更高版本中,
FENCE_CHANNEL被替换为将某个通道的RCx_OPTION设置为 208,RST_SWITCH_CH被替换为将某个通道的RCx_OPTION设置为 96。
ArduPilot 将通过 MAVLink 地面站协议报告围栏状态。关键的状态包称为 FENCE_STATUS,定义在 ardupilotmega.xml 中。一个典型的 FENCE_STATUS 包如下所示:
2011-12-20 16:36:35.60: FENCE_STATUS breach_status : 1, breach_count : 15, breach_type : 1, breach_time : 1706506
breach_status 字段为 0 表示在围栏内部,为 1 表示在围栏外部。breach_count 表示本次飞行中围栏突破的次数。breach_type 是最后一次突破的类型(参见 ardupilotmega.xml 中的 FENCE_BREACH 枚举)。breach_time 是突破发生的时间(单位:毫秒,自 APM 启动以来)。
MAV_SYS_STATUS_GEOFENCE 位(属于 MAV_SYS_STATUS_SENSOR 部分的 SYS_STATUS 消息)表示地理围栏是否被突破。目前,只有 MAVProxy 地面站识别此状态位,并在飞行中报告地理围栏状态。未来,Mission Planner、APM Planner 和其他地面站应用也将支持在飞行中宣布地理围栏状态。
MAV_CMD_DO_FENCE_ENABLE MAVLink 命令消息允许地面站交互式地启用或禁用围栏。目前,只有 MAVProxy 支持此消息,使用“fence enable”或“fence disable”命令。未来,Mission Planner、APM Planner 和其他地面站应用也将支持交互式启用和禁用地理围栏,而无需使用手动遥控器。
Plane 中的地理围栏还可以作为失效保护系统的一部分,用于像 Outback Challenge 这样的比赛。对于这类活动,你应像往常一样定义围栏边界,但还需要在 APM_Config.h 中设置 FENCE_TRIGGERED_PIN 选项来构建 APM。此选项允许你在围栏被突破时,将 APM 的一个数字引脚设置为高电平。你可以将此引脚连接到飞机的失效保护设备,以触发飞机的失效保护模式(对于 OBC 比赛,这涉及设置极端的舵机值,使飞机俯冲向地面)。