自定义频率的调度功能
TimedRobot的addPeriodic()方法允许用户以比默认TimedRobot定期更新速率(20毫秒)更快的速度运行自定义方法。 以前,团队必须制作一个通告程序,以比20毫秒的TimedRobot循环周期(不建议这样做更频繁地运行TimedRobot)更频繁地运行反馈控制器。 现在,用户可以比主机器人循环更频繁地运行反馈控制器,但可以与TimedRobot周期性功能同步运行,从而消除了潜在的线程安全问题。
addPeriodic() (Java)/ AddPeriodic()(C ++)方法采用lambda(运行功能),要求时间段以及对一个一般开始时间的可选偏移量。相对于其他TimedRobot周期性方法,可选的第三个参数对于在不同的时隙中调度函数很有用。
在Java中,时间段和偏移量的单位是秒。 在C ++中,单位库可用于指定任何时间单位的时间段和偏移量。
public class Robot extends TimedRobot {
private Joystick m_joystick = new Joystick(0);
private Encoder m_encoder = new Encoder(1, 2);
private Spark m_motor = new Spark(1);
private PIDController m_controller = new PIDController(1.0, 0.0, 0.5, 0.01);
public Robot() {
addPeriodic(() -> {
m_motor.set(m_controller.calculate(m_encoder.getRate()));
}, 0.01, 0.005);
@Override
public teleopPeriodic() {
if (m_joystick.getRawButtonPressed(1)) {
if (m_controller.getSetpoint() == 0.0) {
m_controller.setSetpoint(30.0);
} else {
m_controller.setSetpoint(0.0);
frc::Joystick m_joystick{0};
frc::Encoder m_encoder{1, 2};
frc::Spark m_motor{1};
frc::PIDController m_controller{1.0, 0.0, 0.5, 10_ms};
Robot();
void TeleopPeriodic() override;
void Robot::Robot() {
AddPeriodic([&] {
m_motor.Set(m_controller.Calculate(m_encoder.GetRate()));
}, 10_ms, 5_ms);
void Robot::TeleopPeriodic() {
if (m_joystick.GetRawButtonPressed(1)) {
if (m_controller.GetSetpoint() == 0.0) {
m_controller.SetSetpoint(30.0);
} else {
m_controller.SetSetpoint(0.0);
版本 3f3f0d3e
.
利用 Sphinx 构建,使用的
由 Read the Docs 开发.