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 硬件,仅作为示例提供。
根据电路板和底层硬件的类型,可能需要采取其他措施来创建 CAN 驱动程序和 UAVCAN 接口类。