程式架構

程式寫在哪?

程式撰寫位置

函式庫存放位置

Timed Robot & Command Robot

Timed Robot

Command Robot

Timed Robot 入手簡單、寫小專案容易 全部寫在同一個程式內,容易有錯
Command Robot 結構化方便閱讀、Debug容易 須花較多時間理解架構

3rd Party Libraries

FIRST官網

下載第三方

內建的

裡面還沒有其他函

下載第三方

安裝方式

  1. 點選右上角按鈕

下載第三方

安裝方式

  1. 點選右上角按鈕
  2. 找到Manage Vendor Libraries

下載第三方

安裝方式

  1. 點選右上角按鈕
  2. 找到Manage Vendor Libraries
  3. install new libraries (online)

下載第三方

安裝方式

  1. 點選右上角按鈕
  2. 找到Manage Vendor Libraries
  3. install new libraries (online)
  4. 輸入函式庫網址 

下載第三方函

目前用到的

下載第三方函式庫

全部裝完之後vendordeps裡面長這樣就代表完成了🎉

Command Robot

各程式介紹

Main

package frc.robot;

import edu.wpi.first.wpilibj.RobotBase;

/**
 * Do NOT add any static variables to this class, or any initialization at all. Unless you know what
 * you are doing, do not modify this file except to change the parameter class to the startRobot
 * call.
 */
public final class Main {
  private Main() {}

  /**
   * Main initialization function. Do not perform any initialization here.
   *
   * <p>If you change your main robot class, change the parameter type.
   */
  public static void main(String... args) {
    RobotBase.startRobot(Robot::new);
  }
}

讓機器開始動,完全不用變更內容

Robot

robotInit()在機器人開機時初始化

robotPeriodic()會在初始化後不斷執行

disabledInit()在disable時初始化

disabledPeriodic()在初始化後不斷執行

  @Override
  public void robotInit() {
    m_robotContainer = new RobotContainer();
  }

  @Override
  public void robotPeriodic() {
    CommandScheduler.getInstance().run();
  }
  
  @Override
  public void disabledInit() {

  }

  @Override
  public void disabledPeriodic() {

  }

Robot

autonomousInit()在自動化時初始化

autonomousPeriodic()在初始化後不斷執行

  @Override
  public void autonomousInit() {
    m_autonomousCommand = 
    m_robotContainer.getAutonomousCommand();

    if (m_autonomousCommand != null) {
      m_autonomousCommand.schedule();
    }
  }

  @Override
  public void autonomousPeriodic() {

  }
  @Override
  public void teleopInit() {
    if (m_autonomousCommand != null) {
      m_autonomousCommand.cancel();
    }
  }

  @Override
  public void teleopPeriodic() {}

 teleopInit()在手動模式時初始化

teleopPeriodic()在初始化後不斷執行

Robot

testInit()在測試模式時初始化

testPeriodic()在初始化後不斷執行

  @Override
  public void testInit() {
    CommandScheduler.getInstance().cancelAll();
  }

  @Override
  public void testPeriodic() {}

 simulationInit()在模擬狀態時初始化

simulationPeriodic()在初始化後不斷執行

  @Override
  public void simulationInit() {}

  @Override
  public void simulationPeriodic() {}

RobotContainer

configureButtonBindings()

按鍵控制(軸不能直接寫在裡面)

  private void configureButtonBindings() {}

getAutonomousCommand()

給予自動化指令

  public Command getAutonomousCommand() {
    return m_autoCommand;
  }

Constants

自己放一些常數,例如下面這樣(馬達腳位、反轉值...)

    public static enum PortID{
        shoot_up(0, true),
        shoot_down(1, true),
        shoot_turn(2, true),
        shoot_elevation(3, true);
        public final int value;
        public final boolean reversed; //reversed

        PortID(int value, boolean reversed) {
            this.value = value;
            this.reversed = reversed;
        }
    }
    public static double max_turn = 0;
    public static double min_turn = -2700;
    public static double max_elevate = 155;
    public static double min_elevate = 0;
    public static double speed_ratio = 0.375; //down:up

Subsystem

periodic()

重複執行

@Override
public void periodic() {

}

simulationPeriodic()

在模擬狀態時重複執行

@Override
public void simulationPeriodic() {

}

Command

initialize()

初始化

  @Override
  public void initialize() {}

execute()

初始化後重複執行

@Override
  public void execute() {}

end(boolean interrupted)

結束時執行

  @Override
  public void end(boolean interrupted) {}

isFinished()

回傳是否結束(默認為false)

    @Override
    public boolean isFinished() {
        return false;
    }

程式架構

By team7497

程式架構

  • 164