Skip to content

DroneCAN ​

DroneCAN 是一种开放的软件通信协议,用于载具上的飞行控制器与其他 CAN 设备之间的相互通信。

WARNING

  • 默认情况下,DroneCAN 及使用它的特定传感器和功能均未启用。有关设置的信息,请参阅 PX4 配置。
  • PX4 需要使用 SD 卡来启用动态节点分配和进行固件更新。飞行过程中不会使用该 SD 卡。

INFO

DroneCAN 以前称为 UAVCAN v0(或简称 UAVCAN)。该名称于 2022 年更改。

DroneCAN 的优势 ​

通过 DroneCAN 连接外设具有诸多优势:

  • 已支持多种不同的传感器和执行器。
  • CAN 专为在较长距离上提供稳健、可靠的连接而设计。它支持在较大的机体上安全使用电调,并提供通信冗余。
  • 该总线支持双向通信,可用于健康监测、诊断和转速数传。
  • 布线更简单,因为可以使用一条总线连接所有电调和其他 DroneCAN 外设。
  • 设置更简单,因为可以通过手动转动各个电机来配置电调编号。
  • 用户可通过 PX4 集中配置所有连接到 CAN 总线的设备并更新其固件。
  • PX4 会自动跟踪设备信息(厂商、型号、版本、序列号),用于维护和机队管理。参见资产跟踪。

支持的硬件 ​

支持符合 DroneCAN/UAVCAN v0 标准的大多数常见类型外设(传感器、电调和舵机)。

支持的硬件包括(此列表并不完整):

硬件安装 ​

DroneCAN 运行在 CAN 网络上。 DroneCAN 硬件应按照 CAN > 接线中的说明连接。

节点 ID 分配 ​

每个 DroneCAN 设备都必须配置一个在机体上唯一的 节点 ID。

大多数设备支持 动态节点分配(DNA),使 PX4 能够在系统启动时自动配置每个检测到的外设的节点 ID。有关设备是否支持 DNA 及如何启用的详细信息,请查阅制造商文档。许多设备在节点 ID 设为 0 时会自动切换为 DNA。当 UAVCAN_ENABLE 参数 > 1(设为 2 或 3)时,PX4 将启用内置分配服务器。

某些设备不支持 DNA。此外,在某些关键任务场景中,您可能更倾向于提前手动配置节点 ID,而不是依赖动态分配服务器。要完全禁用 DNA,请将 UAVCAN_ENABLE 设为 1,并手动为每个节点 ID 设置唯一值。如果 DNA 仍在运行,而某些设备需要手动配置,请为这些设备设置大于 DroneCAN 设备总数的节点 ID,以避免冲突。

INFO

PX4 的节点 ID 可以通过 UAVCAN_NODE_ID 参数配置。该参数默认设为 1。

运行 PX4 DroneCAN 固件的设备(例如 ARK CANnode)可以使用 CANNODE_NODE_ID 参数设置静态节点 ID。将其设为 0(默认值)可使用动态分配,或设为 1-125 之间的值以使用指定的静态节点 ID。

WARNING

截至本文撰写时,PX4 不会在 CAN2 端口上运行节点分配服务器。这意味着,如果设备 仅 连接到 CAN2(未以冗余方式同时连接 CAN1 和 CAN2),就需要手动配置其节点 ID。

PX4 配置 ​

通过在 QGroundControl 中设置特定 PX4 参数,可以在 PX4 上配置 DroneCAN。您需要启用 DroneCAN 本身,以及所用功能对应的消息订阅和发布。

INFO

在某些情况下,还需要配置已连接 CAN 设备上的参数(这些参数也可以通过 QGC 设置)。

启用 DroneCAN ​

要启用 PX4 DroneCAN 驱动,请设置 UAVCAN_ENABLE 参数:

  • 0:禁用 DroneCAN 驱动
  • 1:启用面向传感器的 DroneCAN 驱动,禁用 DNA 服务器
  • 2:启用面向传感器的 DroneCAN 驱动,启用 DNA 服务器
  • 3:启用面向传感器和电调的 DroneCAN 驱动,启用 DNA 服务器

如果支持 DNA,建议设为 2 或 3。

DroneCAN 消息订阅与发布 ​

为避免大量消息占用 CAN 总线,PX4 默认不会发布或订阅那些 可能 需要的 DroneCAN 消息。您必须通过设置相应的 UAVCAN 参数,启用特定功能所需消息的发布或订阅。

INFO

只有启用相应的 DroneCAN 传感器订阅后,相关传感器参数才可能存在(在 QGC 中可见)!

例如,只有启用 UAVCAN_SUB_FLOW 后,SENS_FLOW_MINHGT 参数才会出现。

例如,要使用已连接的 DroneCAN 智能电池,需要启用 UAVCAN_SUB_BAT 参数,使 PX4 订阅并接收 BatteryInfo DroneCAN 消息。如果使用的外设需要知道 PX4 是否已解锁,则需要设置 UAVCAN_PUB_ARM 参数,使 PX4 开始发布 ArmingStatus 消息。当 UAVCAN_ENABLE 为 3(电调输出)时,会自动发布 ArmingStatus。

