程式架構
程式寫在哪?



程式撰寫位置
函式庫存放位置
Timed Robot & Command Robot


Timed Robot
Command Robot

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

下載第三方函式庫
內建的
裡面還沒有其他函式庫
下載第三方函式庫
安裝方式
- 點選右上角按鈕

下載第三方函式庫
安裝方式
- 點選右上角按鈕
- 找到Manage Vendor Libraries


下載第三方函式庫
安裝方式
- 點選右上角按鈕
- 找到Manage Vendor Libraries
- install new libraries (online)



下載第三方函式庫
安裝方式
- 點選右上角按鈕
- 找到Manage Vendor Libraries
- install new libraries (online)
- 輸入函式庫網址




下載第三方函式庫
目前用到的函式庫

下載第三方函式庫

全部裝完之後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