工作筆記 程式組
package frc.robot;
import com.ctre.phoenix.motorcontrol.can.WPI_TalonSRX;
import edu.wpi.cscore.CvSource;
import edu.wpi.cscore.UsbCamera;
import edu.wpi.first.cameraserver.CameraServer;
import edu.wpi.first.networktables.NetworkTable;
import edu.wpi.first.networktables.NetworkTableEntry;
import edu.wpi.first.networktables.NetworkTableInstance;
import edu.wpi.first.wpilibj.Joystick;
import edu.wpi.first.wpilibj.TimedRobot;
import edu.wpi.first.wpilibj.smartdashboard.SendableChooser;
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
public class Robot extends TimedRobot {
private static final String kDefaultAuto = "Default";
private static final String kCustomAuto = "My Auto";
private String m_autoSelected;
private final SendableChooser<String> m_chooser = new SendableChooser<>();
// PWM channels
public final int kFrontLeftChannel = 2;
public final int kRearLeftChannel = 1;
public final int kFrontRightChannel = 4;
public final int kRearRightChannel = 3;
public final int joystickPort = 0;
// driver station ports
public final int leftStick_X = 0;
public final int leftStick_Y = 1;
public final int rightStick_X = 4;
public final int rightStick_Y = 5;
public final int trigger_L = 2;
public final int trigger_R = 3;
public final int Btn_A = 1;
public final int Btn_B = 2;
public final int Btn_X = 3;
public final int Btn_Y = 4;
public final int Btn_LB = 5;
public final int Btn_RB = 6;
public final int Btn_LS = 9;
public final int Btn_RS = 10;
// Motors
WPI_TalonSRX m_frontLeft = new WPI_TalonSRX(kFrontLeftChannel);
WPI_TalonSRX m_rearLeft = new WPI_TalonSRX(kRearLeftChannel);
WPI_TalonSRX m_frontRight = new WPI_TalonSRX(kFrontRightChannel);
WPI_TalonSRX m_rearRight = new WPI_TalonSRX(kRearRightChannel);
// Joystick
Joystick joystick = new Joystick(joystickPort);
// Microsoft Camera
// UsbCamera camera = CameraServer.getInstance().startAutomaticCapture();
// CvSink cvSink = CameraServer.getInstance().getVideo();
// CvSource outputStream = CameraServer.getInstance().putVideo("Blur", 640, 480);
@Override
public void robotInit() {
m_frontRight.setInverted(true);
m_rearRight.setInverted(true);
m_frontLeft.setInverted(false);
m_rearLeft.setInverted(false);
}
@Override
public void robotPeriodic() {
}
@Override
public void autonomousInit() {
}
@Override
public void autonomousPeriodic() {
switch (m_autoSelected) {
case kCustomAuto:
// Put custom auto code here
break;
case kDefaultAuto:
default:
// Put default auto code here
break;
}
}
@Override
public void teleopInit() {
}
@Override
public void teleopPeriodic() {
double ySpeed = -joystick.getRawAxis(leftStick_Y) * -0.5;
double xSpeed = joystick.getRawAxis(leftStick_X)* -0.5;
double zRotation = joystick.getRawAxis(rightStick_X)* 0.5;
m_frontLeft.set(ySpeed + xSpeed + zRotation);
m_frontRight.set(ySpeed - xSpeed - zRotation);
m_rearLeft.set(ySpeed - xSpeed + zRotation);
m_rearRight.set(ySpeed + xSpeed - zRotation);
}
@Override
public void disabledInit() {
}
@Override
public void disabledPeriodic() {
}
@Override
public void testInit() {
}
@Override
public void testPeriodic() {
}
}
今天前幾分鐘聽matt講github,後面看frc characterization tool introduction,這個tool是後面再用pathweaver的時候會用來計算它的傳回值和目標值(位置和馬達轉速),然後配合PID去控制達到目標值。https://www.youtube.com/watch?v=wqJ4tY0u6IQ&t=2388s
這影片有介紹到。目前setup是好了,可是deploy不了。
reset()
package frc.robot;
import com.ctre.phoenix.motorcontrol.can.WPI_TalonSRX;
import com.kauailabs.navx.frc.AHRS;
import edu.wpi.first.wpilibj.Joystick;
import edu.wpi.first.wpilibj.SpeedController;
import edu.wpi.first.wpilibj.SpeedControllerGroup;
import edu.wpi.first.wpilibj.TimedRobot;
import edu.wpi.first.wpilibj.drive.DifferentialDrive;
import edu.wpi.first.wpilibj.drive.MecanumDrive;
import edu.wpi.first.wpilibj.interfaces.Gyro;
import edu.wpi.first.wpilibj.shuffleboard.Shuffleboard;
import edu.wpi.first.wpilibj.smartdashboard.SendableChooser;
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
import edu.wpi.first.wpilibj.SPI;
public class Robot extends TimedRobot {
private static final String kDefaultAuto = "Default";
private static final String kCustomAuto = "My Auto";
private String m_autoSelected;
private final SendableChooser<String> m_chooser = new SendableChooser<>();
public final int kFrontLeftChannel = 3;
public final int kRearLeftChannel = 4;
public final int kFrontRightChannel = 1;
public final int kRearRightChannel = 2;
public final int leftStick_X = 0;
public final int leftStick_Y = 1;
public final int rightStick_X = 4;
public final int rightStick_Y = 5;
public final int trigger_L = 2;
public final int trigger_R = 3;
public final int Btn_A = 1;
public final int Btn_B = 2;
public final int Btn_X = 3;
public final int Btn_Y = 4;
public final int Btn_LB = 5;
public final int Btn_RB = 6;
public final int Btn_LS = 9;
public final int Btn_RS = 10;
AHRS Gyro = new AHRS(SPI.Port.kMXP);
double ySpeed;
double xSpeed;
double zRotation;
double kP = 1;
double Gyro_error;
WPI_TalonSRX LeftFront = new WPI_TalonSRX(kFrontLeftChannel);
WPI_TalonSRX LeftRear = new WPI_TalonSRX(kRearLeftChannel);
WPI_TalonSRX RightFront = new WPI_TalonSRX(kFrontRightChannel);
WPI_TalonSRX RightRear = new WPI_TalonSRX(kRearRightChannel);
Joystick joystick = new Joystick(0);
SpeedControllerGroup LeftMotor = new SpeedControllerGroup(LeftFront, LeftRear);
SpeedControllerGroup RightMotor = new SpeedControllerGroup(RightFront, RightRear);
DifferentialDrive drive = new DifferentialDrive(LeftMotor, RightMotor);
@Override
public void robotInit() {
RightFront.setInverted(true);
RightRear.setInverted(true);
LeftFront.setInverted(false);
LeftRear.setInverted(false);
Gyro.reset();
SmartDashboard.putNumber("gyro tAngleAdjustment", Gyro.getAngleAdjustment());
}
@Override
public void robotPeriodic() {
}
@Override
public void autonomousInit() {
}
@Override
public void autonomousPeriodic() {
Gyro_error = 90 - Gyro.getAngleAdjustment() );
drive.tankDrive( kP * Gyro_error, kP * Gyro_error);
}
@Override
public void teleopInit() {
}
@Override
public void teleopPeriodic() {
ySpeed = -joystick.getRawAxis(leftStick_Y) * -0.5;
xSpeed = joystick.getRawAxis(leftStick_X)* -0.5;
zRotation = joystick.getRawAxis(rightStick_X)* 0.5;
LeftFront.set(ySpeed + xSpeed + zRotation);
RightFront.set(ySpeed - xSpeed - zRotation);
LeftRear.set(ySpeed - xSpeed + zRotation);
RightRear.set(ySpeed + xSpeed - zRotation);
}
@Override
public void disabledInit() {
}
@Override
public void disabledPeriodic() {
}
@Override
public void testInit() {
}
@Override
public void testPeriodic() {
}
}
今天 Albert 從頭帶著我們認識了 git 這個東西,他光是一開始的 git 和 github 就講了快一小時,就知道他講多詳細了。git 是在程式領域目前最廣泛被用來使用於版本控制(version control)的東西,也可讓多個人同時開發,也可以回朔追蹤程式碼,輕鬆知道中間是誰寫錯誰的問題。他也講解了 git 的工作流程(我不知道這樣講對不對???),就簡單來說要先從 working diretory git add 到 staging area 去,再接著才能 git commit 到 repo。
接著我們看到了 command line 的基本操作,向是什麼 cd(進入某個資料夾)、 dir(列出所有資料夾) 等操作。最後的半小時我們在設定自己的 ssh key,ssh key 是一種類似加密安全的鑰史之類的東西,很麻煩但後來在 Matt 的協助下是完成了。
最後是最近看到了 FRC 1678 Citrus Circuits 的東西,發現裡面討論到很多我們之前都沒注意過的,
今天Albert帶我們一步一步認識git這東西,教我們用git bush打指令,大部分都跟上面一樣,總之還有一堂,預計在下禮拜四。