{%hackmd @ZZRT/CSS %} # <span class="block"> Lesson 3 </span> --- ### 操作底盤方式介紹 ---- 這次要介紹兩種操作方式,分別是 - arcade drive - tank drive --- ## ARCADE DRIVE intro ---- 此操作中分為兩個關鍵部分,分別是 - 速度(speed) - 轉向程度(rotation rate) ---- 我們學校是用xbox中的一個搖桿來操作, 也可以用兩個來控制速度和轉向... ---- ![](https://i.imgur.com/OqQP3Si.png) 一正一負,範圍為 -1 ~ 1 ---- 情境模擬: ---- ![](https://i.imgur.com/NyVQQSg.png) ---- ![](https://i.imgur.com/GB18H44.png) ---- 有人有想到一個問題嗎? :thinking_face: ---- 他可以原地自轉嗎??? ---- ![](https://i.imgur.com/figtCUt.png) 不行,因為速度為0 ---- 而怎麼用程式寫呢?.... --- ## ARCADE DRIVE code ---- 我們要使用的是```DifferentialDrive```(class)裡面的```arcadeDrive(xSpeed, zRotation);```(方法) ---- 我們今天要同時控制左邊的兩個馬達和右邊的兩個馬達,所以要把它變成一個群組```MotorControllerGroup(MotorA, MotorB)``` ---- 實作(DriveSubsystem): ```java private final DifferentialDrive drive; drive = new DifferentialDrive( new MotorControllerGroup(leftFrontMotor, leftRearMotor), new MotorControllerGroup(rightFrontMotor, rightRearMotor) ); //創一個物件drive public void arcadeDrive(double xSpeed, double zRotation) { drive.arcadeDrive(xSpeed, zRotation); } //使用drive裡面的arcaseDrive方法 ``` ---- 實作(RobotContainer): ```java private final DriveSubsystem driveTrain = new DriveSubsystem(); driveTrain.setDefaultCommand( new RunCommand(() -> driveTrain.arcadeDrive(-xboxController.getRightY(), xboxController.getRightX()) , driveTrain )); ``` ---- 範例影片(5:20): https://www.youtube.com/watch?v=ihO-mw_4Qpo --- ## TANK DRIVE intro ---- 和坦克一樣的操作方法,分別操作左、右半邊的馬達 ---- 我們學校是用xbox中的兩個搖桿來操作... ---- ![](https://i.imgur.com/8V9EPcE.png) 一正一負,範圍為 -1 ~ 1 ---- 情境模擬: ---- ![](https://i.imgur.com/fXCNU1r.png) ---- ![](https://i.imgur.com/SimnNcr.png) ---- 有人有想到一個問題嗎? :thinking_face: ---- 他可以原地自轉嗎??? ---- **他可以~** ![](https://i.imgur.com/87er7Ws.png) ---- 而怎麼用程式寫呢?.... --- ## TANK DRIVE code ---- 我們要使用的是```DifferentialDrive```(class)裡面的```drive.tankDrive(leftSpeed, rightSpeed);```(方法) ---- 我們今天要同時控制左邊的兩個馬達和右邊的兩個馬達,和前面的arcade drive一樣要用group裡 ---- 實作(DriveSubsystem): ```java private final DifferentialDrive drive; drive = new DifferentialDrive( new MotorControllerGroup(leftFrontMotor, leftRearMotor), new MotorControllerGroup(rightFrontMotor, rightRearMotor) ); //創一個物件drive public void tankDrive(double leftSpeed, double rightSpeed) { drive.tankDrive(-leftSpeed, rightSpeed); } //使用drive裡面的tankDrive方法 ``` 為什麼要有負號呢?? ---- 實作(RobotContainer): ```java private final DriveSubsystem driveTrain = new DriveSubsystem(); driveTrain.setDefaultCommand( new RunCommand(() -> driveTrain.tankDrive(-xboxController.getRightY(), xboxController.getRightX()) , driveTrain )); ``` ----
{"metaMigratedAt":"2023-06-16T22:47:04.726Z","metaMigratedFrom":"YAML","title":"Lesson 3","breaks":true,"slideOptions":"{\"transition\":\"fade\",\"parallaxBackgroundSize\":\"2100px 1000px\",\"defaultTiming\":120}","contributors":"[{\"id\":\"a41c05df-55bf-44dc-9b5f-6e53858b0a77\",\"add\":3514,\"del\":470}]"}
    196 views
   owned this note