参数名称以 UAVCAN_SUB_ 或 UAVCAN_PUB_ 为前缀,分别表示启用 PX4 的订阅或发布。名称的其余部分表示要设置的具体消息或功能。

连接到 PX4 的 DroneCAN 外设也可以通过 QGC 设置参数进行配置。按照约定,以 CANNODE_ 为前缀的参数具有预定义的含义,并可能在参数参考中有相应说明。以 CANNODE_PUB_ 和 CANNODE_SUB_ 为前缀的 CANNODE_ 参数可分别启用外设对相应 DroneCAN 消息的发布和订阅。这些参数可将 DroneCAN 外设配置为仅订阅和发布实际需要的消息(与 PX4 使用相应的 UAVCAN_PUB_/UAVCAN_SUB_ 参数的方式相同)。请注意,外设可能不使用 CANNODE_ 参数,在这种情况下,无论是否需要,外设都可能必须发布或订阅特定消息。

以下各节进一步介绍用于启用特定功能的 PX4 和 DroneCAN 外设参数。

传感器 ​

可启用的 DroneCAN 传感器参数及订阅如下(自 PX4 v1.14 起):

GPS ​

PX4 DroneCAN 参数:

GPS CANNODE 参数(通过 QGC 设置):

  • 将 CAN 总线上最后一个节点的 CANNODE_TERM 设为 1。

其他 PX4 参数:

RTK GPS ​

设置与上文 GPS 相同的参数。此外,根据 RTK 配置采用流动站与固定基站、流动站与移动基站,或同时采用两种方式,您可能还需要设置以下参数。

流动站与固定基站 ​

利用来自 RTK 基站模块的 RTCM 消息确定流动站的位置(基站模块连接到 QGC,由 QGC 通过 MAVLink 将 RTCM 信息发送给 PX4)。

PX4 DroneCAN 参数:

  • UAVCAN_PUB_RTCM:
    • 使 PX4 向总线发布 RTCM 消息(RTCMStream)(这些消息由 PX4 通过 QGC 从 RTK 基站模块获取)。

流动站模块参数(同样通过 QGC 设置):

INFO

也可以改用 UAVCAN_PUB_MBD 和 CANNODE_SUB_MBD,它们也用于发布 RTCM 消息(这些参数较新)。使用 RTCMStream 消息意味着可以同时实现移动基站功能(见下文)。

流动站与移动基站 ​

如使用双 u-blox F9P 实现 RTK GPS 航向测量中所述,机体可以安装两个 RTK 模块,以根据 GPS 计算偏航角。在此配置中,机体配备一个 移动基站 RTK GPS 和一个 流动站 RTK GPS。

可以分别在移动基站和流动站 RTK CAN 节点上设置以下参数:

在自动驾驶仪上,将流动站对应槽位(由 SENS_GNSSn_ID 匹配)的 SENS_GNSSn_HDG 设为 Moving base rover,并设置两个节点的天线偏移量(参见航向基线)。运行旧版固件的节点会减去自身的 GPS_YAW_OFFSET;请将该参数保持为 0。

Barometer ​

PX4 DroneCAN 参数:

罗盘 ​

PX4 DroneCAN 参数:

距离传感器/测距仪 ​

PX4 DroneCAN 参数:

其他 PX4 参数:

  • 如果测距仪未安装在机体重心处,可以使用 EKF2_RNG_POS_X、EKF2_RNG_POS_Y 和 EKF2_RNG_POS_Z 补偿偏移。
  • 其他 EKF2_RNG_* 参数也可能适用,如有需要,应在相应测距仪的文档中说明。

Optical Flow Sensor ​

PX4 DroneCAN 参数:

其他 PX4 参数:

光流传感器需要测距仪数据。不过,测距仪不必集成在同一模块中;若为独立设备,也可以不通过 DroneCAN 连接。如果测距仪通过 DroneCAN 连接(无论是内置还是独立设备),还需要按距离传感器部分(见上文)所述启用它。

外设解锁 ​

PX4 DroneCAN 参数:

  • UAVCAN_PUB_ARM(解锁状态):使用以 PX4 解锁状态作为工作前提的 DroneCAN 组件时,启用此消息的发布。 DroneCAN 电调不需要此设置:当 UAVCAN_ENABLE 为 3 时,会自动发布 ArmingStatus。

Grippers ​

DroneCAN 夹爪不需要设置任何 UAVCAN_SUB_*、UAVCAN_PUB_*、CANNODE_SUB_* 或 CANNODE_PUB_* 参数。启用 DroneCAN 后,PX4 会自动发布 uavcan.equipment.hardpoint.Command 消息,以转发 MAV_CMD_DO_GRIPPER 命令。

有关配置示例,请参阅电永磁铁(EPM)。

电调与舵机 ​

DroneCAN 电调和舵机需要配置电机顺序和舵机输出。

使用 UAVCAN_ESC_IFACE 参数选择用于电调数据输出的 CAN 接口(默认选择所有接口)。请注意,DroneCAN 电调应使用独立的专用 CAN 接口,因为电调消息可能占满总线,使其他节点无法获得足够的带宽。

