文章目录
[1.1 所需硬件](#1.1 所需硬件)
[1.2 连接到自动驾驶仪](#1.2 连接到自动驾驶仪)
[1.3 设置](#1.3 设置)
[1.4 ADSB输出配置](#1.4 ADSB输出配置)
[1.5 启用载人飞行器避障功能](#1.5 启用载人飞行器避障功能)
[1.6 飞行器数据库](#1.6 飞行器数据库)
[1.7 开发者信息包括模拟](#1.7 开发者信息包括模拟)
前言
本文介绍了如何安装和配置 ADS-B 模块,以便你的飞机能够知道附近的其他飞机和空中交通管制,并/或向其传送信息。这也使地面上的飞行员能够知道附近的有人驾驶飞机,并可选择让飞行器自动避开它们。
ADS-B(又称自动依赖监视广播)(Automatic Dependent Surveillance Broadcast)是一种空中交通监视技术,使飞机能够被空中交通管制员和其他飞行员准确跟踪,而不需要传统雷达。
! Warning
避让功能是仍在开发中的新功能,应谨慎使用。如果启用了 ADSB 避让功能,强烈建议设置RCx_OPTION = 38 (ADSB Avoidance En)功能,以便在空中时轻松禁用,如果有此需要。
1.1 所需硬件
这些传感器可以直接从 uAvionix 或 Sagetech 购买,也可以从以下经销商处购买:
- USA:Unmanned Systems Source
- R Cubed Engineering
- U.K:Unmanned Tech
- Germany:UAV Store
1.2 连接到自动驾驶仪
ADSB 接收机应连接到自动驾驶仪的串行端口。接收器的安装应使天线呈垂直方向。
1.3 设置
设置 ADSB_TYPE 参数,以配合接收机的串行通信协议。
接收器所连接的串口应配置成也与 ADSB 接收器的协议相匹配:
|-------------------|------------------------------------------------------------------------------------------|----------------------|------------------|
| ADSB Protocol | ADSB_TYPE | SERIALx_PROTOCOL | SERIALx_BAUD |
| MAVLINK | 1 | MAVLink2 (2) | 57600 |
| Sagetech | 2 | ADSB (35) | 57600 |
| UCP | 3 | ADSB (35) | 115200 |
| Sagetech MX | 4 | ADSB (35) | 115200 |
例如,如果你将 uAvionix Ping2020i 插入自动驾驶仪上指定为 SERIAL4 的 UART,你会设置:
- SERIAL4_PROTOCOL为 2(指 MAVLink2);
- SERIAL4_BAUD 57(指 57600)。
- ! Note
ADSB 接收机的规格可能只说明 MAVLink 为协议。在这种情况下,首先尝试 MAVLink2,如果不成功,就用 MAVLink 作为串口协议。
在做出这些改变后,你需要重新启动你的板子。
为了使 ADSB 数据流向 GCS,你要检查你的 StreamRate 参数。在某些情况下,它已经被设置好了,但最好还是检查一下。这些速率在每个遥测中都是可以调整的,比如在连接高带宽和低带宽的情况下。调整速率的参数将取决于你的 GCS 连接到哪一个。在大多数情况下,它是 telem1。
- SR1_ADSB 5(指 5Hz)。
一旦投入使用,大约 50 公里范围内的飞机应出现在地面站地图上。
为了测试系统,你可以与 flightradar24.com 上显示的航班进行比较。
1.4 ADSB输出配置
! Warning
确保你有正确的权限,使用能够发射的 ADSB 硬件。你将会在空中交通管制员的机场雷达上显示出来!
以下参数用于配置 ADS-B 输出:
- ADSB_ICAO_ID:ICAO_ID 该飞机的唯一飞行器识别号码。这是一个限制在 24 位的整数。如果设置为 0,那么将随机生成一个。如果设置为 -1,则不发送静态信息,假设收发器是预编程的;
- ADSB_EMIT_TYPE:ADSB 对发射转发器信号的飞行器类型的分类。默认值为 14 (UAV);
- ADSB_LEN_WIDTH:飞机的长度和宽度尺寸选项,长度和宽度单位为米。在大多数情况下,使用 1 的值表示最小的尺寸;
- ADSB_OFFSET_LAT:GPS 天线的横向偏移。这描述了飞机上 GPS 天线中心的物理位置偏移;
- ADSB_OFFSET_LON:GPS 天线的纵向偏移。这通常被设置为 1,由传感器应用;
- ADSB_RF_SELECT:收发器射频选择 Rx 启用和/或 Tx 启用。这只影响可以 Tx 和/或 Rx 的设备。只有 Rx 的设备会覆盖这一点,使其总是只有 Rx;
- ADSB_SQUAWK:向 ATC 广播的 Squawk/Transponder(模式 3/A)代码,通常由你的 ATC 为某一特定航班分配。在美国/加拿大,默认的 Squawk 代码是针对 VFR 的,是 1200。欧洲和澳大利亚的大部分地区使用 7000。如果设置了一个无效的八进制数字,那么它将被重置为 1200;
- ADSB_OPTIONS:允许启用某些设备的特定功能,并允许在某些飞行器失控保护"鸣叫"紧急代码。
在许多情况下,默认值是可以的,除了 ADSB_RF_SELECT 需要打开发射机外,你不需要改变任何这些。ADSB_RF_SELECT 发射位在启动时被清空,以确保你只在有意启用时进行发射。
在 uavionix.xml 中为 ADSB 提供了额外的 MAVLink 信息,允许 GCS 设置所有这些选项。即 msg UAVIONIX_ADSB_OUT_CFG 和 UAVIONIX_ADSB_OUT_DYNAMIC,其中 _cfg 是唯一可以指定自定义呼号的地方。
! Note
Mission Planner 的转发器标签不会向 Sagetech 的 XP 系列转发器发送正确的信息。为了改变工作模式,可以使用 Sagetech 的工程 GUI 将转发器设置为 ALT 模式,以确保传输与飞行控制器的工作。
1.5 启用载人飞行器避障功能
ArduPilot 包括一个飞行模式,AVOID_ADSB,它试图根据 ADS-B 传感器的输出来避免有人驾驶的飞行器。当有必要根据下面的参数进行避让时,自动进入该模式。当威胁过去后也会自动退出。
要启用该功能,请与地面站连接并设置以下参数:
- AVD_ENABLE:设置为"1"以启用基于 ADS-B 的避让(设置后可能需要刷新参数);
- AVD_F_DIST_XY:以米为单位的水平距离,应被认为是近失误;
- AVD_F_DIST_Z:在飞行器上方或下方的垂直距离,以米为单位,应被视为近似事故;
- AVD_F_TIME:在预计发生近距离碰撞前多少秒(基于飞行器的当前位置和速度),飞行器应开始 AVD_F_ACTION;
- AVD_F_ACTION:控制飞行器应如何应对预计的近距离碰撞(即 2:爬升或下降,3:水平移动,4:垂直 3D 移动,5:RTL 或 6:悬停);
- AVD_F_RCVRY:设置飞行器在清除了近失区后的行为方式(即 1 = 恢复以前的飞行模式)。
注意:有同等的"警告"参数(即 AVD_W_DIST_XY),可用于调整何时在地面站出现对飞行员的警告。
在 ArduPilot 固件 4.0 及以后的版本中,可以通过 RC 通道的开关来启用或禁用进入该模式,通过设置 RCx_OPTION = 38 (ADSB Avoidance En)。如果 RC 的 PWM > 1800us,那么如果有威胁出现,就会启用进入该模式。
1.6 飞行器数据库
当启用时,ADS-B 库最多可以存储 50 个由 ADS-B 接收器探测到的飞行器信息,但可以通过 ADSB_LIST_MAX 参数进一步限制。由于其他功能的一些实验性工作,如 EKF2,可用的 RAM 可能会受到限制。值得注意的是,当 ADSB 被禁用时(ADSB_TYPE = 0),那么内存就会被释放,有效地释放出大约 1KB 的 RAM。当启用时,检测到的飞行器列表每秒钟检查一次,以发现潜在的冲突。
1.7 开发者信息包括模拟
数据是通过 ADSB_VEHICLE 消息(ADSB_VEHICLE message)传输的。当 ArduPilot 收到时,它将使用 SRx_ADSB 值进行流式传输,其中x是遥测端口号,该值是每秒要流式传输多少飞行器。如果使用 telem1,流率参数将是 SR1_ADSB。列表将不会重复超过 1 秒的速度。这种灵活性对于节省数据链路的带宽很有用,但也允许高速链路的最大更新率,如机载配套计算机。
ArduPilot 的 SITL 包括对支持 ADS-B 的飞机进行模拟。要启用这个功能,你必须有 pymavlink v1.1.70 或更高版本。如果你有一个旧版本,请使用:
sudo pip install --upgrade pymavlink MAVProxy
使用 SIM_ADSB_COUNT 参数设置要模拟的飞机数量。可以通过设置参数'SIM_ADSB_TX '来启用 Ping2020 模拟支持。ADS-B 的其他模拟选项也存在,都以 SIM_ADSB_ 开头。
使用 USB-Serial 转换器将硬件 ADS-B 接收器插入你的计算机,或使用 PingUSB,将允许你在模拟中叠加真实的 ADS-B 交通。你可以通过这种方式调用 SITL 来实现这种效果:
sim_vehicle.py -v ArduCopter -A "--uartC uart:$SERIAL_DEVICE:57600"
其中 SERIAL_DEVICE 在 Linux 系统上可能是/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A4008ZND-if00-port0(用命令 ls /dev/serial/by-id/* 或 ls /dev/ttyS* 查找有效的串行设备列表,用于 Cygwin 的 COM 端口)。一旦 SITL 启动,可能需要设置 SERIAL3_ 参数:
:ref:`SERIAL3_PROTOCOL<SERIAL3_PROTOCOL>` 1
:ref:`SERIAL3_BAUD<SERIAL3_BAUD>` 57600