Compare commits

..

66 Commits

Author SHA1 Message Date
samuel desharnais
41f6e4747f competiton 2026-04-11 08:16:06 -04:00
samuel desharnais
7908d4c5df Merge branch 'main' of https://git.demerso.net/sdesharnais/Rebuilt-2026 2026-04-07 19:53:33 -04:00
samuel desharnais
2263961829 led 2026-04-07 19:53:00 -04:00
Antoine PerreaultE
27ea9d96e3 grimpe 2026-04-07 19:51:41 -04:00
Antoine PerreaultE
01edf1cb01 Merge branch 'main' of https://git.demerso.net/sdesharnais/Rebuilt-2026 2026-04-07 18:06:45 -04:00
Antoine PerreaultE
0b4c0e09ff oui 2026-04-07 18:06:11 -04:00
samuel desharnais
6c86b2ed5c grimpe mode auto 2026-04-02 20:34:53 -04:00
samuel desharnais
6885b80d6a Merge branch 'main' of https://git.demerso.net/sdesharnais/Rebuilt-2026 2026-04-02 17:13:57 -04:00
samuel desharnais
2472c67adf limelight 2026-04-02 17:13:54 -04:00
Antoine PerreaultE
c8d0ee3a03 grimpe en auto 2026-04-01 19:58:45 -04:00
Antoine PerreaultE
3300d74a78 grimpe autre cote auto 2026-04-01 19:58:05 -04:00
Antoine PerreaultE
bdffb48ece led 2026-04-01 19:35:55 -04:00
Antoine PerreaultE
5f44d5304a mode autonise mieux 2026-04-01 19:35:31 -04:00
Antoine PerreaultE
9aa7018812 inverse mieux 2026-04-01 19:29:34 -04:00
Antoine PerreaultE
d98dc4e467 Merge branch 'main' of https://git.demerso.net/sdesharnais/Rebuilt-2026 2026-04-01 19:27:14 -04:00
Antoine PerreaultE
b0ad34519e mode auto 2026-04-01 19:27:12 -04:00
samuel desharnais
7b734cc046 Merge branch 'main' of https://git.demerso.net/sdesharnais/Rebuilt-2026 2026-04-01 19:13:26 -04:00
samuel desharnais
cdca0230a4 bouge mieux 2026-04-01 19:13:25 -04:00
Antoine PerreaultE
56b28100df weq 2026-04-01 19:11:30 -04:00
Antoine PerreaultE
db935eceda regle crach 2026-04-01 19:11:09 -04:00
Antoine PerreaultE
da28ff48db position qui change 2026-04-01 18:43:24 -04:00
Antoine PerreaultE
5b6e3ac7b2 led 2026-04-01 18:38:30 -04:00
Antoine PerreaultE
9585c17bdb Merge branch 'main' of https://git.demerso.net/sdesharnais/Rebuilt-2026 2026-04-01 18:23:51 -04:00
Antoine PerreaultE
07eeaffa32 led mieux écrit 2026-04-01 18:22:02 -04:00
samuel desharnais
8202b012cb led 2026-04-01 18:20:55 -04:00
Samuel
e5f7b05063 enlever rainbowAnim 2026-04-01 13:14:26 -04:00
Samuel
5916f4f141 led 2026-04-01 13:13:18 -04:00
4438560698 bf 2026-04-01 05:21:41 +02:00
b2d4647e41 gt 2026-04-01 04:48:34 +02:00
75922f581c Merge branch 'main' of https://git.demerso.net/sdesharnais/Rebuilt-2026 2026-04-01 04:48:25 +02:00
a429b936d2 limelight 2026-04-01 04:40:40 +02:00
samuel desharnais
3b06cbd447 led 2026-03-31 20:29:45 -04:00
Antoine PerreaultE
7b535a845f grimpe en rouge aussi 2026-03-31 19:59:15 -04:00
samuel desharnais
42e35fca8a Merge branch 'main' of https://git.demerso.net/sdesharnais/Rebuilt-2026 2026-03-31 19:53:27 -04:00
samuel desharnais
272f89962a mode marche yesssssssss 2026-03-31 19:53:25 -04:00
Antoine PerreaultE
52c72e9a61 inverser 2026-03-31 19:52:24 -04:00
Antoine PerreaultE
4d1b353e25 limelighter coriger 2026-03-31 19:20:34 -04:00
samuel desharnais
9d09af20b0 vfdrty 2026-03-31 19:11:09 -04:00
samuel desharnais
ae9a6bd046 Merge branch 'main' of https://git.demerso.net/sdesharnais/Rebuilt-2026 2026-03-31 17:54:41 -04:00
samuel desharnais
10b0110315 mode auto 2026-03-31 17:53:41 -04:00
098f16665a limelight pls marche 2026-03-31 05:19:16 +02:00
1240160ed7 Merge branch 'main' of https://git.demerso.net/sdesharnais/Rebuilt-2026 2026-03-31 03:31:20 +02:00
4068016d36 get alliance -> dans initialise 2026-03-31 03:31:15 +02:00
Antoine PerreaultE
6afc342006 limelight 2026-03-30 17:53:54 -04:00
f7e88619e9 limelight 2026-03-30 05:04:22 +02:00
5c626f33e3 test 2026-03-29 23:30:52 +02:00
samuel desharnais
673a7fcb82 vgft 2026-03-28 20:50:33 -04:00
samuel desharnais
755d79aa18 oui 2026-03-28 16:01:40 -04:00
samuel desharnais
799e3e34c3 m 2026-03-28 15:53:53 -04:00
samuel desharnais
fbd94fc33d Merge branch 'main' of https://git.demerso.net/sdesharnais/Rebuilt-2026 2026-03-28 14:42:07 -04:00
samuel desharnais
9e3bd6e7d3 bngvthf 2026-03-28 14:41:49 -04:00
Antoine PerreaultE
bd853dfc79 lanceur 2026-03-28 14:35:18 -04:00
Antoine PerreaultE
cb3104152c voltage et allaince 2026-03-28 13:51:22 -04:00
Antoine PerreaultE
85da1dcad1 Merge branch 'main' of https://git.demerso.net/sdesharnais/Rebuilt-2026 2026-03-28 13:21:35 -04:00
Antoine PerreaultE
a92a7a0ea1 pigeon 2026-03-28 13:21:30 -04:00
samuel desharnais
ba57959f4d debug samedi 2026-03-28 13:20:52 -04:00
samuel desharnais
79568a58b9 debug de jeudi 2026-03-28 09:16:33 -04:00
samuel desharnais
57fa3597e2 debug de jeudi 2026-03-28 09:16:22 -04:00
Antoine PerreaultE
5ba5cce953 Merge branch 'main' of https://git.demerso.net/sdesharnais/Rebuilt-2026 2026-03-26 17:49:01 -04:00
Antoine PerreaultE
d0c50cbd6e mode auto pls marche pls 2026-03-26 17:46:22 -04:00
samuel desharnais
0492c9a2c6 mettre en 2026 2026-03-26 17:45:25 -04:00
Antoine PerreaultE
69fe4a58d0 e 2026-03-25 18:26:48 -04:00
Antoine PerreaultE
92b876e7b0 angle 2026-03-25 18:09:31 -04:00
Antoine PerreaultE
22746ab8ca tourner a zero/180 regle 2026-03-24 20:28:03 -04:00
Antoine PerreaultE
70b796e99a Merge branch 'main' of https://git.demerso.net/sdesharnais/Rebuilt-2026 2026-03-24 20:20:05 -04:00
Antoine PerreaultE
083288d3fc oui 2026-03-24 20:20:02 -04:00
53 changed files with 1659 additions and 871 deletions

View File

@@ -56,5 +56,6 @@
"edu.wpi.first.math.proto.*",
"edu.wpi.first.math.**.proto.*",
"edu.wpi.first.math.**.struct.*",
]
],
"java.dependency.enableDependencyCheckup": false
}

View File

@@ -1,6 +1,6 @@
{
"enableCppIntellisense": false,
"currentLanguage": "java",
"projectYear": "2025",
"projectYear": "2026",
"teamNumber": 5618
}

View File

@@ -1,4 +1,4 @@
Copyright (c) 2009-2024 FIRST and other WPILib contributors
Copyright (c) 2009-2026 FIRST and other WPILib contributors
All rights reserved.
Redistribution and use in source and binary forms, with or without

View File

@@ -1,6 +1,6 @@
plugins {
id "java"
id "edu.wpi.first.GradleRIO" version "2025.3.2"
id "edu.wpi.first.GradleRIO" version "2026.2.1"
}
java {
@@ -43,7 +43,8 @@ deploy {
def deployArtifact = deploy.targets.roborio.artifacts.frcJava
// Set to true to use debug for JNI.
// Set to true to use debug for all targets including JNI, which will drastically impact
// performance.
wpi.java.debugJni = false
// Set this to true to enable desktop support.
@@ -88,7 +89,9 @@ wpi.sim.addDriverstation()
// knows where to look for our Robot Class.
jar {
from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
from sourceSets.main.allSource
from('src') { into 'backup/src' }
from('vendordeps') { into 'backup/vendordeps' }
from('build.gradle') { into 'backup' }
manifest edu.wpi.first.gradlerio.GradleRIOPlugin.javaManifest(ROBOT_MAIN_CLASS)
duplicatesStrategy = DuplicatesStrategy.INCLUDE
}

View File

@@ -4,7 +4,7 @@ pluginManagement {
repositories {
mavenLocal()
gradlePluginPortal()
String frcYear = '2025'
String frcYear = '2026'
File frcHome
if (OperatingSystem.current().isWindows()) {
String publicFolder = System.getenv('PUBLIC')

View File

@@ -1,4 +1,9 @@
{
"System Joysticks": {
"window": {
"enabled": false
}
},
"keyboardJoysticks": [
{
"axisConfig": [

View File

@@ -14,6 +14,12 @@
"type": "deadline",
"data": {
"commands": [
{
"type": "wait",
"data": {
"waitTime": 3.0
}
},
{
"type": "path",
"data": {
@@ -36,11 +42,9 @@
}
},
{
"type": "named",
"type": "deadline",
"data": {
"name": "Limelighter"
}
},
"commands": [
{
"type": "named",
"data": {
@@ -50,7 +54,10 @@
{
"type": "named",
"data": {
"name": "TournerAZero"
"name": "Aspirer"
}
}
]
}
},
{
@@ -72,9 +79,9 @@
}
},
{
"type": "path",
"type": "named",
"data": {
"pathName": "MonterReservoir"
"name": "gauche"
}
},
{

View File

@@ -35,12 +35,6 @@
"pathName": "Tir"
}
},
{
"type": "named",
"data": {
"name": "Limelighter"
}
},
{
"type": "named",
"data": {

View File

@@ -14,6 +14,12 @@
"type": "deadline",
"data": {
"commands": [
{
"type": "wait",
"data": {
"waitTime": 3.0
}
},
{
"type": "path",
"data": {
@@ -36,11 +42,9 @@
}
},
{
"type": "named",
"type": "deadline",
"data": {
"name": "Limelighter"
}
},
"commands": [
{
"type": "named",
"data": {
@@ -50,7 +54,10 @@
{
"type": "named",
"data": {
"name": "TournerA180"
"name": "Aspirer"
}
}
]
}
},
{
@@ -72,9 +79,9 @@
}
},
{
"type": "path",
"type": "named",
"data": {
"pathName": "MonterMur"
"name": "droite"
}
},
{

View File

@@ -1,37 +0,0 @@
{
"version": "2025.0",
"command": {
"type": "sequential",
"data": {
"commands": [
{
"type": "path",
"data": {
"pathName": "TirerSimple"
}
},
{
"type": "named",
"data": {
"name": "DescendreBalayeuse"
}
},
{
"type": "named",
"data": {
"name": "Limelighter"
}
},
{
"type": "named",
"data": {
"name": "Lancer"
}
}
]
}
},
"resetOdom": true,
"folder": null,
"choreoAuto": false
}

View File

@@ -0,0 +1,68 @@
{
"version": "2025.0",
"command": {
"type": "sequential",
"data": {
"commands": [
{
"type": "path",
"data": {
"pathName": "tirgrimpe1"
}
},
{
"type": "named",
"data": {
"name": "DescendreBalayeuse"
}
},
{
"type": "deadline",
"data": {
"commands": [
{
"type": "named",
"data": {
"name": "Lancer"
}
},
{
"type": "named",
"data": {
"name": "Aspirer"
}
}
]
}
},
{
"type": "named",
"data": {
"name": "GrimperReservoir"
}
},
{
"type": "named",
"data": {
"name": "MonterGrimpeur"
}
},
{
"type": "named",
"data": {
"name": "gauche"
}
},
{
"type": "named",
"data": {
"name": "DescendreGrimpeur"
}
}
]
}
},
"resetOdom": true,
"folder": null,
"choreoAuto": false
}

View File

@@ -3,12 +3,12 @@
"waypoints": [
{
"anchor": {
"x": 3.5732667617689007,
"x": 3.6120827389443653,
"y": 5.917574893009986
},
"prevControl": null,
"nextControl": {
"x": 2.266462196861626,
"x": 2.3052781740370905,
"y": 5.904636233951498
},
"isLocked": false,
@@ -16,11 +16,11 @@
},
{
"anchor": {
"x": 1.1796148359486442,
"x": 0.23509272467902986,
"y": 5.917574893009986
},
"prevControl": {
"x": 1.7230385164051354,
"x": 0.778516405135521,
"y": 5.930513552068473
},
"nextControl": null,

View File

@@ -3,25 +3,25 @@
"waypoints": [
{
"anchor": {
"x": 2.4476034236804565,
"y": 4.85660485021398
"x": 1.878,
"y": 5.154
},
"prevControl": null,
"nextControl": {
"x": 1.6971611982881591,
"y": 4.85660485021398
"x": 1.1275577746077026,
"y": 5.154
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 1.0761055634807417,
"y": 4.85660485021398
"x": 1.0372895863052778,
"y": 5.011868758915835
},
"prevControl": {
"x": 1.503081312410841,
"y": 4.869543509272469
"x": 1.4642653352353772,
"y": 5.024807417974324
},
"nextControl": null,
"isLocked": false,

View File

@@ -3,25 +3,25 @@
"waypoints": [
{
"anchor": {
"x": 2.4476034236804565,
"y": 4.85660485021398
"x": 1.878,
"y": 5.154
},
"prevControl": null,
"nextControl": {
"x": 2.3958487874465044,
"y": 2.695848787446506
"x": 1.8262453637660478,
"y": 2.993243937232526
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 1.0502282453637657,
"y": 2.4758915834522113
"x": 2.0076890156918683,
"y": 2.2041797432239663
},
"prevControl": {
"x": 2.292339514978602,
"y": 2.3982596291012843
"x": 3.2498002853067054,
"y": 2.1265477888730393
},
"nextControl": null,
"isLocked": false,
@@ -42,7 +42,7 @@
},
"goalEndState": {
"velocity": 0,
"rotation": 0.0
"rotation": 32.10625595511781
},
"reversed": false,
"folder": null,

View File

@@ -3,25 +3,25 @@
"waypoints": [
{
"anchor": {
"x": 1.0502282453637657,
"y": 2.4758915834522113
"x": 1.0,
"y": 2.6
},
"prevControl": null,
"nextControl": {
"x": 1.0408884389937225,
"y": 2.742159765250622
"x": 0.9906601936299568,
"y": 2.866268181798411
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 1.0502282453637657,
"y": 2.7734807417974334
"x": 1.0,
"y": 2.9
},
"prevControl": {
"x": 1.0547546338516156,
"y": 2.523521721541598
"x": 1.00452638848785,
"y": 2.6500409797441646
},
"nextControl": null,
"isLocked": false,

View File

@@ -3,12 +3,12 @@
"waypoints": [
{
"anchor": {
"x": 1.1796148359486442,
"x": 0.29978601997146925,
"y": 5.917574893009986
},
"prevControl": null,
"nextControl": {
"x": 2.3570328102710407,
"x": 1.4772039942938657,
"y": 5.982268188302426
},
"isLocked": false,
@@ -16,12 +16,12 @@
},
{
"anchor": {
"x": 2.4476034236804565,
"y": 4.85660485021398
"x": 1.8783024251069897,
"y": 5.154194008559203
},
"prevControl": {
"x": 2.382910128388017,
"y": 5.400028530670471
"x": 1.8136091298145502,
"y": 5.6976176890156935
},
"nextControl": null,
"isLocked": false,
@@ -30,7 +30,7 @@
],
"rotationTargets": [
{
"waypointRelativePos": 0.2179128348660559,
"waypointRelativePos": 0.3240938166311289,
"rotationDegrees": 180.0
}
],

View File

@@ -3,12 +3,12 @@
"waypoints": [
{
"anchor": {
"x": 3.5473894436519258,
"x": 3.602,
"y": 4.015592011412268
},
"prevControl": null,
"nextControl": {
"x": 2.494897544356074,
"x": 2.549508100704148,
"y": 4.011425161481168
},
"isLocked": false,
@@ -16,12 +16,12 @@
},
{
"anchor": {
"x": 1.7359771754636228,
"x": 1.643730569948188,
"y": 4.015592011412268
},
"prevControl": {
"x": 2.627549770741877,
"y": 4.02839075681212
"x": 2.5679620034542325,
"y": 4.011502590673576
},
"nextControl": null,
"isLocked": false,
@@ -33,7 +33,7 @@
"pointTowardsZones": [],
"eventMarkers": [],
"globalConstraints": {
"maxVelocity": 3.0,
"maxVelocity": 5.0,
"maxAcceleration": 3.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0,
@@ -50,5 +50,5 @@
"velocity": 0,
"rotation": 0.0
},
"useDefaultConstraints": true
"useDefaultConstraints": false
}

View File

@@ -0,0 +1,54 @@
{
"version": "2025.0",
"waypoints": [
{
"anchor": {
"x": 3.5991440798858774,
"y": 2.3465049928673327
},
"prevControl": null,
"nextControl": {
"x": 2.589928673323822,
"y": 1.7513266761768898
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 1.8783024251069897,
"y": 2.3465049928673327
},
"prevControl": {
"x": 2.706376604850214,
"y": 1.7125106990014274
},
"nextControl": null,
"isLocked": false,
"linkedName": null
}
],
"rotationTargets": [],
"constraintZones": [],
"pointTowardsZones": [],
"eventMarkers": [],
"globalConstraints": {
"maxVelocity": 3.0,
"maxAcceleration": 3.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0,
"nominalVoltage": 12.0,
"unlimited": false
},
"goalEndState": {
"velocity": 0,
"rotation": 33.11134196037204
},
"reversed": false,
"folder": null,
"idealStartingState": {
"velocity": 0,
"rotation": 180.0
},
"useDefaultConstraints": true
}

View File

@@ -16,11 +16,11 @@
"robotMass": 51.673,
"robotMOI": 6.883,
"robotTrackwidth": 0.546,
"driveWheelRadius": 0.048,
"driveGearing": 5.143,
"maxDriveSpeed": 5.374,
"driveWheelRadius": 0.051,
"driveGearing": 6.2,
"maxDriveSpeed": 9.82,
"driveMotorType": "krakenX60",
"driveCurrentLimit": 60.0,
"driveCurrentLimit": 120.0,
"wheelCOF": 1.2,
"flModuleX": 0.288925,
"flModuleY": 0.269875,

View File

@@ -8,7 +8,6 @@ import edu.wpi.first.math.util.Units;
import edu.wpi.first.wpilibj.TimedRobot;
import edu.wpi.first.wpilibj2.command.Command;
import edu.wpi.first.wpilibj2.command.CommandScheduler;
import frc.robot.subsystems.Limelight3G;
public class Robot extends TimedRobot {
private Command m_autonomousCommand;

View File

@@ -17,11 +17,11 @@ import edu.wpi.first.wpilibj.smartdashboard.SendableChooser;
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
import edu.wpi.first.wpilibj2.command.Command;
import edu.wpi.first.wpilibj2.command.button.CommandXboxController;
import edu.wpi.first.wpilibj2.command.sysid.SysIdRoutine;
import frc.robot.commands.Aspirer;
import frc.robot.commands.DescendreBalyeuse;
import frc.robot.commands.DescendreGrimpeur;
import frc.robot.commands.DistanceLancer;
import frc.robot.commands.DescendreGrimpeurPlus;
import frc.robot.commands.Inverser;
import frc.robot.commands.Lancer;
import frc.robot.commands.LancerAspirer;
import frc.robot.commands.LancerBaseVitesse;
@@ -32,18 +32,22 @@ import frc.robot.commands.ModeOposerDemeleur;
import frc.robot.commands.MonterBalyeuse;
import frc.robot.commands.MonterGrimpeur;
import frc.robot.commands.ModeAuto.AspirerAuto;
import frc.robot.commands.ModeAuto.BougerDroiteAuto;
import frc.robot.commands.ModeAuto.BougerGaucheAuto;
import frc.robot.commands.ModeAuto.GrimperMur;
import frc.robot.commands.ModeAuto.GrimperReservoir;
import frc.robot.commands.ModeAuto.LancerAuto;
import frc.robot.commands.ModeAuto.LimelighterAuto;
import frc.robot.commands.ModeAuto.RetourMilieuDroite;
import frc.robot.commands.ModeAuto.RetourMilieuGauche;
import frc.robot.commands.ModeAuto.TournerVersMur;
import frc.robot.commands.ModeAuto.TournerVersReservoir;
import frc.robot.generated.TunerConstants;
import frc.robot.subsystems.Balayeuse;
import frc.robot.subsystems.CommandSwerveDrivetrain;
import frc.robot.subsystems.Grimpeur;
//import frc.robot.subsystems.LEDSubsystem;
import frc.robot.subsystems.Lanceur;
import frc.robot.subsystems.Led;
import frc.robot.subsystems.LimeLight3;
import frc.robot.subsystems.Limelight3G;
@@ -54,7 +58,7 @@ public class RobotContainer {
Lanceur lanceur = new Lanceur();
LimeLight3 limeLight3 = new LimeLight3();
Limelight3G limeLight3G = new Limelight3G();
Led led = new Led();
//LEDSubsystem ledSubsystem = new LEDSubsystem();
CommandXboxController manette = new CommandXboxController(0);
CommandXboxController manette1 = new CommandXboxController(1);
private double MaxSpeed = TunerConstants.kSpeedAt12Volts.in(MetersPerSecond); // kSpeedAt12Volts desired top speed
@@ -64,24 +68,23 @@ public class RobotContainer {
private final SwerveRequest.FieldCentric drive = new SwerveRequest.FieldCentric()
.withDeadband(MaxSpeed * 0.1).withRotationalDeadband(MaxAngularRate * 0.1) // Add a 10% deadband
.withDriveRequestType(DriveRequestType.OpenLoopVoltage); // Use open-loop control for drive motors
private final SwerveRequest.SwerveDriveBrake brake = new SwerveRequest.SwerveDriveBrake();
private final SwerveRequest.PointWheelsAt point = new SwerveRequest.PointWheelsAt();
private final Telemetry logger = new Telemetry(MaxSpeed);
public final CommandSwerveDrivetrain drivetrain = TunerConstants.createDrivetrain();
public RobotContainer() {
NamedCommands.registerCommand("droite", new BougerDroiteAuto(drivetrain));
NamedCommands.registerCommand("gauche", new BougerGaucheAuto(drivetrain));
NamedCommands.registerCommand("GrimperMur", new GrimperMur(limeLight3,drivetrain));
NamedCommands.registerCommand("GrimperReservoir", new GrimperReservoir(limeLight3G,drivetrain));
NamedCommands.registerCommand("Lancer", new LancerAuto(lanceur, limeLight3G));
NamedCommands.registerCommand("RetourMilieuDroite", new RetourMilieuDroite());
NamedCommands.registerCommand("RetourMilieuGauche", new RetourMilieuGauche());
NamedCommands.registerCommand("Limelighter", new Limelighter(limeLight3G,drivetrain));
NamedCommands.registerCommand("RetourMilieuDroite", new RetourMilieuDroite(drivetrain,limeLight3G));
NamedCommands.registerCommand("RetourMilieuGauche", new RetourMilieuGauche(drivetrain, limeLight3G));
NamedCommands.registerCommand("Limelighter", new LimelighterAuto(limeLight3G,drivetrain));
NamedCommands.registerCommand("DescendreBalayeuse", new DescendreBalyeuse(balayeuse));
NamedCommands.registerCommand("Aspirer", new AspirerAuto(balayeuse));
NamedCommands.registerCommand("TournerA180", new TournerVersMur(drivetrain));
NamedCommands.registerCommand("TournerA180", new TournerVersReservoir(drivetrain));
NamedCommands.registerCommand("TournerAZero", new TournerVersMur(drivetrain));
NamedCommands.registerCommand("MonterGrimpeur", new MonterGrimpeur(grimpeur));
NamedCommands.registerCommand("DescendreGrimpeur", new DescendreGrimpeur(grimpeur));
autoChooser = AutoBuilder.buildAutoChooser();
@@ -93,12 +96,12 @@ public class RobotContainer {
}
private void configureBindings() {
led.setDefaultCommand(new DistanceLancer(limeLight3G, led));
//ledSubsystem.setDefaultCommand(ledSubsystem.updateLEDs());
drivetrain.setDefaultCommand(
drivetrain.applyRequest(() ->
drive.withVelocityY(MathUtil.applyDeadband(-manette.getLeftX()*Math.abs(-manette.getLeftX())*MaxSpeed, 0.05))
.withVelocityX(MathUtil.applyDeadband(-manette.getLeftY()*Math.abs(-manette.getLeftY())*MaxSpeed, 0.05))
.withRotationalRate(MathUtil.applyDeadband(-manette.getRightX()*Math.abs(-manette.getRightX())*MaxAngularRate, 0.05))
drive.withVelocityY(MathUtil.applyDeadband(-manette.getLeftX()*Math.abs(-manette.getLeftX())*MaxSpeed*0.7, 0.05))
.withVelocityX(MathUtil.applyDeadband(-manette.getLeftY()*Math.abs(-manette.getLeftY())*MaxSpeed*0.7, 0.05))
.withRotationalRate(MathUtil.applyDeadband(-manette.getRightX()*Math.abs(-manette.getRightX())*MaxAngularRate*1.5, 0.05))
)
);
//manette 1
@@ -108,7 +111,7 @@ public class RobotContainer {
// manette1.povLeft().whileTrue(drivetrain.sysIdDynamic(SysIdRoutine.Direction.kReverse));
manette.povUp().whileTrue(new MonterGrimpeur(grimpeur));
manette.povDown().whileTrue(new DescendreGrimpeur(grimpeur));
manette.povDown().whileTrue(new DescendreGrimpeurPlus(grimpeur));
manette.rightTrigger().whileTrue(new Lancer(lanceur, limeLight3G));
manette.leftTrigger().whileTrue(new Limelighter(limeLight3G, drivetrain));
manette.leftBumper().whileTrue(new DescendreBalyeuse(balayeuse));
@@ -120,12 +123,16 @@ public class RobotContainer {
//manette 2
manette1.rightTrigger().whileTrue(new Aspirer(balayeuse));
manette1.rightBumper().whileTrue(new MonterBalyeuse(balayeuse));
manette1.leftTrigger().whileTrue(new LancerBaseVitesse(lanceur, limeLight3G));
manette1.leftTrigger().whileTrue(new LancerBaseVitesse(lanceur));
manette1.leftBumper().whileTrue(new DescendreBalyeuse(balayeuse));
manette1.x().whileTrue(new LancerAspirer(lanceur, balayeuse, limeLight3G));
manette1.b().whileTrue(new ModeOposer(lanceur));
manette1.a().whileTrue(new ModeOposerDemeleur(lanceur));
manette1.y().whileTrue(new ModeOposerBalayeuse(balayeuse));
manette1.povRight().whileTrue(new BougerDroiteAuto(drivetrain));
manette1.povLeft().whileTrue(new BougerGaucheAuto(drivetrain));
manette1.povDown().whileTrue(new DescendreGrimpeur(grimpeur));
manette1.start().whileTrue(new Inverser(drivetrain));
}
public Command getAutonomousCommand() {

View File

@@ -4,10 +4,8 @@
package frc.robot.commands;
import edu.wpi.first.wpilibj.Timer;
import edu.wpi.first.wpilibj2.command.Command;
import frc.robot.subsystems.Balayeuse;
import frc.robot.subsystems.Led;
/* You should consider using the more terse Command factories API instead https://docs.wpilib.org/en/stable/docs/software/commandbased/organizing-command-based.html#defining-commands */
public class Aspirer extends Command {

View File

@@ -13,6 +13,7 @@ public class DescendreGrimpeur extends Command {
/** Creates a new DescendreGrimpeur. */
public DescendreGrimpeur(Grimpeur grimpeur) {
this.grimpeur = grimpeur;
addRequirements(grimpeur);
// Use addRequirements() here to declare subsystem dependencies.
}
@@ -24,18 +25,21 @@ public class DescendreGrimpeur extends Command {
@Override
public void execute() {
if(!grimpeur.Limit()){
grimpeur.Grimper(-0.4);
grimpeur.GrimperGauche(-0.4);
grimpeur.GrimperDroit(-0.4);
}
else{
grimpeur.Reset();
grimpeur.Grimper(0);
grimpeur.GrimperGauche(0);
grimpeur.GrimperDroit(0);
}
}
// Called once the command ends or is interrupted.
@Override
public void end(boolean interrupted) {
grimpeur.Grimper(0);
grimpeur.GrimperGauche(0);
grimpeur.GrimperDroit(0);
}
// Returns true when the command should end.

View File

@@ -5,18 +5,15 @@
package frc.robot.commands;
import edu.wpi.first.wpilibj2.command.Command;
import frc.robot.subsystems.Led;
import frc.robot.subsystems.Limelight3G;
import frc.robot.subsystems.Grimpeur;
/* You should consider using the more terse Command factories API instead https://docs.wpilib.org/en/stable/docs/software/commandbased/organizing-command-based.html#defining-commands */
public class DistanceLancer extends Command {
private Led led;
private Limelight3G limelight3g;
/** Creates a new DitanceLancer. */
public DistanceLancer(Limelight3G limelight3g, Led led) {
this.led = led;
this.limelight3g = limelight3g;
addRequirements(led,limelight3g);
public class DescendreGrimpeurPlus extends Command {
private Grimpeur grimpeur;
/** Creates a new DescendreGrimpeur. */
public DescendreGrimpeurPlus(Grimpeur grimpeur) {
this.grimpeur = grimpeur;
addRequirements(grimpeur);
// Use addRequirements() here to declare subsystem dependencies.
}
@@ -27,30 +24,22 @@ public class DistanceLancer extends Command {
// Called every time the scheduler runs while the command is scheduled.
@Override
public void execute() {
double botx = 0;
double boty = 0;
double[] BotPose = new double[6];
double distance = 0;
if(limelight3g.getV()){
BotPose = limelight3g.getBotPoseBlue();
botx = BotPose[0];
boty = BotPose[1];
}
if(limelight3g.getV()){
distance = Math.sqrt(Math.pow(Math.abs(4.625594-botx), 2) + Math.pow(Math.abs(4.034536-boty), 2));
}
if(distance > 1.7){
led.Jaune2();
if(!grimpeur.Limit()){
grimpeur.GrimperGauche(-0.4);
grimpeur.GrimperDroit(-0.4);
}
else{
grimpeur.Reset();
grimpeur.GrimperGauche(0);
grimpeur.GrimperDroit(0);
}
}
// Called once the command ends or is interrupted.
@Override
public void end(boolean interrupted) {
grimpeur.GrimperGauche(0);
grimpeur.GrimperDroit(0);
}
// Returns true when the command should end.

View File

@@ -5,33 +5,33 @@
package frc.robot.commands;
import edu.wpi.first.wpilibj2.command.Command;
import frc.robot.subsystems.Led;
import frc.robot.subsystems.CommandSwerveDrivetrain;
/* You should consider using the more terse Command factories API instead https://docs.wpilib.org/en/stable/docs/software/commandbased/organizing-command-based.html#defining-commands */
public class RainBowAnim extends Command {
private Led led;
/** Creates a new RainBowAnim. */
public RainBowAnim(Led led) {
this.led = led;
addRequirements(led);
public class Inverser extends Command {
CommandSwerveDrivetrain drivetrain;
boolean inverse = false;
/** Creates a new Inverser. */
public Inverser(CommandSwerveDrivetrain drivetrain) {
this.drivetrain = drivetrain;
addRequirements(drivetrain);
// Use addRequirements() here to declare subsystem dependencies.
}
// Called when the command is initially scheduled.
@Override
public void initialize() {
led.RainBow();
drivetrain.getPigeon2().setYaw(drivetrain.getPigeon2().getYaw().getValueAsDouble()+180);
}
// Called every time the scheduler runs while the command is scheduled.
@Override
public void execute() {}
public void execute() {
}
// Called once the command ends or is interrupted.
@Override
public void end(boolean interrupted) {
led.RainBowStop();
}
public void end(boolean interrupted) {}
// Returns true when the command should end.
@Override

View File

@@ -4,12 +4,14 @@
package frc.robot.commands;
import java.util.Optional;
import edu.wpi.first.math.controller.PIDController;
import edu.wpi.first.wpilibj.DriverStation;
import edu.wpi.first.wpilibj.DriverStation.Alliance;
import edu.wpi.first.wpilibj.Timer;
import edu.wpi.first.wpilibj2.command.Command;
import frc.robot.subsystems.Balayeuse;
import frc.robot.subsystems.Lanceur;
import frc.robot.subsystems.Led;
import frc.robot.subsystems.Limelight3G;
/* You should consider using the more terse Command factories API instead https://docs.wpilib.org/en/stable/docs/software/commandbased/organizing-command-based.html#defining-commands */
@@ -18,52 +20,64 @@ public class Lancer extends Command {
private PIDController pidController;
private Limelight3G limeLight3G;
private Timer timer;
private double temp;
double vitesse = 0;
double botx = 0;
double boty = 0;
Optional<Alliance> alliance = DriverStation.getAlliance();
/** Creates a new Lancer. */
public Lancer(Lanceur lanceur, Limelight3G limeLight3G) {
this.lanceur = lanceur;
this.timer = new Timer();
this.limeLight3G = new Limelight3G();
this.limeLight3G = limeLight3G;
addRequirements(lanceur, limeLight3G);
this.temp = 0;
// Use addRequirements() here to declare subsystem dependencies.
}
// Called when the command is initially scheduled.
@Override
public void initialize() {
if(limeLight3G.getV()){}
pidController = new PIDController(0.0007, 0,0, 0.001);
timer.reset();
temp = lanceur.Amp();
alliance = DriverStation.getAlliance();
}
// Called every time the scheduler runs while the command is scheduled.
@Override
public void execute() {
double botx = 0;
double boty = 0;
double[] BotPose = new double[6];
if(limeLight3G.getV()){
if(!alliance.isPresent()){
return;
}
if(alliance.get() == Alliance.Blue){
BotPose = limeLight3G.getBotPoseBlue();
}
else{
BotPose = limeLight3G.getBotPoseRed();
}
botx = BotPose[0];
boty = BotPose[1];
}
double vitesse = 0.5;
if(limeLight3G.getV()){
vitesse = 410.57 * ((Math.sqrt(Math.pow(Math.abs(4.625594-botx), 2) + Math.pow(Math.abs(4.034536-boty), 2)))) + 2250;
System.out.println(vitesse);
}
// if(limeLight3G.getV()){
if(vitesse > 2000){
double output = pidController.calculate(lanceur.Vitesse(),vitesse);
lanceur.Lancer(output);
System.out.println(output);
if(lanceur.Vitesse() >= vitesse-800){
timer.start();
if(timer.get() >0.5){
if(timer.get() >1){
lanceur.Demeler(1);
}
}
else{
lanceur.Lancer(3500);
}
}
// }
}
// Called once the command ends or is interrupted.

View File

@@ -7,8 +7,6 @@ package frc.robot.commands;
import edu.wpi.first.wpilibj2.command.ParallelCommandGroup;
import frc.robot.subsystems.Balayeuse;
import frc.robot.subsystems.Lanceur;
import frc.robot.subsystems.Led;
import frc.robot.subsystems.LimeLight3;
import frc.robot.subsystems.Limelight3G;

View File

@@ -5,25 +5,22 @@
package frc.robot.commands;
import edu.wpi.first.math.controller.PIDController;
import edu.wpi.first.wpilibj.DriverStation;
import edu.wpi.first.wpilibj.Timer;
import edu.wpi.first.wpilibj2.command.Command;
import frc.robot.subsystems.Lanceur;
import frc.robot.subsystems.LimeLight3;
import frc.robot.subsystems.Limelight3G;
/* You should consider using the more terse Command factories API instead https://docs.wpilib.org/en/stable/docs/software/commandbased/organizing-command-based.html#defining-commands */
public class LancerBaseVitesse extends Command {
private Lanceur lanceur;
private PIDController pidController;
private Limelight3G limeLight3G;
private Timer timer;
private double temp;
double tempsDebut = 0;
/** Creates a new Lancer. */
public LancerBaseVitesse(Lanceur lanceur, Limelight3G limeLight3G) {
public LancerBaseVitesse(Lanceur lanceur) {
this.lanceur = lanceur;
this.timer = new Timer();
this.limeLight3G = new Limelight3G();
addRequirements(lanceur, limeLight3G);
addRequirements(lanceur);
//this.temp = 0;
// Use addRequirements() here to declare subsystem dependencies.
}
@@ -34,38 +31,18 @@ public class LancerBaseVitesse extends Command {
pidController = new PIDController(0.0007, 0,0, 0.001);
timer.reset();
timer.start();
//temp = lanceur.Amp();
}
// Called every time the scheduler runs while the command is scheduled.
@Override
public void execute() {
// int nbFois = 0;
// double moyenneAmp = 0;
// if(timer.get() < 3){
// nbFois++;
// moyenneAmp += balayeuse.Amp() / nbFois;
// }
// else{
// nbFois++;
// moyenneAmp -= temp;
// moyenneAmp += balayeuse.Amp() / nbFois;
// temp = balayeuse.Amp();
// }
// if(moyenneAmp > 30 && nbFois > 10){
// timer.reset();
// balayeuse.Balayer(0.5);
// led.Jaune2();
// }
// else{
System.out.println(DriverStation.getMatchTime());
double vitesse = lanceur.vitesseDemander();
double output = pidController.calculate(lanceur.Vitesse(),vitesse);
lanceur.Lancer(output);
if(timer.get() >1){
if(timer.get() > 1){
lanceur.Demeler(1);
}
// }
}

View File

@@ -7,16 +7,19 @@ package frc.robot.commands;
import com.ctre.phoenix6.swerve.SwerveModule.DriveRequestType;
import com.ctre.phoenix6.swerve.SwerveRequest;
import edu.wpi.first.wpilibj.Timer;
import edu.wpi.first.math.MathUtil;
import edu.wpi.first.wpilibj.DriverStation;
import edu.wpi.first.wpilibj.DriverStation.Alliance;
import edu.wpi.first.wpilibj2.command.Command;
import frc.robot.generated.TunerConstants;
import frc.robot.subsystems.CommandSwerveDrivetrain;
import frc.robot.subsystems.Limelight3G;
import static edu.wpi.first.units.Units.*;
import java.util.Optional;
/* You should consider using the more terse Command factories API instead https://docs.wpilib.org/en/stable/docs/software/commandbased/organizing-command-based.html#defining-commands */
public class Limelighter extends Command {
Timer timer;
Limelight3G limelight3g;
CommandSwerveDrivetrain drivetrain;
private double MaxSpeed = TunerConstants.kSpeedAt12Volts.in(MetersPerSecond);
@@ -25,6 +28,8 @@ public class Limelighter extends Command {
double boty;
double angle;
double calcul;
double x;
Optional<Alliance> alliance = DriverStation.getAlliance();
private final SwerveRequest.FieldCentric drive = new SwerveRequest.FieldCentric()
.withDeadband(MaxSpeed * 0.1).withRotationalDeadband(MaxAngularRate * 0.1)
.withDriveRequestType(DriveRequestType.OpenLoopVoltage);
@@ -34,14 +39,13 @@ public class Limelighter extends Command {
this.limelight3g = limelight3g;
this.drivetrain = drivetrain;
addRequirements(drivetrain, limelight3g);
timer = new Timer();
// Use addRequirements() here to declare subsystem dependencies.
}
// Called when the command is initially scheduled.
@Override
public void initialize() {
timer.reset();
alliance = DriverStation.getAlliance();
}
// Called every time the scheduler runs while the command is scheduled.
@@ -50,23 +54,63 @@ public class Limelighter extends Command {
double[] BotPose = new double[6];
if (limelight3g.getV()) {
BotPose = limelight3g.getBotPoseBlue();
if (!alliance.isPresent()) {
return;
}
if (alliance.get() == Alliance.Blue) {
x = 4.6;
BotPose = limelight3g.getBotPoseBlue();
}
else {
//x = 11.915394;
x = 4.6;
BotPose = limelight3g.getBotPoseRed();
}
botx = BotPose[0];
boty = BotPose[1];
angle = BotPose[5];
calcul = Math.toRadians(limelight3g.Calcule(boty, 4,botx, x, angle));
System.out.println(calcul);
//drivetrain.setControl(drive.withRotationalRate(MathUtil.clamp(calcul, -3, 3)));
if(calcul > -5 && calcul < 5){
drivetrain.setControl(
drive.withRotationalRate(0));
}
else if(calcul > 5){
drivetrain.setControl(
drive.withRotationalRate(2));
}
else if(calcul < -5){
drivetrain.setControl(drive.withRotationalRate(-2));
}
botx = BotPose[1];
boty = BotPose[0];
angle = drivetrain.getPigeon2().getYaw().getValueAsDouble();
if(angle >180){
angle =- 360;
calcul = limelight3g.Calcule(botx, x, boty, 4, angle);
if(calcul < -5 && calcul > -180){
drivetrain.setControl(
drive.withRotationalRate(0.5*(2*Math.PI)));
}
else if(calcul > 5 && calcul < 180){
drivetrain.setControl(
drive.withRotationalRate(-0.5*(2*Math.PI)));
}
else if(calcul < -5){
drivetrain.setControl(
drive.withRotationalRate(-0.5*(2*Math.PI)));
}
else if(calcul <= -180){
drivetrain.setControl(
drive.withRotationalRate(0.5*(2*Math.PI)));
}
else{
drivetrain.setControl(
drive.withRotationalRate(0));
}
calcul = limelight3g.Calcule(botx, 4, boty, 4.6, angle) / 5;
drivetrain.setControl(
drive.withVelocityX(0).withVelocityY(0).withRotationalRate(calcul));
System.out.println(calcul);
System.out.println(angle);
if (calcul < 0.2 && calcul > -0.2) {
// timer.start();
// } else {
// timer.reset();
// }
// } else {
// timer.stop();
drivetrain.setControl(drive.withRotationalRate(0));
}
}
@@ -80,7 +124,6 @@ public class Limelighter extends Command {
@Override
public void end(boolean interrupted) {
drivetrain.setControl(drive.withRotationalRate(0));
timer.stop();
}
// Returns true when the command should end.

View File

@@ -0,0 +1,69 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
package frc.robot.commands.ModeAuto;
import static edu.wpi.first.units.Units.*;
import java.util.Optional;
import com.ctre.phoenix6.swerve.SwerveModule.DriveRequestType;
import com.ctre.phoenix6.swerve.SwerveRequest;
import edu.wpi.first.wpilibj.DriverStation;
import edu.wpi.first.wpilibj.Timer;
import edu.wpi.first.wpilibj.DriverStation.Alliance;
import edu.wpi.first.wpilibj2.command.Command;
import frc.robot.generated.TunerConstants;
import frc.robot.subsystems.CommandSwerveDrivetrain;
/* You should consider using the more terse Command factories API instead https://docs.wpilib.org/en/stable/docs/software/commandbased/organizing-command-based.html#defining-commands */
public class BougerDroiteAuto extends Command {
CommandSwerveDrivetrain drivetrain;
Timer timer = new Timer();
private double MaxSpeed = TunerConstants.kSpeedAt12Volts.in(MetersPerSecond);
private double MaxAngularRate = RotationsPerSecond.of(0.75).in(RadiansPerSecond);
Optional<Alliance> alliance;
private final SwerveRequest.FieldCentric drive = new SwerveRequest.FieldCentric()
.withDeadband(MaxSpeed * 0.1).withRotationalDeadband(MaxAngularRate * 0.1)
.withDriveRequestType(DriveRequestType.OpenLoopVoltage);
/** Creates a new AvanceAuto. */
public BougerDroiteAuto(CommandSwerveDrivetrain drivetrain) {
this.drivetrain = drivetrain;
addRequirements(drivetrain);
// Use addRequirements() here to declare subsystem dependencies.
}
// Called when the command is initially scheduled.
@Override
public void initialize() {
alliance = DriverStation.getAlliance();
timer.reset();
timer.start();
}
// Called every time the scheduler runs while the command is scheduled.
@Override
public void execute() {
if(timer.get() < 1.25){
drivetrain.setControl(drive.withVelocityY(-1.5));
}
else{
drivetrain.setControl(drive.withVelocityY(0));
}
}
// Called once the command ends or is interrupted.
@Override
public void end(boolean interrupted) {
drivetrain.setControl(drive.withVelocityY(0));
timer.stop();
}
// Returns true when the command should end.
@Override
public boolean isFinished() {
return timer.get() > 1;
}
}

View File

@@ -0,0 +1,69 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
package frc.robot.commands.ModeAuto;
import static edu.wpi.first.units.Units.*;
import java.util.Optional;
import com.ctre.phoenix6.swerve.SwerveModule.DriveRequestType;
import com.ctre.phoenix6.swerve.SwerveRequest;
import edu.wpi.first.wpilibj.DriverStation;
import edu.wpi.first.wpilibj.Timer;
import edu.wpi.first.wpilibj.DriverStation.Alliance;
import edu.wpi.first.wpilibj2.command.Command;
import frc.robot.generated.TunerConstants;
import frc.robot.subsystems.CommandSwerveDrivetrain;
/* You should consider using the more terse Command factories API instead https://docs.wpilib.org/en/stable/docs/software/commandbased/organizing-command-based.html#defining-commands */
public class BougerGaucheAuto extends Command {
CommandSwerveDrivetrain drivetrain;
Timer timer = new Timer();
private double MaxSpeed = TunerConstants.kSpeedAt12Volts.in(MetersPerSecond);
private double MaxAngularRate = RotationsPerSecond.of(0.75).in(RadiansPerSecond);
Optional<Alliance> alliance;
private final SwerveRequest.FieldCentric drive = new SwerveRequest.FieldCentric()
.withDeadband(MaxSpeed * 0.1).withRotationalDeadband(MaxAngularRate * 0.1)
.withDriveRequestType(DriveRequestType.OpenLoopVoltage);
/** Creates a new AvanceAuto. */
public BougerGaucheAuto(CommandSwerveDrivetrain drivetrain) {
this.drivetrain = drivetrain;
addRequirements(drivetrain);
// Use addRequirements() here to declare subsystem dependencies.
}
// Called when the command is initially scheduled.
@Override
public void initialize() {
alliance = DriverStation.getAlliance();
timer.reset();
timer.start();
}
// Called every time the scheduler runs while the command is scheduled.
@Override
public void execute() {
if(timer.get() < 1.25){
drivetrain.setControl(drive.withVelocityY(1.5));
}
else{
drivetrain.setControl(drive.withVelocityY(0));
}
}
// Called once the command ends or is interrupted.
@Override
public void end(boolean interrupted) {
drivetrain.setControl(drive.withVelocityY(0));
timer.stop();
}
// Returns true when the command should end.
@Override
public boolean isFinished() {
return timer.get() > 1;
}
}

View File

@@ -8,14 +8,20 @@ import static edu.wpi.first.units.Units.MetersPerSecond;
import static edu.wpi.first.units.Units.RadiansPerSecond;
import static edu.wpi.first.units.Units.RotationsPerSecond;
import java.util.Optional;
import com.ctre.phoenix6.hardware.Pigeon2;
import com.ctre.phoenix6.swerve.SwerveModule.DriveRequestType;
import com.ctre.phoenix6.swerve.SwerveRequest;
import edu.wpi.first.math.MathUtil;
import edu.wpi.first.wpilibj.DriverStation;
import edu.wpi.first.wpilibj.DriverStation.Alliance;
import edu.wpi.first.wpilibj2.command.Command;
import frc.robot.generated.TunerConstants;
import frc.robot.subsystems.CommandSwerveDrivetrain;
import frc.robot.subsystems.LimeLight3;
import frc.robot.subsystems.Limelight3G;
/* You should consider using the more terse Command factories API instead https://docs.wpilib.org/en/stable/docs/software/commandbased/organizing-command-based.html#defining-commands */
public class GrimperMur extends Command {
@@ -24,9 +30,13 @@ public class GrimperMur extends Command {
double[] BotPose = new double[6];
double botx;
double boty;
double x;
double y;
double angle;
double pigeonAngle;
private double MaxSpeed = TunerConstants.kSpeedAt12Volts.in(MetersPerSecond);
private double MaxAngularRate = RotationsPerSecond.of(0.75).in(RadiansPerSecond);
Pigeon2 pigeon2;
Optional<Alliance> alliance = DriverStation.getAlliance();
private final SwerveRequest.FieldCentric drive = new SwerveRequest.FieldCentric()
.withDeadband(MaxSpeed * 0.1).withRotationalDeadband(MaxAngularRate * 0.1)
.withDriveRequestType(DriveRequestType.OpenLoopVoltage);
@@ -40,19 +50,64 @@ public class GrimperMur extends Command {
// Called when the command is initially scheduled.
@Override
public void initialize() {}
public void initialize() {
alliance = DriverStation.getAlliance();
// if(drivetrain.Equipe()){
// angle+=180;
// }
}
// Called every time the scheduler runs while the command is scheduled.
@Override
public void execute() {
if(limeLight3.getV()){
BotPose = limeLight3.getBotPoseBlue();
botx = BotPose[0];
boty = BotPose[1];
if(180-pigeon2.getYaw().getValueAsDouble() < 10 && 180- pigeon2.getYaw().getValueAsDouble() > -10){
drivetrain.setControl(drive.withVelocityX(2.961328-boty).withVelocityY(1.11-botx));
if(angle < 0){
angle = angle + 360;
}
if(alliance.get() == Alliance.Red){
pigeonAngle = drivetrain.getPigeon2().getYaw().getValueAsDouble();
System.out.println(pigeonAngle);
y = 3.6;
x = 15;
angle = 180;
if(pigeonAngle> 358 || pigeonAngle< 2){
drivetrain.setControl(drive.withVelocityY(MathUtil.clamp((-(y-boty)*10), -2, 2)).withVelocityX(MathUtil.clamp((-(x-botx)*10),-2,2)).withRotationalRate(0));
}
else{
drivetrain.setControl(drive.withRotationalRate(180-pigeon2.getYaw().getValueAsDouble()/45));
if(pigeonAngle>180){
drivetrain.setControl(drive.withVelocityY(0).withVelocityX(0).withRotationalRate(1));
}
else{
drivetrain.setControl(drive.withVelocityY(0).withVelocityX(0).withRotationalRate(-1));
}
}
}
else{
pigeonAngle = drivetrain.getPigeon2().getYaw().getValueAsDouble();
System.out.println(pigeonAngle);
y = 4.4;
x = 1.6;
angle = 0;
if(pigeonAngle> 182 || pigeonAngle< 178){
drivetrain.setControl(drive.withVelocityY(MathUtil.clamp(((y-boty)*10), -2, 2)).withVelocityX(MathUtil.clamp(((x-botx)*10),-2,2)).withRotationalRate(0));
}
else{
if(pigeonAngle>0 && pigeonAngle<180){
drivetrain.setControl(drive.withVelocityY(0).withVelocityX(0).withRotationalRate(-1));
System.out.println("x");
}
else if(pigeonAngle>180){
System.out.println("e");
drivetrain.setControl(drive.withVelocityY(0).withVelocityX(0).withRotationalRate(1));
}
}
}
}
else{
drivetrain.setControl(drive.withVelocityX(0).withVelocityY(0).withRotationalRate(0));
}
}
@@ -65,6 +120,6 @@ public class GrimperMur extends Command {
// Returns true when the command should end.
@Override
public boolean isFinished() {
return (2.961328-boty < 0.05 || 2.961328-boty >-0.05) && (1.11-botx < 0.05 || 1.11-botx > -0.05);
return (y-boty < 0.2 && y-boty >-0.2) && (x-botx < 0.06 && x-botx > -0.06);
}
}

View File

@@ -8,10 +8,15 @@ import static edu.wpi.first.units.Units.MetersPerSecond;
import static edu.wpi.first.units.Units.RadiansPerSecond;
import static edu.wpi.first.units.Units.RotationsPerSecond;
import java.util.Optional;
import com.ctre.phoenix6.hardware.Pigeon2;
import com.ctre.phoenix6.swerve.SwerveModule.DriveRequestType;
import com.ctre.phoenix6.swerve.SwerveRequest;
import edu.wpi.first.math.MathUtil;
import edu.wpi.first.wpilibj.DriverStation;
import edu.wpi.first.wpilibj.DriverStation.Alliance;
import edu.wpi.first.wpilibj2.command.Command;
import frc.robot.generated.TunerConstants;
import frc.robot.subsystems.CommandSwerveDrivetrain;
@@ -24,9 +29,13 @@ public class GrimperReservoir extends Command {
double[] BotPose = new double[6];
double botx;
double boty;
double x;
double y;
double angle;
double pigeonAngle;
private double MaxSpeed = TunerConstants.kSpeedAt12Volts.in(MetersPerSecond);
private double MaxAngularRate = RotationsPerSecond.of(0.75).in(RadiansPerSecond);
Pigeon2 pigeon2;
Optional<Alliance> alliance;
private final SwerveRequest.FieldCentric drive = new SwerveRequest.FieldCentric()
.withDeadband(MaxSpeed * 0.1).withRotationalDeadband(MaxAngularRate * 0.1)
.withDriveRequestType(DriveRequestType.OpenLoopVoltage);
@@ -40,19 +49,64 @@ public class GrimperReservoir extends Command {
// Called when the command is initially scheduled.
@Override
public void initialize() {}
public void initialize() {
alliance = DriverStation.getAlliance();
// if(drivetrain.Equipe()){
// drivetrain.getPigeon2().setYaw(drivetrain.getPigeon2().getYaw().getValueAsDouble()+180);
// }
}
// Called every time the scheduler runs while the command is scheduled.
@Override
public void execute() {
if(limeLight3G.getV()){
BotPose = limeLight3G.getBotPoseBlue();
botx = BotPose[0];
boty = BotPose[1];
if(0-pigeon2.getYaw().getValueAsDouble() < 10 && 0- pigeon2.getYaw().getValueAsDouble() > -10){
drivetrain.setControl(drive.withVelocityX(5.081328-boty).withVelocityY(1.11-botx));
if(angle < 0){
angle = angle + 360;
}
if(alliance.get() == Alliance.Red){
pigeonAngle = drivetrain.getPigeon2().getYaw().getValueAsDouble();
System.out.println(pigeonAngle);
y = 5.2;
x = 15.6;
angle = 180;
if(pigeonAngle< 190 && pigeonAngle> 170){
drivetrain.setControl(drive.withVelocityY(MathUtil.clamp((-(y-boty)*10), -2, 2)).withVelocityX(MathUtil.clamp((-(x-botx)*10),-2,2)));
}
else{
drivetrain.setControl(drive.withRotationalRate(0-pigeon2.getYaw().getValueAsDouble()/45));
if(pigeonAngle>180){
drivetrain.setControl(drive.withRotationalRate(-1));
}
else{
drivetrain.setControl(drive.withRotationalRate(1));
}
}
}
else{
pigeonAngle = drivetrain.getPigeon2().getYaw().getValueAsDouble()+180;
System.out.println(pigeonAngle);
y = 2.6;
x = 1.11;
angle = 0;
if(pigeonAngle> 358 || pigeonAngle< 2){
drivetrain.setControl(drive.withVelocityY(MathUtil.clamp(((y-boty)*10), -2, 2)).withVelocityX(MathUtil.clamp(((x-botx)*10),-2,2)).withRotationalRate(0));
}
else{
if(pigeonAngle>0 && pigeonAngle<180){
drivetrain.setControl(drive.withRotationalRate(-1));
System.out.println("x");
}
else if(pigeonAngle>180){
System.out.println("e");
drivetrain.setControl(drive.withRotationalRate(1));
}
}
}
}
else{
drivetrain.setControl(drive.withVelocityX(0).withVelocityY(0).withRotationalRate(0));
}
}
@@ -65,6 +119,6 @@ public class GrimperReservoir extends Command {
// Returns true when the command should end.
@Override
public boolean isFinished() {
return 5.081328-boty < 0.05 || 5.081328-boty >-0.05 && 1.11-botx < 0.05 || 1.11-botx > -0.05;
return (y-boty < 0.2 && y-boty >-0.2) && (x-botx < 0.06 && x-botx > -0.06);
}
}

View File

@@ -4,7 +4,11 @@
package frc.robot.commands.ModeAuto;
import java.util.Optional;
import edu.wpi.first.math.controller.PIDController;
import edu.wpi.first.wpilibj.DriverStation;
import edu.wpi.first.wpilibj.DriverStation.Alliance;
import edu.wpi.first.wpilibj.Timer;
import edu.wpi.first.wpilibj2.command.Command;
import frc.robot.subsystems.Lanceur;
@@ -18,6 +22,8 @@ public class LancerAuto extends Command {
Limelight3G limelight3g;
double botx = 0;
double boty = 0;
Optional<Alliance> alliance = DriverStation.getAlliance();
/** Creates a new LancerAuto. */
public LancerAuto(Lanceur lanceur, Limelight3G limelight3g) {
this.lanceur = lanceur;
@@ -30,31 +36,41 @@ public class LancerAuto extends Command {
// Called when the command is initially scheduled.
@Override
public void initialize() {
pidController = new PIDController(0.0007, 0,0, 0.001);
pidController = new PIDController(0.0007, 0, 0, 0.001);
timer.reset();
alliance = DriverStation.getAlliance();
}
// Called every time the scheduler runs while the command is scheduled.
@Override
public void execute() {
double[] BotPose = new double[6];
if(limelight3g.getV()){
if (limelight3g.getV()) {
if (!alliance.isPresent()) {
return;
}
if (alliance.get() == Alliance.Blue) {
BotPose = limelight3g.getBotPoseBlue();
} else {
BotPose = limelight3g.getBotPoseRed();
}
botx = BotPose[0];
boty = BotPose[1];
}
double vitesse = 0.5;
if(limelight3g.getV()){
vitesse = 410.57 * ((Math.sqrt(Math.pow(Math.abs(4.625594-botx), 2) + Math.pow(Math.abs(4.034536-boty), 2)))) + 2250;
System.out.println(vitesse);
if (limelight3g.getV()) {
vitesse = 410.57 * ((Math.sqrt(Math.pow(Math.abs(4.625594 - botx), 2) + Math.pow(Math.abs(4.034536 - boty), 2))))
+ 2250;
System.out.println("lancer");
double output = pidController.calculate(lanceur.Vitesse(),vitesse);
double output = pidController.calculate(lanceur.Vitesse(), vitesse);
lanceur.Lancer(output);
if(lanceur.Vitesse() >= vitesse-800){
if (lanceur.Vitesse() >= vitesse - 800) {
timer.start();
if(timer.get() >0.5){
if (timer.get() > 1) {
lanceur.Demeler(1);
}
}
}
}
@@ -72,6 +88,6 @@ public class LancerAuto extends Command {
@Override
public boolean isFinished() {
return timer.get() > 4;
//return false;
// return false;
}
}

View File

@@ -7,16 +7,18 @@ package frc.robot.commands.ModeAuto;
import com.ctre.phoenix6.swerve.SwerveModule.DriveRequestType;
import com.ctre.phoenix6.swerve.SwerveRequest;
import edu.wpi.first.wpilibj.Timer;
import edu.wpi.first.wpilibj.DriverStation;
import edu.wpi.first.wpilibj.DriverStation.Alliance;
import edu.wpi.first.wpilibj2.command.Command;
import frc.robot.generated.TunerConstants;
import frc.robot.subsystems.CommandSwerveDrivetrain;
import frc.robot.subsystems.Limelight3G;
import static edu.wpi.first.units.Units.*;
import java.util.Optional;
/* You should consider using the more terse Command factories API instead https://docs.wpilib.org/en/stable/docs/software/commandbased/organizing-command-based.html#defining-commands */
public class LimelighterAuto extends Command {
Timer timer;
Limelight3G limelight3g;
CommandSwerveDrivetrain drivetrain;
private double MaxSpeed = TunerConstants.kSpeedAt12Volts.in(MetersPerSecond);
@@ -25,6 +27,8 @@ public class LimelighterAuto extends Command {
double boty;
double angle;
double calcul;
double x;
Optional<Alliance> alliance = DriverStation.getAlliance();
private final SwerveRequest.FieldCentric drive = new SwerveRequest.FieldCentric()
.withDeadband(MaxSpeed * 0.1).withRotationalDeadband(MaxAngularRate * 0.1)
.withDriveRequestType(DriveRequestType.OpenLoopVoltage);
@@ -34,41 +38,79 @@ public class LimelighterAuto extends Command {
this.limelight3g = limelight3g;
this.drivetrain = drivetrain;
addRequirements(drivetrain, limelight3g);
timer = new Timer();
// Use addRequirements() here to declare subsystem dependencies.
}
// Called when the command is initially scheduled.
@Override
public void initialize() {
timer.reset();
alliance = DriverStation.getAlliance();
}
// Called every time the scheduler runs while the command is scheduled.
@Override
public void execute() {
double[] BotPose = new double[6];
System.out.println("e");
if (limelight3g.getV()) {
BotPose = limelight3g.getBotPoseBlue();
botx = BotPose[1];
boty = BotPose[0];
angle = drivetrain.getPigeon2().getYaw().getValueAsDouble();
if(angle >180){
angle =- 360;
if (!alliance.isPresent()) {
return;
}
calcul = limelight3g.Calcule(botx, 4, boty, 4.6, angle) / 5;
if (alliance.get() == Alliance.Blue) {
x = 4.6;
BotPose = limelight3g.getBotPoseBlue();
}
else {
// x = 11.915394;
x = 4.6;
BotPose = limelight3g.getBotPoseRed();
}
botx = BotPose[0];
boty = BotPose[1];
angle = BotPose[5];
calcul = limelight3g.Calcule(botx, x, boty, 4, angle);
if(calcul > -5 && calcul < 5){
drivetrain.setControl(
drive.withVelocityX(0).withVelocityY(0).withRotationalRate(calcul));
System.out.println(calcul);
if (calcul < 0.2 && calcul > -0.2) {
// timer.start();
// } else {
// timer.reset();
// }
// } else {
// timer.stop();
drivetrain.setControl(drive.withRotationalRate(0));
drive.withRotationalRate(0));
}
else if(calcul > 5){
drivetrain.setControl(
drive.withRotationalRate(2));
}
else if(calcul < -5){
drivetrain.setControl(drive.withRotationalRate(-2));
}
// botx = BotPose[1];
// boty = BotPose[0];
// angle = drivetrain.getPigeon2().getYaw().getValueAsDouble();
// calcul = limelight3g.Calcule(botx, x, boty, 4, angle);
// if(calcul < -5 && calcul > -180){
// drivetrain.setControl(
// drive.withRotationalRate(0.5*(2*Math.PI)));
// }
// else if(calcul > 5 && calcul < 180){
// drivetrain.setControl(
// drive.withRotationalRate(-0.5*(2*Math.PI)));
// }
// else if(calcul < -5){
// drivetrain.setControl(
// drive.withRotationalRate(-0.5*(2*Math.PI)));
// }
// else if(calcul <= -180){
// drivetrain.setControl(
// drive.withRotationalRate(0.5*(2*Math.PI)));
// }
// else{
// drivetrain.setControl(
// drive.withRotationalRate(0));
// }
// drivetrain.setControl(
// drive.withVelocityX(0).withVelocityY(0).withRotationalRate(calcul));
// System.out.println(angle);
// if (calcul < 0.2 && calcul > -0.2) {
// drivetrain.setControl(drive.withRotationalRate(0));
// }
}
else{
drivetrain.setControl(drive.withRotationalRate(0));
@@ -80,12 +122,12 @@ public class LimelighterAuto extends Command {
@Override
public void end(boolean interrupted) {
drivetrain.setControl(drive.withRotationalRate(0));
timer.stop();
}
// Returns true when the command should end.
@Override
public boolean isFinished() {
return calcul < 0.1 && calcul > -0.1;
return calcul > -5 && calcul < 5;
}
}

View File

@@ -4,12 +4,41 @@
package frc.robot.commands.ModeAuto;
import static edu.wpi.first.units.Units.*;
import java.util.Optional;
import com.ctre.phoenix6.hardware.Pigeon2;
import com.ctre.phoenix6.swerve.SwerveModule.DriveRequestType;
import com.ctre.phoenix6.swerve.SwerveRequest;
import edu.wpi.first.wpilibj.DriverStation;
import edu.wpi.first.wpilibj.DriverStation.Alliance;
import edu.wpi.first.wpilibj2.command.Command;
import frc.robot.generated.TunerConstants;
import frc.robot.subsystems.CommandSwerveDrivetrain;
import frc.robot.subsystems.Limelight3G;
/* You should consider using the more terse Command factories API instead https://docs.wpilib.org/en/stable/docs/software/commandbased/organizing-command-based.html#defining-commands */
public class RetourMilieuDroite extends Command {
CommandSwerveDrivetrain drivetrain;
Limelight3G limelight3g;
double botx;
double boty;
double x;
double y;
double angle;
private double MaxSpeed = TunerConstants.kSpeedAt12Volts.in(MetersPerSecond);
private double MaxAngularRate = RotationsPerSecond.of(0.75).in(RadiansPerSecond);
Optional<Alliance> alliance = DriverStation.getAlliance();
private final SwerveRequest.FieldCentric drive = new SwerveRequest.FieldCentric()
.withDeadband(MaxSpeed * 0.1).withRotationalDeadband(MaxAngularRate * 0.1)
.withDriveRequestType(DriveRequestType.OpenLoopVoltage);
/** Creates a new RetourMilieu. */
public RetourMilieuDroite() {
public RetourMilieuDroite(CommandSwerveDrivetrain drivetrain, Limelight3G limelight3g) {
this.drivetrain = drivetrain;
this.limelight3g = limelight3g;
addRequirements(drivetrain, limelight3g);
// Use addRequirements() here to declare subsystem dependencies.
}
@@ -19,15 +48,63 @@ public class RetourMilieuDroite extends Command {
// Called every time the scheduler runs while the command is scheduled.
@Override
public void execute() {}
public void execute() {
if(angle < 0){
angle = angle + 360;
}
if(alliance.get() == Alliance.Blue){
y = 0.639;
x = 2.305;
angle = 0;
if(limelight3g.getV()){
if(drivetrain.getPigeon2().getYaw().getValueAsDouble() >355 || drivetrain.getPigeon2().getYaw().getValueAsDouble() < 5){
if((y-boty < 0.05 && y-boty >-0.05) && (x-botx < 0.05 && x-botx > -0.05)){
drivetrain.setControl(drive.withVelocityX(0).withVelocityY(0));
}
else{
if(botx < 6){
drivetrain.setControl(drive.withVelocityX(y-boty));
}
else{
drivetrain.setControl(drive.withVelocityX(y-boty).withVelocityY(x-botx));
}
}
}
else{
if(drivetrain.getPigeon2().getYaw().getValueAsDouble() >angle && drivetrain.getPigeon2().getYaw().getValueAsDouble() <angle +180){
drivetrain.setControl(drive.withRotationalRate(0.5));
}
else if(drivetrain.getPigeon2().getYaw().getValueAsDouble() >=angle +180){
drivetrain.setControl(drive.withRotationalRate(-0.5));
}
}
}
}
else{
y = 7.380;
x = 13.963;
angle = 180;
if(limelight3g.getV()){
}
if(drivetrain.getPigeon2().getYaw().getValueAsDouble() >0 && drivetrain.getPigeon2().getYaw().getValueAsDouble() <180){
drivetrain.setControl(drive.withRotationalRate(0.5));
}
else if(drivetrain.getPigeon2().getYaw().getValueAsDouble() >180){
drivetrain.setControl(drive.withRotationalRate(-0.5));
}
}
}
// Called once the command ends or is interrupted.
@Override
public void end(boolean interrupted) {}
public void end(boolean interrupted) {
drivetrain.setControl(drive.withVelocityX(0).withVelocityY(0));
}
// Returns true when the command should end.
@Override
public boolean isFinished() {
return false;
return (y-boty < 0.05 && y-boty >-0.05) && (x-botx < 0.05 && x-botx > -0.05);
}
}

View File

@@ -4,12 +4,41 @@
package frc.robot.commands.ModeAuto;
import static edu.wpi.first.units.Units.*;
import java.util.Optional;
import com.ctre.phoenix6.hardware.Pigeon2;
import com.ctre.phoenix6.swerve.SwerveModule.DriveRequestType;
import com.ctre.phoenix6.swerve.SwerveRequest;
import edu.wpi.first.wpilibj.DriverStation;
import edu.wpi.first.wpilibj.DriverStation.Alliance;
import edu.wpi.first.wpilibj2.command.Command;
import frc.robot.generated.TunerConstants;
import frc.robot.subsystems.CommandSwerveDrivetrain;
import frc.robot.subsystems.Limelight3G;
/* You should consider using the more terse Command factories API instead https://docs.wpilib.org/en/stable/docs/software/commandbased/organizing-command-based.html#defining-commands */
public class RetourMilieuGauche extends Command {
/** Creates a new RetourMilieuGauche. */
public RetourMilieuGauche() {
CommandSwerveDrivetrain drivetrain;
Limelight3G limelight3g;
double botx;
double boty;
double x;
double y;
double angle;
private double MaxSpeed = TunerConstants.kSpeedAt12Volts.in(MetersPerSecond);
private double MaxAngularRate = RotationsPerSecond.of(0.75).in(RadiansPerSecond);
Optional<Alliance> alliance = DriverStation.getAlliance();
private final SwerveRequest.FieldCentric drive = new SwerveRequest.FieldCentric()
.withDeadband(MaxSpeed * 0.1).withRotationalDeadband(MaxAngularRate * 0.1)
.withDriveRequestType(DriveRequestType.OpenLoopVoltage);
/** Creates a new RetourMilieu. */
public RetourMilieuGauche(CommandSwerveDrivetrain drivetrain, Limelight3G limelight3g) {
this.drivetrain = drivetrain;
this.limelight3g = limelight3g;
addRequirements(drivetrain, limelight3g);
// Use addRequirements() here to declare subsystem dependencies.
}
@@ -19,15 +48,85 @@ public class RetourMilieuGauche extends Command {
// Called every time the scheduler runs while the command is scheduled.
@Override
public void execute() {}
public void execute() {
if(angle < 0){
angle = angle + 360;
}
double[] BotPose = new double[6];
BotPose = limelight3g.getBotPoseBlue();
botx = BotPose[0];
boty = BotPose[1];
if(alliance.get() == Alliance.Blue){
y = 7.380;
x = 2.305;
angle = 0;
if(limelight3g.getV()){
if(drivetrain.getPigeon2().getYaw().getValueAsDouble() >355 || drivetrain.getPigeon2().getYaw().getValueAsDouble() < 5){
if((y-boty < 0.05 && y-boty >-0.05) && (x-botx < 0.05 && x-botx > -0.05)){
drivetrain.setControl(drive.withVelocityX(0).withVelocityY(0));
}
else{
if(botx < 6){
drivetrain.setControl(drive.withVelocityX(y-boty));
}
else{
drivetrain.setControl(drive.withVelocityX(y-boty).withVelocityY(x-botx));
}
}
}
else{
if(drivetrain.getPigeon2().getYaw().getValueAsDouble() >angle && drivetrain.getPigeon2().getYaw().getValueAsDouble() <angle +180){
drivetrain.setControl(drive.withRotationalRate(0.5));
}
else if(drivetrain.getPigeon2().getYaw().getValueAsDouble() >=angle +180){
drivetrain.setControl(drive.withRotationalRate(-0.5));
}
}
}
}
else{
y = 0.639;
x = 13.963;
angle = 180;
if(limelight3g.getV()){
if(drivetrain.getPigeon2().getYaw().getValueAsDouble() >175 && drivetrain.getPigeon2().getYaw().getValueAsDouble() < 185){
if((y-boty < 0.05 && y-boty >-0.05) && (x-botx < 0.05 && x-botx > -0.05)){
drivetrain.setControl(drive.withVelocityX(0).withVelocityY(0));
}
else{
if(botx > 10){
drivetrain.setControl(drive.withVelocityX(y-boty));
}
else{
drivetrain.setControl(drive.withVelocityX(y-boty).withVelocityY(x-botx));
}
}
}
else{
if(drivetrain.getPigeon2().getYaw().getValueAsDouble() >0 && drivetrain.getPigeon2().getYaw().getValueAsDouble() <180){
drivetrain.setControl(drive.withRotationalRate(-0.5));
}
else if(drivetrain.getPigeon2().getYaw().getValueAsDouble() >=180){
drivetrain.setControl(drive.withRotationalRate(0.5));
}
}
}
}
}
// Called once the command ends or is interrupted.
@Override
public void end(boolean interrupted) {}
public void end(boolean interrupted) {
drivetrain.setControl(drive.withVelocityX(0).withVelocityY(0));
}
// Returns true when the command should end.
@Override
public boolean isFinished() {
return false;
return (y-boty < 0.05 && y-boty >-0.05) && (x-botx < 0.05 && x-botx > -0.05);
}
}

View File

@@ -23,8 +23,8 @@ public class TournerVersMur extends Command {
Optional<Alliance> alliance = DriverStation.getAlliance();
private double MaxSpeed = TunerConstants.kSpeedAt12Volts.in(MetersPerSecond);
private double MaxAngularRate = RotationsPerSecond.of(0.75).in(RadiansPerSecond);
Pigeon2 pigeon2;
double force;
double angle;
private final SwerveRequest.FieldCentric drive = new SwerveRequest.FieldCentric()
.withDeadband(MaxSpeed * 0.1).withRotationalDeadband(MaxAngularRate * 0.1)
.withDriveRequestType(DriveRequestType.OpenLoopVoltage);
@@ -37,22 +37,26 @@ public class TournerVersMur extends Command {
// Called when the command is initially scheduled.
@Override
public void initialize() {}
public void initialize() {
alliance = DriverStation.getAlliance();
}
// Called every time the scheduler runs while the command is scheduled.
@Override
public void execute() {
if(alliance.get() == Alliance.Blue){
force = 0.5;
angle = 0;
}
else{
force = -0.5;
angle = 180;
}
if(pigeon2.getYaw().getValueAsDouble() >0 && pigeon2.getYaw().getValueAsDouble() <180){
drivetrain.setControl(drive.withRotationalRate(force));
if(drivetrain.getPigeon2().getYaw().getValueAsDouble()>0 && drivetrain.getPigeon2().getYaw().getValueAsDouble()<180){
drivetrain.setControl(drive.withRotationalRate(force*180/Math.PI));
}
else if(pigeon2.getYaw().getValueAsDouble() >180){
drivetrain.setControl(drive.withRotationalRate(-force));
else if(drivetrain.getPigeon2().getYaw().getValueAsDouble()>180){
drivetrain.setControl(drive.withRotationalRate(-force*180/Math.PI));
}
}
@@ -63,6 +67,6 @@ public class TournerVersMur extends Command {
// Returns true when the command should end.
@Override
public boolean isFinished() {
return pigeon2.getYaw().getValueAsDouble() > 165 && pigeon2.getYaw().getValueAsDouble() < 195;
return drivetrain.getPigeon2().getYaw().getValueAsDouble()> angle && drivetrain.getPigeon2().getYaw().getValueAsDouble()< angle + 10;
}
}

View File

@@ -0,0 +1,79 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
package frc.robot.commands.ModeAuto;
import com.ctre.phoenix6.swerve.SwerveModule.DriveRequestType;
import com.ctre.phoenix6.hardware.Pigeon2;
import com.ctre.phoenix6.swerve.SwerveRequest;
import edu.wpi.first.wpilibj.DriverStation;
import edu.wpi.first.wpilibj.DriverStation.Alliance;
import edu.wpi.first.wpilibj2.command.Command;
import frc.robot.generated.TunerConstants;
import frc.robot.subsystems.CommandSwerveDrivetrain;
import static edu.wpi.first.units.Units.*;
import java.util.Optional;
/* You should consider using the more terse Command factories API instead https://docs.wpilib.org/en/stable/docs/software/commandbased/organizing-command-based.html#defining-commands */
public class TournerVersReservoir extends Command {
CommandSwerveDrivetrain drivetrain;
Optional<Alliance> alliance = DriverStation.getAlliance();
private double MaxSpeed = TunerConstants.kSpeedAt12Volts.in(MetersPerSecond);
private double MaxAngularRate = RotationsPerSecond.of(0.75).in(RadiansPerSecond);
double force;
double angle;
private final SwerveRequest.FieldCentric drive = new SwerveRequest.FieldCentric()
.withDeadband(MaxSpeed * 0.1).withRotationalDeadband(MaxAngularRate * 0.1)
.withDriveRequestType(DriveRequestType.OpenLoopVoltage);
/** Creates a new TournerAZero. */
public TournerVersReservoir(CommandSwerveDrivetrain drivetrain) {
this.drivetrain = drivetrain;
addRequirements(drivetrain);
// Use addRequirements() here to declare subsystem dependencies.
}
// Called when the command is initially scheduled.
@Override
public void initialize() {
alliance = DriverStation.getAlliance();
}
// Called every time the scheduler runs while the command is scheduled.
@Override
public void execute() {
if(alliance.isPresent()){
if(alliance.get() == Alliance.Blue){
force = 0.5;
angle = 180;
}
else{
force = -0.5;
angle = 0;
}
}
if(drivetrain.getPigeon2().getYaw().getValueAsDouble() > angle && drivetrain.getPigeon2().getYaw().getValueAsDouble() < angle + 10){
drivetrain.setControl(drive.withRotationalRate(0));
}
else{
if(drivetrain.getPigeon2().getYaw().getValueAsDouble() >0 && drivetrain.getPigeon2().getYaw().getValueAsDouble() <180){
drivetrain.setControl(drive.withRotationalRate(-force*2));
}
else if(drivetrain.getPigeon2().getYaw().getValueAsDouble() >180){
drivetrain.setControl(drive.withRotationalRate(force*2));
}
}
}
// Called once the command ends or is interrupted.
@Override
public void end(boolean interrupted) {}
// Returns true when the command should end.
@Override
public boolean isFinished() {
return drivetrain.getPigeon2().getYaw().getValueAsDouble() > angle && drivetrain.getPigeon2().getYaw().getValueAsDouble() < angle + 10;
}
}

View File

@@ -6,7 +6,6 @@ package frc.robot.commands;
import edu.wpi.first.wpilibj2.command.Command;
import frc.robot.subsystems.Balayeuse;
import frc.robot.subsystems.Lanceur;
/* You should consider using the more terse Command factories API instead https://docs.wpilib.org/en/stable/docs/software/commandbased/organizing-command-based.html#defining-commands */
public class ModeOposerBalayeuse extends Command {
private Balayeuse balayeuse;

View File

@@ -13,6 +13,7 @@ public class MonterGrimpeur extends Command {
/** Creates a new MonterGrimpeur. */
public MonterGrimpeur(Grimpeur grimpeur) {
this.grimpeur = grimpeur;
addRequirements(grimpeur);
// Use addRequirements() here to declare subsystem dependencies.
}
@@ -25,23 +26,26 @@ public class MonterGrimpeur extends Command {
public void execute() {
if(Math.abs(grimpeur.Position()) < grimpeur.PositionFinal()){
grimpeur.Grimper(0.5);
grimpeur.GrimperGauche(0.5);
grimpeur.GrimperDroit(0.5);
System.out.println("monte");
}
else {
grimpeur.Grimper(0);
grimpeur.GrimperGauche(0);
grimpeur.GrimperDroit(0);
}
}
// Called once the command ends or is interrupted.
@Override
public void end(boolean interrupted) {
grimpeur.Grimper(0);
grimpeur.GrimperGauche(0);
grimpeur.GrimperDroit(0);
}
// Returns true when the command should end.
@Override
public boolean isFinished() {
return false;
return Math.abs(grimpeur.Position()) > grimpeur.PositionFinal();
}
}

View File

@@ -82,7 +82,8 @@ public class TunerConstants {
private static final double kDriveGearRatio = 6.122448979591837;
private static final double kSteerGearRatio = 21.428571428571427;
private static final Distance kWheelRadius = Inches.of(3.895);
// private static final Distance kWheelRadius = Inches.of(3.895);
private static final Distance kWheelRadius = Inches.of(2);
private static final boolean kInvertLeftSide = false;
private static final boolean kInvertRightSide = true;

View File

@@ -7,6 +7,7 @@ import java.util.function.Supplier;
import com.ctre.phoenix6.SignalLogger;
import com.ctre.phoenix6.Utils;
import com.ctre.phoenix6.hardware.Pigeon2;
import com.ctre.phoenix6.swerve.SwerveDrivetrainConstants;
import com.ctre.phoenix6.swerve.SwerveModuleConstants;
import com.ctre.phoenix6.swerve.SwerveRequest;
@@ -42,6 +43,7 @@ public class CommandSwerveDrivetrain extends TunerSwerveDrivetrain implements Su
private static final double kSimLoopPeriod = 0.004; // 4 ms
private Notifier m_simNotifier = null;
private double m_lastSimTime;
Pigeon2 pigeon2;
/* Blue alliance sees forward as 0 degrees (toward red alliance wall) */
private static final Rotation2d kBlueAlliancePerspectiveRotation = Rotation2d.kZero;
@@ -53,7 +55,6 @@ public class CommandSwerveDrivetrain extends TunerSwerveDrivetrain implements Su
private final SwerveRequest.SysIdSwerveTranslation m_translationCharacterization = new SwerveRequest.SysIdSwerveTranslation();
private final SwerveRequest.SysIdSwerveSteerGains m_steerCharacterization = new SwerveRequest.SysIdSwerveSteerGains();
private final SwerveRequest.SysIdSwerveRotation m_rotationCharacterization = new SwerveRequest.SysIdSwerveRotation();
/* SysId routine for characterizing translation. This is used to find PID gains for the drive motors. */
private final SysIdRoutine m_sysIdRoutineTranslation = new SysIdRoutine(
new SysIdRoutine.Config(
@@ -246,6 +247,12 @@ public class CommandSwerveDrivetrain extends TunerSwerveDrivetrain implements Su
@Override
public void periodic() {
if(getPigeon2().getYaw().getValueAsDouble() > 360){
getPigeon2().setYaw(getPigeon2().getYaw().getValueAsDouble()-360);
}
else if(getPigeon2().getYaw().getValueAsDouble() < 0){
getPigeon2().setYaw(getPigeon2().getYaw().getValueAsDouble()+360);
}
/*
* Periodically try to apply the operator perspective.
* If we haven't applied the operator perspective before, then we should apply it regardless of DS state.

View File

@@ -5,7 +5,6 @@
package frc.robot.subsystems;
import com.revrobotics.spark.SparkMax;
import com.revrobotics.spark.config.SparkMaxConfig;
import com.revrobotics.spark.SparkLowLevel.MotorType;
import edu.wpi.first.networktables.GenericEntry;
@@ -16,28 +15,44 @@ import edu.wpi.first.wpilibj2.command.SubsystemBase;
public class Grimpeur extends SubsystemBase {
ShuffleboardTab teb = Shuffleboard.getTab("teb");
SparkMax grimpeur1 = new SparkMax(3,MotorType.kBrushless);
SparkMax grimpeur2 = new SparkMax(12,MotorType.kBrushless);
SparkMaxConfig slaveConfig = new SparkMaxConfig();
SparkMax grimpeur1 = new SparkMax(3, MotorType.kBrushless);
SparkMax grimpeur2 = new SparkMax(12, MotorType.kBrushless);
// SparkMaxConfig slaveConfig = new SparkMaxConfig();
DigitalInput limit = new DigitalInput(0);
private GenericEntry EncodeurGrimpeur =
teb.add("Position haut grimpeur", 105).getEntry();
public void Grimper(double vitesse){
private GenericEntry EncodeurGrimpeur = teb.add("Position haut grimpeur", 100).getEntry();
// public void Grimper(double vitesse){
// grimpeur1.configure(slaveConfig, ResetMode.kNoResetSafeParameters,
// PersistMode.kPersistParameters);
// grimpeur2.configure(slaveConfig.follow(grimpeur1),
// ResetMode.kNoResetSafeParameters, PersistMode.kPersistParameters);
// grimpeur1.set(vitesse);
// }
public void GrimperGauche(double vitesse) {
grimpeur1.set(vitesse);
}
public void GrimperDroit(double vitesse) {
grimpeur2.set(vitesse);
}
public double Position(){
public double Position() {
return grimpeur1.getEncoder().getPosition();
}
public void Reset(){
public void Reset() {
grimpeur1.getEncoder().setPosition(0);
}
public boolean Limit(){
public boolean Limit() {
return limit.get();
}
public double PositionFinal(){
return EncodeurGrimpeur.getDouble(105);
public double PositionFinal() {
return EncodeurGrimpeur.getDouble(100);
}
/** Creates a new Grimpeur. */
public Grimpeur() {
teb.addDouble("encodeur grimpeur", this::Position);

View File

@@ -0,0 +1,149 @@
// /* Generated by Phoenix Tuner X */
// package frc.robot.subsystems;
// import edu.wpi.first.networktables.GenericEntry;
// import edu.wpi.first.wpilibj.DriverStation;
// import edu.wpi.first.wpilibj.Timer;
// import edu.wpi.first.wpilibj.shuffleboard.BuiltInWidgets;
// import edu.wpi.first.wpilibj.shuffleboard.Shuffleboard;
// import edu.wpi.first.wpilibj.shuffleboard.ShuffleboardTab;
// import edu.wpi.first.wpilibj2.command.Command;
// import edu.wpi.first.wpilibj2.command.SubsystemBase;
// import com.ctre.phoenix6.CANBus;
// import com.ctre.phoenix6.controls.SolidColor;
// import com.ctre.phoenix6.hardware.CANdle;
// import com.ctre.phoenix6.signals.RGBWColor;
// /**
// * Subsystem that controls an addressable LED strip using a CANdle.
// */
// public class LEDSubsystem extends SubsystemBase {
// Timer _timer;
// boolean q = true;
// ShuffleboardTab teb = Shuffleboard.getTab("teb");
// private GenericEntry equipe =
// teb.add("equipe commence (bleu = ouvert, rouge = fermé)", true).withWidget(BuiltInWidgets.kToggleSwitch).getEntry();
// private final CANBus kCANBus = new CANBus("rio");
// private final CANdle m_candle = new CANdle(17, kCANBus);
// public void Bleu(){
// m_candle.setControl(new SolidColor(0, 80).withColor(new RGBWColor(255, 0, 0, 0)));
// }
// public void Rouge(){
// m_candle.setControl(new SolidColor(0, 80).withColor(new RGBWColor(0, 0, 255, 0)));
// }
// public void Vert(){
// m_candle.setControl(new SolidColor(0, 80).withColor(new RGBWColor(0, 255, 0, 0)));
// }
// public void Noir(){
// m_candle.setControl(new SolidColor(0, 80).withColor(new RGBWColor(0, 0, 0, 0)));
// }
// public void Flash(boolean couleur){
// Timer timer = new Timer();
// if(timer.get() <0.5){
// if(couleur){
// Bleu();
// }
// else{
// Rouge();
// }
// }
// else{
// Noir();
// timer.reset();
// }
// }
// public LEDSubsystem() {
// setDefaultCommand(updateLEDs());
// _timer = new Timer();
// _timer.start();
// }
// public boolean Equipe(){
// return equipe.getBoolean(false);
// }
// /**
// * Updates the animations and LEDs of the CANdle.
// *
// * @return Command to run
// */
// public Command updateLEDs() {
// return run(() -> {
// // if(q){
// // _timer.reset();
// // q = false;
// // }
// double temps = _timer.get();
// System.out.println(temps);
// if(Equipe()){
// if(temps > 30){
// Vert();
// }
// else if(temps > 52){
// Bleu();
// }
// else if(temps > 55){
// Flash(true);
// }
// else if(temps > 67){
// Rouge();
// }
// else if(temps > 70){
// Flash(false);
// }
// else if(temps > 103){
// Bleu();
// }
// else if(temps > 105){
// Flash(true);
// }
// else if(temps > 127){
// Rouge();
// }
// else if(temps > 130){
// Flash(false);
// }
// else if(temps < 140){
// Vert();
// }
// }
// else{
// if(temps > 110){
// Vert();
// }
// else if(temps > 88){
// Rouge();
// }
// else if(temps > 85){
// Flash(false);
// }
// else if(temps > 63){
// Bleu();
// }
// else if(temps > 60){
// Flash(true);
// }
// else if(temps > 33){
// Rouge();
// }
// else if(temps > 30){
// Flash(false);
// }
// else if(temps > 13){
// Bleu();
// }
// else if(temps > 10){
// Flash(true);
// }
// else if(temps < 10){
// Vert();
// }
// }
// // _timer.stop();
// });
// }
// }

View File

@@ -1,136 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
package frc.robot.subsystems;
import java.util.Optional;
import com.ctre.phoenix.led.CANdle;
import com.ctre.phoenix.led.RainbowAnimation;
import edu.wpi.first.networktables.GenericEntry;
import edu.wpi.first.wpilibj.DriverStation;
import edu.wpi.first.wpilibj.DriverStation.Alliance;
import edu.wpi.first.wpilibj.shuffleboard.BuiltInWidgets;
import edu.wpi.first.wpilibj.shuffleboard.Shuffleboard;
import edu.wpi.first.wpilibj.shuffleboard.ShuffleboardTab;
import edu.wpi.first.wpilibj2.command.SubsystemBase;
public class Led extends SubsystemBase {
ShuffleboardTab teb = Shuffleboard.getTab("teb");
private GenericEntry equipe =
teb.add("equipe commence (bleu = ouvert, rouge = fermé)", true).withWidget(BuiltInWidgets.kToggleSwitch).getEntry();
CANdle CANDle = new CANdle(17);
RainbowAnimation rainbowAnim = new RainbowAnimation();
public void bleu(){
CANDle.setLEDs(0, 0, 255,0,0,8);
CANDle.setLEDs(0, 0, 255,0,16,8);
CANDle.setLEDs(0, 0, 255,0,32,8);
CANDle.setLEDs(0, 0, 255,0,56,8);
CANDle.setLEDs(0, 0, 255,0,72,8);
CANDle.setLEDs(0, 0, 255,0,88,8);
CANDle.setLEDs(0, 0, 255,0,104,8);
CANDle.setLEDs(0, 0, 255,0,120,8);
CANDle.setLEDs(0, 0, 255,0,136,8);
}
public void Vert1(){
CANDle.setLEDs(0, 255, 0,0,0,8);
CANDle.setLEDs(0, 255, 0,0,16,8);
CANDle.setLEDs(0, 255, 0,0,32,8);
CANDle.setLEDs(0, 255, 0,0,56,8);
CANDle.setLEDs(0, 255, 0,0,72,8);
CANDle.setLEDs(0, 255, 0,0,88,8);
CANDle.setLEDs(0, 255, 0,0,104,8);
CANDle.setLEDs(0, 255, 0,0,120,8);
CANDle.setLEDs(0, 255, 0,0,136,8);
}
public void Rouge(){
CANDle.setLEDs(255, 0, 0,0,0,8);
CANDle.setLEDs(255, 0, 0,0,16,8);
CANDle.setLEDs(255, 0, 0,0,32,8);
CANDle.setLEDs(255, 0, 0,0,48,8);
CANDle.setLEDs(255, 0, 0,0,64,8);
CANDle.setLEDs(255, 0, 0,0,80,8);
CANDle.setLEDs(255, 0, 0,0,96,8);
CANDle.setLEDs(255, 0, 0,0,112,8);
CANDle.setLEDs(255, 0, 0,0,128,8);
}
public void Jaune2(){
CANDle.setLEDs(255, 255, 0,0,8,8);
CANDle.setLEDs(255, 255, 0,0,24,8);
CANDle.setLEDs(255, 255, 0,0,40,8);
CANDle.setLEDs(255, 255, 0,0,56,8);
CANDle.setLEDs(255, 255, 0,0,72,8);
CANDle.setLEDs(255, 255, 0,0,88,8);
CANDle.setLEDs(255, 255, 0,0,104,8);
CANDle.setLEDs(255, 255, 0,0,120,8);
CANDle.setLEDs(255, 255, 0,0,136,8);
}
public void Rouge2(){
CANDle.setLEDs(255, 0, 0,0,8,8);
CANDle.setLEDs(255, 0, 0,0,24,8);
CANDle.setLEDs(255, 0, 0,0,40,8);
CANDle.setLEDs(255, 0, 0,0,56,8);
CANDle.setLEDs(255, 0, 0,0,72,8);
CANDle.setLEDs(255, 0, 0,0,88,8);
CANDle.setLEDs(255, 0, 0,0,104,8);
CANDle.setLEDs(255, 0, 0,0,120,8);
CANDle.setLEDs(255, 0, 0,0,136,8);
}
public void RainBow(){
CANDle.animate(rainbowAnim);
}
public void RainBowStop(){
CANDle.animate(null);
}
public boolean Equipe(){
return equipe.getBoolean(true);
}
/** Creates a new Led. */
public Led() {}
@Override
public void periodic() {
double temps = DriverStation.getMatchTime();
if(temps > 20 && temps < 30){
Vert1();
}
if(Equipe()){
if(temps > 30 && temps < 55){
bleu();
}
else if(temps > 30 && temps < 80){
Rouge();
}
else if(temps > 80 && temps < 105){
bleu();
}
else if(temps > 105 && temps < 130){
Rouge();
}
else{
RainBow();
}
}
else{
if(temps > 30 && temps < 55){
Rouge();
}
else if(temps > 30 && temps < 80){
bleu();
}
else if(temps > 80 && temps < 105){
Rouge();
}
else if(temps > 105 && temps < 130){
bleu();
}
else{
RainBow();
}
}
// This method will be called once per scheduler run
}
}

View File

@@ -22,13 +22,13 @@ public class LimeLight3 extends SubsystemBase {
}
public double[] getBotPoseBlue(){
NetworkTable limelightTable = NetworkTableInstance.getDefault().getTable("limelight-balaie");
NetworkTableEntry BotPoseEntry = limelightTable.getEntry("botpose_orb_wpiblue");
NetworkTableEntry BotPoseEntry = limelightTable.getEntry("botpose_wpiblue");
double[] BotPose = BotPoseEntry.getDoubleArray(new double[7]);
return BotPose;
}
public double[] getBotPoseRed(){
NetworkTable limelightTable = NetworkTableInstance.getDefault().getTable("limelight-balaie");
NetworkTableEntry BotPoseEntry = limelightTable.getEntry("botpose_orb_wpired");
NetworkTableEntry BotPoseEntry = limelightTable.getEntry("botpose_wpired");
double[] BotPose = BotPoseEntry.getDoubleArray(new double[7]);
return BotPose;
}

View File

@@ -52,7 +52,28 @@ NetworkTable table = NetworkTableInstance.getDefault().getTable("limelight-tag")
}
public double Calcule(double x1, double x2, double y1, double y2, double angle)
{
return Math.atan((x2 - x1) / (y2 - y1)) * (180 / Math.PI) - angle;
// if(x1 > x2){
// if(y1 > y2){
// return Math.atan(90-((x2 - x1) / (y2 - y1))) * (180 / Math.PI) - angle;
// }
// else{
// return Math.atan((x2 - x1) / (y2 - y1)) * (180 / Math.PI)+90 - angle;
// }
// }
// else{
// if(y1 > y2){
// return Math.atan((x2 - x1) / (y2 - y1))* (180 / Math.PI)+270 - angle;
// }
// else{
// return Math.atan(90-((x2 - x1) / (y2 - y1))) * (180 / Math.PI)+180 - angle;
// }
// }
if(y1 > y2){
return Math.toDegrees(Math.atan((x2 - x1) /(y2 - y1))) - angle;
}
else{
return Math.toDegrees(-Math.atan((x2 - x1) / (y2 - y1))) - angle;
}
}
@Override
public void periodic() {

View File

@@ -1,9 +1,9 @@
{
"fileName": "PathplannerLib-2025.2.7.json",
"fileName": "PathplannerLib-2026.1.2.json",
"name": "PathplannerLib",
"version": "2025.2.7",
"version": "2026.1.2",
"uuid": "1b42324f-17c6-4875-8e77-1c312bc8c786",
"frcYear": "2025",
"frcYear": "2026",
"mavenUrls": [
"https://3015rangerrobotics.github.io/pathplannerlib/repo"
],
@@ -12,7 +12,7 @@
{
"groupId": "com.pathplanner.lib",
"artifactId": "PathplannerLib-java",
"version": "2025.2.7"
"version": "2026.1.2"
}
],
"jniDependencies": [],
@@ -20,7 +20,7 @@
{
"groupId": "com.pathplanner.lib",
"artifactId": "PathplannerLib-cpp",
"version": "2025.2.7",
"version": "2026.1.2",
"libName": "PathplannerLib",
"headerClassifier": "headers",
"sharedLibrary": false,

View File

@@ -1,50 +1,50 @@
{
"fileName": "Phoenix5-5.35.1.json",
"fileName": "Phoenix5-5.36.0.json",
"name": "CTRE-Phoenix (v5)",
"version": "5.35.1",
"frcYear": "2025",
"version": "5.36.0",
"frcYear": "2026",
"uuid": "ab676553-b602-441f-a38d-f1296eff6537",
"mavenUrls": [
"https://maven.ctr-electronics.com/release/"
],
"jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix/Phoenix5-frc2025-latest.json",
"jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix/Phoenix5-frc2026-latest.json",
"requires": [
{
"uuid": "e995de00-2c64-4df5-8831-c1441420ff19",
"errorMessage": "Phoenix 5 requires low-level libraries from Phoenix 6. Please add the Phoenix 6 vendordep before adding Phoenix 5.",
"offlineFileName": "Phoenix6-frc2025-latest.json",
"onlineUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2025-latest.json"
"offlineFileName": "Phoenix6-frc2026-latest.json",
"onlineUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2026-latest.json"
}
],
"conflictsWith": [
{
"uuid": "e7900d8d-826f-4dca-a1ff-182f658e98af",
"errorMessage": "Users must use the Phoenix 5 replay vendordep when using the Phoenix 6 replay vendordep.",
"offlineFileName": "Phoenix6-replay-frc2025-latest.json"
"offlineFileName": "Phoenix6-replay-frc2026-latest.json"
},
{
"uuid": "fbc886a4-2cec-40c0-9835-71086a8cc3df",
"errorMessage": "Users cannot have both the replay and regular Phoenix 5 vendordeps in their robot program.",
"offlineFileName": "Phoenix5-replay-frc2025-latest.json"
"offlineFileName": "Phoenix5-replay-frc2026-latest.json"
}
],
"javaDependencies": [
{
"groupId": "com.ctre.phoenix",
"artifactId": "api-java",
"version": "5.35.1"
"version": "5.36.0"
},
{
"groupId": "com.ctre.phoenix",
"artifactId": "wpiapi-java",
"version": "5.35.1"
"version": "5.36.0"
}
],
"jniDependencies": [
{
"groupId": "com.ctre.phoenix",
"artifactId": "cci",
"version": "5.35.1",
"version": "5.36.0",
"isJar": false,
"skipInvalidPlatforms": true,
"validPlatforms": [
@@ -58,7 +58,7 @@
{
"groupId": "com.ctre.phoenix.sim",
"artifactId": "cci-sim",
"version": "5.35.1",
"version": "5.36.0",
"isJar": false,
"skipInvalidPlatforms": true,
"validPlatforms": [
@@ -74,7 +74,7 @@
{
"groupId": "com.ctre.phoenix",
"artifactId": "wpiapi-cpp",
"version": "5.35.1",
"version": "5.36.0",
"libName": "CTRE_Phoenix_WPI",
"headerClassifier": "headers",
"sharedLibrary": true,
@@ -90,7 +90,7 @@
{
"groupId": "com.ctre.phoenix",
"artifactId": "api-cpp",
"version": "5.35.1",
"version": "5.36.0",
"libName": "CTRE_Phoenix",
"headerClassifier": "headers",
"sharedLibrary": true,
@@ -106,7 +106,7 @@
{
"groupId": "com.ctre.phoenix",
"artifactId": "cci",
"version": "5.35.1",
"version": "5.36.0",
"libName": "CTRE_PhoenixCCI",
"headerClassifier": "headers",
"sharedLibrary": true,
@@ -122,7 +122,7 @@
{
"groupId": "com.ctre.phoenix.sim",
"artifactId": "wpiapi-cpp-sim",
"version": "5.35.1",
"version": "5.36.0",
"libName": "CTRE_Phoenix_WPISim",
"headerClassifier": "headers",
"sharedLibrary": true,
@@ -138,7 +138,7 @@
{
"groupId": "com.ctre.phoenix.sim",
"artifactId": "api-cpp-sim",
"version": "5.35.1",
"version": "5.36.0",
"libName": "CTRE_PhoenixSim",
"headerClassifier": "headers",
"sharedLibrary": true,
@@ -154,7 +154,7 @@
{
"groupId": "com.ctre.phoenix.sim",
"artifactId": "cci-sim",
"version": "5.35.1",
"version": "5.36.0",
"libName": "CTRE_PhoenixCCISim",
"headerClassifier": "headers",
"sharedLibrary": true,

View File

@@ -1,32 +1,32 @@
{
"fileName": "Phoenix6-frc2025-latest.json",
"fileName": "Phoenix6-26.1.3.json",
"name": "CTRE-Phoenix (v6)",
"version": "25.4.0",
"frcYear": "2025",
"version": "26.1.3",
"frcYear": "2026",
"uuid": "e995de00-2c64-4df5-8831-c1441420ff19",
"mavenUrls": [
"https://maven.ctr-electronics.com/release/"
],
"jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2025-latest.json",
"jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2026-latest.json",
"conflictsWith": [
{
"uuid": "e7900d8d-826f-4dca-a1ff-182f658e98af",
"errorMessage": "Users can not have both the replay and regular Phoenix 6 vendordeps in their robot program.",
"offlineFileName": "Phoenix6-replay-frc2025-latest.json"
"offlineFileName": "Phoenix6-replay-frc2026-latest.json"
}
],
"javaDependencies": [
{
"groupId": "com.ctre.phoenix6",
"artifactId": "wpiapi-java",
"version": "25.4.0"
"version": "26.1.3"
}
],
"jniDependencies": [
{
"groupId": "com.ctre.phoenix6",
"artifactId": "api-cpp",
"version": "25.4.0",
"version": "26.1.3",
"isJar": false,
"skipInvalidPlatforms": true,
"validPlatforms": [
@@ -40,7 +40,7 @@
{
"groupId": "com.ctre.phoenix6",
"artifactId": "tools",
"version": "25.4.0",
"version": "26.1.3",
"isJar": false,
"skipInvalidPlatforms": true,
"validPlatforms": [
@@ -54,7 +54,7 @@
{
"groupId": "com.ctre.phoenix6.sim",
"artifactId": "api-cpp-sim",
"version": "25.4.0",
"version": "26.1.3",
"isJar": false,
"skipInvalidPlatforms": true,
"validPlatforms": [
@@ -68,7 +68,7 @@
{
"groupId": "com.ctre.phoenix6.sim",
"artifactId": "tools-sim",
"version": "25.4.0",
"version": "26.1.3",
"isJar": false,
"skipInvalidPlatforms": true,
"validPlatforms": [
@@ -82,7 +82,7 @@
{
"groupId": "com.ctre.phoenix6.sim",
"artifactId": "simTalonSRX",
"version": "25.4.0",
"version": "26.1.3",
"isJar": false,
"skipInvalidPlatforms": true,
"validPlatforms": [
@@ -96,7 +96,7 @@
{
"groupId": "com.ctre.phoenix6.sim",
"artifactId": "simVictorSPX",
"version": "25.4.0",
"version": "26.1.3",
"isJar": false,
"skipInvalidPlatforms": true,
"validPlatforms": [
@@ -110,21 +110,7 @@
{
"groupId": "com.ctre.phoenix6.sim",
"artifactId": "simPigeonIMU",
"version": "25.4.0",
"isJar": false,
"skipInvalidPlatforms": true,
"validPlatforms": [
"windowsx86-64",
"linuxx86-64",
"linuxarm64",
"osxuniversal"
],
"simMode": "swsim"
},
{
"groupId": "com.ctre.phoenix6.sim",
"artifactId": "simCANCoder",
"version": "25.4.0",
"version": "26.1.3",
"isJar": false,
"skipInvalidPlatforms": true,
"validPlatforms": [
@@ -138,7 +124,7 @@
{
"groupId": "com.ctre.phoenix6.sim",
"artifactId": "simProTalonFX",
"version": "25.4.0",
"version": "26.1.3",
"isJar": false,
"skipInvalidPlatforms": true,
"validPlatforms": [
@@ -152,7 +138,7 @@
{
"groupId": "com.ctre.phoenix6.sim",
"artifactId": "simProTalonFXS",
"version": "25.4.0",
"version": "26.1.3",
"isJar": false,
"skipInvalidPlatforms": true,
"validPlatforms": [
@@ -166,7 +152,7 @@
{
"groupId": "com.ctre.phoenix6.sim",
"artifactId": "simProCANcoder",
"version": "25.4.0",
"version": "26.1.3",
"isJar": false,
"skipInvalidPlatforms": true,
"validPlatforms": [
@@ -180,7 +166,7 @@
{
"groupId": "com.ctre.phoenix6.sim",
"artifactId": "simProPigeon2",
"version": "25.4.0",
"version": "26.1.3",
"isJar": false,
"skipInvalidPlatforms": true,
"validPlatforms": [
@@ -194,7 +180,7 @@
{
"groupId": "com.ctre.phoenix6.sim",
"artifactId": "simProCANrange",
"version": "25.4.0",
"version": "26.1.3",
"isJar": false,
"skipInvalidPlatforms": true,
"validPlatforms": [
@@ -208,7 +194,7 @@
{
"groupId": "com.ctre.phoenix6.sim",
"artifactId": "simProCANdi",
"version": "25.4.0",
"version": "26.1.3",
"isJar": false,
"skipInvalidPlatforms": true,
"validPlatforms": [
@@ -222,7 +208,7 @@
{
"groupId": "com.ctre.phoenix6.sim",
"artifactId": "simProCANdle",
"version": "25.4.0",
"version": "26.1.3",
"isJar": false,
"skipInvalidPlatforms": true,
"validPlatforms": [
@@ -238,7 +224,7 @@
{
"groupId": "com.ctre.phoenix6",
"artifactId": "wpiapi-cpp",
"version": "25.4.0",
"version": "26.1.3",
"libName": "CTRE_Phoenix6_WPI",
"headerClassifier": "headers",
"sharedLibrary": true,
@@ -254,7 +240,7 @@
{
"groupId": "com.ctre.phoenix6",
"artifactId": "tools",
"version": "25.4.0",
"version": "26.1.3",
"libName": "CTRE_PhoenixTools",
"headerClassifier": "headers",
"sharedLibrary": true,
@@ -270,7 +256,7 @@
{
"groupId": "com.ctre.phoenix6.sim",
"artifactId": "wpiapi-cpp-sim",
"version": "25.4.0",
"version": "26.1.3",
"libName": "CTRE_Phoenix6_WPISim",
"headerClassifier": "headers",
"sharedLibrary": true,
@@ -286,7 +272,7 @@
{
"groupId": "com.ctre.phoenix6.sim",
"artifactId": "tools-sim",
"version": "25.4.0",
"version": "26.1.3",
"libName": "CTRE_PhoenixTools_Sim",
"headerClassifier": "headers",
"sharedLibrary": true,
@@ -302,7 +288,7 @@
{
"groupId": "com.ctre.phoenix6.sim",
"artifactId": "simTalonSRX",
"version": "25.4.0",
"version": "26.1.3",
"libName": "CTRE_SimTalonSRX",
"headerClassifier": "headers",
"sharedLibrary": true,
@@ -318,7 +304,7 @@
{
"groupId": "com.ctre.phoenix6.sim",
"artifactId": "simVictorSPX",
"version": "25.4.0",
"version": "26.1.3",
"libName": "CTRE_SimVictorSPX",
"headerClassifier": "headers",
"sharedLibrary": true,
@@ -334,7 +320,7 @@
{
"groupId": "com.ctre.phoenix6.sim",
"artifactId": "simPigeonIMU",
"version": "25.4.0",
"version": "26.1.3",
"libName": "CTRE_SimPigeonIMU",
"headerClassifier": "headers",
"sharedLibrary": true,
@@ -347,26 +333,10 @@
],
"simMode": "swsim"
},
{
"groupId": "com.ctre.phoenix6.sim",
"artifactId": "simCANCoder",
"version": "25.4.0",
"libName": "CTRE_SimCANCoder",
"headerClassifier": "headers",
"sharedLibrary": true,
"skipInvalidPlatforms": true,
"binaryPlatforms": [
"windowsx86-64",
"linuxx86-64",
"linuxarm64",
"osxuniversal"
],
"simMode": "swsim"
},
{
"groupId": "com.ctre.phoenix6.sim",
"artifactId": "simProTalonFX",
"version": "25.4.0",
"version": "26.1.3",
"libName": "CTRE_SimProTalonFX",
"headerClassifier": "headers",
"sharedLibrary": true,
@@ -382,7 +352,7 @@
{
"groupId": "com.ctre.phoenix6.sim",
"artifactId": "simProTalonFXS",
"version": "25.4.0",
"version": "26.1.3",
"libName": "CTRE_SimProTalonFXS",
"headerClassifier": "headers",
"sharedLibrary": true,
@@ -398,7 +368,7 @@
{
"groupId": "com.ctre.phoenix6.sim",
"artifactId": "simProCANcoder",
"version": "25.4.0",
"version": "26.1.3",
"libName": "CTRE_SimProCANcoder",
"headerClassifier": "headers",
"sharedLibrary": true,
@@ -414,7 +384,7 @@
{
"groupId": "com.ctre.phoenix6.sim",
"artifactId": "simProPigeon2",
"version": "25.4.0",
"version": "26.1.3",
"libName": "CTRE_SimProPigeon2",
"headerClassifier": "headers",
"sharedLibrary": true,
@@ -430,7 +400,7 @@
{
"groupId": "com.ctre.phoenix6.sim",
"artifactId": "simProCANrange",
"version": "25.4.0",
"version": "26.1.3",
"libName": "CTRE_SimProCANrange",
"headerClassifier": "headers",
"sharedLibrary": true,
@@ -446,7 +416,7 @@
{
"groupId": "com.ctre.phoenix6.sim",
"artifactId": "simProCANdi",
"version": "25.4.0",
"version": "26.1.3",
"libName": "CTRE_SimProCANdi",
"headerClassifier": "headers",
"sharedLibrary": true,
@@ -462,7 +432,7 @@
{
"groupId": "com.ctre.phoenix6.sim",
"artifactId": "simProCANdle",
"version": "25.4.0",
"version": "26.1.3",
"libName": "CTRE_SimProCANdle",
"headerClassifier": "headers",
"sharedLibrary": true,

View File

@@ -1,25 +1,55 @@
{
"fileName": "REVLib.json",
"name": "REVLib",
"version": "2025.0.3",
"frcYear": "2025",
"version": "2026.0.5",
"frcYear": "2026",
"uuid": "3f48eb8c-50fe-43a6-9cb7-44c86353c4cb",
"mavenUrls": [
"https://maven.revrobotics.com/"
],
"jsonUrl": "https://software-metadata.revrobotics.com/REVLib-2025.json",
"jsonUrl": "https://software-metadata.revrobotics.com/REVLib-2026.json",
"javaDependencies": [
{
"groupId": "com.revrobotics.frc",
"artifactId": "REVLib-java",
"version": "2025.0.3"
"version": "2026.0.5"
}
],
"jniDependencies": [
{
"groupId": "com.revrobotics.frc",
"artifactId": "REVLib-driver",
"version": "2025.0.3",
"version": "2026.0.5",
"skipInvalidPlatforms": true,
"isJar": false,
"validPlatforms": [
"windowsx86-64",
"linuxarm64",
"linuxx86-64",
"linuxathena",
"linuxarm32",
"osxuniversal"
]
},
{
"groupId": "com.revrobotics.frc",
"artifactId": "RevLibBackendDriver",
"version": "2026.0.5",
"skipInvalidPlatforms": true,
"isJar": false,
"validPlatforms": [
"windowsx86-64",
"linuxarm64",
"linuxx86-64",
"linuxathena",
"linuxarm32",
"osxuniversal"
]
},
{
"groupId": "com.revrobotics.frc",
"artifactId": "RevLibWpiBackendDriver",
"version": "2026.0.5",
"skipInvalidPlatforms": true,
"isJar": false,
"validPlatforms": [
@@ -36,7 +66,7 @@
{
"groupId": "com.revrobotics.frc",
"artifactId": "REVLib-cpp",
"version": "2025.0.3",
"version": "2026.0.5",
"libName": "REVLib",
"headerClassifier": "headers",
"sharedLibrary": false,
@@ -53,7 +83,7 @@
{
"groupId": "com.revrobotics.frc",
"artifactId": "REVLib-driver",
"version": "2025.0.3",
"version": "2026.0.5",
"libName": "REVLibDriver",
"headerClassifier": "headers",
"sharedLibrary": false,
@@ -66,6 +96,38 @@
"linuxarm32",
"osxuniversal"
]
},
{
"groupId": "com.revrobotics.frc",
"artifactId": "RevLibBackendDriver",
"version": "2026.0.5",
"libName": "BackendDriver",
"sharedLibrary": true,
"skipInvalidPlatforms": true,
"binaryPlatforms": [
"windowsx86-64",
"linuxarm64",
"linuxx86-64",
"linuxathena",
"linuxarm32",
"osxuniversal"
]
},
{
"groupId": "com.revrobotics.frc",
"artifactId": "RevLibWpiBackendDriver",
"version": "2026.0.5",
"libName": "REVLibWpi",
"sharedLibrary": true,
"skipInvalidPlatforms": true,
"binaryPlatforms": [
"windowsx86-64",
"linuxarm64",
"linuxx86-64",
"linuxathena",
"linuxarm32",
"osxuniversal"
]
}
]
}

View File

@@ -3,7 +3,7 @@
"name": "WPILib-New-Commands",
"version": "1.0.0",
"uuid": "111e20f7-815e-48f8-9dd6-e675ce75b266",
"frcYear": "2025",
"frcYear": "2026",
"mavenUrls": [],
"jsonUrl": "",
"javaDependencies": [
@@ -25,6 +25,7 @@
"sharedLibrary": true,
"skipInvalidPlatforms": true,
"binaryPlatforms": [
"linuxsystemcore",
"linuxathena",
"linuxarm32",
"linuxarm64",