# 20211206~20211212 程式組 ###### tags: `工作筆記 程式組` ## 20211207 ### 陳伯豪 這個禮拜二我有先完成了 MecanumDrive 的兩個寫法,一個是自己手動寫的方法,然後另一個是直接利用 FRC 官方給的函式庫下去寫,我把兩個都丟在下面 然後我預計這禮拜四去讀和寫一些超音波 :::spoiler 自己寫的 ``` java package frc.robot; import com.ctre.phoenix.motorcontrol.can.WPI_TalonSRX; 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.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<>(); 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; double ySpeed; double xSpeed; double zRotation; 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); @Override public void robotInit() { RightFront.setInverted(true); RightRear.setInverted(true); LeftFront.setInverted(false); LeftRear.setInverted(false); } @Override public void robotPeriodic() { } @Override public void autonomousInit() { } @Override public void autonomousPeriodic() { } @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() { } } ``` ::: :::spoiler 使用官方函式庫 ```java= package frc.robot; import com.ctre.phoenix.motorcontrol.can.WPI_TalonSRX; 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.MecanumDrive; 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<>(); 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; public MecanumDrive m_Drive; double ySpeed; double xSpeed; double zRotation; double chassisPower; 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 = new Joystick(0); WPI_TalonSRX LeftFront = new WPI_TalonSRX(0); WPI_TalonSRX LeftRear = new WPI_TalonSRX(1); SpeedControllerGroup LeftMotor = new SpeedControllerGroup(LeftFront, LeftRear); WPI_TalonSRX RightFront = new WPI_TalonSRX(2); WPI_TalonSRX RightRear = new WPI_TalonSRX(3); SpeedControllerGroup RightMotor = new SpeedControllerGroup(RightFront, RightRear); @Override public void robotInit() { double chassisPower = 0.5; m_Drive = new MecanumDrive(LeftFront, LeftRear, RightFront, RightRear); } @Override public void robotPeriodic() { } @Override public void autonomousInit() { } @Override public void autonomousPeriodic() { } @Override public void teleopInit() { } @Override public void teleopPeriodic() { if (joystick.getRawButton(6) || joystick.getRawButton(5)){ chassisPower = 1; } else { chassisPower = 0.5; } ySpeed = -joystick.getRawAxis(leftStick_Y) * chassisPower; xSpeed = joystick.getRawAxis(leftStick_X) * chassisPower; zRotation = joystick.getRawAxis(rightStick_X) * chassisPower; m_Drive.driveCartesian(ySpeed, -xSpeed, zRotation); } @Override public void disabledInit() { } @Override public void disabledPeriodic() { } @Override public void testInit() { } @Override public void testPeriodic() { } } ``` ::: ### 魏仁祥 今天開完會後,我去忙大機器人的設定。簡單來說,大機器人的 radio 有問題,我在 configure 時會失敗。我有問南科的指導老師了,禮拜四在試試看,但說真的我覺得很浪費時間,有可能會丟給學弟做。 ### 黃冠穎 今天看了PathWeaver官網的資料,要隨便畫出一個path和path group,但其中的程式今天只大略的看了一下,禮拜四會再繼續看。 今天limelight把測距寫完了病多寫了一點讓他移動的程式,但不知道為麼我只要寫到"tx" "ty" "tz"之類的就會出現error。 ## 20211209 ### 黃冠穎 今天接續禮拜二的PathWeaver官網資料,但看著看著,發現要看的變多了,從本來的pathweaver introduction,到變成還要看frc charaterization, introduction to trafectory,feedforward control和複習pid control。總之呢,我會慢慢看完,理解不理解到時再說。