Skip to content

Commit 8f50840

Browse files
authored
Merge pull request #1 from StuyPulse/ian
Initial Robot Implementation
2 parents 9a834d4 + fe7b1d7 commit 8f50840

34 files changed

+2458
-14
lines changed

.Glass/glass.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"NetworkTables Info": {
3+
"visible": true
4+
}
5+
}

networktables.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]

simgui-ds.json

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
{
2+
"keyboardJoysticks": [
3+
{
4+
"axisConfig": [
5+
{
6+
"decKey": 65,
7+
"incKey": 68
8+
},
9+
{
10+
"decKey": 87,
11+
"incKey": 83
12+
},
13+
{
14+
"decKey": 69,
15+
"decayRate": 0.0,
16+
"incKey": 82,
17+
"keyRate": 0.009999999776482582
18+
}
19+
],
20+
"axisCount": 3,
21+
"buttonCount": 4,
22+
"buttonKeys": [
23+
90,
24+
88,
25+
67,
26+
86
27+
],
28+
"povConfig": [
29+
{
30+
"key0": 328,
31+
"key135": 323,
32+
"key180": 322,
33+
"key225": 321,
34+
"key270": 324,
35+
"key315": 327,
36+
"key45": 329,
37+
"key90": 326
38+
}
39+
],
40+
"povCount": 1
41+
},
42+
{
43+
"axisConfig": [
44+
{
45+
"decKey": 74,
46+
"incKey": 76
47+
},
48+
{
49+
"decKey": 73,
50+
"incKey": 75
51+
}
52+
],
53+
"axisCount": 2,
54+
"buttonCount": 4,
55+
"buttonKeys": [
56+
77,
57+
44,
58+
46,
59+
47
60+
],
61+
"povCount": 0
62+
},
63+
{
64+
"axisConfig": [
65+
{
66+
"decKey": 263,
67+
"incKey": 262
68+
},
69+
{
70+
"decKey": 265,
71+
"incKey": 264
72+
}
73+
],
74+
"axisCount": 2,
75+
"buttonCount": 6,
76+
"buttonKeys": [
77+
260,
78+
268,
79+
266,
80+
261,
81+
269,
82+
267
83+
],
84+
"povCount": 0
85+
},
86+
{
87+
"axisCount": 0,
88+
"buttonCount": 0,
89+
"povCount": 0
90+
}
91+
],
92+
"robotJoysticks": [
93+
{
94+
"guid": "Keyboard0"
95+
}
96+
]
97+
}

simgui.json

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
{
2+
"NTProvider": {
3+
"types": {
4+
"/FMSInfo": "FMSInfo",
5+
"/SmartDashboard/Alerts": "Alerts",
6+
"/SmartDashboard/Autonomous": "String Chooser",
7+
"/SmartDashboard/Field": "Field2d"
8+
},
9+
"windows": {
10+
"/SmartDashboard/Field": {
11+
"bottom": 1476,
12+
"height": 8.210550308227539,
13+
"left": 150,
14+
"right": 2961,
15+
"top": 79,
16+
"width": 16.541748046875,
17+
"window": {
18+
"visible": true
19+
}
20+
}
21+
}
22+
},
23+
"NetworkTables": {
24+
"transitory": {
25+
"SmartDashboard": {
26+
"open": true,
27+
"testing": {
28+
"open": true
29+
}
30+
}
31+
}
32+
},
33+
"NetworkTables Info": {
34+
"visible": true
35+
}
36+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"field_size":{"x":17.548,"y":8.052},"nodeSizeMeters":0.3,"grid":[[true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],[true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],[true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true],[true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true],[true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true],[true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true],[true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true],[true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],[true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true]]}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{
2+
"robotWidth": 0.9,
3+
"robotLength": 0.9,
4+
"holonomicMode": true,
5+
"pathFolders": [],
6+
"autoFolders": [],
7+
"defaultMaxVel": 3.0,
8+
"defaultMaxAccel": 3.0,
9+
"defaultMaxAngVel": 540.0,
10+
"defaultMaxAngAccel": 720.0,
11+
"defaultNominalVoltage": 12.0,
12+
"robotMass": 74.088,
13+
"robotMOI": 6.0,
14+
"robotTrackwidth": 0.546,
15+
"driveWheelRadius": 0.048,
16+
"driveGearing": 5.143,
17+
"maxDriveSpeed": 5.45,
18+
"driveMotorType": "krakenX60",
19+
"driveCurrentLimit": 60.0,
20+
"wheelCOF": 1.2,
21+
"flModuleX": 0.273,
22+
"flModuleY": 0.273,
23+
"frModuleX": 0.273,
24+
"frModuleY": -0.273,
25+
"blModuleX": -0.273,
26+
"blModuleY": 0.273,
27+
"brModuleX": -0.273,
28+
"brModuleY": -0.273,
29+
"bumperOffsetX": 0.0,
30+
"bumperOffsetY": 0.0,
31+
"robotFeatures": []
32+
}

src/main/java/com/stuypulse/robot/Robot.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package com.stuypulse.robot;
77

8+
import edu.wpi.first.wpilibj.DriverStation;
89
import edu.wpi.first.wpilibj.TimedRobot;
910
import edu.wpi.first.wpilibj2.command.Command;
1011
import edu.wpi.first.wpilibj2.command.CommandScheduler;
@@ -14,6 +15,11 @@ public class Robot extends TimedRobot {
1415
private RobotContainer robot;
1516
private Command auto;
1617

18+
public static boolean isBlue() {
19+
return DriverStation.getAlliance().isPresent()
20+
&& DriverStation.getAlliance().get() == DriverStation.Alliance.Blue;
21+
}
22+
1723
/*************************/
1824
/*** ROBOT SCHEDULEING ***/
1925
/*************************/

src/main/java/com/stuypulse/robot/RobotContainer.java

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,29 @@
1-
/************************ PROJECT PHIL ************************/
2-
/* Copyright (c) 2024 StuyPulse Robotics. All rights reserved.*/
3-
/* This work is licensed under the terms of the MIT license. */
4-
/**************************************************************/
5-
61
package com.stuypulse.robot;
72

3+
import com.stuypulse.robot.commands.Test;
84
import com.stuypulse.robot.commands.auton.DoNothingAuton;
5+
import com.stuypulse.robot.commands.dropper.DropperDrop;
6+
import com.stuypulse.robot.commands.dropper.DropperStop;
7+
import com.stuypulse.robot.commands.swerve.SwerveDriveDrive;
8+
import com.stuypulse.robot.commands.swerve.SwervePIDToPose;
9+
import com.stuypulse.robot.commands.swerve.SwervePathFind;
10+
import com.stuypulse.robot.constants.Field;
911
import com.stuypulse.robot.constants.Ports;
12+
import com.stuypulse.robot.constants.Field.CoralBranch;
13+
import com.stuypulse.robot.subsystems.dropper.Dropper;
14+
import com.stuypulse.robot.subsystems.odometry.Odometry;
15+
import com.stuypulse.robot.subsystems.swerve.SwerveDrive;
16+
import com.stuypulse.robot.subsystems.vision.AprilTagVision;
1017
import com.stuypulse.stuylib.input.Gamepad;
1118
import com.stuypulse.stuylib.input.gamepads.AutoGamepad;
1219

20+
import edu.wpi.first.math.geometry.Pose2d;
21+
import edu.wpi.first.math.geometry.Rotation2d;
1322
import edu.wpi.first.wpilibj.smartdashboard.SendableChooser;
1423
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
1524
import edu.wpi.first.wpilibj2.command.Command;
25+
import edu.wpi.first.wpilibj2.command.RepeatCommand;
26+
import edu.wpi.first.wpilibj2.command.SequentialCommandGroup;
1627

1728
public class RobotContainer {
1829

@@ -21,13 +32,18 @@ public class RobotContainer {
2132
public final Gamepad operator = new AutoGamepad(Ports.Gamepad.OPERATOR);
2233

2334
// Subsystem
35+
public final SwerveDrive swerve = SwerveDrive.getInstance();
36+
public final Dropper dropper = Dropper.getInstance();
37+
public final AprilTagVision vision = AprilTagVision.getInstance();
38+
public final Odometry odometry = Odometry.getInstance();
2439

2540
// Autons
2641
private static SendableChooser<Command> autonChooser = new SendableChooser<>();
2742

2843
// Robot container
2944

3045
public RobotContainer() {
46+
swerve.configureAutoBuilder();
3147
configureDefaultCommands();
3248
configureButtonBindings();
3349
configureAutons();
@@ -37,13 +53,23 @@ public RobotContainer() {
3753
/*** DEFAULTS ***/
3854
/****************/
3955

40-
private void configureDefaultCommands() {}
56+
private void configureDefaultCommands() {
57+
// swerve.setDefaultCommand(new Test());
58+
swerve.setDefaultCommand(new SwerveDriveDrive(driver));
59+
}
4160

4261
/***************/
4362
/*** BUTTONS ***/
4463
/***************/
4564

46-
private void configureButtonBindings() {}
65+
private void configureButtonBindings() {
66+
driver.getRightTriggerButton()
67+
.onTrue(new DropperDrop())
68+
.onFalse(new DropperStop());
69+
70+
driver.getRightButton()
71+
.whileTrue(new SwervePIDToPose(() -> Field.getTargetPoseForCoralBranch(Field.getClosestBranch())));
72+
}
4773

4874
/**************/
4975
/*** AUTONS ***/
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.stuypulse.robot.commands;
2+
3+
import com.stuypulse.robot.commands.swerve.SwervePathFind;
4+
import com.stuypulse.robot.constants.Field;
5+
import com.stuypulse.robot.constants.Field.CoralBranch;
6+
7+
import edu.wpi.first.wpilibj2.command.SequentialCommandGroup;
8+
9+
public class Test extends SequentialCommandGroup{
10+
11+
public Test() {
12+
addCommands(
13+
SwervePathFind.toPose(Field.getTargetPoseForCoralBranch(CoralBranch.A)),
14+
SwervePathFind.toNearestCoralStation(),
15+
SwervePathFind.toPose(Field.getTargetPoseForCoralBranch(CoralBranch.B)),
16+
SwervePathFind.toNearestCoralStation(),
17+
SwervePathFind.toPose(Field.getTargetPoseForCoralBranch(CoralBranch.C)),
18+
SwervePathFind.toNearestCoralStation(),
19+
SwervePathFind.toPose(Field.getTargetPoseForCoralBranch(CoralBranch.D)),
20+
SwervePathFind.toNearestCoralStation(),
21+
SwervePathFind.toPose(Field.getTargetPoseForCoralBranch(CoralBranch.E)),
22+
SwervePathFind.toNearestCoralStation(),
23+
SwervePathFind.toPose(Field.getTargetPoseForCoralBranch(CoralBranch.F)),
24+
SwervePathFind.toNearestCoralStation(),
25+
SwervePathFind.toPose(Field.getTargetPoseForCoralBranch(CoralBranch.G)),
26+
SwervePathFind.toNearestCoralStation(),
27+
SwervePathFind.toPose(Field.getTargetPoseForCoralBranch(CoralBranch.H)),
28+
SwervePathFind.toNearestCoralStation(),
29+
SwervePathFind.toPose(Field.getTargetPoseForCoralBranch(CoralBranch.I)),
30+
SwervePathFind.toNearestCoralStation(),
31+
SwervePathFind.toPose(Field.getTargetPoseForCoralBranch(CoralBranch.J)),
32+
SwervePathFind.toNearestCoralStation(),
33+
SwervePathFind.toPose(Field.getTargetPoseForCoralBranch(CoralBranch.K)),
34+
SwervePathFind.toNearestCoralStation(),
35+
SwervePathFind.toPose(Field.getTargetPoseForCoralBranch(CoralBranch.L)),
36+
SwervePathFind.toNearestCoralStation()
37+
);
38+
}
39+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.stuypulse.robot.commands.dropper;
2+
3+
import com.stuypulse.robot.subsystems.dropper.Dropper;
4+
import com.stuypulse.robot.subsystems.dropper.Dropper.State;
5+
6+
import edu.wpi.first.wpilibj2.command.InstantCommand;
7+
8+
public class DropperDrop extends InstantCommand{
9+
10+
private Dropper dropper;
11+
12+
public DropperDrop() {
13+
this.dropper = Dropper.getInstance();
14+
}
15+
16+
@Override
17+
public void initialize() {
18+
dropper.setState(State.DROPPING);
19+
}
20+
}

0 commit comments

Comments
 (0)