Skip to content
This repository was archived by the owner on Aug 29, 2024. It is now read-only.
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
ethanharjabrata Jan 28, 2024
aa4aa0d
Test code
ethanharjabrata 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
ethanharjabrata Feb 2, 2024
2bcab8d
Code for the snap Command
ethanharjabrata Feb 4, 2024
b663fd7
New commit
ethanharjabrata Feb 5, 2024
bfa784f
This should work
ethanharjabrata Feb 5, 2024
696ec53
Sorry
ethanharjabrata Feb 5, 2024
27fa5df
new update to use the proper motors
ethanharjabrata Feb 7, 2024
159ddf7
change to the motor subsystem
ethanharjabrata 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…
ethanharjabrata Feb 7, 2024
b87c9b2
CAN IDs Assigned
personofalltime Feb 8, 2024
e88d3b1
Get encoders from SparkMAX; fix some naming conventions
WebCoder49 Feb 9, 2024
4b05379
Ignore this
ethanharjabrata Feb 12, 2024
3004eff
also ignore this
ethanharjabrata Feb 12, 2024
1f452fd
Fixing a logic error
ethanharjabrata Feb 15, 2024
d3b7ee7
Merge pull request #23 from brightonfrc/7-driver-controlled-swerve-drive
09lkei Feb 21, 2024
add4851
created the command template
ethanharjabrata Feb 28, 2024
25285c6
updated code
ethanharjabrata Feb 28, 2024
0df9145
updating the code to actually initialise the PID controller
ethanharjabrata Feb 29, 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
}
}
37 changes: 34 additions & 3 deletions src/main/java/frc/robot/Constants.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,47 @@

package frc.robot;



/**
* The Constants class provides a convenient place for teams to hold robot-wide numerical or boolean
* constants. This class should not be used for any other purpose. All constants should be declared
* The Constants class provides a convenient place for teams to hold robot-wide
* numerical or boolean
* constants. This class should not be used for any other purpose. All constants
* should be declared
* globally (i.e. public static). Do not put anything functional in this class.
*
* <p>It is advised to statically import this class (or one of its inner classes) wherever the
* <p>
* It is advised to statically import this class (or one of its inner classes)
* wherever the
* 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=100;
public static double movementPerRotation=400;
}

public static class OperatorConstants {
public static final int kDriverControllerPort = 0;
}

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;
}
}
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
68 changes: 56 additions & 12 deletions src/main/java/frc/robot/RobotContainer.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,27 @@

package frc.robot;

import frc.robot.Constants.OperatorConstants;
// 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.subsystems.ExampleSubsystem;
import frc.robot.subsystems.Encoders;
import frc.robot.subsystems.Motors;
import frc.robot.Constants.Ports;
import frc.robot.Constants.MotorConstants;
import frc.robot.Constants.OperatorConstants;
import frc.robot.subsystems.Gyroscope;
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.button.CommandXboxController;
import edu.wpi.first.wpilibj2.command.button.Trigger;
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 +35,46 @@
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 RelativeEncoder frontLeftMoveEncoder = frontLeftMove.getEncoder();
private final RelativeEncoder frontLeftTurnEncoder = frontLeftTurn.getEncoder();
private final RelativeEncoder frontRightMoveEncoder = frontRightMove.getEncoder();
private final RelativeEncoder frontRightTurnEncoder = frontRightTurn.getEncoder();
private final RelativeEncoder backLeftMoveEncoder = backLeftMove.getEncoder();
private final RelativeEncoder backLeftTurnEncoder = backLeftTurn.getEncoder();
private final RelativeEncoder backRightMoveEncoder = backRightMove.getEncoder();
private final RelativeEncoder backRightTurnEncoder = backRightTurn.getEncoder();
private final AHRS gyro = new AHRS(I2C.Port.kMXP);


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, 38.1, MotorConstants.distancePerRotation,MotorConstants.movementPerRotation);
private final Gyroscope gyroscope = new Gyroscope(gyro);
// remember to set the joystick port

private Joystick stick = new Joystick(OperatorConstants.kDriverControllerPort);
// this is the button on the handle of the joystick
private JoystickButton snapButton = new JoystickButton(stick, 1);


// Replace with CommandPS4Controller or CommandJoystick if needed
private final CommandXboxController m_driverController =
new CommandXboxController(OperatorConstants.kDriverControllerPort);

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

/**
Expand All @@ -42,15 +87,14 @@ 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));

}
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