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_MONITOR 或
BATTx_MONITOR
= 8
DroneCAN 设置参数¶
所示为第一个 DroneCAN 驱动程序,第二个驱动程序的参数完全相同
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_bm 和 can_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 接收机。
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_option 和 can_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 使用另一种方法。