20211213~20211219 程式組

tags: 工作筆記 程式組

20211214

魏仁祥

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() { } }

20211216

魏仁祥

今天 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打指令,大部分都跟上面一樣,總之還有一堂,預計在下禮拜四。

Select a repo