什么是UAVCAN

UAVCAN专为高度可靠的实时车载网络设计。该协议兼顾了丰富的抽象概念和确定性,既支持复杂的软件定义车辆系统,也支持用于验证安全关键系统的标准分析模式。这些目标在每份UAVCAN规范开头的简单功能列表中均有所体现,并已转化为简单而强大的设计。

UAVCAN与CANaerospace或CANopen在复杂性和正式规范的可用性方面都不相上下,因此适用于关键和实时应用。该协议下的高级通信语义是无状态发布/订阅以及请求/响应。由于UAVCAN强调无状态和静态配置,因此该协议更适配现场应用和有形产品,而不是研究和实验应用。

在V0版本中,定制化解决方案并未成为主要考量对象;但在V1版本中,已成为主要的设计输入。V1的首要设计目标是允许使用高度通用的数据类型进行快速原型开发,但这些数据类型可能无法针对特定总线进行优化(例如,对某些系统而言,使用离散si值进行所有数据交换可能会导致总线负载过大)。V1的设计要求促使系统设计人员在完善系统功能时,对数据进行交换整合,并进一步结构化,从而成为自定义类型。通常来说,这些自定义接口都得到了高度优化。

因此,v1 版本中的第三个用例仍未确定,即与v0中所定义类型相似的行业标准接口类型。该计划旨在制定由小组管理的配置文件,按行业分类管理数据类型。例如,第一个配置文件会在很大程度上类似于v0的设备类型,并且将为px4/dronecode生态系统所特有。同样,UAVCAN开发小组将征求业界对航天器、大型自动驾驶车辆、工业机器人等方面的配置文件的意见。与ROS一样,UAVCAN开发小组更重视网络和数据交换能力,而不是寻求对任何一种用例的支持。事实上,与旧技术相比,这项新技术的一个优势之一是没有汽车应用的遗留问题。

UAVCAN采用DSDL(数据集描述语言)进行设计规范,这对于设计过ROS数据类型的人来说并不陌生。传输层的设计决定使该协议适用于确定性和实时系统。这方面的一个例子是:不允许任意大小的数据结构,结果是实体的定义必须有上限。

UAVCAN可使用高质量的经MIT许可的参考实现。因此,开发人员无需在实施层面处理协议。

UAVCAN具有分散的节点系统,因而可以简化故障模式分析。节点共享总线,并且在总线上拥有同等的权力。在这里,无需初始化序列,节点可以随时加入和离开,而不会对系统造成干扰。该特性使系统设计者能够提供“即插即用”功能,无需断电或重启任何软件进程,即可从车辆总线上连接或拆卸外围设备。需在UAVCAN中保证数据帧的传输——这是为保持协议简单性而作出的设计取舍。事实证明,UAVCAN是低数据延迟应用中的可靠协议,其性能可与DShot等底层专业协议相媲美。

UAVCAN可以通过相对更底层的SLOC技术来实现,其运行要求也非常低。例如NicaDrone OpenGrab EPMv3,它仅使用8K RAM和32K ROM在低资源MCU上运行UAVCAN节点。

UAVCAN的演变

UAVCAN的第一个版本(标记为版本0)在开发后被部署于众多车辆系统以及其他各种嵌入式和机器人应用中,并被沿用至今。目前正在开发UAVCAN的新版本(标记为版本1),其中吸取了通过这些部署获得的经验教训。新版本将增加对CAN-FD的支持,作为其初始发布版本的一部分。此外,还将实施后续修订,以便允许该协议在其他通信介质上运行。对CAN总线以外网络类型的支持将使安全关键型系统能够在异构冗余总线上使用UAVCAN v1抽象。

本文发表时,UAVCAN v1规范已接近完成。开源社区正在积极开发新的参考实现。

当前版本还支持研究和实验系统以及低需求部署。实现方式主要是通过对标准数据类型进行两项定义:

  • uavcan.si(国际单位制),以及
  • uavcan.primitive(任意标量和矢量)

通过这些定义,在设计UAVCAN应用程序时就无需对自定义数据类型作出定义,同时还支持为有此需要的系统编写高度优化的自定义类型。UAVCAN的两个版本之间的其他差异还包括:引入数据类型,以及弃用数据类型标识符。

UAVCAN集成

带有MIT许可证的开放标准UAVCAN已在GitHub上公开发布,用户和集成商可以自由访问参考实现,无需任何批准。从原型阶段到生产阶段的开发可以在不涉及法律或采购的情况下进行。这种开放式许可证以及UAVCAN团队设置的支持工具(如文档、开放式库、讨论论坛等)将获取UAVCAN的便利性提升至最高。

从技术角度来看,只需要实现一个功能,即所有节点都必须发布的心跳报文(Heartbeat Message),就可将消耗保持在最低限度。大多数生产部署都可以与一小部分标准应用功能集成,如心跳和正常运行时间、诊断和数据流统计、即插即用以及通过数据总线进行节点更新。

UAVCAN的未来

UAVCAN团队致力于保持该协议的简单性,从而最大限度地减少使用和集成方面的障碍。目前,UAVCAN的主要应用范围是安全关键型应用。该协议旨在以高质量的软件标准进行维护,以满足安全关键型应用集成商的要求。UAVCAN团队正致力于通过两项重要的字段部署来实现协议的正式标准化。UAVCAN鼓励用户公开表达他们对该协议的信赖,以便促进UAVCAN的成功和普及。

参考

https://forum.uavcan.org/t/uavcan-a-highly-dependable-publish-subscribe-protocol-for-real-time-intravehicular-networking/557