DroneCAN 设置

创建 DroneCAN 是为了继续开发广泛使用的 UAVCAN v0 协议。事实证明,该协议性能强大、功能丰富,已广泛应用于商用无人机行业,并得到行业合作伙伴的广泛支持。UAVCAN v1 协议的拟议引入涉及对 UAVCAN 的更改,增加了复杂性,并且无法为现有部署提供顺利迁移的途径。UAVCAN 联盟经过长时间讨论后决定,最佳解决方案是以 DroneCAN 的名义继续开发 UAVCAN v0。

本文将指导如何在 ArduPilot 上设置 DroneCAN 协议。

提示

应首先启用物理 CAN 端口,并将其驱动程序选为 DroneCAN 协议。请参考 CAN 总线设置

概述

DroneCAN 是一种轻量级协议,旨在通过 CAN 总线为航空航天和机器人应用提供可靠的通信。DroneCAN 网络是一个分散的对等网络,每个对等体(节点)都有一个唯一的数字标识符--节点 ID,基本设置只需设置一个参数。

协议的详细说明见 https://uavcan.org/

支持的 DroneCAN 外围设备类型

ArduPilot 目前支持以下类型的 DroneCAN 外围设备:

全球定位系统

指南针

气压计

测距仪

ADSB 接收器

电源模块

发光二极管

蜂鸣器

空速

安全开关/LED

DroneCAN 适配器节点

DroneCAN 设备类型通过以下方式选择:

  • 在 DroneCAN 协议中自动识别 GPS、罗盘、气压计、ADSB 接收器、LED、蜂鸣器、安全开关/LED 和空速设备

  • 测距仪: RNGFNDx_TYPE = 24

  • 电源模块: BATT_MONITORBATTx_MONITOR = 8

DroneCAN 设置参数

所示为第一个 DroneCAN 驱动程序,第二个驱动程序的参数完全相同

../_images/uavcan-main-settings.png
  • can_d1_protocol 如果设置为 DroneCAN(1),则有以下相关参数:

  • CAN_D1_UC_POOL默认内存大小:如果可能,将为驱动程序分配一定大小的内存池。如果 CAN 流量较小,如 GPS 或指南针,而不是 ESC,通常可以减少默认大小,为其他功能和特性节省 RAM。

DroneCAN 适配器节点

这些设备是通用 DroneCAN 节点,带有 I/O 端口,可通过 UART 端口、I2C、SPI 和/或 GPIO 将非 DroneCAN ArduPilot 外围设备连接到 DroneCAN 总线。请参见 DroneCAN 适配器节点.

DroneCAN ESC 和舵机配置设置

参见 DroneCAN 电子调速器 了解有关 DroneCAN 电调的信息。

每个 DroneCAN 电调或舵机都有一个与(飞行)控制器舵机/电机输出通道相对应的编程 ID 或通道地址。这些信息可通过电调上的开关或设置/配置程序进行设置,具体取决于电调。

有三个参数可决定将哪个(飞行)控制器伺服/电机通道发送到 CAN ESC 和/或伺服:在下面的示例中,显示的是 CAN 驱动器 #1 的值。

  • CAN_D1_UC_NODE - 是向电调发送指令的(飞行)控制器的节点 ID,以便区分 CAN 总线上的多个信号源

  • can_d1_uc_esc_bm - 位掩码,用于确定向 DroneCAN ESC 发送哪些自动驾驶舵机/电机输出信号。

  • can_d1_uc_esc_srv - 位掩码,用于确定向 DroneCAN 伺服器上的伺服器发送哪些自动驾驶伺服器/电机输出信号

在位图掩码中,每个位都代表一个 ESC 或伺服 ID 编号,相应的(飞行)控制器伺服/电机通道命令将指向该编号。例如,00001111(十进制 15 位)将向电调或伺服 ID 0 至 3 发送命令。

备注

使用 DroneCAN 电调/伺服器时,您可以设置 SERVOx_FUNCTION 但仍可使用(飞行)控制器上的这些输出,通过使用 servo_gpio_mask 参数。(飞行)控制器输出将变为 GPIOS,相应的 SERVOx_FUNCTION 将被发送到 DroneCAN。

