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 |
|
#252 in 硬件支持
5.5MB
3.5K SLoC
WPIlib
用Rust编写您的FRC机器人。
入门
此仓库设计用于编译RoboRIO,这是FIRST机器人竞赛中使用的处理器。为了为RoboRIO进行交叉编译,您需要进行几件事
- 安装Rustup以帮助管理Rust工具链。
- 仅最新版本的稳定Rust可以保证工作。确保您是最新的
rustup update stable
- 安装一些变体的
arm-linux-gnueabi-gcc
。例如,官方FRC工具链(arm-frc-linux-gnueabi-gcc
)可在以下位置获取,或者您可以使用您选择的软件包管理器安装通用工具链(在Ubuntu上使用sudo apt-get install gcc-arm-linux-gnueabi
)。 - 使用以下信息编辑您的
~/.cargo/config
文件
我的在Ubuntu上为[target.arm-unknown-linux-gnueabi] linker = "<path-to-arm-linux-gnueabi-gcc>"
/usr/bin/arm-frc-linux-gnueabi-gcc
。您也可以使用命令名,只要它在PATH中。 - 运行
rustup target add arm-unknown-linux-gnueabi
以安装基于ARM的Linux的Rust stdlib。 - 将
wpilib = ...
添加到[dependencies]
中的Cargo.toml
。 - 要部署代码,请查看cargo-frc
为开发构建
设置
- 遵循入门部分。
- 验证您满足WPILib构建要求。
- 可以从官方FRC工具链安装
arm-frc-linux-gnueabi-*
,或者获取不同的arm编译器并export CXX_FRC="/path/to or name of arm C++ compiler"
。这是加载编译器头文件所必需的。 - 运行
make all
。这可能需要一分钟左右的时间。这个过程将- 初始化并更新WPILib子模块
- 构建HAL和WPILibC共享库以便链接
- 生成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-APACHE、LICENSE-MIT以获取详细信息。
致谢
在使HAL工作过程中,我从KyleStach的rust-wpilib中获得了许多帮助。