CAN 总线和 UAVCAN/DroneCAN 协议

ArduPilot 对 CAN 总线消息传递的支持依赖于两个部分:

  • 通过 HAL 驱动程序实现硬件 CAN 总线支持

  • 负责处理所有高级工作的 UAVCAN/DroneCAN 协议

ArduPilot 中的 CAN 总线支持

支持 CAN 总线的硬件基础位于 AP_HAL 库中,由两个类组成:

  • CAN 类负责表示电路板上的一个物理接口。该类管理接口的打开、设置和操作,是软件和硬件之间的主要连接点

  • CANManager 类封装了所有物理接口。它对接口进行枚举,提供对这些接口的访问,并为访问 UAVCAN 管理类提供连接点。

作为为新硬件提供 CAN 总线支持的指南,以下内容可供参考 路线图 可以使用。

UAVCAN/DroneCAN 协议

对 UAVCAN 协议的支持基于 AP_UAVCAN 类,该类封装了与 Libuavcan 的交互,并为 ArduPilot 中的其他库提供接入点。它负责通过 CAN 总线以 UAVCAN 协议发送信息、接收信息、将信息转换为其他库可接受的形式,并提供 Libuavcan 的循环更新。

备注

UAVCAN 已经发展成为 DroneCAN。这两个术语有时可以互换使用,但 ArduPilot 现在使用的是 DroneCAN 规范,而 UAVCAN 正在单独发展。

AP_UAVCAN 类支持以下信息:

  • 向伺服系统发送 1010.ArrayCommand 命令

  • 接收 1001.磁场强度

  • 接收 1028.静态压力

  • 接收 1029.静态温度

  • 向 ESC 发送 1030.RawCommand 命令

  • 接收来自全球导航卫星系统的 1060.Fix 信号

  • 从全球导航卫星系统接收 1061.辅助信号

AP_UAVCAN 类处理所有传入的信息,并将信息翻译成最适合其他库的形式。消耗或传输数据的程序库不应包含 UAVCAN 模块中的 UAVCAN 头文件,而应以自己喜欢的方式向 AP_UAVCAN 类发送所有数据。

初始化说明

以下初始化基于 Pixhawk 硬件,仅作为示例提供。

./_images/can_init.png

根据电路板和底层硬件的类型,可能需要采取其他措施来创建 CAN 驱动程序和 UAVCAN 接口类。