Advertisement
akg1729

Untitled

Jan 17th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 11.91 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 = getGlobalAngle();
  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.         error = desiredAngle - currentRotation;
  150.         telemetry.addData("IsAligned" , detector.getAligned()); // Is the bot aligned with the gold mineral?
  151.         telemetry.addData("X Pos" , detector.getXPosition()); // Gold X position.
  152.         desiredAngle = 90;
  153.         currentRotation = getGlobalAngle();
  154.         if(Math.abs(error) > 5) {rotate((int)(desiredAngle - currentRotation),.8 ); }
  155. /*
  156.             if (detector.getAligned()) {
  157.                 ShiftRight(.3);
  158.                 sleep(400);
  159.                 ShiftLeft(.4);
  160.                 sleep(400);
  161.             } else {
  162.                 DriveForward(.2);
  163.             }
  164.             */
  165.  
  166.     }
  167.     @Override
  168.     public void start(){
  169.  
  170.         runtime.reset();
  171.         //rotate(90,.4);
  172.  
  173.     }
  174.     @Override
  175.     public void stop() {
  176.         // Disable the detector
  177.         vuforia.stop();
  178.  
  179.         detector.disable();
  180.     }
  181.     double DRIVE_POWER = 1.0;
  182.     public void TurnLeft(double lPower, double rPower){
  183.         leftWheel.setPower(lPower);
  184.         rightWheel.setPower(rPower);
  185.  
  186.     }
  187.     public void TurnRight(double lPower, double rPower){
  188.         leftWheel.setPower(lPower);
  189.         rightWheel.setPower(rPower);
  190.  
  191.     }
  192.  
  193.     public void DriveForward(double power){
  194.         leftWheel.setPower(power);
  195.         rightWheel.setPower(power);
  196.  
  197.     }
  198.     public void DriveBackward(double power){
  199.         leftWheel.setPower(-power);
  200.         rightWheel.setPower(-power);
  201.  
  202.     }
  203.     public void ShiftLeft(double power){
  204.         centerWheel.setPower(power);
  205.     }
  206.     public void ShiftRight(double power){
  207.         centerWheel.setPower(-power);
  208.     }
  209.     public void StopDriving(){
  210.         leftWheel.setPower(0);
  211.         rightWheel.setPower(0);
  212.         centerWheel.setPower(0);
  213.  
  214.     }
  215.     public static void sleep(long sleepTime)
  216.     {
  217.         long wakeupTime = System.currentTimeMillis() + sleepTime;
  218.  
  219.         while (sleepTime > 0)
  220.         {
  221.             try
  222.             {
  223.                 Thread.sleep(sleepTime);
  224.             }
  225.             catch (InterruptedException e)
  226.             {
  227.                 sleepTime = wakeupTime - System.currentTimeMillis();
  228.             }
  229.         }
  230.     }   //sleep
  231.     private void resetAngle()
  232.     {
  233.         lastAngles = imu.getAngularOrientation(AxesReference.INTRINSIC, AxesOrder.ZYX, AngleUnit.DEGREES);
  234.  
  235.         globalAngle = 0;
  236.     }
  237.  
  238.     /**
  239.      * Get current cumulative angle rotation from last reset.
  240.      * @return Angle in degrees. + = left, - = right.
  241.      */
  242.     private double getAngle()
  243.     {
  244.         // We experimentally determined the Z axis is the axis we want to use for heading angle.
  245.         // We have to process the angle because the imu works in euler angles so the Z axis is
  246.         // returned as 0 to +180 or 0 to -180 rolling back to -179 or +179 when rotation passes
  247.         // 180 degrees. We detect this transition and track the total cumulative angle of rotation.
  248.  
  249.         Orientation angles = imu.getAngularOrientation(AxesReference.INTRINSIC, AxesOrder.ZYX, AngleUnit.DEGREES);
  250.  
  251.         double deltaAngle = angles.firstAngle - lastAngles.firstAngle;
  252.  
  253.         if (deltaAngle < -180)
  254.             deltaAngle += 360;
  255.         else if (deltaAngle > 180)
  256.             deltaAngle -= 360;
  257.  
  258.         globalAngle += deltaAngle;
  259.  
  260.         lastAngles = angles;
  261.  
  262.         return globalAngle;
  263.     }
  264.  
  265.     /**
  266.      * See if we are moving in a straight line and if not return a power correction value.
  267.      * @return Power adjustment, + is adjust left - is adjust right.
  268.      */
  269.     private double checkDirection()
  270.     {
  271.         // The gain value determines how sensitive the correction is to direction changes.
  272.         // You will have to experiment with your robot to get small smooth direction changes
  273.         // to stay on a straight line.
  274.         double correction, angle, gain = .10;
  275.  
  276.         angle = getAngle();
  277.  
  278.         if (angle == 0)
  279.             correction = 0;             // no adjustment.
  280.         else
  281.             correction = -angle;        // reverse sign of angle for correction.
  282.  
  283.         correction = correction * gain;
  284.  
  285.         return correction;
  286.     }
  287.  
  288.     /**
  289.      * Rotate left or right the number of degrees. Does not support turning more than 180 degrees.
  290.      * @param degrees Degrees to turn, + is left - is right
  291.      */
  292.     private void rotate(int degrees, double power)
  293.     {
  294.         double  leftPower, rightPower;
  295.  
  296.         // restart imu movement tracking.
  297.         resetAngle();
  298.  
  299.         // getAngle() returns + when rotating counter clockwise (left) and - when rotating
  300.         // clockwise (right).
  301.  
  302.         if (degrees < 0)
  303.         {   // turn right.
  304.             leftPower = -power;
  305.             rightPower = power;
  306.         }
  307.         else if (degrees > 0)
  308.         {   // turn left.
  309.             leftPower = power;
  310.             rightPower = -power;
  311.         }
  312.         else return;
  313.  
  314.         // set power to rotate.
  315.         leftWheel.setPower(leftPower);
  316.         rightWheel.setPower(rightPower);
  317.  
  318.         // rotate until turn is completed.
  319.         if (degrees < 0)
  320.         {
  321.             // On right turn we have to get off zero first.
  322.             while (initLoop && getAngle() == 0) {msStuckDetectInitLoop =  (int)System.currentTimeMillis();}
  323.  
  324.             while (initLoop && getAngle() > degrees) {msStuckDetectInitLoop = (int)System.currentTimeMillis();}
  325.         }
  326.         else    // left turn.
  327.             while (initLoop && getAngle() < degrees) {msStuckDetectInitLoop =   (int)System.currentTimeMillis();}
  328.  
  329.  
  330.         // turn the motors off.
  331.         rightWheel.setPower(0);
  332.         leftWheel.setPower(0);
  333.  
  334.         // wait for rotation to stop.
  335.         sleep(1000);
  336.  
  337.         // reset angle tracking on new heading.
  338.         resetAngle();
  339.     }
  340.     public double getGlobalAngle() {
  341.         return globalAngle;
  342.     }
  343.  
  344. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement