NI-Skeleton 是 NI 电控组在旧代码模板的基础上,为团队 8214 与 8583 的代码开发而特别整理的代码模板。此模板由 Java 开发并基于 WPILib's Java Control System
本 Readme 包含NI代码模板的主要设计思路,以及各个 Package 与重点 Class 的相关介绍。
- clone 该仓库。
- 使用 IntelliJ Idea 打开仓库( 必须至少安装 FRC 插件 )。
- 执行 Build Robot 以验证项目配置是否成功。
- 开始开发。
IterativeRobotBase和TimedRobot被部分重写,取消了loop time overrun的报错。disabledLooper被取消。BaseSubsystem内加入了计时功能,每个Subsystem将自动计算自己单次Loop的耗时。- 从现在开始,每个
Looper的频率都可以自定义。 - 曾经位于
Robot级下的一些基类和执行器类被挪入Lib,以增强其可复用性。 AutoModeChooser和AutoModeExecuter被修改为单例。AutoModeChooser的SelectedMode开始支持动态刷新。- 原始的编程模板被简化,现在每一个具体的
subsystem由Subsystem、SubsystemState和SubsystemConfig组成,后两者视实际情况可选。 Subsystem针对不同State的控制逻辑被挪入Subsystem内部实现,目的是减少嵌套和重入次数,并提高类的线程安全性。Vision被作为Subsystem进行了重写。- 曾经的
Constants.java被重命名为Config.java,并拆分到了具体的subsystem,现在Config.java只存储Robot级的数据。 - 场地数据被挪入到了
Field.java。 ControlFlagManager重命名为ControlSignalManager,加入SlewRateLimiter以顺滑Swerve的驾驶。TrajectoryGenerator更改为静态类,其中的TrajectorySet被单独提出为一个新的类。TrajectoryGenerator现在开始将只支持使用五阶赫米特曲线进行路径生成。TimingUtil的接口改进,MAX_DECEL,DEFAULT_VEL和SLOWDOWN_CHUNKS被取消。SwerveDriveModule中引入了CarpetScrubFactor,以改善轮氏里程计的精度。SwerveInverseKinematics重写,从现在开始将只支持常量数据的运算,并将针对SwerveDriveModuel的最大平移速度进行约束。
-
我们始化工作,并控制各个
Looper在比赛中的不同环节的启动与关闭。 -
com.nextinnovation.team8214.devices用于存放机器人中的各种设备,
device是具有实体且不存在状态机需求的小型电子单元,例如AHRS、PneumaticCompressor等。 -
com.nextinnovation.team8214.managers包含所有的
manager,用于对多个相同或具有相同特性设备或数据进行管理,如Joystick(手柄)、Coordinate Frame(坐标系)、Fused Odometer(融合里程计)等。 -
com.nextinnovation.team8214.subsystems包含各个
BaseSubsystem的实现类以及每个子系统的state,每个子系统按照状态机类型进行设计,子系统通过状态决定自己的行为模式。 -
NI 电控组开发所使用的软件库,合并了 Team254 的 lib。