Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Copyright (c) 2018 FIRST. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted (subject to the limitations in the disclaimer below) provided that
- * the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice, this list
- * of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright notice, this
- * list of conditions and the following disclaimer in the documentation and/or
- * other materials provided with the distribution.
- *
- * Neither the name of FIRST nor the names of its contributors may be used to endorse or
- * promote products derived from this software without specific prior written permission.
- *
- * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS
- * LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- package org.firstinspires.ftc.teamcode;
- import com.qualcomm.robotcore.eventloop.opmode.Disabled;
- import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
- import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
- import com.qualcomm.robotcore.hardware.DcMotor;
- import com.qualcomm.robotcore.hardware.DcMotorSimple;
- import com.qualcomm.robotcore.hardware.Servo;
- import org.firstinspires.ftc.robotcore.external.ClassFactory;
- import org.firstinspires.ftc.robotcore.external.navigation.VuforiaLocalizer;
- import org.firstinspires.ftc.robotcore.external.navigation.VuforiaLocalizer.CameraDirection;
- import org.firstinspires.ftc.robotcore.external.tfod.Recognition;
- import org.firstinspires.ftc.robotcore.external.tfod.TFObjectDetector;
- import java.util.List;
- /**
- * This 2018-2019 OpMode illustrates the basics of using the TensorFlow Object Detection API to
- * determine the position of the gold and silver minerals.
- *
- * Use Android Studio to Copy this Class, and Paste it into your team's code folder with a new name.
- * Remove or comment out the @Disabled line to add this opmode to the Driver Station OpMode list.
- *
- * IMPORTANT: In order to use this OpMode, you need to obtain your own Vuforia license key as
- * is explained below.
- */
- @TeleOp(name = "Autonomous_2018_2019", group = "Concept")
- //@Disabled
- public class Autonomie_2018_2019 extends LinearOpMode {
- private static final String TFOD_MODEL_ASSET = "RoverRuckus.tflite";
- private static final String LABEL_GOLD_MINERAL = "Gold Mineral";
- private static final String LABEL_SILVER_MINERAL = "Silver Mineral";
- DcMotor stangafata;
- DcMotor stangaspate;
- DcMotor dreaptafata;
- DcMotor dreaptaspate;
- DcMotor motorridicare;
- /*
- * IMPORTANT: You need to obtain your own license key to use Vuforia. The string below with which
- * 'parameters.vuforiaLicenseKey' is initialized is for illustration only, and will not function.
- * A Vuforia 'Development' license key, can be obtained free of charge from the Vuforia developer
- * web site at https://developer.vuforia.com/license-manager.
- *
- * Vuforia license keys are always 380 characters long, and look as if they contain mostly
- * random data. As an example, here is a example of a fragment of a valid key:
- * ... yIgIzTqZ4mWjk9wd3cZO9T1axEqzuhxoGlfOOI2dRzKS4T0hQ8kT ...
- * Once you've obtained a license key, copy the string from the Vuforia web site
- * and paste it in to your code on the next line, between the double quotes.
- */
- private static final String VUFORIA_KEY = "AZMtsN7/////AAAAGaO7fMjTHkBzuK+Q5+sJ8GODX9t0JUpPTa42RrZjmqooU4jdyDeaR+DLBis3OmcP/hw3ApMB/69HhTJlZF/LDgPLJ3kmAFo1BM6pn0ECyo/V/JZbo9aCbxZHoAtEfCl8oiwwf9ysbKkHoSeyA7V+IvyRzttPVXfbKNn7ZNqpzJK0CmFdHiM9gQfJ1vpYcAeelXjaSLjLDzBIsn+Gci75VzaAifiL6hgkKIhJ8d7DYJLAvydiykY2dWMRtyK5MWCP8ehG0zXKKZXQYoMMGULar0gxzh10BULScmzludez0PO/+OiIe4oz4bD+6w/czItvj0euyH5jon+s0WZrgrR9VZDcauhBOAVv/yqCBP16qXIc\n";
- /**
- * {@link #vuforia} is the variable we will use to store our instance of the Vuforia
- * localization engine.
- */
- private VuforiaLocalizer vuforia;
- /**
- * {@link #tfod} is the variable we will use to store our instance of the Tensor Flow Object
- * Detection engine.
- */
- private TFObjectDetector tfod;
- @Override
- public void runOpMode() {
- stangafata= hardwareMap.get(DcMotor.class,"stangafata");
- stangaspate= hardwareMap.get(DcMotor.class,"stangaspate");
- dreaptafata= hardwareMap.get(DcMotor.class, "dreaptafata");
- dreaptaspate=hardwareMap.get(DcMotor.class, "dreaptaspate");
- motorridicare=hardwareMap.get(DcMotor.class,"motorridicare");
- stangaspate.setDirection(DcMotorSimple.Direction.REVERSE);
- stangafata.setDirection(DcMotorSimple.Direction.REVERSE);
- // The TFObjectDetector uses the camera frames from the VuforiaLocalizer, so we create that
- // first.
- initVuforia();
- if (ClassFactory.getInstance().canCreateTFObjectDetector()) {
- initTfod();
- } else {
- telemetry.addData("Sorry!", "This device is not compatible with TFOD");
- }
- /** Wait for the game to begin */
- telemetry.addData(">", "Press Play to start tracking");
- telemetry.update();
- waitForStart();
- if (opModeIsActive()) {
- /** Activate Tensor Flow Object Detection. */
- if (tfod != null) {
- tfod.activate();
- }
- while (opModeIsActive()) {
- if (tfod != null) {
- // getUpdatedRecognitions() will return null if no new information is available since
- // the last time that call was made.
- List<Recognition> updatedRecognitions = tfod.getUpdatedRecognitions();
- if (updatedRecognitions != null) {
- telemetry.addData("# Object Detected", updatedRecognitions.size());
- if (updatedRecognitions.size() == 3) {
- int goldMineralX = -1;
- int silverMineral1X = -1;
- int silverMineral2X = -1;
- for (Recognition recognition : updatedRecognitions) {
- if (recognition.getLabel().equals(LABEL_GOLD_MINERAL)) {
- goldMineralX = (int) recognition.getLeft();
- } else if (silverMineral1X == -1) {
- silverMineral1X = (int) recognition.getLeft();
- } else {
- silverMineral2X = (int) recognition.getLeft();
- }
- }
- if (goldMineralX != -1 && silverMineral1X != -1 && silverMineral2X != -1) {
- if (goldMineralX < silverMineral1X && goldMineralX < silverMineral2X) {
- telemetry.addData("Gold Mineral Position", "Left");
- } else if (goldMineralX > silverMineral1X && goldMineralX > silverMineral2X) {
- telemetry.addData("Gold Mineral Position", "Right");
- } else {
- telemetry.addData("Gold Mineral Position", "Center");
- }
- }
- }
- telemetry.update();
- }
- }
- }
- }
- if (tfod != null) {
- tfod.shutdown();
- }
- }
- /**
- * Initialize the Vuforia localization engine.
- */
- private void initVuforia() {
- /*
- * Configure Vuforia by creating a Parameter object, and passing it to the Vuforia engine.
- */
- VuforiaLocalizer.Parameters parameters = new VuforiaLocalizer.Parameters();
- parameters.vuforiaLicenseKey = VUFORIA_KEY;
- parameters.cameraDirection = CameraDirection.BACK;
- // Instantiate the Vuforia engine
- vuforia = ClassFactory.getInstance().createVuforia(parameters);
- // Loading trackables is not necessary for the Tensor Flow Object Detection engine.
- }
- /**
- * Initialize the Tensor Flow Object Detection engine.
- */
- private void initTfod() {
- int tfodMonitorViewId = hardwareMap.appContext.getResources().getIdentifier(
- "tfodMonitorViewId", "id", hardwareMap.appContext.getPackageName());
- TFObjectDetector.Parameters tfodParameters = new TFObjectDetector.Parameters(tfodMonitorViewId);
- tfod = ClassFactory.getInstance().createTFObjectDetector(tfodParameters, vuforia);
- tfod.loadModelFromAsset(TFOD_MODEL_ASSET, LABEL_GOLD_MINERAL, LABEL_SILVER_MINERAL);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement