Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 1 | [ |
| 2 | { |
James Kuszmaul | cf32412 | 2023-01-14 14:07:17 -0800 | [diff] [blame] | 3 | "name": "Motor Control", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 4 | "description": "Control a single motor with a joystick, displaying the movement of the motor using an encoder.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 5 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 6 | "Basic Robot", |
| 7 | "Encoder", |
| 8 | "SmartDashboard", |
| 9 | "Joystick" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 10 | ], |
James Kuszmaul | cf32412 | 2023-01-14 14:07:17 -0800 | [diff] [blame] | 11 | "foldername": "MotorControl", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 12 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 13 | "commandversion": 2 |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 14 | }, |
| 15 | { |
| 16 | "name": "Relay", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 17 | "description": "Control a relay from joystick buttons.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 18 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 19 | "Hardware", |
| 20 | "Relay", |
| 21 | "Joystick" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 22 | ], |
| 23 | "foldername": "Relay", |
| 24 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 25 | "commandversion": 2 |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 26 | }, |
| 27 | { |
| 28 | "name": "PDP CAN Monitoring", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 29 | "description": "Monitor Power Distribution data such as voltage, current, temperature, etc.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 30 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 31 | "Hardware", |
| 32 | "PDP", |
| 33 | "SmartDashboard" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 34 | ], |
| 35 | "foldername": "CANPDP", |
| 36 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 37 | "commandversion": 2 |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 38 | }, |
| 39 | { |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 40 | "name": "Mechanism2d", |
| 41 | "foldername": "Mechanism2d", |
| 42 | "gradlebase": "cpp", |
| 43 | "description": "Display mechanism states on a dashboard with Mechanism2d.", |
| 44 | "tags": [ |
| 45 | "Basic Robot", |
| 46 | "Elevator", |
| 47 | "Arm", |
| 48 | "Analog", |
| 49 | "Joystick", |
| 50 | "SmartDashboard", |
| 51 | "Mechanism2d" |
| 52 | ], |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 53 | "commandversion": 2 |
| 54 | }, |
| 55 | { |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 56 | "name": "Solenoids", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 57 | "description": "Control a single and double solenoid from joystick buttons.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 58 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 59 | "Hardware", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 60 | "Joystick", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 61 | "Shuffleboard", |
| 62 | "Pneumatics" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 63 | ], |
| 64 | "foldername": "Solenoid", |
| 65 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 66 | "commandversion": 2 |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 67 | }, |
| 68 | { |
| 69 | "name": "Encoder", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 70 | "description": "View values from a quadrature encoder.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 71 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 72 | "Hardware", |
| 73 | "Encoder", |
| 74 | "SmartDashboard" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 75 | ], |
| 76 | "foldername": "Encoder", |
| 77 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 78 | "commandversion": 2 |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 79 | }, |
| 80 | { |
James Kuszmaul | cf32412 | 2023-01-14 14:07:17 -0800 | [diff] [blame] | 81 | "name": "EventLoop", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 82 | "description": "Manage a ball system using EventLoop and BooleanEvent.", |
James Kuszmaul | cf32412 | 2023-01-14 14:07:17 -0800 | [diff] [blame] | 83 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 84 | "Basic Robot", |
| 85 | "Flywheel", |
James Kuszmaul | cf32412 | 2023-01-14 14:07:17 -0800 | [diff] [blame] | 86 | "EventLoop" |
| 87 | ], |
| 88 | "foldername": "EventLoop", |
| 89 | "gradlebase": "cpp", |
| 90 | "commandversion": 2 |
| 91 | }, |
| 92 | { |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 93 | "name": "Arcade Drive", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 94 | "description": "Control a differential drivetrain with single-joystick arcade drive in teleop.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 95 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 96 | "Basic Robot", |
| 97 | "Differential Drive", |
| 98 | "Joystick" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 99 | ], |
| 100 | "foldername": "ArcadeDrive", |
| 101 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 102 | "commandversion": 2 |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 103 | }, |
| 104 | { |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 105 | "name": "Tank Drive", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 106 | "description": "Control a differential drive with twin-joystick tank drive in teleop.", |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 107 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 108 | "Basic Robot", |
| 109 | "Differential Drive", |
| 110 | "Joystick" |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 111 | ], |
| 112 | "foldername": "TankDrive", |
| 113 | "gradlebase": "cpp", |
| 114 | "commandversion": 2 |
| 115 | }, |
| 116 | { |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 117 | "name": "Mecanum Drive", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 118 | "description": "Control a mecanum drivetrain with a joystick in teleop.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 119 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 120 | "Basic Robot", |
| 121 | "Mecanum Drive", |
| 122 | "Joystick" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 123 | ], |
| 124 | "foldername": "MecanumDrive", |
| 125 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 126 | "commandversion": 2 |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 127 | }, |
| 128 | { |
| 129 | "name": "Ultrasonic", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 130 | "description": "View values from a ping-response ultrasonic sensor.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 131 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 132 | "Hardware", |
| 133 | "Ultrasonic", |
| 134 | "SmartDashboard", |
| 135 | "Shuffleboard" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 136 | ], |
| 137 | "foldername": "Ultrasonic", |
| 138 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 139 | "commandversion": 2 |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 140 | }, |
| 141 | { |
| 142 | "name": "UltrasonicPID", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 143 | "description": "Maintain a set distance from an obstacle with an ultrasonic sensor and PID control.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 144 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 145 | "Basic Robot", |
| 146 | "Ultrasonic", |
| 147 | "PID", |
| 148 | "Differential Drive" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 149 | ], |
| 150 | "foldername": "UltrasonicPID", |
| 151 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 152 | "commandversion": 2 |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 153 | }, |
| 154 | { |
| 155 | "name": "Gyro", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 156 | "description": "Drive a differential drive straight with a gyro sensor.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 157 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 158 | "Basic Robot", |
| 159 | "Differential Drive", |
| 160 | "PID", |
| 161 | "Gyro", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 162 | "Analog", |
| 163 | "Joystick" |
| 164 | ], |
| 165 | "foldername": "Gyro", |
| 166 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 167 | "commandversion": 2 |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 168 | }, |
| 169 | { |
| 170 | "name": "Gyro Mecanum", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 171 | "description": "Drive a mecanum drivetrain using field-oriented controls with a joystick.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 172 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 173 | "Basic Robot", |
| 174 | "Mecanum Drive", |
| 175 | "Gyro", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 176 | "Analog", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 177 | "Joystick" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 178 | ], |
| 179 | "foldername": "GyroMecanum", |
| 180 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 181 | "commandversion": 2 |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 182 | }, |
| 183 | { |
| 184 | "name": "HID Rumble", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 185 | "description": "Make human interface devices (HID) rumble.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 186 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 187 | "Hardware", |
| 188 | "XboxController" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 189 | ], |
| 190 | "foldername": "HidRumble", |
| 191 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 192 | "commandversion": 2 |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 193 | }, |
| 194 | { |
| 195 | "name": "PotentiometerPID", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 196 | "description": "Maintain elevator position setpoints with a potentiometer and PID control.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 197 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 198 | "Basic Robot", |
| 199 | "Analog", |
| 200 | "Elevator", |
| 201 | "PID", |
| 202 | "Joystick" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 203 | ], |
| 204 | "foldername": "PotentiometerPID", |
| 205 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 206 | "commandversion": 2 |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 207 | }, |
| 208 | { |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 209 | "name": "Elevator with exponential profiled PID", |
| 210 | "description": "Reach elevator position setpoints with exponential profiles and smart motor controller PID.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 211 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 212 | "Basic Robot", |
| 213 | "Elevator", |
| 214 | "Exponential Profile", |
| 215 | "Smart Motor Controller", |
| 216 | "Joystick" |
| 217 | ], |
| 218 | "foldername": "ElevatorExponentialProfile", |
| 219 | "gradlebase": "cpp", |
| 220 | "commandversion": 2 |
| 221 | }, |
| 222 | { |
| 223 | "name": "Elevator with trapezoid profiled PID", |
| 224 | "description": "Reach elevator position setpoints with trapezoid profiles and smart motor controller PID.", |
| 225 | "tags": [ |
| 226 | "Basic Robot", |
| 227 | "Elevator", |
| 228 | "Trapezoid Profile", |
| 229 | "Smart Motor Controller", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 230 | "Joystick" |
| 231 | ], |
| 232 | "foldername": "ElevatorTrapezoidProfile", |
| 233 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 234 | "commandversion": 2 |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 235 | }, |
| 236 | { |
| 237 | "name": "Elevator with profiled PID controller", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 238 | "description": "Reach elevator position setpoints with an encoder and profiled PID control.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 239 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 240 | "Basic Robot", |
| 241 | "Elevator", |
| 242 | "Profiled PID", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 243 | "Joystick" |
| 244 | ], |
| 245 | "foldername": "ElevatorProfiledPID", |
| 246 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 247 | "commandversion": 2 |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 248 | }, |
| 249 | { |
| 250 | "name": "Getting Started", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 251 | "description": "A differential-drive robot with split-stick Xbox arcade drive with a simple time-based autonomous.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 252 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 253 | "Basic Robot" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 254 | ], |
| 255 | "foldername": "GettingStarted", |
| 256 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 257 | "commandversion": 2 |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 258 | }, |
| 259 | { |
| 260 | "name": "Simple Vision", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 261 | "description": "Use the CameraServer class to stream from a USB Webcam without processing the images.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 262 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 263 | "Vision" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 264 | ], |
| 265 | "foldername": "QuickVision", |
| 266 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 267 | "commandversion": 2 |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 268 | }, |
| 269 | { |
| 270 | "name": "Intermediate Vision", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 271 | "description": "Acquire images from an attached USB camera and add some annotation to the image (as you might do for showing operators the result of some image recognition) and send it to the dashboard for display.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 272 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 273 | "Vision" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 274 | ], |
| 275 | "foldername": "IntermediateVision", |
| 276 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 277 | "commandversion": 2 |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 278 | }, |
| 279 | { |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 280 | "name": "AprilTags Vision", |
| 281 | "description": "On-roboRIO detection of AprilTags using an attached USB camera.", |
Austin Schuh | 75263e3 | 2022-02-22 18:05:32 -0800 | [diff] [blame] | 282 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 283 | "Vision", |
| 284 | "AprilTags" |
| 285 | ], |
| 286 | "foldername": "AprilTagsVision", |
| 287 | "gradlebase": "cpp", |
| 288 | "commandversion": 2 |
| 289 | }, |
| 290 | { |
| 291 | "name": "I2C Communication", |
| 292 | "description": "Communicate with external devices (such as an Arduino) using the roboRIO's I2C port.", |
| 293 | "tags": [ |
| 294 | "Hardware", |
Austin Schuh | 75263e3 | 2022-02-22 18:05:32 -0800 | [diff] [blame] | 295 | "I2C" |
| 296 | ], |
| 297 | "foldername": "I2CCommunication", |
| 298 | "gradlebase": "cpp", |
| 299 | "commandversion": 2 |
| 300 | }, |
| 301 | { |
| 302 | "name": "Digital Communication Sample", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 303 | "description": "Communicates with external devices (such as an Arduino) using the roboRIO's DIO.", |
Austin Schuh | 75263e3 | 2022-02-22 18:05:32 -0800 | [diff] [blame] | 304 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 305 | "Hardware", |
| 306 | "Digital Output" |
Austin Schuh | 75263e3 | 2022-02-22 18:05:32 -0800 | [diff] [blame] | 307 | ], |
| 308 | "foldername": "DigitalCommunication", |
| 309 | "gradlebase": "cpp", |
| 310 | "commandversion": 2 |
| 311 | }, |
Austin Schuh | 75263e3 | 2022-02-22 18:05:32 -0800 | [diff] [blame] | 312 | { |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 313 | "name": "Axis Camera Sample", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 314 | "description": "Acquire images from an Axis network camera and adds some annotation to the image (as you might do for showing operators the result of some image recognition), and sends it to the dashboard for display.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 315 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 316 | "Vision" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 317 | ], |
| 318 | "foldername": "AxisCameraSample", |
| 319 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 320 | "commandversion": 2 |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 321 | }, |
| 322 | { |
| 323 | "name": "GearsBot", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 324 | "description": "A fully functional Command-Based program for WPI's GearsBot robot.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 325 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 326 | "Complete Robot", |
| 327 | "Command-based", |
| 328 | "Differential Drive", |
| 329 | "Elevator", |
| 330 | "Arm", |
| 331 | "Analog", |
| 332 | "Digital Input", |
| 333 | "SmartDashboard", |
| 334 | "XboxController" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 335 | ], |
| 336 | "foldername": "GearsBot", |
| 337 | "gradlebase": "cpp", |
| 338 | "commandversion": 2 |
| 339 | }, |
| 340 | { |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 341 | "name": "HAL", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 342 | "description": "Use the low-level HAL C functions. This example is for advanced users.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 343 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 344 | "Basic Robot", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 345 | "HAL" |
| 346 | ], |
| 347 | "foldername": "HAL", |
| 348 | "gradlebase": "c", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 349 | "commandversion": 2 |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 350 | }, |
| 351 | { |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 352 | "name": "Shuffleboard", |
| 353 | "description": "Present various data via the Shuffleboard API.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 354 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 355 | "Basic Robot", |
| 356 | "Differential Drive", |
| 357 | "Elevator", |
| 358 | "Analog", |
| 359 | "Encoder", |
| 360 | "Shuffleboard" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 361 | ], |
| 362 | "foldername": "ShuffleBoard", |
| 363 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 364 | "commandversion": 2 |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 365 | }, |
| 366 | { |
| 367 | "name": "'Traditional' Hatchbot", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 368 | "description": "A fully-functional command-based hatchbot for the 2019 game, written in the 'traditional' style, i.e. commands are given their own classes.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 369 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 370 | "Complete Robot", |
| 371 | "Command-based", |
| 372 | "Differential Drive", |
| 373 | "Encoder", |
| 374 | "Shuffleboard", |
| 375 | "Sendable", |
| 376 | "DataLog", |
| 377 | "Pneumatics", |
| 378 | "XboxController" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 379 | ], |
| 380 | "foldername": "HatchbotTraditional", |
| 381 | "gradlebase": "cpp", |
| 382 | "commandversion": 2 |
| 383 | }, |
| 384 | { |
| 385 | "name": "'Inlined' Hatchbot", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 386 | "description": "A fully-functional command-based hatchbot for the 2019 game, written in the 'inlined' style, i.e. many commands are defined inline with lambdas.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 387 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 388 | "Complete Robot", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 389 | "Command-based", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 390 | "Differential Drive", |
| 391 | "Encoder", |
| 392 | "Shuffleboard", |
| 393 | "Sendable", |
| 394 | "DataLog", |
| 395 | "Pneumatics", |
| 396 | "PS4Controller" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 397 | ], |
| 398 | "foldername": "HatchbotInlined", |
| 399 | "gradlebase": "cpp", |
| 400 | "commandversion": 2 |
| 401 | }, |
| 402 | { |
James Kuszmaul | cf32412 | 2023-01-14 14:07:17 -0800 | [diff] [blame] | 403 | "name": "Rapid React Command Bot", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 404 | "description": "A fully-functional command-based fender bot for the 2022 game, written in the 'inlined' style, i.e. many commands are defined inline with lambdas.", |
James Kuszmaul | cf32412 | 2023-01-14 14:07:17 -0800 | [diff] [blame] | 405 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 406 | "Complete Robot", |
James Kuszmaul | cf32412 | 2023-01-14 14:07:17 -0800 | [diff] [blame] | 407 | "Command-based", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 408 | "Differential Drive", |
| 409 | "Intake", |
| 410 | "Flywheel", |
| 411 | "Encoder", |
| 412 | "Pneumatics", |
| 413 | "Digital Input", |
| 414 | "PID", |
| 415 | "XboxController" |
James Kuszmaul | cf32412 | 2023-01-14 14:07:17 -0800 | [diff] [blame] | 416 | ], |
| 417 | "foldername": "RapidReactCommandBot", |
| 418 | "gradlebase": "cpp", |
| 419 | "commandversion": 2 |
| 420 | }, |
| 421 | { |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 422 | "name": "Select Command Example", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 423 | "description": "Use SelectCommand to select an autonomous routine.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 424 | "tags": [ |
| 425 | "Command-based" |
| 426 | ], |
| 427 | "foldername": "SelectCommand", |
| 428 | "gradlebase": "cpp", |
| 429 | "commandversion": 2 |
| 430 | }, |
| 431 | { |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 432 | "name": "Frisbeebot", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 433 | "description": "A simple frisbee shooter for the 2013 game, demonstrating use of PIDSubsystem.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 434 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 435 | "Complete Robot", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 436 | "Command-based", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 437 | "Differential Drive", |
| 438 | "Flywheel", |
| 439 | "Encoder", |
| 440 | "XboxController", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 441 | "PID" |
| 442 | ], |
| 443 | "foldername": "Frisbeebot", |
| 444 | "gradlebase": "cpp", |
| 445 | "commandversion": 2 |
| 446 | }, |
| 447 | { |
| 448 | "name": "Gyro Drive Commands", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 449 | "description": "Control a robot's angle with PID and a gyro, in command-based.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 450 | "tags": [ |
| 451 | "Command-based", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 452 | "Differential Drive", |
| 453 | "Encoder", |
| 454 | "PS4Controller", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 455 | "PID", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 456 | "Profiled PID", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 457 | "Gyro" |
| 458 | ], |
| 459 | "foldername": "GyroDriveCommands", |
| 460 | "gradlebase": "cpp", |
| 461 | "commandversion": 2 |
| 462 | }, |
| 463 | { |
| 464 | "name": "SwerveBot", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 465 | "description": "Use kinematics and odometry with a swerve drive.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 466 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 467 | "Swerve Drive", |
| 468 | "Odometry", |
| 469 | "XboxController", |
| 470 | "Gyro", |
| 471 | "Encoder" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 472 | ], |
| 473 | "foldername": "SwerveBot", |
| 474 | "gradlebase": "cpp", |
| 475 | "commandversion": 2 |
| 476 | }, |
| 477 | { |
| 478 | "name": "MecanumBot", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 479 | "description": "Use kinematics and odometry with a mecanum drive.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 480 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 481 | "Mecanum Drive", |
| 482 | "Odometry", |
| 483 | "Encoder", |
| 484 | "Gyro", |
| 485 | "XboxController" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 486 | ], |
| 487 | "foldername": "MecanumBot", |
| 488 | "gradlebase": "cpp", |
| 489 | "commandversion": 2 |
| 490 | }, |
| 491 | { |
| 492 | "name": "DifferentialDriveBot", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 493 | "description": "Use kinematics and odometry with a differential drive.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 494 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 495 | "Differential Drive", |
| 496 | "Odometry", |
| 497 | "Encoder", |
| 498 | "Gyro", |
| 499 | "XboxController" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 500 | ], |
| 501 | "foldername": "DifferentialDriveBot", |
| 502 | "gradlebase": "cpp", |
| 503 | "commandversion": 2 |
| 504 | }, |
| 505 | { |
| 506 | "name": "RamseteCommand", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 507 | "description": "Follow a pre-generated trajectory with a differential drive using RamseteCommand.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 508 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 509 | "Differential Drive", |
| 510 | "Command-based", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 511 | "Ramsete", |
| 512 | "Trajectory", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 513 | "Path Following", |
| 514 | "Odometry", |
| 515 | "Encoder", |
| 516 | "Gyro", |
| 517 | "XboxController" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 518 | ], |
| 519 | "foldername": "RamseteCommand", |
| 520 | "gradlebase": "cpp", |
| 521 | "commandversion": 2 |
| 522 | }, |
| 523 | { |
| 524 | "name": "Arcade Drive Xbox Controller", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 525 | "description": "Control a differential drive with split-stick arcade drive in teleop.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 526 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 527 | "Basic Robot", |
| 528 | "Differential Drive", |
| 529 | "XboxController" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 530 | ], |
| 531 | "foldername": "ArcadeDriveXboxController", |
| 532 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 533 | "commandversion": 2 |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 534 | }, |
| 535 | { |
| 536 | "name": "Tank Drive Xbox Controller", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 537 | "description": "Control a differential drive with Xbox tank drive in teleop.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 538 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 539 | "Basic Robot", |
| 540 | "Differential Drive", |
| 541 | "XboxController" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 542 | ], |
| 543 | "foldername": "TankDriveXboxController", |
| 544 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 545 | "commandversion": 2 |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 546 | }, |
| 547 | { |
| 548 | "name": "Duty Cycle Encoder", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 549 | "description": "View values from a duty-cycle encoder.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 550 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 551 | "Hardware", |
| 552 | "Duty Cycle", |
| 553 | "Encoder", |
| 554 | "SmartDashboard" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 555 | ], |
| 556 | "foldername": "DutyCycleEncoder", |
| 557 | "gradlebase": "cpp", |
| 558 | "commandversion": 2 |
| 559 | }, |
| 560 | { |
| 561 | "name": "Duty Cycle Input", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 562 | "description": "View duty-cycle input.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 563 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 564 | "Hardware", |
| 565 | "Duty Cycle", |
| 566 | "SmartDashboard" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 567 | ], |
| 568 | "foldername": "DutyCycleInput", |
| 569 | "gradlebase": "cpp", |
| 570 | "commandversion": 2 |
| 571 | }, |
| 572 | { |
| 573 | "name": "Addressable LED", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 574 | "description": "Display a rainbow pattern on an addressable LED strip.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 575 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 576 | "Hardware", |
| 577 | "Basic Robot", |
| 578 | "AddressableLEDs" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 579 | ], |
| 580 | "foldername": "AddressableLED", |
| 581 | "gradlebase": "cpp", |
| 582 | "commandversion": 2 |
| 583 | }, |
| 584 | { |
| 585 | "name": "DMA", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 586 | "description": "Read various sensors using DMA.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 587 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 588 | "Hardware", |
| 589 | "DMA", |
| 590 | "SmartDashboard" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 591 | ], |
| 592 | "foldername": "DMA", |
| 593 | "gradlebase": "cpp", |
| 594 | "commandversion": 2 |
| 595 | }, |
| 596 | { |
| 597 | "name": "MecanumControllerCommand", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 598 | "description": "Follow a pre-generated trajectory with a mecanum drive using MecanumControllerCommand.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 599 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 600 | "Command-based", |
| 601 | "Mecanum Drive", |
| 602 | "Gyro", |
| 603 | "Encoder", |
| 604 | "Odometry", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 605 | "Trajectory", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 606 | "Path Following", |
| 607 | "XboxController" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 608 | ], |
| 609 | "foldername": "MecanumControllerCommand", |
| 610 | "gradlebase": "cpp", |
| 611 | "commandversion": 2 |
| 612 | }, |
| 613 | { |
| 614 | "name": "SwerveControllerCommand", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 615 | "description": "Follow a pre-generated trajectory with a swerve drive using SwerveControllerCommand.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 616 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 617 | "Command-based", |
| 618 | "Swerve Drive", |
| 619 | "Gyro", |
| 620 | "Encoder", |
| 621 | "Odometry", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 622 | "Trajectory", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 623 | "Path Following", |
| 624 | "XboxController" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 625 | ], |
| 626 | "foldername": "SwerveControllerCommand", |
| 627 | "gradlebase": "cpp", |
| 628 | "commandversion": 2 |
| 629 | }, |
| 630 | { |
| 631 | "name": "ArmBot", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 632 | "description": "Control an arm with ProfiledPIDSubsystem.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 633 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 634 | "Command-based", |
| 635 | "Arm", |
| 636 | "Encoder", |
| 637 | "Profiled PID", |
| 638 | "XboxController", |
| 639 | "Differential Drive" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 640 | ], |
| 641 | "foldername": "ArmBot", |
| 642 | "gradlebase": "cpp", |
| 643 | "commandversion": 2 |
| 644 | }, |
| 645 | { |
| 646 | "name": "ArmBotOffboard", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 647 | "description": "Control an arm with TrapezoidProfileSubsystem and smart motor controller PID.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 648 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 649 | "Command-based", |
| 650 | "Arm", |
| 651 | "Smart Motor Controller", |
| 652 | "Trapezoid Profile", |
| 653 | "XboxController", |
| 654 | "Differential Drive" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 655 | ], |
| 656 | "foldername": "ArmBotOffboard", |
| 657 | "gradlebase": "cpp", |
| 658 | "commandversion": 2 |
| 659 | }, |
| 660 | { |
| 661 | "name": "DriveDistanceOffboard", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 662 | "description": "Drive a differential drivetrain a set distance using TrapezoidProfileCommand and smart motor controller PID.", |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 663 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 664 | "Command-based", |
| 665 | "Differential Drive", |
| 666 | "Trapezoid Profile", |
| 667 | "Smart Motor Controller", |
| 668 | "XboxController" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 669 | ], |
| 670 | "foldername": "DriveDistanceOffboard", |
| 671 | "gradlebase": "cpp", |
| 672 | "commandversion": 2 |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 673 | }, |
| 674 | { |
| 675 | "name": "RamseteController", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 676 | "description": "Follow a pre-generated trajectory with a differential drive using RamseteController.", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 677 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 678 | "Basic Robot", |
| 679 | "Differential Drive", |
| 680 | "Ramsete", |
| 681 | "PID", |
| 682 | "Odometry", |
| 683 | "Path Following", |
| 684 | "Trajectory", |
| 685 | "XboxController" |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 686 | ], |
| 687 | "foldername": "RamseteController", |
| 688 | "gradlebase": "cpp", |
| 689 | "commandversion": 2 |
| 690 | }, |
| 691 | { |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 692 | "name": "RomiReference", |
| 693 | "description": "An example command-based robot program that can be used with the Romi reference robot design.", |
| 694 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 695 | "Romi", |
| 696 | "Command-based", |
| 697 | "Differential Drive", |
| 698 | "Digital Input", |
| 699 | "Joystick" |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 700 | ], |
| 701 | "foldername": "RomiReference", |
| 702 | "gradlebase": "cppromi", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 703 | "commandversion": 2, |
| 704 | "extravendordeps": [ |
| 705 | "romi" |
| 706 | ] |
| 707 | }, |
| 708 | { |
| 709 | "name": "XRP Reference", |
| 710 | "description": "An example command-based robot program that can be used with the XRP reference robot design.", |
| 711 | "tags": [ |
| 712 | "XRP", |
| 713 | "Command-based", |
| 714 | "Differential Drive", |
| 715 | "Digital Input", |
| 716 | "Joystick" |
| 717 | ], |
| 718 | "foldername": "XRPReference", |
| 719 | "gradlebase": "cppxrp", |
| 720 | "commandversion": 2, |
| 721 | "extravendordeps": [ |
| 722 | "xrp" |
| 723 | ] |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 724 | }, |
| 725 | { |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 726 | "name": "StateSpaceFlywheel", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 727 | "description": "Control a flywheel using a state-space model (based on values from CAD), with a Kalman Filter and LQR.", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 728 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 729 | "Basic Robot", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 730 | "Flywheel", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 731 | "State-Space", |
| 732 | "LQR", |
| 733 | "Encoder", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 734 | "Joystick" |
| 735 | ], |
| 736 | "foldername": "StateSpaceFlywheel", |
| 737 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 738 | "commandversion": 2 |
| 739 | }, |
| 740 | { |
| 741 | "name": "StateSpaceFlywheelSysId", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 742 | "description": "Control a flywheel using a state-space model (based on values from SysId), with a Kalman Filter and LQR.", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 743 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 744 | "Basic Robot", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 745 | "Flywheel", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 746 | "SysId", |
| 747 | "State-Space", |
| 748 | "LQR", |
| 749 | "Encoder", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 750 | "Joystick" |
| 751 | ], |
| 752 | "foldername": "StateSpaceFlywheelSysId", |
| 753 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 754 | "commandversion": 2 |
| 755 | }, |
| 756 | { |
| 757 | "name": "StateSpaceElevator", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 758 | "description": "Control an elevator using a state-space model (based on values from CAD), with a Kalman Filter and LQR.", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 759 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 760 | "Basic Robot", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 761 | "Elevator", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 762 | "State-Space", |
| 763 | "LQR", |
| 764 | "Encoder", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 765 | "Joystick" |
| 766 | ], |
| 767 | "foldername": "StateSpaceElevator", |
| 768 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 769 | "commandversion": 2 |
| 770 | }, |
| 771 | { |
| 772 | "name": "StateSpaceArm", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 773 | "description": "Control an arm using a state-space model (based on values from CAD), with a Kalman Filter and LQR.", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 774 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 775 | "Basic Robot", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 776 | "Arm", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 777 | "State-Space", |
| 778 | "LQR", |
| 779 | "Encoder", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 780 | "Joystick" |
| 781 | ], |
| 782 | "foldername": "StateSpaceArm", |
| 783 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 784 | "commandversion": 2 |
| 785 | }, |
| 786 | { |
| 787 | "name": "ElevatorSimulation", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 788 | "description": "Simulate an elevator.", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 789 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 790 | "Basic Robot", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 791 | "Elevator", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 792 | "State-Space", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 793 | "Simulation", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 794 | "Mechanism2d", |
| 795 | "Profiled PID" |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 796 | ], |
| 797 | "foldername": "ElevatorSimulation", |
| 798 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 799 | "commandversion": 2 |
| 800 | }, |
| 801 | { |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 802 | "name": "Elevator Exponential Profile Simulation", |
| 803 | "description": "Simulate an elevator.", |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 804 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 805 | "Basic Robot", |
| 806 | "Elevator", |
| 807 | "State-Space", |
| 808 | "Simulation", |
| 809 | "Mechanism2d", |
| 810 | "Profiled PID" |
| 811 | ], |
| 812 | "foldername": "ElevatorExponentialSimulation", |
| 813 | "gradlebase": "cpp", |
| 814 | "commandversion": 2 |
| 815 | }, |
| 816 | { |
| 817 | "name": "DifferentialDrivePoseEstimator", |
| 818 | "description": "Combine differential-drive odometry with vision data using DifferentialDrivePoseEstimator.", |
| 819 | "tags": [ |
| 820 | "Differential Drive", |
| 821 | "State-Space", |
| 822 | "Pose Estimator", |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 823 | "Vision", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 824 | "PID", |
| 825 | "XboxController" |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 826 | ], |
| 827 | "foldername": "DifferentialDrivePoseEstimator", |
| 828 | "gradlebase": "cpp", |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 829 | "commandversion": 2 |
| 830 | }, |
| 831 | { |
| 832 | "name": "MecanumDrivePoseEstimator", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 833 | "description": "Combine mecanum-drive odometry with vision data using MecanumDrivePoseEstimator.", |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 834 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 835 | "Mecanum Drive", |
| 836 | "State-Space", |
| 837 | "Pose Estimator", |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 838 | "Vision", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 839 | "PID", |
| 840 | "XboxController" |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 841 | ], |
| 842 | "foldername": "MecanumDrivePoseEstimator", |
| 843 | "gradlebase": "cpp", |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 844 | "commandversion": 2 |
| 845 | }, |
| 846 | { |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 847 | "name": "ArmSimulation", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 848 | "description": "Simulate a single-jointed arm.", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 849 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 850 | "Basic Robot", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 851 | "Arm", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 852 | "State-Space", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 853 | "Simulation", |
Austin Schuh | 75263e3 | 2022-02-22 18:05:32 -0800 | [diff] [blame] | 854 | "Mechanism2d", |
| 855 | "Preferences" |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 856 | ], |
| 857 | "foldername": "ArmSimulation", |
| 858 | "gradlebase": "cpp", |
James Kuszmaul | cf32412 | 2023-01-14 14:07:17 -0800 | [diff] [blame] | 859 | "commandversion": 2 |
| 860 | }, |
| 861 | { |
| 862 | "name": "UnitTesting", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 863 | "description": "Test a robot project with basic unit tests in simulation.", |
James Kuszmaul | cf32412 | 2023-01-14 14:07:17 -0800 | [diff] [blame] | 864 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 865 | "Intake", |
| 866 | "Pneumatics" |
James Kuszmaul | cf32412 | 2023-01-14 14:07:17 -0800 | [diff] [blame] | 867 | ], |
| 868 | "foldername": "UnitTest", |
| 869 | "gradlebase": "cpp", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 870 | "commandversion": 2, |
| 871 | "hasunittests": true |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 872 | }, |
| 873 | { |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 874 | "name": "SimpleDifferentialDriveSimulation", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 875 | "description": "Simulate a differential drivetrain and follow trajectories with RamseteController (non-command-based).", |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 876 | "tags": [ |
| 877 | "Differential Drive", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 878 | "State-Space", |
| 879 | "Ramsete", |
| 880 | "Path Following", |
| 881 | "Trajectory", |
| 882 | "Encoder", |
| 883 | "XboxController", |
| 884 | "Simulation" |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 885 | ], |
| 886 | "foldername": "SimpleDifferentialDriveSimulation", |
| 887 | "gradlebase": "cpp", |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 888 | "commandversion": 2 |
| 889 | }, |
| 890 | { |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 891 | "name": "StateSpaceDriveSimulation", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 892 | "description": "Simulate a differential drivetrain and follow trajectories with RamseteCommand (command-based).", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 893 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 894 | "Command-based", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 895 | "Differential Drive", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 896 | "State-Space", |
| 897 | "XboxController", |
| 898 | "Simulation" |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 899 | ], |
| 900 | "foldername": "StateSpaceDifferentialDriveSimulation", |
| 901 | "gradlebase": "cpp", |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 902 | "commandversion": 2 |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 903 | }, |
| 904 | { |
| 905 | "name": "SwerveDrivePoseEstimator", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 906 | "description": "Combine swerve-drive odometry with vision data using SwerveDrivePoseEstimator.", |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 907 | "tags": [ |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 908 | "Swerve Drive", |
| 909 | "State-Space", |
| 910 | "Pose Estimator", |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 911 | "Vision", |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 912 | "PID", |
| 913 | "XboxController" |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 914 | ], |
| 915 | "foldername": "SwerveDrivePoseEstimator", |
| 916 | "gradlebase": "cpp", |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame] | 917 | "commandversion": 2 |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame] | 918 | }, |
| 919 | { |
| 920 | "name": "Flywheel BangBangController", |
| 921 | "description": "A sample program to demonstrate the use of a BangBangController with a flywheel to control RPM", |
| 922 | "tags": [ |
| 923 | "Flywheel", |
| 924 | "Simulation", |
| 925 | "Joystick" |
| 926 | ], |
| 927 | "foldername": "FlywheelBangBangController", |
| 928 | "gradlebase": "cpp", |
| 929 | "commandversion": 2 |
Maxwell Henderson | 80bec32 | 2024-01-09 15:48:44 -0800 | [diff] [blame^] | 930 | }, |
| 931 | { |
| 932 | "name": "SysIdRoutine", |
| 933 | "description": "A sample command-based robot demonstrating use of the SysIdRoutine command factory", |
| 934 | "tags": [ |
| 935 | "SysId", |
| 936 | "Command-based", |
| 937 | "DataLog" |
| 938 | ], |
| 939 | "foldername": "SysId", |
| 940 | "gradlebase": "cpp", |
| 941 | "commandversion": 2 |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 942 | } |
| 943 | ] |