@@ -16,6 +16,7 @@ TurretTracker::TurretTracker() : ValorSubsystem()
1616void TurretTracker::init () {
1717 initTable (" TurretTracker" );
1818 table->PutBoolean (" Use Turret Shoot" , false );
19+ table->PutNumber (" Joystick Multiplier" , ShooterConstants::jMultiplier);
1920}
2021
2122void TurretTracker::setDrivetrain (Drivetrain *dt){
@@ -31,31 +32,59 @@ void TurretTracker::assessInputs() {
3132}
3233
3334void TurretTracker::analyzeDashboard () {
35+ state.jMultiplier = table->GetNumber (" Joystick Multiplier" , ShooterConstants::jMultiplier);
36+ }
37+
38+ double TurretTracker::tMinusJ (double robotHeading, double turretPos, double jx, double jy)
39+ {
40+ double turretHeading = robotHeading - 90 + turretPos;
41+ if (turretHeading < -180 ) turretHeading += 360 ;
42+ if (turretHeading > 180 ) turretHeading -= 360 ;
43+
44+ double tx = (shooter->state .distanceToHub ) * cos (turretHeading * MathConstants::toRadians);
45+ double ty = (shooter->state .distanceToHub ) * sin (turretHeading * MathConstants::toRadians);
46+
47+ jx *= state.jMultiplier ;
48+ jy *= state.jMultiplier ;
49+
50+ double rx = tx - jx;
51+ double ry = ty - jy;
3452
53+ double turretHeadingDesired = atan2 (ry, rx);
54+ double deltaHeading = turretHeading - turretHeadingDesired;
55+
56+ if (deltaHeading < -180 ) deltaHeading += 360 ;
57+ if (deltaHeading > 180 ) deltaHeading -= 360 ;
58+
59+ table->PutNumber (" Delta Heading" , deltaHeading);
60+ return deltaHeading;
3561}
3662
3763void TurretTracker::assignOutputs () {
38- // state.cachedVX = drivetrain->getKinematics().ToChassisSpeeds().vx.to<double>();
39- // state.cachedVY = drivetrain->getKinematics().ToChassisSpeeds().vy.to<double>();
40- // state.cachedVT = drivetrain->getKinematics().ToChassisSpeeds().omega.to<double>();
41-
4264 double tv = shooter->state .tv ;
4365
66+ double robotHeading = drivetrain->getPose_m ().Rotation ().Degrees ().to <double >();
67+ double turretPos = shooter->turretEncoder .GetPosition ();
68+ double jx = drivetrain->state .leftStickX ;
69+ double jy = -1 * (drivetrain->state .leftStickY );
70+
4471 if (tv == 1 ) {
4572 state.cachedTx = shooter->state .tx ;
4673 // 0.75 = limeligh KP
4774 state.target = (-state.cachedTx * 0.75 ) + shooter->turretEncoder .GetPosition ();
48-
49- state.cachedHeading = drivetrain->getPose_m ().Rotation ().Degrees ().to <double >();
75+
76+ state.target += tMinusJ (robotHeading, turretPos, jx, jy);
77+
78+ state.cachedHeading = robotHeading;
5079 state.cachedX = drivetrain->getPose_m ().X ().to <double >();
5180 state.cachedY = drivetrain->getPose_m ().Y ().to <double >();
52- state.cachedTurretPos = shooter-> turretEncoder . GetPosition () ;
81+ state.cachedTurretPos = turretPos ;
5382 }
5483 else {
5584 if (table->GetBoolean (" Use Turret Shoot" , false ))
56- state.target = -1 * drivetrain-> getPose_m (). Rotation (). Degrees (). to < double >() + state.cachedTurretPos - state.cachedTx ;
85+ state.target = -1 * robotHeading + state.cachedTurretPos - state.cachedTx ;
5786 else
58- state.target = shooter-> turretEncoder . GetPosition () ;
87+ state.target = turretPos ;
5988 }
6089
6190 if (state.target < -90 ) {
0 commit comments