灯光 ​

PX4 可以使用标准 DroneCAN LightsCommand 消息,控制已连接的 DroneCAN 外设上的外部 LED。最多可控制 2 个灯。每个灯均可独立显示系统状态颜色、固定颜色(通常用于指示飞行器朝向),或根据解锁状态在两者之间切换。

完整配置说明请参阅 DroneCAN 灯光。

QGC CANNODE 参数配置 ​

QGroundControl 可以查看和修改连接到飞行控制器的 CAN 设备参数,前提是这些设备在 QGC 启动之前已连接到飞行控制器。

CAN 节点在机体设置 > 参数中以独立分区显示,名称为 Component X,其中 X 为节点 ID。例如,下面的截图显示了节点 ID 为 125 的 CAN GPS 的参数(位于 Standard、System 和 Developer 参数分组之后)。

QGC 参数页面中选中的 DroneCAN 节点

可配置的常用 CANNODE 参数包括:

设备专用设置 ​

除非设备专用文档中特别说明,否则大多数 DroneCAN 节点不需要进一步设置。

固件更新 ​

PX4 可以通过 DroneCAN 升级设备固件。

INFO

PX4 通过检查是否存在 APDescriptor 来识别有效的固件二进制文件(.bin)。APDescriptor 是嵌入在 .bin 文件中的元数据块,包含目标板 ID、固件版本和校验和。 PX4 使用此描述符将各个二进制文件与正确的节点匹配,并确定是否需要更新。

获取固件 ​

每个 PX4 发布版本都会将由 PX4 构建的 CAN 节点固件以 <target>.uavcan.bin 的形式发布(例如 cuav_can-gps-v1_default.uavcan.bin),并作为附件提供在 GitHub 发布页面中。使用 make <target> 自行构建 CAN 节点目标时,.uavcan.bin 文件会写入 build/<target>/。

INFO

飞行控制器构建已无法在其 ROMFS 中嵌入 CAN 节点固件。 CONFIG_BOARD_UAVCAN_PERIPHERALS 板级选项及使用该选项的 px4_fmu-v5_uavcanv0periph 构建(嵌入 CUAV CAN GPS v1 固件)已在 PX4 v1.18 之后移除。请改为按下文所述,将节点的 .uavcan.bin 文件复制到 SD 卡。

固件目录 ​

重启之前,请将固件二进制文件放入 SD 卡上的以下任一位置:

  • SD 卡根目录(/fs/microsd/):手动更新最简单的选择。
  • 暂存目录(/fs/microsd/ufw_staging/):远程更新或通过程序更新的首选位置。启动时,在刷写任何节点之前,文件会被移至 /fs/microsd/ufw/,以避免在机体运行期间上传固件造成写入冲突。

启动时,PX4 会扫描这两个位置,从每个文件的 APDescriptor 中读取板 ID,并将文件复制到 /fs/microsd/ufw/<board_id>.bin。随后会删除源文件。然后,对于已连接且运行版本与固件不匹配的节点,会通过 CAN 总线刷写固件。

远程更新 ​

将对应的 bin 文件上传到 /fs/microsd/ufw_staging/,即可进行远程更新。 PX4 将在下次启动时更新固件。

这种方法可以从归档文件(包含目标 CAN 节点 .bin 文件的 .zip 或 .tar 文件)中高效地批量更新二进制固件。

INFO

Auterion 使用此工作流程的一种形式,为基于 SkyNode 的设备更新 CAN 固件。通过为 upload_skynode.sh 脚本指定多个 --ext-fw 选项,可以将多个固件文件打包并上传到伴随计算机侧的某个目录。

sh
./Tools/auterion/upload_skynode.sh \
  --ext-fw=build/auterion_canio_default/auterion_canio_default.uavcan.bin
  --ext-fw=build/auterion_canio_default/another_default.uavcan.bin
  ...
  --ext-fw=build/auterion_canio_default/some_other_default.uavcan.bin

随后,另一个工具会通过本地数据库检查哪些文件已上传,并仅将相关文件提取到 PX4 固件暂存区。

故障处理 ​

问:我的 DroneCAN 设备无法工作。

答:检查 UAVCAN_ENABLE 参数是否设置正确。要查看 PX4 在 CAN 总线上检测到的设备或节点列表,请打开 NSH(即进入 QGroundControl 的 MAVLink 控制台)并输入 uavcan status。


问:DNA 服务器没有分配节点 ID。

答:PX4 需要 SD 卡才能执行动态节点分配。请确认已插入一张 SD 卡(且能正常工作),然后重启。


问:解锁后电机不转。

答:

  • 请确保将 UAVCAN_ENABLE 设为 3,以启用 DroneCAN 电调输出。
  • 请确保已设置 UAVCAN_ESC_IFACE,以启用电调所用的 CAN 接口。

问:只有增大油门后电机才开始转动。

答:使用执行器 > 执行器测试,确认电机输出的最小值设置正确。

实用链接 ​