Skip to content

Commit

Permalink
Fix gradle files and create drive system
Browse files Browse the repository at this point in the history
  • Loading branch information
knightsean00 committed Oct 20, 2018
1 parent f5f8dbd commit d823364
Show file tree
Hide file tree
Showing 9 changed files with 591 additions and 8 deletions.
2 changes: 2 additions & 0 deletions FtcRobotController/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ repositories {
flatDir {
dirs '../libs'
}
google()
jcenter()
}

apply from: 'build.release.gradle'
12 changes: 6 additions & 6 deletions FtcRobotController/build.release.gradle
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
dependencies {
compile (name:'Inspection-release', ext: 'aar')
compile (name:'Blocks-release', ext: 'aar')
compile (name:'RobotCore-release', ext: 'aar')
compile (name:'Hardware-release', ext: 'aar')
compile (name:'FtcCommon-release', ext: 'aar')
compile (name:'WirelessP2p-release', ext:'aar')
implementation (name:'Inspection-release', ext: 'aar')
implementation (name:'Blocks-release', ext: 'aar')
implementation (name:'RobotCore-release', ext: 'aar')
implementation (name:'Hardware-release', ext: 'aar')
implementation (name:'FtcCommon-release', ext: 'aar')
implementation (name:'WirelessP2p-release', ext:'aar')
}
1 change: 1 addition & 0 deletions TeamCode/build.release.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ dependencies {
implementation (name: 'Hardware-release', ext: 'aar')
implementation (name: 'FtcCommon-release', ext: 'aar')
implementation (name:'WirelessP2p-release', ext:'aar')

}
76 changes: 76 additions & 0 deletions TeamCode/src/main/java/org/firstinspires/ftc/teamcode/Tele.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package org.firstinspires.ftc.teamcode;

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.util.ElapsedTime;
import com.qualcomm.robotcore.util.Range;

import java.lang.Math;

@TeleOp(name="TeleOp", group="Linear Opmode")
public class Tele extends LinearOpMode {

// Declare OpMode members.
private ElapsedTime runtime = new ElapsedTime();
private DcMotor leftMotorFront = null;
private DcMotor leftMotorBack = null;
private DcMotor rightMotorFront = null;
private DcMotor rightMotorBack = null;

@Override
public void runOpMode() {
telemetry.addData("Status", "Initialized");
telemetry.update();


leftMotorFront = hardwareMap.get(DcMotor.class, "left_motor_front");
leftMotorBack = hardwareMap.get(DcMotor.class, "left_motor_back");
rightMotorFront = hardwareMap.get(DcMotor.class, "right_motor_front");
rightMotorBack = hardwareMap.get(DcMotor.class, "right_motor_back");
leftMotorFront.setDirection(DcMotor.Direction.REVERSE);
leftMotorBack.setDirection(DcMotor.Direction.REVERSE);

waitForStart();
runtime.reset();

while (opModeIsActive()) {
//Stuff to display for Telemetry
telemetry.addData("Left Motor Power", leftMotorFront.getPower());
telemetry.addData("Right Motor Power", rightMotorFront.getPower());
telemetry.update();

if (gamepad1.left_stick_y != 0 && gamepad1.right_stick_x == 0) {
leftMotorFront.setPower(gamepad1.left_stick_y);
leftMotorBack.setPower(gamepad1.left_stick_y);
rightMotorFront.setPower(gamepad1.left_stick_y);
rightMotorBack.setPower(gamepad1.left_stick_y);
}
if (gamepad1.right_stick_x != 0 && gamepad1.left_stick_y == 0) {
leftMotorFront.setPower(-gamepad1.right_stick_x);
leftMotorBack.setPower(-gamepad1.right_stick_x);
rightMotorFront.setPower(gamepad1.right_stick_x);
rightMotorBack.setPower(gamepad1.right_stick_x);
}
if (gamepad1.left_stick_y != 0 && gamepad1.right_stick_x > 0) {
leftMotorFront.setPower(0);
leftMotorBack.setPower(0);
rightMotorFront.setPower(Math.abs(gamepad1.right_stick_x) + Math.abs(gamepad1.left_stick_y)/2);
rightMotorBack.setPower(Math.abs(gamepad1.right_stick_x) + Math.abs(gamepad1.left_stick_y)/2);
}
if (gamepad1.left_stick_y != 0 && gamepad1.right_stick_x < 0) {
leftMotorFront.setPower(Math.abs(gamepad1.right_stick_x) + Math.abs(gamepad1.left_stick_y)/2);
leftMotorBack.setPower(Math.abs(gamepad1.right_stick_x) + Math.abs(gamepad1.left_stick_y)/2);
rightMotorFront.setPower(0);
rightMotorBack.setPower(0);
}
else {
leftMotorFront.setPower(0);
leftMotorBack.setPower(0);
rightMotorFront.setPower(0);
rightMotorBack.setPower(0);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public void runOpMode() {
telemetry.addData("Status", "Initialized");
telemetry.update();


test = hardwareMap.get(DcMotor.class, "test");
test.setDirection(DcMotor.Direction.REVERSE);

Expand Down
186 changes: 186 additions & 0 deletions TeamCode/src/main/java/org/firstinspires/ftc/teamcode/VuforiaID.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,186 @@
/* Copyright (c) 2017 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 org.firstinspires.ftc.robotcontroller.external.samples.ConceptVuforiaNavigation;
import org.firstinspires.ftc.robotcore.external.ClassFactory;
import org.firstinspires.ftc.robotcore.external.matrices.OpenGLMatrix;
import org.firstinspires.ftc.robotcore.external.matrices.VectorF;
import org.firstinspires.ftc.robotcore.external.navigation.AngleUnit;
import org.firstinspires.ftc.robotcore.external.navigation.AxesOrder;
import org.firstinspires.ftc.robotcore.external.navigation.AxesReference;
import org.firstinspires.ftc.robotcore.external.navigation.Orientation;
import org.firstinspires.ftc.robotcore.external.navigation.RelicRecoveryVuMark;
import org.firstinspires.ftc.robotcore.external.navigation.VuMarkInstanceId;
import org.firstinspires.ftc.robotcore.external.navigation.VuforiaLocalizer;
import org.firstinspires.ftc.robotcore.external.navigation.VuforiaTrackable;
import org.firstinspires.ftc.robotcore.external.navigation.VuforiaTrackableDefaultListener;
import org.firstinspires.ftc.robotcore.external.navigation.VuforiaTrackables;

/**
* This OpMode illustrates the basics of using the Vuforia engine to determine
* the identity of Vuforia VuMarks encountered on the field. The code is structured as
* a LinearOpMode. It shares much structure with {@link ConceptVuforiaNavigation}; we do not here
* duplicate the core Vuforia documentation found there, but rather instead focus on the
* differences between the use of Vuforia for navigation vs VuMark identification.
*
* @see ConceptVuforiaNavigation
* @see VuforiaLocalizer
* @see VuforiaTrackableDefaultListener
* see ftc_app/doc/tutorial/FTC_FieldCoordinateSystemDefinition.pdf
*
* 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 in {@link ConceptVuforiaNavigation}.
*/

@TeleOp(name="VuforiaID", group ="Concept")
public class VuforiaID extends LinearOpMode {

public static final String TAG = "Vuforia VuMark Sample";

OpenGLMatrix lastLocation = null;

/**
* {@link #vuforia} is the variable we will use to store our instance of the Vuforia
* localization engine.
*/
VuforiaLocalizer vuforia;

@Override public void runOpMode() {

/*
* To start up Vuforia, tell it the view that we wish to use for camera monitor (on the RC phone);
*/
int cameraMonitorViewId = hardwareMap.appContext.getResources().getIdentifier("cameraMonitorViewId", "id", hardwareMap.appContext.getPackageName());
VuforiaLocalizer.Parameters parameters = new VuforiaLocalizer.Parameters(cameraMonitorViewId);

// OR... Do Not Activate the Camera Monitor View, to save power
// VuforiaLocalizer.Parameters parameters = new VuforiaLocalizer.Parameters();

/*
* 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.
*/
parameters.vuforiaLicenseKey = "AfDTG3b/////AAABmQnAWkqPDkVztdcIurPa8w5lO6BWlTpltO5r1m4s9oA9w3cfFdIBqJ4rjZB0We4YHcRMdc5LkWwOvJk+xcDr2VFpLP8m6zEqLWlrVNQvBnNxmGO8BeZ+xRQeQ34AgPhrqQQqeheWJbfoOn+lekIz2ZMm9f+j+1ng/X0vKDHyFGfxbtXbJuUx4Qh6E3t0esH0b3VQtbuJiOOTpWi9xFAqBsHWp+DQbwub+a6HZV5q42OabnOAyr0GZ7u1vJZs+I/Vlnf7qEMLD4RTIYA5OmMyzOdl5aikZqDSgG223ETSwcbwd3QFKewYE3oXXxkpI0vmsxCiaqBJ1oL9e6n0RXbC8Zdvn2VYwh6oSemcpp+fSjGa";

/*
* We also indicate which camera on the RC that we wish to use.
* Here we chose the back (HiRes) camera (for greater range), but
* for a competition robot, the front camera might be more convenient.
*/
parameters.cameraDirection = VuforiaLocalizer.CameraDirection.BACK;

/**
* Instantiate the Vuforia engine
*/
vuforia = ClassFactory.getInstance().createVuforia(parameters);


/**
* Load the data set containing the VuMarks for Relic Recovery. There's only one trackable
* in this data set: all three of the VuMarks in the game were created from this one template,
* but diffaer in their instance id information.
* @see VuMarkInstanceId
*/
VuforiaTrackables relicTrackables = this.vuforia.loadTrackablesFromAsset("RelicVuMark");
VuforiaTrackable relicTemplate = relicTrackables.get(0);
relicTemplate.setName("relicVuMarkTemplate"); // can help in debugging; otherwise not necessary

telemetry.addData(">", "Press Play to start");
telemetry.update();
waitForStart();

relicTrackables.activate();

while (opModeIsActive()) {

/**
* See if any of the instances of {@link relicTemplate} are currently visible.
* {@link RelicRecoveryVuMark} is an enum which can have the following values:
* UNKNOWN, LEFT, CENTER, and RIGHT. When a VuMark is visible, something other than
* UNKNOWN will be returned by {@link RelicRecoveryVuMark#from(VuforiaTrackable)}.
*/
RelicRecoveryVuMark vuMark = RelicRecoveryVuMark.from(relicTemplate);
if (vuMark != RelicRecoveryVuMark.UNKNOWN) {

/* Found an instance of the template. In the actual game, you will probably
* loop until this condition occurs, then move on to act accordingly depending
* on which VuMark was visible. */
telemetry.addData("VuMark", "%s visible", vuMark);

/* For fun, we also exhibit the navigational pose. In the Relic Recovery game,
* it is perhaps unlikely that you will actually need to act on this pose information, but
* we illustrate it nevertheless, for completeness. */
OpenGLMatrix pose = ((VuforiaTrackableDefaultListener)relicTemplate.getListener()).getPose();
telemetry.addData("Pose", format(pose));

/* We further illustrate how to decompose the pose into useful rotational and
* translational components */
if (pose != null) {
VectorF trans = pose.getTranslation();
Orientation rot = Orientation.getOrientation(pose, AxesReference.EXTRINSIC, AxesOrder.XYZ, AngleUnit.DEGREES);

// Extract the X, Y, and Z components of the offset of the target relative to the robot
double tX = trans.get(0);
double tY = trans.get(1);
double tZ = trans.get(2);

// Extract the rotational components of the target relative to the robot
double rX = rot.firstAngle;
double rY = rot.secondAngle;
double rZ = rot.thirdAngle;
}
}
else {
telemetry.addData("VuMark", "not visible");
}

telemetry.update();
}
}

String format(OpenGLMatrix transformationMatrix) {
return (transformationMatrix != null) ? transformationMatrix.formatAsTransform() : "null";
}
}
Loading

0 comments on commit d823364

Please sign in to comment.