all servos working.

strafe needs weight balance to be efficient.
This commit is contained in:
scott
2022-02-07 13:11:58 -06:00
parent be2dbd24a8
commit 619e64296f
5 changed files with 105 additions and 25 deletions

3
.idea/misc.xml generated
View File

@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="JDK" project-jdk-type="JavaSDK"> <component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="11" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" /> <output url="file://$PROJECT_DIR$/build/classes" />
</component> </component>
<component name="ProjectType"> <component name="ProjectType">

View File

@@ -1,8 +1,10 @@
package org.timecrafters.minibots.cyberarm; package org.timecrafters.minibots.cyberarm;
import com.qualcomm.robotcore.hardware.CRServo;
import com.qualcomm.robotcore.hardware.DcMotor; import com.qualcomm.robotcore.hardware.DcMotor;
import com.qualcomm.robotcore.hardware.DcMotorEx; import com.qualcomm.robotcore.hardware.DcMotorEx;
import com.qualcomm.robotcore.hardware.DcMotorSimple; import com.qualcomm.robotcore.hardware.DcMotorSimple;
import com.qualcomm.robotcore.hardware.Servo;
import org.cyberarm.engine.V2.CyberarmEngine; import org.cyberarm.engine.V2.CyberarmEngine;
@@ -15,24 +17,50 @@ public class MecanumMinibot {
private CyberarmEngine engine; private CyberarmEngine engine;
public DcMotor frontLeftDrive, frontRightDrive, backLeftDrive, backRightDrive; public DcMotor frontLeftDrive, frontRightDrive, backLeftDrive, backRightDrive;
public Servo pServoRotate, pServoGrab;
public CRServo pServoArch, pServoElevate, pServoCarousel;
public MecanumMinibot(CyberarmEngine engine) { public MecanumMinibot(CyberarmEngine engine) {
this.engine = engine; this.engine = engine;
setupDrivetrain(); setupDrivetrain();
setupServos();
} }
private void setupDrivetrain() { private void setupDrivetrain() {
frontLeftDrive = engine.hardwareMap.dcMotor.get("frontLeft"); frontLeftDrive = engine.hardwareMap.dcMotor.get("frontLeft"); //2
frontRightDrive = engine.hardwareMap.dcMotor.get("frontRight"); frontRightDrive = engine.hardwareMap.dcMotor.get("frontRight"); //3
backLeftDrive = engine.hardwareMap.dcMotor.get("backLeft"); backLeftDrive = engine.hardwareMap.dcMotor.get("backLeft"); //1
backRightDrive = engine.hardwareMap.dcMotor.get("backRight"); backRightDrive = engine.hardwareMap.dcMotor.get("backRight"); //0
frontLeftDrive.setDirection(DcMotorSimple.Direction.REVERSE); frontLeftDrive.setDirection(DcMotorSimple.Direction.REVERSE);
frontRightDrive.setDirection(DcMotorSimple.Direction.REVERSE); frontRightDrive.setDirection(DcMotorSimple.Direction.REVERSE);
backLeftDrive.setDirection(DcMotorSimple.Direction.REVERSE); backLeftDrive.setDirection(DcMotorSimple.Direction.REVERSE);
backRightDrive.setDirection(DcMotorSimple.Direction.REVERSE); backRightDrive.setDirection(DcMotorSimple.Direction.REVERSE);
} }
private void setupServos(){
pServoArch = engine.hardwareMap.crservo.get("arch"); //0
pServoElevate = engine.hardwareMap.crservo.get("elevate"); //2
pServoRotate = engine.hardwareMap.servo.get("rotate"); //3
pServoGrab = engine.hardwareMap.servo.get("grab"); //4
pServoCarousel = engine.hardwareMap.crservo.get("carousel"); //5
pServoRotate.scaleRange(0.0, 1.0);
pServoGrab.scaleRange(0.0, 1.0);
pServoArch.setDirection(DcMotorSimple.Direction.FORWARD);
pServoElevate.setDirection(DcMotorSimple.Direction.REVERSE);
pServoRotate.setDirection(Servo.Direction.FORWARD);
pServoGrab.setDirection(Servo.Direction.FORWARD);
pServoCarousel.setDirection(DcMotorSimple.Direction.FORWARD);
pServoArch.setPower(0.0);
pServoElevate.setPower(0.0);
pServoRotate.setPosition(0.70);
pServoGrab.setPosition(0.9);
pServoCarousel.setPower(0.0);
}
public void driveAll(double power) { public void driveAll(double power) {
frontLeftDrive.setPower(power); frontLeftDrive.setPower(power);
@@ -65,19 +93,22 @@ public class MecanumMinibot {
} }
public void driveStrafe(int direction, double power) { public void driveStrafe(int direction, double power) {
if (direction == STRAFE_LEFT) { double dStrafeRatioBack=1.0;
frontLeftDrive.setPower(power); double dStrafeRatioFront=0.5;
frontRightDrive.setPower(-power);
backLeftDrive.setPower(-power); if (direction == STRAFE_LEFT) {
backRightDrive.setPower(power); frontLeftDrive.setPower(power*dStrafeRatioFront);
frontRightDrive.setPower(-power*dStrafeRatioFront);
backLeftDrive.setPower(-power*dStrafeRatioBack);
backRightDrive.setPower(power*dStrafeRatioBack);
} else if (direction == STRAFE_RIGHT) { } else if (direction == STRAFE_RIGHT) {
frontLeftDrive.setPower(-power); frontLeftDrive.setPower(-power*dStrafeRatioFront);
frontRightDrive.setPower(power); frontRightDrive.setPower(power*dStrafeRatioFront);
backLeftDrive.setPower(power); backLeftDrive.setPower(power*dStrafeRatioBack);
backRightDrive.setPower(-power); backRightDrive.setPower(-power*dStrafeRatioBack);
} else { } else {
throw new RuntimeException("Invalid direction for driveStrafe()"); throw new RuntimeException("Invalid direction for driveStrafe()");
} }

View File

@@ -6,6 +6,7 @@ import org.cyberarm.engine.V2.CyberarmEngine;
import org.cyberarm.engine.V2.CyberarmState; import org.cyberarm.engine.V2.CyberarmState;
import org.timecrafters.minibots.cyberarm.MecanumMinibot; import org.timecrafters.minibots.cyberarm.MecanumMinibot;
public class MecanumMinibotTeleOpState extends CyberarmState { public class MecanumMinibotTeleOpState extends CyberarmState {
private final MecanumMinibot robot; private final MecanumMinibot robot;
private float speed; private float speed;
@@ -16,6 +17,8 @@ public class MecanumMinibotTeleOpState extends CyberarmState {
@Override @Override
public void exec() { public void exec() {
/* ............................................................................ drive */
speed = 1.0f - engine.gamepad1.left_trigger; speed = 1.0f - engine.gamepad1.left_trigger;
if (engine.gamepad1.y) { if (engine.gamepad1.y) {
@@ -28,13 +31,60 @@ public class MecanumMinibotTeleOpState extends CyberarmState {
robot.driveStrafe(MecanumMinibot.STRAFE_RIGHT, speed); robot.driveStrafe(MecanumMinibot.STRAFE_RIGHT, speed);
} else if (engine.gamepad1.left_bumper) { } else if (engine.gamepad1.left_bumper) {
robot.driveTurn(MecanumMinibot.TURN_LEFT, speed); robot.driveTurn(MecanumMinibot.TURN_LEFT, speed*.5);
} else if (engine.gamepad1.right_bumper) { } else if (engine.gamepad1.right_bumper) {
robot.driveTurn(MecanumMinibot.TURN_RIGHT, speed); robot.driveTurn(MecanumMinibot.TURN_RIGHT, speed*.5);
} else { } else {
robot.driveStop(); robot.driveStop();
} }
/* ............................................................................ elevator */
if(engine.gamepad1.dpad_up){
robot.pServoElevate.setPower(1.0);
}
else if(engine.gamepad1.dpad_down){
robot.pServoElevate.setPower(-1.0);
}
else{
robot.pServoElevate.setPower((0.0));
}
/* ............................................................................ arch */
if(Math.abs(engine.gamepad1.left_stick_y)>0.1){
robot.pServoArch.setPower(engine.gamepad1.left_stick_y);
}
else{
robot.pServoArch.setPower((0.0));
}
/* ............................................................................ rotate */
if(engine.gamepad1.dpad_right){ // up position
robot.pServoRotate.setPosition(0.0);
}
if(engine.gamepad1.dpad_left){ // down position
robot.pServoRotate.setPosition(0.70);
}
/* ............................................................................ grab */
if(engine.gamepad1.left_stick_x>0.5|| engine.gamepad1.right_stick_x<-0.5){ // in
robot.pServoGrab.setPosition(0.9);
}
if(engine.gamepad1.left_stick_x<-0.5){ // small out
robot.pServoGrab.setPosition(0.50);
}
if(engine.gamepad1.right_stick_x>0.5){ // big out
robot.pServoGrab.setPosition(0.0);
}
/* ............................................................................ carousel */
if(Math.abs(engine.gamepad1.left_trigger)>0.1){
robot.pServoCarousel.setPower(engine.gamepad1.left_trigger);
}
else if(Math.abs(engine.gamepad1.right_trigger)>0.1){
robot.pServoCarousel.setPower(-engine.gamepad1.right_trigger);
}
else{
robot.pServoCarousel.setPower((0.0));
}
} }
@Override @Override

View File

@@ -12,10 +12,9 @@ buildscript {
repositories { repositories {
mavenCentral() mavenCentral()
google() google()
jcenter()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:4.0.1' classpath 'com.android.tools.build:gradle:7.1.1'
} }
} }
@@ -25,7 +24,6 @@ allprojects {
repositories { repositories {
mavenCentral() mavenCentral()
google() google()
jcenter()
} }
} }
@@ -38,11 +36,11 @@ repositories {
} }
dependencies { dependencies {
doc 'org.firstinspires.ftc:Hardware:6.2.0' doc 'org.firstinspires.ftc:Hardware:7.0.0'
doc 'org.firstinspires.ftc:RobotCore:6.2.0' doc 'org.firstinspires.ftc:RobotCore:7.0.0'
doc 'org.firstinspires.ftc:FtcCommon:6.2.0' doc 'org.firstinspires.ftc:FtcCommon:7.0.0'
doc 'org.firstinspires.ftc:OnBotJava:6.2.0' doc 'org.firstinspires.ftc:OnBotJava:7.0.0'
doc 'org.firstinspires.ftc:Inspection:6.2.0' doc 'org.firstinspires.ftc:Inspection:7.0.0'
} }
task extractJavadoc { task extractJavadoc {

View File

@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip