无人机行业主流 CAN 上层协议介绍一、DroneCAN1.1 核心特性1.2 主要应用场景1.3 技术架构1.4 典型消息示例二、Cyphal原 UAVCAN v12.1 与UAVCAN v0的主要区别2.2 协议栈组成2.3 数据类型定义DSDL2.4 实际应用优势三、UAVCAN3.1 历史背景3.2 核心设计原则3.3 消息传输机制3.4 典型网络拓扑四、MAVLink over CANMAVCAN4.1 设计目标4.2 协议封装方式4.3 与原生MAVLink对比4.4 适用场景五、协议横向对比5.1 技术特性对比5.2 生态系统对比DroneCANCyphalUAVCANMAVCAN5.3 选型建议选择 DroneCAN 当选择 Cyphal 当选择 UAVCAN 当选择 MAVCAN 当5.4 发展趋势5.5 混合使用场景总结一、DroneCANDroneCAN是一种专为无人机和机器人系统设计的轻量级、开源CAN总线通信协议。它基于UAVCAN v0协议发展而来由PX4开源社区主导维护已成为无人机领域应用最广泛的CAN总线协议之一。1.1 核心特性轻量高效协议栈占用资源少适合嵌入式系统即插即用支持设备自动发现和动态节点ID分配服务导向提供请求-响应式服务调用机制数据类型丰富支持标准数据类型和用户自定义消息开源免费Apache 2.0许可证社区活跃1.2 主要应用场景飞控与传感器通信IMU、GPS、气压计等电调ESC状态监控与控制电源管理模块PDB数据采集外围设备扩展LED、蜂鸣器、OSD等1.3 技术架构┌─────────────────────────────────────┐ │ 应用层 │ ├─────────────────────────────────────┤ │ 服务调用 │ 消息发布/订阅 │ ├─────────────────────────────────────┤ │ 传输层CAN帧封装 │ ├─────────────────────────────────────┤ │ 数据链路层CAN 2.0 │ └─────────────────────────────────────┘1.4 典型消息示例# DroneCAN 节点状态消息定义uavcan.equipment.ahrs.Solution:timestamp:uint64# 微秒时间戳orientation:float[4]# 四元数姿态angular_velocity:float[3]# 角速度linear_acceleration:float[3]# 线性加速度二、Cyphal原 UAVCAN v1Cyphal是UAVCAN协议的重大升级版本于2021年正式发布。它继承了UAVCAN的设计理念同时在性能、安全性和可扩展性方面进行了全面改进。2.1 与UAVCAN v0的主要区别统一传输层支持CAN FD、Ethernet、Serial等多种物理层改进的寻址方案128位节点ID支持大规模网络增强的数据类型系统支持嵌套数据结构内置安全机制消息签名和加密支持更好的实时性优化的调度算法2.2 协议栈组成应用层定义数据类型和服务接口传输层处理消息分段、重组和流控制网络层路由和网络管理数据链路层适配不同物理介质2.3 数据类型定义DSDL# Cyphal 数据类型定义示例uavcan.node.Heartbeat.1.0:uptime:uint32# 节点运行时间秒health:uint2# 健康状态0正常1警告2错误3离线mode:uint3# 运行模式vendor_specific_status_code:uint82.4 实际应用优势跨平台兼容同一协议栈可在不同硬件平台运行工具链完善提供代码生成器、调试工具和仿真环境工业级可靠性适合安全关键型应用三、UAVCANUAVCANUncomplicated Application-level Vehicular Communication And Networking是最早的无人机CAN总线协议标准为后续协议发展奠定了基础。3.1 历史背景2014年由Pavel Kirienko等人提出旨在解决无人机系统中传感器和执行器的通信问题最初设计用于CAN总线后扩展支持其他介质3.2 核心设计原则去中心化无主节点所有节点平等实时性保证关键消息的传输延迟可扩展性支持动态添加/移除节点容错性单点故障不影响整体系统3.3 消息传输机制发布-订阅模式节点可发布消息其他节点订阅接收服务调用支持同步和异步RPC调用心跳机制定期发送状态信息监控节点健康3.4 典型网络拓扑┌─────────────┐ │ 飞控 │ │ (节点1) │ └──────┬──────┘ │ ┌───────────────┼───────────────┐ │ │ │ ┌─────┴─────┐ ┌─────┴─────┐ ┌─────┴─────┐ │ GPS │ │ IMU │ │ 电调 │ │ (节点2) │ │ (节点3) │ │ (节点4) │ └───────────┘ └───────────┘ └───────────┘四、MAVLink over CANMAVCANMAVCAN是将MAVLink消息封装在CAN帧中传输的协议结合了MAVLink的丰富消息集和CAN总线的可靠性。4.1 设计目标复用MAVLink生态直接使用现有的MAVLink消息定义降低布线复杂度用CAN总线替代点对点串口连接提高可靠性利用CAN总线的错误检测和重传机制保持兼容性与标准MAVLink地面站工具兼容4.2 协议封装方式MAVLink消息头 (6字节) MAVLink载荷 (最多253字节) ↓ 分割为多个CAN帧 (每帧最多8字节有效载荷) ↓ 添加MAVCAN帧头 (目标节点ID、序列号等) ↓ 通过CAN总线传输4.3 与原生MAVLink对比特性原生MAVLink (串口)MAVCAN (CAN总线)拓扑结构点对点或星型多节点总线型错误检测CRC校验CRC CAN硬件校验实时性依赖串口波特率硬件优先级仲裁布线复杂度高多根线低两根线扩展性有限良好4.4 适用场景需要MAVLink兼容性的无人机系统已有MAVLink代码库希望迁移到CAN总线需要与现有MAVLink地面站通信多飞控协同工作场景五、协议横向对比5.1 技术特性对比特性DroneCANCyphalUAVCANMAVCAN协议起源UAVCAN v0分支UAVCAN v1原始标准MAVLink扩展物理层CAN 2.0CAN FD/Ethernet/SerialCAN 2.0CAN 2.0最大数据率1 Mbps8 Mbps (CAN FD)1 Mbps1 Mbps节点ID长度8位128位8位8位消息最大长度63字节理论无限63字节理论无限自动发现支持支持支持有限支持服务调用支持支持支持通过MAVLink开源协议是是是是主要维护方PX4社区OpenCyphalUAVCAN组织ArduPilot/MAVLink5.2 生态系统对比DroneCAN工具链libcanard、DroneCAN GUI工具硬件支持大量开源飞控PX4、ArduPilot社区规模大型无人机社区学习资源文档完善教程丰富Cyphal工具链Nunavut代码生成器、YakutCLI工具硬件支持逐步增加支持主流MCU社区规模专业开发者社区学习资源技术文档详细入门曲线较陡UAVCAN工具链PyUAVCAN、UAVCAN GUI硬件支持历史硬件兼容社区规模核心开发者社区学习资源基础文档齐全MAVCAN工具链MAVLink工具链直接可用硬件支持ArduPilot生态为主社区规模MAVLink用户群体学习资源MAVLink文档 额外CAN配置5.3 选型建议选择 DroneCAN 当项目基于PX4或ArduPilot生态需要成熟的无人机传感器支持希望快速上手有大量现成示例对实时性要求中等选择 Cyphal 当需要未来证明的技术栈项目规模大节点数量多需要跨平台支持CAN/Ethernet对安全性和可靠性要求极高选择 UAVCAN 当维护历史系统兼容性需要经典UAVCAN功能项目对新技术迁移成本敏感选择 MAVCAN 当已有MAVLink代码基础需要与现有MAVLink工具链集成项目主要使用ArduPilot希望最小化协议学习成本5.4 发展趋势DroneCAN继续巩固在消费级和工业无人机市场地位Cyphal向汽车、机器人等更广泛领域扩展UAVCAN逐步向Cyphal迁移维护历史系统MAVCAN在MAVLink生态中提供CAN总线选项5.5 混合使用场景在实际系统中可以根据不同子系统需求混合使用协议核心控制使用Cyphal保证可靠性和实时性传感器网络使用DroneCAN利用现有生态地面站通信使用MAVCAN保持MAVLink兼容性** legacy设备**使用UAVCAN维护旧设备总结无人机CAN总线协议各有侧重选择时需综合考虑项目需求实时性、可靠性、扩展性要求生态系统现有工具链、硬件支持、社区资源团队技能协议学习成本、开发经验长期维护协议活跃度、未来发展方向
无人机行业主流 CAN 上层协议介绍
无人机行业主流 CAN 上层协议介绍一、DroneCAN1.1 核心特性1.2 主要应用场景1.3 技术架构1.4 典型消息示例二、Cyphal原 UAVCAN v12.1 与UAVCAN v0的主要区别2.2 协议栈组成2.3 数据类型定义DSDL2.4 实际应用优势三、UAVCAN3.1 历史背景3.2 核心设计原则3.3 消息传输机制3.4 典型网络拓扑四、MAVLink over CANMAVCAN4.1 设计目标4.2 协议封装方式4.3 与原生MAVLink对比4.4 适用场景五、协议横向对比5.1 技术特性对比5.2 生态系统对比DroneCANCyphalUAVCANMAVCAN5.3 选型建议选择 DroneCAN 当选择 Cyphal 当选择 UAVCAN 当选择 MAVCAN 当5.4 发展趋势5.5 混合使用场景总结一、DroneCANDroneCAN是一种专为无人机和机器人系统设计的轻量级、开源CAN总线通信协议。它基于UAVCAN v0协议发展而来由PX4开源社区主导维护已成为无人机领域应用最广泛的CAN总线协议之一。1.1 核心特性轻量高效协议栈占用资源少适合嵌入式系统即插即用支持设备自动发现和动态节点ID分配服务导向提供请求-响应式服务调用机制数据类型丰富支持标准数据类型和用户自定义消息开源免费Apache 2.0许可证社区活跃1.2 主要应用场景飞控与传感器通信IMU、GPS、气压计等电调ESC状态监控与控制电源管理模块PDB数据采集外围设备扩展LED、蜂鸣器、OSD等1.3 技术架构┌─────────────────────────────────────┐ │ 应用层 │ ├─────────────────────────────────────┤ │ 服务调用 │ 消息发布/订阅 │ ├─────────────────────────────────────┤ │ 传输层CAN帧封装 │ ├─────────────────────────────────────┤ │ 数据链路层CAN 2.0 │ └─────────────────────────────────────┘1.4 典型消息示例# DroneCAN 节点状态消息定义uavcan.equipment.ahrs.Solution:timestamp:uint64# 微秒时间戳orientation:float[4]# 四元数姿态angular_velocity:float[3]# 角速度linear_acceleration:float[3]# 线性加速度二、Cyphal原 UAVCAN v1Cyphal是UAVCAN协议的重大升级版本于2021年正式发布。它继承了UAVCAN的设计理念同时在性能、安全性和可扩展性方面进行了全面改进。2.1 与UAVCAN v0的主要区别统一传输层支持CAN FD、Ethernet、Serial等多种物理层改进的寻址方案128位节点ID支持大规模网络增强的数据类型系统支持嵌套数据结构内置安全机制消息签名和加密支持更好的实时性优化的调度算法2.2 协议栈组成应用层定义数据类型和服务接口传输层处理消息分段、重组和流控制网络层路由和网络管理数据链路层适配不同物理介质2.3 数据类型定义DSDL# Cyphal 数据类型定义示例uavcan.node.Heartbeat.1.0:uptime:uint32# 节点运行时间秒health:uint2# 健康状态0正常1警告2错误3离线mode:uint3# 运行模式vendor_specific_status_code:uint82.4 实际应用优势跨平台兼容同一协议栈可在不同硬件平台运行工具链完善提供代码生成器、调试工具和仿真环境工业级可靠性适合安全关键型应用三、UAVCANUAVCANUncomplicated Application-level Vehicular Communication And Networking是最早的无人机CAN总线协议标准为后续协议发展奠定了基础。3.1 历史背景2014年由Pavel Kirienko等人提出旨在解决无人机系统中传感器和执行器的通信问题最初设计用于CAN总线后扩展支持其他介质3.2 核心设计原则去中心化无主节点所有节点平等实时性保证关键消息的传输延迟可扩展性支持动态添加/移除节点容错性单点故障不影响整体系统3.3 消息传输机制发布-订阅模式节点可发布消息其他节点订阅接收服务调用支持同步和异步RPC调用心跳机制定期发送状态信息监控节点健康3.4 典型网络拓扑┌─────────────┐ │ 飞控 │ │ (节点1) │ └──────┬──────┘ │ ┌───────────────┼───────────────┐ │ │ │ ┌─────┴─────┐ ┌─────┴─────┐ ┌─────┴─────┐ │ GPS │ │ IMU │ │ 电调 │ │ (节点2) │ │ (节点3) │ │ (节点4) │ └───────────┘ └───────────┘ └───────────┘四、MAVLink over CANMAVCANMAVCAN是将MAVLink消息封装在CAN帧中传输的协议结合了MAVLink的丰富消息集和CAN总线的可靠性。4.1 设计目标复用MAVLink生态直接使用现有的MAVLink消息定义降低布线复杂度用CAN总线替代点对点串口连接提高可靠性利用CAN总线的错误检测和重传机制保持兼容性与标准MAVLink地面站工具兼容4.2 协议封装方式MAVLink消息头 (6字节) MAVLink载荷 (最多253字节) ↓ 分割为多个CAN帧 (每帧最多8字节有效载荷) ↓ 添加MAVCAN帧头 (目标节点ID、序列号等) ↓ 通过CAN总线传输4.3 与原生MAVLink对比特性原生MAVLink (串口)MAVCAN (CAN总线)拓扑结构点对点或星型多节点总线型错误检测CRC校验CRC CAN硬件校验实时性依赖串口波特率硬件优先级仲裁布线复杂度高多根线低两根线扩展性有限良好4.4 适用场景需要MAVLink兼容性的无人机系统已有MAVLink代码库希望迁移到CAN总线需要与现有MAVLink地面站通信多飞控协同工作场景五、协议横向对比5.1 技术特性对比特性DroneCANCyphalUAVCANMAVCAN协议起源UAVCAN v0分支UAVCAN v1原始标准MAVLink扩展物理层CAN 2.0CAN FD/Ethernet/SerialCAN 2.0CAN 2.0最大数据率1 Mbps8 Mbps (CAN FD)1 Mbps1 Mbps节点ID长度8位128位8位8位消息最大长度63字节理论无限63字节理论无限自动发现支持支持支持有限支持服务调用支持支持支持通过MAVLink开源协议是是是是主要维护方PX4社区OpenCyphalUAVCAN组织ArduPilot/MAVLink5.2 生态系统对比DroneCAN工具链libcanard、DroneCAN GUI工具硬件支持大量开源飞控PX4、ArduPilot社区规模大型无人机社区学习资源文档完善教程丰富Cyphal工具链Nunavut代码生成器、YakutCLI工具硬件支持逐步增加支持主流MCU社区规模专业开发者社区学习资源技术文档详细入门曲线较陡UAVCAN工具链PyUAVCAN、UAVCAN GUI硬件支持历史硬件兼容社区规模核心开发者社区学习资源基础文档齐全MAVCAN工具链MAVLink工具链直接可用硬件支持ArduPilot生态为主社区规模MAVLink用户群体学习资源MAVLink文档 额外CAN配置5.3 选型建议选择 DroneCAN 当项目基于PX4或ArduPilot生态需要成熟的无人机传感器支持希望快速上手有大量现成示例对实时性要求中等选择 Cyphal 当需要未来证明的技术栈项目规模大节点数量多需要跨平台支持CAN/Ethernet对安全性和可靠性要求极高选择 UAVCAN 当维护历史系统兼容性需要经典UAVCAN功能项目对新技术迁移成本敏感选择 MAVCAN 当已有MAVLink代码基础需要与现有MAVLink工具链集成项目主要使用ArduPilot希望最小化协议学习成本5.4 发展趋势DroneCAN继续巩固在消费级和工业无人机市场地位Cyphal向汽车、机器人等更广泛领域扩展UAVCAN逐步向Cyphal迁移维护历史系统MAVCAN在MAVLink生态中提供CAN总线选项5.5 混合使用场景在实际系统中可以根据不同子系统需求混合使用协议核心控制使用Cyphal保证可靠性和实时性传感器网络使用DroneCAN利用现有生态地面站通信使用MAVCAN保持MAVLink兼容性** legacy设备**使用UAVCAN维护旧设备总结无人机CAN总线协议各有侧重选择时需综合考虑项目需求实时性、可靠性、扩展性要求生态系统现有工具链、硬件支持、社区资源团队技能协议学习成本、开发经验长期维护协议活跃度、未来发展方向