8个不稳定版本 (3个破坏性)

使用旧的Rust 2015

0.4.0 2019年1月16日
0.3.1 2018年11月30日
0.2.3 2018年10月19日
0.2.2 2018年9月12日
0.0.0 2018年8月26日

#252 in 硬件支持

MIT/Apache

5.5MB
3.5K SLoC

WPIlib

Crates.io Docs.rs

用Rust编写您的FRC机器人。

入门

此仓库设计用于编译RoboRIO,这是FIRST机器人竞赛中使用的处理器。为了为RoboRIO进行交叉编译,您需要进行几件事

  1. 安装Rustup以帮助管理Rust工具链。
  2. 仅最新版本的稳定Rust可以保证工作。确保您是最新的
    rustup update stable
    
  3. 安装一些变体的arm-linux-gnueabi-gcc。例如,官方FRC工具链(arm-frc-linux-gnueabi-gcc)可在以下位置获取,或者您可以使用您选择的软件包管理器安装通用工具链(在Ubuntu上使用sudo apt-get install gcc-arm-linux-gnueabi)。
  4. 使用以下信息编辑您的~/.cargo/config文件
    [target.arm-unknown-linux-gnueabi]
    linker = "<path-to-arm-linux-gnueabi-gcc>"
    
    我的在Ubuntu上为/usr/bin/arm-frc-linux-gnueabi-gcc。您也可以使用命令名,只要它在PATH中。
  5. 运行rustup target add arm-unknown-linux-gnueabi以安装基于ARM的Linux的Rust stdlib。
  6. wpilib = ...添加到[dependencies]中的Cargo.toml
  7. 要部署代码,请查看cargo-frc

为开发构建

设置

  1. 遵循入门部分。
  2. 验证您满足WPILib构建要求
  3. 可以从官方FRC工具链安装 arm-frc-linux-gnueabi-*,或者获取不同的arm编译器并 export CXX_FRC="/path/to or name of arm C++ compiler"。这是加载编译器头文件所必需的。
  4. 运行 make all。这可能需要一分钟左右的时间。这个过程将
    1. 初始化并更新WPILib子模块
    2. 构建HAL和WPILibC共享库以便链接
    3. 生成rust-bindings并构建库。

在初始 make all 之后,使用 cargo(有两个注意事项,见下文)以正常方式构建。如果WPILib子模块更新,再次运行 make all。欢迎提出使构建过程更具跨平台性的pull-requests。如果您想贡献但无法使构建工作,可以通过调用 .ci/pull-request.sh 脚本来使用CI docker镜像。

本项目包含一个构建脚本,该脚本在WPIlib之上生成绑定,处理链接,并使用符号链接将共享库暴露给cargo-frc使用。因此,脚本默认配置仅在需要更新符号链接时(此crate的另一个版本已更改)运行。在开发过程中,要强制脚本运行,请使用 cargo build --features dev

另外请注意,在工作区根目录中使用 cargo build 总是会失败,因为 wpilib 只能在arm上成功构建,而 cargo-frc 需要是本地的。将来,为x86构建可能会使WPILib模拟成为可能。

路线图

  • 通过使官方HAL头文件与C兼容,使其能够与rust-bindgen一起工作。
  • 自动从HAL头文件生成新的绑定,以进行未来保护。
  • 在roboRIO上测试生成的HAL绑定,并调整头文件/绑定。
  • 将新的C兼容头文件提交给官方WPILib,并冻结rust绑定。
  • 编写对HAL的抽象。
    • 当收到DS数据包时运行代码的方法。
    • 用于诸如气缸/模拟输入等事物的结构体。
    • 编码器
    • 等。
  • 与构建系统集成,以使启动新项目变得简单,并将部署到RIO变得简单。 可能是一个GradleRIO的分支,因为所有构建工具似乎都运行在JVM上。已经开始在 cargo-frc 上工作,这是此项目的第三方cargo子命令。
  • 研究FFI绑定和CTRE Pheonix(见CTRE Pheonix)和NavX(见NavX)的抽象。这两个库都将与rust-bindgen的C++支持配合得非常好。它们都没有过重的继承,都不使用模板,也不抛出异常。然而,每个它们与NI的动态库如何交互的问题还有待观察。使它们在链接时间和运行时表现良好可能很困难。查看CTRE-rs以获取到Talon和Victor SPX的CAN接口。在某个时候,NavX串行协议(用于MXP和USB)将在我们自己的串行端口上重新实现。
  • 在2019年FRC赛季中使用rust

许可

本库同时遵循MIT许可证和Apache许可证(版本2.0)的条款进行分发。通过贡献,您同意在以下条款下许可您的贡献。

请参阅LICENSE-APACHELICENSE-MIT以获取详细信息。

致谢

在使HAL工作过程中,我从KyleStach的rust-wpilib中获得了许多帮助。

依赖项