为了减少带宽 can_d1_uc_esc_bmcan_d1_uc_esc_srv_bm 参数应设置为只启用需要向其发送 CAN 信号的电机和伺服通道。此外 can_d1_uc_esc_of 该参数通过将 ESC 位置偏移到总线上的第一个时隙,消除空时隙,从而进一步最大化带宽。例如,ESC 位于输出端 5 至 8,偏移量为 4 时,ESC 将被传送到前 4 个时隙,否则这些时隙将是空的,会占用带宽。

  • 例如如果要在通道 1、2、4 上配置 CAN 伺服器,在通道 3 上配置电调电机,则设置为

  • 例如 can_d1_uc_esc_bm = 0x0B

  • 例如 can_d1_uc_esc_srv = 0x04

GPS 配置设置

如果有 DroneCAN GPS 设备,则必须在 全球定位系统 参数子组。参数 类型 参数应设置为 9,用于(飞行)控制器中相应的 GPS 接收机。

./_images/uavcan-gnss-settings.png

DroneCAN LED 配置

DroneCAN LED 可通过设置 NTF_LED_TYPES 位掩码。位掩码 CAN_D1_UC_NTF_RT 设置通知信息在 DroneCAN 中的传输速率。

DroneCAN 测距仪配置

设置 RNGFNDx_TYPE = 24 可启用 DroneCAN 测距类型。通过 DroneCAN 接收到的测距仪数据只有在接收到的传感器 ID 与参数 RNGFNDx_ADDR.对于基于 AP_Periph 固件的适配器节点,该值为 0,因此 RNGFNDx_ADDR 必须设置为 0。其他 DroneCAN 测距仪可能会有所不同。另请参阅 DroneCAN 适配器节点 指示。

DroneCAN 选项

每个 DroneCAN 驱动程序的多个选项可通过 can_d1_uc_optioncan_d2_uc_option 位屏蔽参数。默认不设置:

CAN_Dx_UC_OPTION 位

设置时的功能

0

清除 DNA 数据库、 见下

1

忽略 DNAN 节点冲突、 见下

2

EnableCanfd、 下面的 CANFD

3

IgnoreDNANodeUnhealthy,忽略断开连接的节点 ID

4

SendServoAsPWM(以 us 为单位发送 PWM 值),而不是以 -1 到 -1 的方式发送伺服位置。

5

SendGNSS,通过 DroneCAN 发送 GPS 定位和状态信息,某些云台会使用该功能

DroneCAN 节点 ID 冲突

当连接并识别一个设备时,它的节点 ID 和硬件 ID 会被输入一个数据库,并在电源周期之间保存。如果使用具有相同节点 ID 和不同硬件 ID 的多个设备(例如,交换具有相同节点 ID 的智能电池),数据库中就会出现冲突。这就需要使用 can_d1_uc_option 参数允许在下次启动时重置数据库,或忽略数据库中的冲突。

CAN FD(灵活数据传输速率)

如果 DroneCAN 端口连接到 CAN FD 外围设备,则设置 can_d1_uc_option 第 2 位(+ 值 4)将启用该模式。

备注

CAN FD 需要比正常情况下更大的内存池分配。默认值为 24KB,而不是正常的 12KB。

DroneCAN CAN 总线上的混合协议

如果 CAN_Dx_PROTOCOL 是 DroneCAN,那么通过设置 CAN_Dx_PROTOCOL2 参数:

身份证

设备协议

7

1 美元

10

脚本

11

Benewake

12

脚本2

13

TOFSenseP

14

纳米雷达_NRA24

SLCAN

备注

为降低 CPU 负载,上膛时禁止通过 COM 端口访问 SLCAN。请通过 MAVLink 使用 SLCAN。无论如何,这种方法通常是首选。

ArduPilot 和 DroneCAN 提供了与(飞行)控制器 CAN 总线上的 DroneCAN 设备直接通信的方法:SLCAN。启用 SLCAN 并与 DroneCAN 设备通信取决于(飞行)控制器的处理器。F7/H7 处理器使用一种方法,而 F4 使用另一种方法。