• 創建兩個檔案(TeleOpMode.java, TeleOp_Base.java)

  • 先在Base中設定馬達,並實作scaling function

    public abstract class TeleOp_Base extends LinearOpMode {
        public DcMotorEx FR, FL, BR, BL;
        public void init_hardware() {
            FR = hardwareMap.get(DcMotorEx.class, "FR");
            FL = hardwareMap.get(DcMotorEx.class, "FL");
            BR = hardwareMap.get(DcMotorEx.class, "BR");
            BL = hardwareMap.get(DcMotorEx.class, "BL");
            FR.setDirection(DcMotorSimple.Direction.REVERSE);
            BR.setDirection(DcMotorSimple.Direction.REVERSE);
            FR.setMode(DcMotor.RunMode.RUN_WITHOUT_ENCODER);
            FL.setMode(DcMotor.RunMode.RUN_WITHOUT_ENCODER);
            BR.setMode(DcMotor.RunMode.RUN_WITHOUT_ENCODER);
            BL.setMode(DcMotor.RunMode.RUN_WITHOUT_ENCODER);
        }
        public double scaling_power(double fr, double fl, double br, double bl) {
            double max = Math.max(Math.max(Math.abs(fr), Math.abs(fl)), Math.max(Math.abs(br), Math.abs(bl)));
            if(max <= 1) {
               max = 1;
            }
            return max;
        }
    }
    
  • TeleOpMode

    public class TeleOpMode extends TeleOp_Base {
        double drive, turn, strafe;
        double fr, fl, br, bl, scale;
        @Override
        public void runOpMode() throws InterruptedException {
            init_hardware();
            waitForStart();
            while(opModeIsActive()) {
                drive = -gamepad1.left_stick_y;     //前進
                turn = gamepad1.right_stick_x;      //自旋
                strafe = gamepad1.left_stick_x;    //平移
                
                
                fr = forward - rotate - strafe;
    		        fl = forward + rotate + strafe;
    		        br = forward - rotate + strafe;
    		        bl = forward + rotate - strafe;
    
    		        scale = scaling_power(fr, fl, br, bl);
    
    		        FR.setPower(fr/scale);
    		        FL.setPower(fl/scale);
    		        BR.setPower(br/scale);
    		        BL.setPower(bl/scale);
            }
        }
    }
    

  • Field Centric example code (gm 0 bottom)