Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
b38e30a
Merged our previous code to PedroPathing 2.0.0. No errors on complila…
KUSHAL20092013 Oct 10, 2025
3a3b1ca
fully functional code
KUSHAL20092013 Oct 13, 2025
e768ca4
fully functional code
KUSHAL20092013 Oct 16, 2025
2521bc9
fully functional code, with Limelight
KUSHAL20092013 Oct 27, 2025
58a6b7b
Merge branch 'master' into dev/<Kushal>/Teleop
KUSHAL20092013 Oct 30, 2025
d96ae94
Merge pull request #1 from SciRavens/dev/<Kushal>/Teleop
venkatakm1 Oct 30, 2025
1936e99
inprogress auto
KUSHAL20092013 Nov 9, 2025
4de9ca9
inprogress auto - better thank last one
KUSHAL20092013 Nov 9, 2025
1143f75
Add Robot, Intake, Shooter subsystems
TejeshKothakota Nov 9, 2025
0437864
Robot is able to shoot 3 consistenly and intake first stack.
TejeshKothakota Nov 9, 2025
7ae3bc5
Robot is able to shoot 3 (sometimes) consistenly, intake first stack,…
TejeshKothakota Nov 9, 2025
1042ea4
Added Red Far auton
JaidevKaleeswaran Nov 10, 2025
311b4cc
Auto is working until case 8
KUSHAL20092013 Nov 9, 2025
c1809ad
9 artifact kinda working auto
KUSHAL20092013 Nov 10, 2025
77fa585
9 artifact kinda working auto final 11/09
KUSHAL20092013 Nov 10, 2025
8b21b71
Merge pull request #2 from SciRavens/dev/<Kushal>/Teleop
kraghuram Nov 10, 2025
04564e2
Updated TelelOp - made it look cleaner
TejeshKothakota Nov 10, 2025
031d168
Merge pull request #3 from SciRavens/dev/Tejesh/Teleop
kraghuram Nov 11, 2025
2d53610
Refined the ReadFarAuton
JaidevKaleeswaran Nov 11, 2025
4b6ff3c
Refined code for RedFarAuto.java, do not use RedFarAuton.java yet
JaidevKaleeswaran Nov 11, 2025
bd2b657
9 artifact kinda working auto final 11/10
KUSHAL20092013 Nov 11, 2025
5538b55
9 artifact kinda working auto final 11/10
KUSHAL20092013 Nov 11, 2025
545ba31
working auto + limelight is finally working
KUSHAL20092013 Nov 11, 2025
8973beb
everthing working
KUSHAL20092013 Nov 12, 2025
0027899
Merge pull request #4 from SciRavens/dev/Kushal/auton
kraghuram Nov 12, 2025
9076945
everthing working + LL code in auto close red
KUSHAL20092013 Nov 12, 2025
2016994
Merge pull request #5 from SciRavens/dev/Kushal/auton
kraghuram Nov 12, 2025
d1e2c12
Teleop changes
TejeshKothakota Nov 12, 2025
cb74a6e
Added ShooterRPMTest
TejeshKothakota Nov 12, 2025
54e165f
Merge pull request #6 from SciRavens/dev/tejesh/TeleOp2
kraghuram Nov 12, 2025
7d6bfad
everthing working + LL code in auto close red + non tested close blue
KUSHAL20092013 Nov 12, 2025
d100283
Merge branch 'master' into dev/Kushal/auton
kraghuram Nov 12, 2025
8a3dbe6
Merge pull request #7 from SciRavens/dev/Kushal/auton
kraghuram Nov 12, 2025
87619fb
Add turretTracker support
kraghuram Nov 13, 2025
4d706e1
Added new Vision Class
TejeshKothakota Nov 12, 2025
218d1f2
Added new Vision Class
TejeshKothakota Nov 12, 2025
1437f32
Fix merging
kraghuram Nov 13, 2025
6e12ebd
Add new Turret Tracker
kraghuram Nov 13, 2025
4babccb
Merge pull request #8 from SciRavens/dev/Tejesh/TeleOp2
kraghuram Nov 13, 2025
3f4e19f
Added new rapid fire button and changed some teleop controls for driv…
TejeshKothakota Nov 13, 2025
d6f71e3
fixed issues with teleop rapid fire for mid range. limelight was work…
TejeshKothakota Nov 13, 2025
ec48b57
same as before, but added rapid fire for close shoot (not sure if it …
TejeshKothakota Nov 13, 2025
05b48ad
everthing working + LL code in auto close red + non tested close blue…
KUSHAL20092013 Nov 13, 2025
96e6d4a
Working TeleOp controls with new rapid fire close and medium. Far wor…
TejeshKothakota Nov 13, 2025
5afe476
Merge pull request #9 from SciRavens/dev/tejesh/TeleOp3
kraghuram Nov 14, 2025
298dc46
everthing working + LL code in auto close red + non tested close blue…
KUSHAL20092013 Nov 14, 2025
3da6640
Merge pull request #10 from SciRavens/dev/Kushal/auton
kraghuram Nov 14, 2025
1af1ffc
Refined code for Red Far Auto, still not working, do not use RedFarAu…
JaidevKaleeswaran Nov 14, 2025
e715821
Merge branch 'master' into dev/Jaidev/FarAuton
kraghuram Nov 14, 2025
f1582b0
Merge pull request #11 from SciRavens/dev/Jaidev/FarAuton
kraghuram Nov 14, 2025
c5a9785
Figure out the Red or blue and start Teleop
TejeshKothakota Nov 15, 2025
0ff555a
Merge pull request #12 from SciRavens/dev/tejesh/TeleOp4
kraghuram Nov 15, 2025
552df92
V1Code
kraghuram Nov 14, 2025
02e41ca
Limelight Experimental Code
kraghuram Nov 15, 2025
04e8f4b
Limelight experimental code
kraghuram Nov 15, 2025
751f8fb
minor cleanup
kraghuram Nov 15, 2025
b56577a
Add group and preselectedTeleop
kraghuram Nov 15, 2025
1df857f
Merge pull request #13 from SciRavens/dev/raghuram/limelight
kraghuram Nov 15, 2025
327ec92
Red Far Auto, working prety well, do not use RedFarAuton.java yet
JaidevKaleeswaran Nov 15, 2025
986c648
Blue Far Auto working well
JaidevKaleeswaran Nov 15, 2025
6405fe6
Merge Kushal's BlueWallAutov2 code
kraghuram Nov 15, 2025
7b35aa5
Merge pull request #14 from SciRavens/dev/rkothakota/merge
kraghuram Nov 15, 2025
6fd6735
minor changes
TejeshKothakota Nov 15, 2025
3fc873f
Red Far Auto working extremely well
JaidevKaleeswaran Nov 15, 2025
75053ba
Merge pull request #15 from SciRavens/dev/tejesh/TeleOp5
kraghuram Nov 15, 2025
48495af
Integrate RedWallauto changes.
kraghuram Nov 15, 2025
6df83f5
Merge pull request #16 from SciRavens/dev/raghuram/merge2
kraghuram Nov 15, 2025
81a275d
Deleted RedFarAuton.java
JaidevKaleeswaran Nov 15, 2025
b966d2f
Merge pull request #17 from SciRavens/dev/Jaidev/FarAuton
kraghuram Nov 15, 2025
176ae2a
Fixed timings for BlueFarAuto and RedFarAuto, working well
JaidevKaleeswaran Nov 15, 2025
678afde
final commit before competition 6/9
KUSHAL20092013 Nov 15, 2025
f9b47f8
Merge pull request #18 from SciRavens/dev/Kushal11_14/auton
kraghuram Nov 15, 2025
1c05b28
Merge pull request #19 from SciRavens/dev/Jaidev/FarAuton
kraghuram Nov 15, 2025
327fd3b
Merge branch 'master' into master
kraghuram Feb 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
Control Hub:

Motors:
0: leftFront
1: leftRear
2: rightFront
3: rightRear

Servos:
5: turretServo

Expansion Hub:

Servo:
0: shooterLight

Motors:
1: transferMotor
2: intakeMotor
3: shooterMotor



shooter close = 1000
shooter mid = 1125
shooter far = 1375

67 changes: 67 additions & 0 deletions TeamCode/src/main/java/org/firstinspires/ftc/teamcode/Intake.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package org.firstinspires.ftc.teamcode;
import com.qualcomm.robotcore.hardware.DcMotorEx;
import com.qualcomm.robotcore.hardware.DcMotorSimple;
import com.qualcomm.robotcore.hardware.HardwareMap;


public class Intake {
public DcMotorEx intakeMotor;
public DcMotorEx transferMotor;
private final double INTAKE_POWER = 0.75;

private final double SHOOTING_POWER = 0.5;

private final double INTAKE_OFF = 0.0;

private final double TRANSFER_INTAKE_POWER = -0.4;

private final double TRANFER_SHOOTING_POWER = -0.75;

private final double TRANSFER_OFF = 0.0;



public Intake (HardwareMap hardwareMap) {
intakeMotor = hardwareMap.get(DcMotorEx.class,"intakeMotor");
intakeMotor.setMode(DcMotorEx.RunMode.RUN_USING_ENCODER);
intakeMotor.setDirection(DcMotorEx.Direction.FORWARD);

transferMotor = hardwareMap.get(DcMotorEx.class, "transferMotor");
transferMotor.setMode(DcMotorEx.RunMode.RUN_USING_ENCODER);
transferMotor.setDirection(DcMotorSimple.Direction.FORWARD);
}
public void startIntakeAndTransfer() {
intakeMotor.setPower(INTAKE_POWER);
transferMotor.setPower(TRANSFER_INTAKE_POWER);
}

public void startTransferOnly() {
transferMotor.setPower(TRANSFER_INTAKE_POWER);
}

public void startIntakeOnly() {
intakeMotor.setPower(INTAKE_POWER);
}

public void shootArtifacts() {
intakeMotor.setPower(SHOOTING_POWER);
transferMotor.setPower(TRANFER_SHOOTING_POWER);
}
public void intakeStop(){
intakeMotor.setPower(0);
transferMotor.setPower(0);
}
public void transferOnly() {
intakeMotor.setPower(0);
transferMotor.setPower(0.75);
}
public void stopIntake() {
intakeMotor.setPower(INTAKE_OFF);
}

public void stopTransfer() {
transferMotor.setPower(TRANSFER_OFF);
}


}
29 changes: 29 additions & 0 deletions TeamCode/src/main/java/org/firstinspires/ftc/teamcode/Robot.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package org.firstinspires.ftc.teamcode;
import com.qualcomm.robotcore.hardware.HardwareMap;
import org.firstinspires.ftc.robotcore.external.Telemetry;
import org.firstinspires.ftc.teamcode.Intake;
import org.firstinspires.ftc.teamcode.Shooter;
import org.firstinspires.ftc.teamcode.Turret;

public class Robot {

public static final int BLUE_TARGET_TAG_ID = 20;
public static final int PIPELINE_ID_BLUE = 8;
public static final int RED_TARGET_TAG_ID = 24;
public static final int PIPELINE_ID_RED = 2;
public static int current_pipeline_id = PIPELINE_ID_RED;
public static int current_tag_id = RED_TARGET_TAG_ID;

public Intake intake;
public Shooter shooter;
public Turret turret;
public HardwareMap hardwareMap;
public Telemetry telemetry;
public Robot (HardwareMap hardwareMap, Telemetry telemetry) {
this.hardwareMap = hardwareMap;
intake = new Intake(hardwareMap);
shooter = new Shooter(hardwareMap);
turret = new Turret(hardwareMap);
this.telemetry = telemetry;
}
}
241 changes: 241 additions & 0 deletions TeamCode/src/main/java/org/firstinspires/ftc/teamcode/RobotTeleop.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,241 @@
package org.firstinspires.ftc.teamcode;
import com.qualcomm.robotcore.eventloop.opmode.OpMode;
import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
import com.pedropathing.follower.Follower;
import com.pedropathing.geometry.Pose;
import org.firstinspires.ftc.teamcode.pedroPathing.Constants;

import com.pedropathing.util.Timer;


/**
* Standard Robot TeleOp for FTC using Pedro Pathing.
* Handles robot driving, shooter motor control, and turret control (CRServo).
*
* Author:
* Baron Henderson – 20077 The Indubitables (modified by Kushal Madhabhaktula)
* Version:
* 3.1, 10/2025
*/
@TeleOp(name = "RobotTeleop", group = "Competition")
public class RobotTeleop extends OpMode {
private Timer timer;
private Timer rapidTimer;

private Follower follower;
private Robot robot;

private Vision vision;
private TurretTracker turretTracker;
private static final double DEAD_ZONE = 0.1;
private static final double TURRET_DEADZONE = 0.3; // Tighter alignment threshold

private final Pose startPose = new Pose(0, 0, 0);

private Pose currentPose = new Pose(0,0,0);

private boolean is_RapidFireOn = false;
private boolean targetTracking_enabled = true;

private String currentAlliance = "RED";


@Override
public void init() {

timer = new Timer();
rapidTimer = new Timer();
follower = Constants.createFollower(hardwareMap);
follower.setStartingPose(startPose);
follower.startTeleopDrive();
robot = new Robot(hardwareMap, telemetry);
if(gamepad1.y) {
Robot.current_pipeline_id = Robot.PIPELINE_ID_BLUE;
Robot.current_tag_id = Robot.BLUE_TARGET_TAG_ID;
currentAlliance = "BLUE";
}
else{
Robot.current_pipeline_id = Robot.PIPELINE_ID_RED;
Robot.current_tag_id = Robot.RED_TARGET_TAG_ID;
}
// turretTracker = new TurretTracker(robot);
vision = new Vision(hardwareMap, robot);
telemetry.addData("Current Alliance: ", currentAlliance);
telemetry.addLine("RobotTeleop Initialized (CRServo turret)");
telemetry.update();
}

@Override
public void start() {
timer.resetTimer();
follower.startTeleopDrive();
follower.setMaxPower(1.0);
}

// private boolean is_CloseShot() {return gamepad2.b; }

private boolean is_FarShot() {
return gamepad2.x;
}

private boolean is_Intaking() {
return gamepad2.left_bumper;
}

private boolean is_Shooting() {
return gamepad2.right_bumper;
}

private boolean is_HumanPlayer() {
return gamepad1.a;
}

private boolean is_FlywheelOff() {
return gamepad2.a;
}

// private boolean is_TurretLeft() {
// return gamepad2.dpad_left;
// }
//
// private boolean is_TurretRight() {
// return gamepad2.dpad_right;
// }

private boolean is_ShootingRapidFireCloseRange() {return gamepad2.b;}

private boolean is_ShootingRapidFireMidRange() {
return gamepad2.y;
}



@Override
public void loop() {

double xInput = Math.abs(gamepad1.left_stick_x) > DEAD_ZONE ? -gamepad1.left_stick_x : 0;
double yInput = Math.abs(gamepad1.left_stick_y) > DEAD_ZONE ? -gamepad1.left_stick_y : 0;
// NOTE: rotation is negated to match PedroPathing's TeleOp example (prevents reversed/odd rotation behavior)
double turnInput = Math.abs(gamepad1.right_stick_x) > DEAD_ZONE ? -gamepad1.right_stick_x : 0;

double powerScale = gamepad1.right_trigger > 0.5 ? 0.25 : 1.0;

follower.updateErrors();
follower.updateVectors();
follower.setTeleOpDrive(
yInput * powerScale, // forward/backward
xInput * powerScale, // strafe
turnInput * powerScale, // rotation (negated)
true // robot-centric
);

follower.update();
if (targetTracking_enabled) {
vision.update();
}

if (is_FarShot()) {
robot.shooter.startFarShoot();
} else if (is_ShootingRapidFireCloseRange()) {
robot.shooter.startCloseShoot();
} else if (is_HumanPlayer()) {
robot.shooter.startHumanIntake();
} else if (is_FlywheelOff()){
robot.shooter.stopShoot();
}

if (is_Intaking()) {
robot.intake.startIntakeOnly();
} else {
robot.intake.stopIntake();
}

if (is_ShootingRapidFireMidRange() && !is_RapidFireOn) {
is_RapidFireOn = true;
robot.shooter.startMidShoot();
rapidTimer.resetTimer();
}
if (is_RapidFireOn) {
if (robot.shooter.reachedSpeed()) {
robot.intake.shootArtifacts();
gamepad1.rumble(1000);
gamepad2.rumble(1000);
}
if (rapidTimer.getElapsedTime() >= 5750) {
robot.shooter.stopFlyWheel();
robot.intake.intakeStop();
robot.intake.stopTransfer();
is_RapidFireOn = false;
}
} else {
if (is_Shooting()) {
if (robot.shooter.reachedSpeed()) {
robot.intake.startTransferOnly();
gamepad1.rumble(1000);
gamepad2.rumble(1000);
}
} else {
robot.intake.stopTransfer();
}
}

if (is_ShootingRapidFireCloseRange() && !is_RapidFireOn) {
is_RapidFireOn = true;
robot.shooter.startCloseShoot();
rapidTimer.resetTimer();
}
if (is_RapidFireOn) {
if (robot.shooter.reachedSpeed()) {
robot.intake.shootArtifacts();
gamepad1.rumble(1000);
gamepad2.rumble(1000);
}
if (rapidTimer.getElapsedTime() >= 5750) {
robot.shooter.stopFlyWheel();
robot.intake.intakeStop();
robot.intake.stopTransfer();
is_RapidFireOn = false;
}
} else {
if (is_Shooting()) {
if (robot.shooter.reachedSpeed()) {
robot.intake.startTransferOnly();
gamepad1.rumble(1000);
gamepad2.rumble(1000);
}
} else {
robot.intake.stopTransfer();
}
}


// Turret control (fixed: check gamepad2 on both dpad sides)
if (gamepad2.dpad_right && !gamepad2.dpad_left) {
robot.turret.goRight(); // rotate right
} else if (gamepad2.dpad_left && !gamepad2.dpad_right) {
robot.turret.goLeft(); // rotate left
} else {
robot.turret.stopTurret();
}

currentPose = follower.getPose();
robot.shooter.shooterLightUpdate();
telemetry.addData("Current Alliance: ", currentAlliance);
telemetry.addData("Rapid Fire On: ", is_RapidFireOn);
telemetry.addData("Drive X", xInput);
telemetry.addData("Drive Y", yInput);
telemetry.addData("Turn", turnInput);
//telemetry.addData("Turret Power", turretCR.getPower());
telemetry.addData("Pose X", follower.getPose().getX());
telemetry.addData("Pose Y", follower.getPose().getY());
telemetry.addData("Heading (deg)", Math.toDegrees(follower.getPose().getHeading()));
telemetry.update();
}

@Override
public void stop() {
robot.shooter.stopShoot();
robot.intake.stopIntake();
robot.intake.stopTransfer();
}
}
Loading