Advertisement
Guest User

Drive

a guest
Nov 17th, 2019
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.99 KB | None | 0 0
  1. package org.firstinspires.ftc.teamcode;
  2.  
  3. import com.qualcomm.hardware.bosch.BNO055IMU;
  4. import com.qualcomm.hardware.bosch.JustLoggingAccelerationIntegrator;
  5. import com.qualcomm.robotcore.eventloop.opmode.Autonomous;
  6. import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
  7. import com.qualcomm.robotcore.hardware.DcMotor;
  8. import com.qualcomm.robotcore.hardware.DcMotorSimple;
  9. import com.qualcomm.robotcore.hardware.HardwareMap;
  10. import com.qualcomm.robotcore.util.ElapsedTime;
  11.  
  12. import org.firstinspires.ftc.robotcontroller.external.samples.HardwarePushbot;
  13. import org.firstinspires.ftc.robotcore.external.Telemetry;
  14. import org.firstinspires.ftc.robotcore.external.navigation.AngleUnit;
  15. import org.firstinspires.ftc.robotcore.external.navigation.AxesOrder;
  16. import org.firstinspires.ftc.robotcore.external.navigation.AxesReference;
  17. import org.firstinspires.ftc.robotcore.external.navigation.Orientation;
  18.  
  19.  
  20. public class Drive {
  21. /* Declare OpMode members. */
  22. private ElapsedTime runtime = new ElapsedTime();
  23.  
  24. static final double COUNTS_PER_MOTOR_REV = 1440; // eg: TETRIX Motor Encoder
  25. static final double DRIVE_GEAR_REDUCTION = 2.0; // This is < 1.0 if geared UP
  26. static final double WHEEL_DIAMETER_INCHES = 4.0; // Fornew figuring circumference
  27. static final double COUNTS_PER_INCH = (COUNTS_PER_MOTOR_REV * DRIVE_GEAR_REDUCTION) /
  28. (WHEEL_DIAMETER_INCHES * 3.1415);
  29.  
  30. public DcMotor BDL;
  31. public DcMotor BDR;
  32. public DcMotor FDR;
  33. public DcMotor FDL;
  34. LinearOpMode opMode;
  35. Orientation orientation;
  36. double current;
  37. double initial;
  38. BNO055IMU imu;
  39.  
  40. public Drive(LinearOpMode ahwMap) {
  41. this.opMode = ahwMap;
  42. BDL = ahwMap.hardwareMap.dcMotor.get("BDL");
  43. BDR = ahwMap.hardwareMap.dcMotor.get("BDR");
  44. FDL = ahwMap.hardwareMap.dcMotor.get("FDL");
  45. FDR = ahwMap.hardwareMap.dcMotor.get("FDR");
  46. imu = ahwMap.hardwareMap.get(BNO055IMU.class, "imu");
  47.  
  48. BNO055IMU.Parameters parameters = new BNO055IMU.Parameters();
  49. parameters.angleUnit = BNO055IMU.AngleUnit.DEGREES;
  50. parameters.accelUnit = BNO055IMU.AccelUnit.METERS_PERSEC_PERSEC;
  51. parameters.calibrationDataFile = "BNO055IMUCalibration.json"; // see the calibration sample opmode
  52. parameters.loggingEnabled = true;
  53. parameters.loggingTag = "IMU";
  54. parameters.accelerationIntegrationAlgorithm = new JustLoggingAccelerationIntegrator();
  55.  
  56. // Retrieve and initialize the IMU. We expect the IMU to be attached to an I2C port
  57. // on a Core Device Interface Module, configured to be a sensor of type "AdaFruit IMU",
  58. // and named "imu".
  59. imu.initialize(parameters);
  60. }
  61.  
  62. public void encoderDrive(double power,
  63. double distance) {
  64. int newLeftTarget;
  65. int newRightTarget;
  66.  
  67. newLeftTarget = FDR.getCurrentPosition() + (int)(distance * COUNTS_PER_INCH);
  68. newRightTarget = FDL.getCurrentPosition() + (int)(distance * COUNTS_PER_INCH);
  69.  
  70. FDL.setTargetPosition(newLeftTarget);
  71. FDR.setTargetPosition(newRightTarget);
  72. BDL.setTargetPosition(newLeftTarget);
  73. BDR.setTargetPosition(newRightTarget);
  74.  
  75. FDR.setMode(DcMotor.RunMode.RUN_TO_POSITION);
  76. FDL.setMode(DcMotor.RunMode.RUN_TO_POSITION);
  77. BDR.setMode(DcMotor.RunMode.RUN_TO_POSITION);
  78. BDL.setMode(DcMotor.RunMode.RUN_TO_POSITION);
  79.  
  80. FDL.setPower(power);
  81. BDL.setPower(power);
  82. FDR.setPower(power);
  83. BDR.setPower(power);
  84.  
  85. //display telemetry data while turning
  86. while (opMode.opModeIsActive() && (FDL.isBusy() && FDR.isBusy())) {
  87. // Display it for the driver.
  88. opMode.telemetry.addData("Path1", "Running to %7d :%7d", newLeftTarget, newRightTarget);
  89. opMode.telemetry.addData("Path2", "Running at %7d :%7d", FDL.getCurrentPosition(), FDR.getCurrentPosition());
  90. opMode.telemetry.update();
  91. }
  92.  
  93. //stop after done
  94. FDL.setPower(0);
  95. BDL.setPower(0);
  96. FDR.setPower(0);
  97. BDR.setPower(0);
  98.  
  99. FDR.setMode(DcMotor.RunMode.RUN_WITHOUT_ENCODER);
  100. FDL.setMode(DcMotor.RunMode.RUN_WITHOUT_ENCODER);
  101. BDR.setMode(DcMotor.RunMode.RUN_WITHOUT_ENCODER);
  102. BDL.setMode(DcMotor.RunMode.RUN_WITHOUT_ENCODER);
  103. }
  104. public void IMUTurning (double target , double speed)
  105. {
  106. orientation = imu.getAngularOrientation(AxesReference.INTRINSIC, AxesOrder.ZYX, AngleUnit.DEGREES);
  107. initial = orientation.firstAngle;
  108. if(target > current)
  109. {
  110. opMode.telemetry.addData("toGo", current - target);
  111. while ((initial + target) - current > 2 && opMode.opModeIsActive())
  112. {
  113. orientation = imu.getAngularOrientation(AxesReference.INTRINSIC, AxesOrder.ZYX, AngleUnit.DEGREES);
  114. current = orientation.firstAngle;
  115. opMode.telemetry.addData("toGo", target - current);
  116. opMode.telemetry.update();
  117. FDR.setPower(speed);
  118. FDL.setPower(-speed);
  119. BDR.setPower(speed);
  120. BDL.setPower(-speed);
  121. opMode.telemetry.update();
  122. }
  123. }
  124. else
  125. {
  126. opMode.telemetry.addData("toGo", target - current);
  127. while (current - (target + initial) > 2 && opMode.opModeIsActive())
  128. {
  129. orientation = imu.getAngularOrientation(AxesReference.INTRINSIC, AxesOrder.ZYX, AngleUnit.DEGREES);
  130. current = orientation.firstAngle; //getHeading
  131. opMode.telemetry.addData("toGo", current - target);
  132. opMode.telemetry.update();
  133. FDR.setPower(-speed);
  134. FDL.setPower(speed);
  135. BDR.setPower(-speed);
  136. BDL.setPower(speed);
  137. opMode.telemetry.update();
  138. }
  139. }
  140. }
  141. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement