Skip to content
This repository has been archived by the owner on Aug 29, 2024. It is now read-only.

Test build of the amp shot button #22

Open
wants to merge 23 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
9147e1a
Created the basic code for the driver controlled swerve drive
spamtactics Jan 28, 2024
aa4aa0d
Test code
spamtactics Jan 28, 2024
fc7ba7d
Make swerve drive code slightly more readable
WebCoder49 Jan 31, 2024
7d382fb
Merge pull request #12 from brightonfrc/main
WebCoder49 Jan 31, 2024
29208ba
Merge pull request #15 from brightonfrc/7-driver-controlled-swerve-drive
WebCoder49 Jan 31, 2024
82a9a78
Draft
spamtactics Feb 2, 2024
2bcab8d
Code for the snap Command
spamtactics Feb 4, 2024
b663fd7
New commit
spamtactics Feb 5, 2024
bfa784f
This should work
spamtactics Feb 5, 2024
696ec53
Sorry
spamtactics Feb 5, 2024
27fa5df
new update to use the proper motors
spamtactics Feb 7, 2024
159ddf7
change to the motor subsystem
spamtactics Feb 7, 2024
9ad1b19
Get PID from constants for now
WebCoder49 Feb 7, 2024
41c901b
Merge branch '14-snap-to-90degree-increment-angles' into 7-driver-con…
spamtactics Feb 7, 2024
b87c9b2
CAN IDs Assigned
personofalltime Feb 8, 2024
e88d3b1
Get encoders from SparkMAX; fix some naming conventions
WebCoder49 Feb 9, 2024
39310ab
Merge pull request #21 from brightonfrc/7-driver-controlled-swerve-drive
spamtactics Feb 12, 2024
467e0f7
The base subsystem and command required for this task
spamtactics Feb 12, 2024
679750a
next update
spamtactics Feb 13, 2024
43c7aef
This is the enter turning mode command.
spamtactics Feb 13, 2024
d000cbd
First test build
spamtactics Feb 15, 2024
e3879d6
added constants
spamtactics Feb 27, 2024
ee55f95
Updating the encoder code
spamtactics Feb 28, 2024
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
1 change: 1 addition & 0 deletions networktables.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[]
92 changes: 92 additions & 0 deletions simgui-ds.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
{
"keyboardJoysticks": [
{
"axisConfig": [
{
"decKey": 65,
"incKey": 68
},
{
"decKey": 87,
"incKey": 83
},
{
"decKey": 69,
"decayRate": 0.0,
"incKey": 82,
"keyRate": 0.009999999776482582
}
],
"axisCount": 3,
"buttonCount": 4,
"buttonKeys": [
90,
88,
67,
86
],
"povConfig": [
{
"key0": 328,
"key135": 323,
"key180": 322,
"key225": 321,
"key270": 324,
"key315": 327,
"key45": 329,
"key90": 326
}
],
"povCount": 1
},
{
"axisConfig": [
{
"decKey": 74,
"incKey": 76
},
{
"decKey": 73,
"incKey": 75
}
],
"axisCount": 2,
"buttonCount": 4,
"buttonKeys": [
77,
44,
46,
47
],
"povCount": 0
},
{
"axisConfig": [
{
"decKey": 263,
"incKey": 262
},
{
"decKey": 265,
"incKey": 264
}
],
"axisCount": 2,
"buttonCount": 6,
"buttonKeys": [
260,
268,
266,
261,
269,
267
],
"povCount": 0
},
{
"axisCount": 0,
"buttonCount": 0,
"povCount": 0
}
]
}
10 changes: 10 additions & 0 deletions simgui.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"NTProvider": {
"types": {
"/FMSInfo": "FMSInfo"
}
},
"NetworkTables Info": {
"visible": true
}
}
51 changes: 51 additions & 0 deletions src/main/java/frc/robot/Constants.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,58 @@
* constants are needed, to reduce verbosity.
*/
public final class Constants {
public static class Ports {
public static int kDriveFrontLeftMove = 1;
public static int kDriveFrontLeftTurn = 2;
public static int kDriveFrontRightMove = 3;
public static int kDriveFrontRightTurn = 4;
public static int kDriveBackLeftMove = 5;
public static int kDriveBackLeftTurn = 6;
public static int kDriveBackRightMove = 7;
public static int kDriveBackRightTurn = 8;
}

public static class MotorConstants{
public static double distancePerRotation=10.0;
public static double movementPerRotation=10.0;
}

public static class OperatorConstants {
public static final int kDriverControllerPort = 0;
public static final int snapButton=1;
public static final int AmpShotButton=2;
}

public static class PIDConstants {
public static final double kDrivetrainP = 0.2;
public static final double kDrivetrainI = 0.0;
public static final double kDrivetrainD = 0.0;
public static final double kRobotTurnP = 0.2;
public static final double kRobotTurnI = 0.0;
public static final double kRobotTurnD = 0.0;
public static final double kRobotMoveP = 0.2;
public static final double kRobotMoveI = 0.0;
public static final double kRobotMoveD = 0.0;
}
public static class AprilTags{
//this stores the settings for the april tag detector config and the families to be detected by the detector
//remember to actually configure these
public static final int numThreads=1;
public static final float quadDecimate=2;
public static final float quadSigma=0;
//6.5 inches to mm
public static final double normalTagLength=165.1;
//the number of pixels the border of the april tag will have at 1m.
public static final double pixelsAtMeter=400;
//the X coordinate of the center when the april tag is aligned with the camera.
public static final double centerXCoordinate=300;
//https://docs.wpilib.org/en/stable/docs/software/vision-processing/apriltag/apriltag-intro.html
public static final String family="36h11";
}
public static class AmpAprilTag{
//remember to actually fill this in with the correct april tags
public static final int ampNum=0;
//the optimal distance at which the note can be inserted into the amp in m
public static final double optimalDistance=0.1;
}
}
26 changes: 25 additions & 1 deletion src/main/java/frc/robot/Robot.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@

package frc.robot;

import edu.wpi.first.wpilibj.Encoder;
import edu.wpi.first.wpilibj.TimedRobot;
import edu.wpi.first.wpilibj.motorcontrol.Talon;
import edu.wpi.first.wpilibj2.command.Command;
import edu.wpi.first.wpilibj2.command.CommandScheduler;

Expand All @@ -18,6 +20,11 @@ public class Robot extends TimedRobot {
private Command m_autonomousCommand;

private RobotContainer m_robotContainer;
private Talon FrontLeftMove;
private Talon FrontRightMove;
private Talon BackLeftMove;
private Talon BackRightMove;
private Encoder frontLeftMove;

/**
* This function is run when the robot is first started up and should be used for any
Expand Down Expand Up @@ -87,11 +94,28 @@ public void teleopPeriodic() {}
public void testInit() {
// Cancels all running commands at the start of test mode.
CommandScheduler.getInstance().cancelAll();
FrontLeftMove= new Talon(0);
FrontRightMove= new Talon(0);
BackLeftMove= new Talon(0);
BackRightMove= new Talon(0);
frontLeftMove = new Encoder(0, 0);
FrontLeftMove.set(0.1);
FrontRightMove.set(0.1);
BackLeftMove.set(0.1);
BackRightMove.set(0.1);
}


/** This function is called periodically during test mode. */
@Override
public void testPeriodic() {}
public void testPeriodic() {
if (frontLeftMove.get()==100){
FrontLeftMove.set(0);
FrontRightMove.set(0);
BackLeftMove.set(0);
BackRightMove.set(0);
}
}

/** This function is called once when the robot is first started up. */
@Override
Expand Down
85 changes: 72 additions & 13 deletions src/main/java/frc/robot/RobotContainer.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,37 @@

package frc.robot;

import frc.robot.Constants.OperatorConstants;
import frc.robot.commands.AlignWithAprilTag;
// here is where you put all your commands and subsystems;
import frc.robot.commands.Autos;
import frc.robot.commands.ExampleCommand;
import frc.robot.commands.Drive;
import frc.robot.commands.Snap;
import frc.robot.commands.AlignWithAprilTag;
import frc.robot.commands.MoveToAmp;
import frc.robot.subsystems.ExampleSubsystem;
import frc.robot.subsystems.Encoders;
import frc.robot.subsystems.Motors;
import frc.robot.subsystems.Gyroscope;
import frc.robot.subsystems.TagDetector;
import frc.robot.Constants.Ports;
import frc.robot.Constants.OperatorConstants;
import frc.robot.Constants.MotorConstants;
import edu.wpi.first.wpilibj.Joystick;
import edu.wpi.first.wpilibj2.command.button.JoystickButton;
import edu.wpi.first.wpilibj2.command.Command;
import edu.wpi.first.wpilibj2.command.SequentialCommandGroup;
import edu.wpi.first.wpilibj2.command.button.CommandXboxController;
import edu.wpi.first.wpilibj2.command.button.Trigger;
import edu.wpi.first.apriltag.AprilTagDetector;
import edu.wpi.first.apriltag.AprilTagDetector.Config;

import com.revrobotics.AbsoluteEncoder;
import com.revrobotics.SparkAbsoluteEncoder.Type;
import com.revrobotics.CANSparkMax;
import com.revrobotics.RelativeEncoder;
import com.revrobotics.CANSparkLowLevel.MotorType;
import com.kauailabs.navx.frc.AHRS;
import edu.wpi.first.wpilibj.I2C;

/**
* This class is where the bulk of the robot should be declared. Since Command-based is a
Expand All @@ -21,15 +45,52 @@
public class RobotContainer {
// The robot's subsystems and commands are defined here...
private final ExampleSubsystem m_exampleSubsystem = new ExampleSubsystem();
// the video says to define the motors within the motors subsystem, but I will just define it here so I know where all my
// variables are

// remember to configure the acutal channels
private final CANSparkMax frontLeftMove= new CANSparkMax(Ports.kDriveFrontLeftMove,MotorType.kBrushless);
private final CANSparkMax frontLeftTurn= new CANSparkMax(Ports.kDriveFrontLeftTurn,MotorType.kBrushless);
private final CANSparkMax frontRightMove= new CANSparkMax(Ports.kDriveFrontRightMove,MotorType.kBrushless);
private final CANSparkMax frontRightTurn= new CANSparkMax(Ports.kDriveFrontRightTurn,MotorType.kBrushless);
private final CANSparkMax backLeftMove= new CANSparkMax(Ports.kDriveBackLeftMove,MotorType.kBrushless);
private final CANSparkMax backLeftTurn = new CANSparkMax(Ports.kDriveBackLeftTurn,MotorType.kBrushless);
private final CANSparkMax backRightMove= new CANSparkMax(Ports.kDriveBackRightMove,MotorType.kBrushless);
private final CANSparkMax backRightTurn= new CANSparkMax(Ports.kDriveBackRightTurn,MotorType.kBrushless);
private final AbsoluteEncoder frontLeftMoveEncoder = frontLeftMove.getAbsoluteEncoder(Type.kDutyCycle);
private final AbsoluteEncoder frontLeftTurnEncoder = frontLeftTurn.getAbsoluteEncoder(Type.kDutyCycle);
private final AbsoluteEncoder frontRightMoveEncoder = frontRightMove.getAbsoluteEncoder(Type.kDutyCycle);
private final AbsoluteEncoder frontRightTurnEncoder = frontRightTurn.getAbsoluteEncoder(Type.kDutyCycle);
private final AbsoluteEncoder backLeftMoveEncoder = backLeftMove.getAbsoluteEncoder(Type.kDutyCycle);
private final AbsoluteEncoder backLeftTurnEncoder = backLeftTurn.getAbsoluteEncoder(Type.kDutyCycle);
private final AbsoluteEncoder backRightMoveEncoder = backRightMove.getAbsoluteEncoder(Type.kDutyCycle);
private final AbsoluteEncoder backRightTurnEncoder = backRightTurn.getAbsoluteEncoder(Type.kDutyCycle);
private final AHRS gyro = new AHRS(I2C.Port.kMXP);
private final AprilTagDetector detector= new AprilTagDetector();
private final AprilTagDetector.Config configuration= new Config();


private final Motors motors= new Motors(frontLeftMove, frontLeftTurn, frontRightMove, frontRightTurn, backLeftMove, backLeftTurn, backRightMove, backRightTurn);
//motor radius is configured in mm and distance per rotation is still unkown
private final Encoders encoders= new Encoders(frontLeftMoveEncoder, frontLeftTurnEncoder, frontRightTurnEncoder, frontRightMoveEncoder, backLeftMoveEncoder, backLeftTurnEncoder, backRightMoveEncoder, backRightTurnEncoder, MotorConstants.movementPerRotation);
private final Gyroscope gyroscope = new Gyroscope(gyro);
private final TagDetector tagDetector= new TagDetector(detector, configuration);

// remember to set the joystick port

// Replace with CommandPS4Controller or CommandJoystick if needed
private final CommandXboxController m_driverController =
new CommandXboxController(OperatorConstants.kDriverControllerPort);
private Joystick stick = new Joystick(OperatorConstants.kDriverControllerPort);
// this is the button on the handle of the joystick
private JoystickButton snapButton = new JoystickButton(stick, OperatorConstants.snapButton);
private JoystickButton ampShotButton= new JoystickButton(stick, OperatorConstants.AmpShotButton);

//remember to add the actual shoot into amp command in here.
private final SequentialCommandGroup autoAmpShot= new SequentialCommandGroup(new AlignWithAprilTag(encoders, motors, tagDetector), new MoveToAmp(encoders, motors, tagDetector));

/** The container for the robot. Contains subsystems, OI devices, and commands. */
public RobotContainer() {
// Configure the trigger bindings
configureBindings();
defaultCommands();
}

/**
Expand All @@ -42,15 +103,13 @@ public RobotContainer() {
* joysticks}.
*/
private void configureBindings() {
// Schedule `ExampleCommand` when `exampleCondition` changes to `true`
new Trigger(m_exampleSubsystem::exampleCondition)
.onTrue(new ExampleCommand(m_exampleSubsystem));

// Schedule `exampleMethodCommand` when the Xbox controller's B button is pressed,
// cancelling on release.
m_driverController.b().whileTrue(m_exampleSubsystem.exampleMethodCommand());
snapButton.whileTrue(new Snap(motors, encoders, gyroscope, stick));
ampShotButton.whileTrue(autoAmpShot);

}
private void defaultCommands(){
motors.setDefaultCommand(new Drive(motors,encoders,gyroscope,stick));
}

/**
* Use this to pass the autonomous command to the main {@link Robot} class.
*
Expand Down
Loading