4个版本

0.4.0 2023年3月31日
0.2.2 2022年10月18日
0.2.1 2022年4月12日
0.2.0 2021年10月31日

5 in #canadensis

41 monthly downloads
Used in canadensis

MIT/Apache

150KB
3K SLoC

Canadensis:Cyphal实现

本项目实现了(大部分)Cyphal(以前称为UAVCAN v1.0)。正如Cyphal网站所述,“Cyphal是一种基于现代网络标准(以太网、CAN FD等)的实时车内分布式计算和通信的开放技术。它被创建出来是为了解决下一代智能车辆(载人无人飞机、宇宙飞船、机器人、汽车等)在车上的确定性计算和数据分布的挑战。”

目前这是一个独立的项目,与Cyphal联盟无关。

子模块说明

此仓库使用子模块来管理公共受控数据类型。在克隆时,请使用git clone --recursive。如果您已经使用非递归选项克隆了仓库,请运行git submodule init然后运行git submodule update。否则,某些测试将失败。

已发布的crates

crates 描述
canadensis (文档) 包含所有核心传输无关功能的主要库
canadensis_data_types (文档) 对应于Cyphal公共受控数据类型的Rust类型
canadensis_can (文档) Cyphal/CAN传输
canadensis_bxcan (文档) 适用于bxCAN嵌入式CAN控制器的兼容性
canadensis_linux (文档) 适用于Linux SocketCAN接口的兼容性
canadensis_serial (文档) 实验性Cyphal/串行传输
canadensis_udp (文档) 实验性Cyphal/UDP传输
canadensis_pnp_client (文档) 用于即插即用节点ID分配的客户端库
canadensis_crc (文档) 访问软件映像的CRC
canadensis_write_crc (文档) 用于与canadensis_crc一起使用来计算和写入软件映像CRC的工具
canadensis_codegen_rust (文档) 生成Rust数据类型和序列化代码的DSDL处理器
canadensis_macro (文档) 从内联和/或外部DSDL文件生成Rust数据类型和序列化代码的过程宏

其他crate(canadensis_bit_length_setcanadensis_corecanadensis_derive_register_blockcanadensis_dsdl_frontendcanadensis_dsdl_parsercanadensis_encodingcanadensis_filter_config)在不同地方被重新导出,所以通常您不需要直接依赖它们。

状态

此代码旨在符合Cyphal规范版本1.0-beta。

大多数功能正常工作。某些部分不完整

  • 有一些测试,但可能有一些未测试区域的错误。
  • 可以减少动态内存分配量,或者至少更好地记录。
  • 需要更好的文档

原则

  • 在嵌入式设备上运行
  • 使用动态内存分配,但仅在必要时
  • 支持Cyphal/CAN(经典CAN和CAN FD)
  • 支持Cyphal/串行和Cyphal/UDP(这些传输方式尚未完全指定,但canadensis实现发布时与pycyphal兼容)

许可证

根据您的要求,许可协议为以下之一

任选。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义,您提交的任何有意包含在工作中的贡献都将按上述方式双许可,不附加任何额外条款或条件。


lib.rs:

Cyphal/UDP传输

当前版本的传输在2022-12-02的一篇论坛帖子中进行了文档记录:一个论坛帖子

如果启用了std功能,此实现需要std库来进行套接字操作。

套接字如何工作

发送

传输可以使用一个套接字发送所有出站消息和服务传输。此套接字绑定到网络接口上的一个临时UDP端口。

出站传输根据端口号和固定的UDP端口发送到多播地址。

接收传输

所有传输都通过一个套接字接收,该套接字加入任何必要的多播组以接收正确的帧。

依赖关系

~3.5MB
~68K SLoC