Skip to content

Commit b677234

Browse files
authored
Created odometry for Drivetrain.java (#33)
Before issuing a pull request: - [ ] Ensure all constants are in the Constants class - [ ] Update the backup OpMode if needed - [ ] Update README.md
2 parents b002622 + ed42b2e commit b677234

4 files changed

Lines changed: 69 additions & 3 deletions

File tree

TeamCode/src/main/java/org/firstinspires/ftc/teamcode/Constants.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,31 @@
11
package org.firstinspires.ftc.teamcode;
22

3+
import com.arcrobotics.ftclib.geometry.Translation2d;
4+
import com.arcrobotics.ftclib.kinematics.wpilibkinematics.MecanumDriveKinematics;
5+
36
public final class Constants {
47
public static class Drivetrain {
58
public static final String flMotorName = "frontLeftDrive";
69
public static final String frMotorName = "frontRightDrive";
710
public static final String blMotorName = "backLeftDrive";
811
public static final String brMotorName = "backRightDrive";
12+
13+
private static final double length = 0.2873375;
14+
private static final double width = 0.3444875;
15+
public static final Translation2d frontLeftLocation =
16+
new Translation2d(length/2, width/2);
17+
public static final Translation2d frontRightLocation =
18+
new Translation2d(length/2, -width/2);
19+
public static final Translation2d backLeftLocation =
20+
new Translation2d(-length/2, width/2);
21+
public static final Translation2d backRightLocation =
22+
new Translation2d(-length/2, -width/2);
23+
24+
public static final MecanumDriveKinematics kinematics = new MecanumDriveKinematics
25+
(
26+
frontLeftLocation, frontRightLocation,
27+
backLeftLocation, backRightLocation
28+
);
929
}
1030

1131
public static class Shooter {

TeamCode/src/main/java/org/firstinspires/ftc/teamcode/OpModes/BackupOpMode.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import com.arcrobotics.ftclib.command.CommandOpMode;
44
import com.arcrobotics.ftclib.gamepad.GamepadEx;
55
import com.arcrobotics.ftclib.gamepad.GamepadKeys;
6+
import com.arcrobotics.ftclib.hardware.GyroEx;
7+
import com.arcrobotics.ftclib.hardware.RevIMU;
68
import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
79

810
import org.firstinspires.ftc.teamcode.Constants;
@@ -24,12 +26,15 @@ public void initialize() {
2426
driverOp = new GamepadEx(gamepad1);
2527
coOp = new GamepadEx(gamepad2);
2628

29+
GyroEx gyroscope = new RevIMU(hardwareMap);
30+
2731
drivetrain = new Drivetrain(
2832
hardwareMap,
2933
Constants.Drivetrain.flMotorName,
3034
Constants.Drivetrain.frMotorName,
3135
Constants.Drivetrain.blMotorName,
32-
Constants.Drivetrain.brMotorName
36+
Constants.Drivetrain.brMotorName,
37+
gyroscope
3338
);
3439
drivetrain.setDefaultCommand(new UserDrive(drivetrain, driverOp));
3540
register(drivetrain);

TeamCode/src/main/java/org/firstinspires/ftc/teamcode/OpModes/PrimaryOpMode.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
import com.arcrobotics.ftclib.command.CommandOpMode;
44
import com.arcrobotics.ftclib.gamepad.GamepadEx;
55
import com.arcrobotics.ftclib.gamepad.GamepadKeys;
6+
import com.arcrobotics.ftclib.hardware.GyroEx;
7+
import com.arcrobotics.ftclib.hardware.RevIMU;
68
import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
9+
import com.qualcomm.robotcore.hardware.IntegratingGyroscope;
710

811
import org.firstinspires.ftc.teamcode.Constants;
912
import org.firstinspires.ftc.teamcode.commands.RunIntake;
@@ -21,18 +24,22 @@ public class PrimaryOpMode extends CommandOpMode {
2124

2225
private GamepadEx driverOp;
2326
private GamepadEx coOp;
27+
private GyroEx gyroscope;
2428

2529
@Override
2630
public void initialize() {
2731
driverOp = new GamepadEx(gamepad1);
2832
coOp = new GamepadEx(gamepad2);
2933

34+
gyroscope = new RevIMU(hardwareMap);
35+
3036
drivetrain = new Drivetrain(
3137
hardwareMap,
3238
Constants.Drivetrain.flMotorName,
3339
Constants.Drivetrain.frMotorName,
3440
Constants.Drivetrain.blMotorName,
35-
Constants.Drivetrain.brMotorName
41+
Constants.Drivetrain.brMotorName,
42+
gyroscope
3643
);
3744
drivetrain.setDefaultCommand(new UserDrive(drivetrain, driverOp));
3845
register(drivetrain);

TeamCode/src/main/java/org/firstinspires/ftc/teamcode/subsystems/Drivetrain.java

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,60 @@
22

33
import com.arcrobotics.ftclib.command.SubsystemBase;
44
import com.arcrobotics.ftclib.drivebase.MecanumDrive;
5+
import com.arcrobotics.ftclib.geometry.Pose2d;
6+
import com.arcrobotics.ftclib.geometry.Rotation2d;
7+
import com.arcrobotics.ftclib.hardware.GyroEx;
58
import com.arcrobotics.ftclib.hardware.motors.Motor;
9+
import com.arcrobotics.ftclib.kinematics.wpilibkinematics.MecanumDriveOdometry;
10+
import com.arcrobotics.ftclib.kinematics.wpilibkinematics.MecanumDriveWheelSpeeds;
611
import com.qualcomm.robotcore.hardware.HardwareMap;
712

13+
import org.firstinspires.ftc.teamcode.Constants;
14+
815
public class Drivetrain extends SubsystemBase {
916
private final Motor fL, fR, bL, bR;
17+
private final Motor.Encoder fLE, fRE, bLE, bRE;
18+
1019
private final MecanumDrive drive;
20+
private final MecanumDriveOdometry odometry;
21+
private final GyroEx gyroscope;
22+
private Pose2d pose;
1123

12-
public Drivetrain(HardwareMap hardwareMap, String flName, String frName, String blName, String brName) {
24+
public Drivetrain(HardwareMap hardwareMap, String flName, String frName, String blName, String brName, GyroEx gyroscope) {
1325
fL = new Motor(hardwareMap, flName);
26+
fLE = fL.encoder;
1427
fR = new Motor(hardwareMap, frName);
28+
fRE = fR.encoder;
1529
bL = new Motor(hardwareMap, blName);
30+
bLE = bL.encoder;
1631
bR = new Motor(hardwareMap, brName);
32+
bRE = bR.encoder;
33+
this.gyroscope = gyroscope;
1734

1835
drive = new MecanumDrive(fL, fR, bL, bR);
36+
37+
odometry = new MecanumDriveOdometry(
38+
Constants.Drivetrain.kinematics, gyroscope.getRotation2d(),
39+
new Pose2d(0.0, 0.0, new Rotation2d()
40+
));
41+
}
42+
43+
@Override
44+
public void periodic(){
45+
MecanumDriveWheelSpeeds wheelSpeeds = new MecanumDriveWheelSpeeds(
46+
fLE.getRate(), fRE.getRate(),
47+
bLE.getRate(), bRE.getRate()
48+
);
49+
50+
pose = odometry.updateWithTime(System.currentTimeMillis()/1000.0, gyroscope.getRotation2d(), wheelSpeeds);
1951
}
2052

2153
public void move(double strafe, double forward, double rotate) {
2254
drive.driveRobotCentric(strafe, forward, rotate);
2355
}
2456

57+
public Pose2d getPose() {return pose;}
58+
2559
public void stop() {
2660
drive.stop();
2761
}

0 commit comments

Comments
 (0)