Advertisement
akg1729

Untitled

Jan 17th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 11.90 KB | None | 0 0
  1.  
  2.  
  3. package org.firstinspires.ftc.teamcode.OutOfOrder14235.Autonomous;
  4.  
  5. import com.disnodeteam.dogecv.CameraViewDisplay;
  6. import com.disnodeteam.dogecv.DogeCV;
  7. import com.disnodeteam.dogecv.Dogeforia;
  8. import com.disnodeteam.dogecv.detectors.roverrukus.GoldAlignDetector;
  9. import com.qualcomm.hardware.bosch.BNO055IMU;
  10. import com.qualcomm.robotcore.eventloop.opmode.Autonomous;
  11. import com.qualcomm.robotcore.eventloop.opmode.OpMode;
  12. import com.qualcomm.robotcore.hardware.DcMotor;
  13. import com.qualcomm.robotcore.hardware.Servo;
  14. import com.qualcomm.robotcore.util.ElapsedTime;
  15.  
  16. import org.firstinspires.ftc.robotcore.external.hardware.camera.WebcamName;
  17. import org.firstinspires.ftc.robotcore.external.navigation.AngleUnit;
  18. import org.firstinspires.ftc.robotcore.external.navigation.AxesOrder;
  19. import org.firstinspires.ftc.robotcore.external.navigation.AxesReference;
  20. import org.firstinspires.ftc.robotcore.external.navigation.Orientation;
  21. import org.firstinspires.ftc.robotcore.external.navigation.VuforiaLocalizer;
  22. import org.firstinspires.ftc.robotcore.external.navigation.VuforiaTrackable;
  23.  
  24. import java.util.ArrayList;
  25. import java.util.List;
  26.  
  27. import static java.lang.Math.abs;
  28. import static org.firstinspires.ftc.robotcore.external.navigation.VuforiaLocalizer.CameraDirection.BACK;
  29.  
  30.  
  31. @Autonomous
  32.  
  33. public class ShirtManCodeTestingMinerals extends OpMode {
  34.     double desiredAngle;
  35.     double currentRotation = getAngle();
  36.     double  error;
  37.  
  38.  
  39.     private ElapsedTime runtime = new ElapsedTime();
  40.     private static final VuforiaLocalizer.CameraDirection CAMERA_CHOICE = BACK;
  41.  
  42.     // Vuforia variables
  43.     Dogeforia vuforia;
  44.     WebcamName webcamName;
  45.     List<VuforiaTrackable> allTrackables = new ArrayList<VuforiaTrackable>();
  46.  
  47.     // DogeCV detector
  48.     GoldAlignDetector detector;
  49.     private DcMotor leftWheel;
  50.     private DcMotor rightWheel;
  51.     private DcMotor centerWheel;
  52.     private DcMotor linearActuator;
  53.     private Servo markerDropper;
  54.     private DcMotor linExt;
  55.     BNO055IMU               imu;
  56.     Orientation             lastAngles = new Orientation();
  57.     double globalAngle, power = .30, correction;
  58.     boolean                 aButton, bButton, touched;
  59. boolean initLoop = false;
  60.     //GoldAlignDetector
  61.     //private GoldAlignDetector detector;
  62.  
  63.  
  64.     @Override
  65.     public void init() {
  66.         webcamName = hardwareMap.get(WebcamName.class, "Webcam 1");
  67.  
  68.         // Set up parameters for Vuforia
  69.         int cameraMonitorViewId = hardwareMap.appContext.getResources().getIdentifier("cameraMonitorViewId", "id", hardwareMap.appContext.getPackageName());
  70.         VuforiaLocalizer.Parameters parameters = new VuforiaLocalizer.Parameters();
  71.  
  72.         // Vuforia licence key
  73.         parameters.vuforiaLicenseKey = "AXykNg//////AAABmdVQDVwq9kAEsspJU9r8u8VmSeZBFzHTHr6fsWSjYKVlHaAw6uE0fxEJ0zCNaIbGmpOSWf0NY/pFNh4N5uYYtL99ymMWhR2tfuIBXgo7T4m8ht7lStZtjHjmcmO0nQBzzGCm74gw+CDYvRbfDYtr95fNuoMIcyZUiv2TpUcsbebE+fT6HEfyGXyF1j4d6CEzWc1Qhdy+nCCC3kO/5oDt8usf3ryOzBgFW/l4l+YEqk1LVw1vrx4+DhiqQ87ohJDybGab6FvqxC2Hlryx0p7BdmwCtQqfaRD8s8icv7XUR09Xlij02Z5iRe/7+aJc44fxmu3xTB17y3r8Er0YmqVvU3EChH5p0+SiHl+z36p78c1J\n";
  74.         parameters.fillCameraMonitorViewParent = true;
  75.  
  76.         // Set camera name for Vuforia config
  77.         parameters.cameraName = webcamName;
  78.  
  79.         // Create Dogeforia object
  80.         vuforia = new Dogeforia(parameters);
  81.         vuforia.enableConvertFrameToBitmap();
  82.  
  83.  
  84.  
  85.  
  86.  
  87.         detector = new GoldAlignDetector();
  88.         detector.init(hardwareMap.appContext,CameraViewDisplay.getInstance(), 0, true);
  89.         detector.useDefaults();
  90.         detector.areaScoringMethod = DogeCV.AreaScoringMethod.MAX_AREA; // Can also be PERFECT_AREA
  91.         //detector.perfectAreaScorer.perfectArea = 10000; // if using PERFECT_AREA scoring
  92.         detector.downscale = 0.8;
  93.         // Optional tuning
  94.         detector.alignSize = 100; // How wide (in pixels) is the range in which the gold object will be aligned. (Represented by green bars in the preview)
  95.         detector.alignPosOffset = 0; // How far from center frame to offset this alignment zone.
  96.         detector.downscale = 0.4; // How much to downscale the input frames
  97.  
  98.         detector.areaScoringMethod = DogeCV.AreaScoringMethod.MAX_AREA; // Can also be PERFECT_AREA
  99.         //detector.perfectAreaScorer.perfectArea = 10000; // if using PERFECT_AREA scoring
  100.         detector.maxAreaScorer.weight = 0.005; //
  101.  
  102.         detector.ratioScorer.weight = 5; //
  103.         detector.ratioScorer.perfectRatio = 1.0; // Ratio adjustment
  104.         // Set the detector
  105.         vuforia.setDogeCVDetector(detector);
  106.         vuforia.enableDogeCV();
  107.         vuforia.showDebug();
  108.         vuforia.start();
  109.         // Set up detector
  110.         BNO055IMU.Parameters parametersIMU = new BNO055IMU.Parameters();
  111.  
  112.         parametersIMU.mode                = BNO055IMU.SensorMode.IMU;
  113.         parametersIMU.angleUnit           = BNO055IMU.AngleUnit.DEGREES;
  114.         parametersIMU.accelUnit           = BNO055IMU.AccelUnit.METERS_PERSEC_PERSEC;
  115.         parametersIMU.loggingEnabled      = false;
  116.  
  117.  
  118.         imu = hardwareMap.get(BNO055IMU.class, "imu");
  119.         leftWheel = hardwareMap.get(DcMotor.class, "left_drive");
  120.         rightWheel = hardwareMap.get(DcMotor.class, "right_drive");
  121.         centerWheel = hardwareMap.get(DcMotor.class, "pulleyMotor");
  122.         markerDropper = hardwareMap.get(Servo.class, "markerDropper");
  123.         linearActuator = hardwareMap.get(DcMotor.class, "wormGear");
  124.         linExt = hardwareMap.get(DcMotor.class, "linExt");
  125.  
  126.         leftWheel.setDirection(DcMotor.Direction.REVERSE);
  127.  
  128.         leftWheel.setZeroPowerBehavior(DcMotor.ZeroPowerBehavior.BRAKE);
  129.         rightWheel.setZeroPowerBehavior(DcMotor.ZeroPowerBehavior.BRAKE);
  130.         imu.initialize(parametersIMU);
  131.  
  132.         telemetry.addData("Mode", "IMU calibrating...");
  133.         telemetry.update();
  134.  
  135.         telemetry.addData("Status", "Initialized");
  136.         telemetry.update();
  137.         // Wait for the game to start (driver presses PLAY)
  138.  
  139.     }
  140.  
  141.     @Override
  142.     public void init_loop() {
  143.         initLoop = true;
  144.     }
  145.  
  146.     @Override
  147.     public void loop(){
  148.         initLoop = false;
  149.         telemetry.addData("IsAligned" , detector.getAligned()); // Is the bot aligned with the gold mineral?
  150.         telemetry.addData("X Pos" , detector.getXPosition()); // Gold X position.
  151.         desiredAngle = 9000;
  152.         currentRotation = getAngle();
  153.         error = desiredAngle - currentRotation;
  154.  
  155.         if(Math.abs(error) > 5) {rotate((int)(desiredAngle - currentRotation),.8 ); }
  156. /*
  157.             if (detector.getAligned()) {
  158.                 ShiftRight(.3);
  159.                 sleep(400);
  160.                 ShiftLeft(.4);
  161.                 sleep(400);
  162.             } else {
  163.                 DriveForward(.2);
  164.             }
  165.             */
  166.  
  167.     }
  168.     @Override
  169.     public void start(){
  170.  
  171.         runtime.reset();
  172.         //rotate(90,.4);
  173.  
  174.     }
  175.     @Override
  176.     public void stop() {
  177.         // Disable the detector
  178.         vuforia.stop();
  179.  
  180.         detector.disable();
  181.     }
  182.     double DRIVE_POWER = 1.0;
  183.     public void TurnLeft(double lPower, double rPower){
  184.         leftWheel.setPower(lPower);
  185.         rightWheel.setPower(rPower);
  186.  
  187.     }
  188.     public void TurnRight(double lPower, double rPower){
  189.         leftWheel.setPower(lPower);
  190.         rightWheel.setPower(rPower);
  191.  
  192.     }
  193.  
  194.     public void DriveForward(double power){
  195.         leftWheel.setPower(power);
  196.         rightWheel.setPower(power);
  197.  
  198.     }
  199.     public void DriveBackward(double power){
  200.         leftWheel.setPower(-power);
  201.         rightWheel.setPower(-power);
  202.  
  203.     }
  204.     public void ShiftLeft(double power){
  205.         centerWheel.setPower(power);
  206.     }
  207.     public void ShiftRight(double power){
  208.         centerWheel.setPower(-power);
  209.     }
  210.     public void StopDriving(){
  211.         leftWheel.setPower(0);
  212.         rightWheel.setPower(0);
  213.         centerWheel.setPower(0);
  214.  
  215.     }
  216.     public static void sleep(long sleepTime)
  217.     {
  218.         long wakeupTime = System.currentTimeMillis() + sleepTime;
  219.  
  220.         while (sleepTime > 0)
  221.         {
  222.             try
  223.             {
  224.                 Thread.sleep(sleepTime);
  225.             }
  226.             catch (InterruptedException e)
  227.             {
  228.                 sleepTime = wakeupTime - System.currentTimeMillis();
  229.             }
  230.         }
  231.     }   //sleep
  232.     private void resetAngle()
  233.     {
  234.         lastAngles = imu.getAngularOrientation(AxesReference.INTRINSIC, AxesOrder.ZYX, AngleUnit.DEGREES);
  235.  
  236.         globalAngle = 0;
  237.     }
  238.  
  239.     /**
  240.      * Get current cumulative angle rotation from last reset.
  241.      * @return Angle in degrees. + = left, - = right.
  242.      */
  243.     private double getAngle()
  244.     {
  245.         // We experimentally determined the Z axis is the axis we want to use for heading angle.
  246.         // We have to process the angle because the imu works in euler angles so the Z axis is
  247.         // returned as 0 to +180 or 0 to -180 rolling back to -179 or +179 when rotation passes
  248.         // 180 degrees. We detect this transition and track the total cumulative angle of rotation.
  249.  
  250.         Orientation angles = imu.getAngularOrientation(AxesReference.INTRINSIC, AxesOrder.ZYX, AngleUnit.DEGREES);
  251.  
  252.         double deltaAngle = angles.firstAngle - lastAngles.firstAngle;
  253.  
  254.         if (deltaAngle < -180)
  255.             deltaAngle += 360;
  256.         else if (deltaAngle > 180)
  257.             deltaAngle -= 360;
  258.  
  259.         globalAngle += deltaAngle;
  260.  
  261.         lastAngles = angles;
  262.  
  263.         return globalAngle;
  264.     }
  265.  
  266.     /**
  267.      * See if we are moving in a straight line and if not return a power correction value.
  268.      * @return Power adjustment, + is adjust left - is adjust right.
  269.      */
  270.     private double checkDirection()
  271.     {
  272.         // The gain value determines how sensitive the correction is to direction changes.
  273.         // You will have to experiment with your robot to get small smooth direction changes
  274.         // to stay on a straight line.
  275.         double correction, angle, gain = .10;
  276.  
  277.         angle = getAngle();
  278.  
  279.         if (angle == 0)
  280.             correction = 0;             // no adjustment.
  281.         else
  282.             correction = -angle;        // reverse sign of angle for correction.
  283.  
  284.         correction = correction * gain;
  285.  
  286.         return correction;
  287.     }
  288.  
  289.     /**
  290.      * Rotate left or right the number of degrees. Does not support turning more than 180 degrees.
  291.      * @param degrees Degrees to turn, + is left - is right
  292.      */
  293.     private void rotate(int degrees, double power)
  294.     {
  295.         double  leftPower, rightPower;
  296.  
  297.         // restart imu movement tracking.
  298.         resetAngle();
  299.  
  300.         // getAngle() returns + when rotating counter clockwise (left) and - when rotating
  301.         // clockwise (right).
  302.  
  303.         if (degrees < 0)
  304.         {   // turn right.
  305.             leftPower = -power;
  306.             rightPower = power;
  307.         }
  308.         else if (degrees > 0)
  309.         {   // turn left.
  310.             leftPower = power;
  311.             rightPower = -power;
  312.         }
  313.         else return;
  314.  
  315.         // set power to rotate.
  316.         leftWheel.setPower(leftPower);
  317.         rightWheel.setPower(rightPower);
  318.  
  319.         // rotate until turn is completed.
  320.         if (degrees < 0)
  321.         {
  322.             // On right turn we have to get off zero first.
  323.             while (initLoop && getAngle() == 0) {msStuckDetectInitLoop =  (int)System.currentTimeMillis();}
  324.  
  325.             while (initLoop && getAngle() > degrees) {msStuckDetectInitLoop = (int)System.currentTimeMillis();}
  326.         }
  327.         else    // left turn.
  328.             while (initLoop && getAngle() < degrees) {msStuckDetectInitLoop =   (int)System.currentTimeMillis();}
  329.  
  330.  
  331.         // turn the motors off.
  332.         rightWheel.setPower(0);
  333.         leftWheel.setPower(0);
  334.  
  335.         // wait for rotation to stop.
  336.         sleep(1000);
  337.  
  338.         // reset angle tracking on new heading.
  339.         resetAngle();
  340.     }
  341.     public double getGlobalAngle() {
  342.         return globalAngle;
  343.     }
  344.  
  345. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement