blob: 486e2ec62b15632e1782e626946b372090d7f442 [file] [log] [blame]
[
{
"name": "Motor Control",
"description": "Control a single motor with a joystick, displaying the movement of the motor using an encoder.",
"tags": [
"Basic Robot",
"Encoder",
"SmartDashboard",
"Joystick"
],
"foldername": "MotorControl",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Relay",
"description": "Control a relay from joystick buttons.",
"tags": [
"Hardware",
"Relay",
"Joystick"
],
"foldername": "Relay",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "PDP CAN Monitoring",
"description": "Monitor Power Distribution data such as voltage, current, temperature, etc.",
"tags": [
"Hardware",
"PDP",
"SmartDashboard"
],
"foldername": "CANPDP",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Mechanism2d",
"foldername": "Mechanism2d",
"gradlebase": "cpp",
"description": "Display mechanism states on a dashboard with Mechanism2d.",
"tags": [
"Basic Robot",
"Elevator",
"Arm",
"Analog",
"Joystick",
"SmartDashboard",
"Mechanism2d"
],
"commandversion": 2
},
{
"name": "Solenoids",
"description": "Control a single and double solenoid from joystick buttons.",
"tags": [
"Hardware",
"Joystick",
"Shuffleboard",
"Pneumatics"
],
"foldername": "Solenoid",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Encoder",
"description": "View values from a quadrature encoder.",
"tags": [
"Hardware",
"Encoder",
"SmartDashboard"
],
"foldername": "Encoder",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "EventLoop",
"description": "Manage a ball system using EventLoop and BooleanEvent.",
"tags": [
"Basic Robot",
"Flywheel",
"EventLoop"
],
"foldername": "EventLoop",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Arcade Drive",
"description": "Control a differential drivetrain with single-joystick arcade drive in teleop.",
"tags": [
"Basic Robot",
"Differential Drive",
"Joystick"
],
"foldername": "ArcadeDrive",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Tank Drive",
"description": "Control a differential drive with twin-joystick tank drive in teleop.",
"tags": [
"Basic Robot",
"Differential Drive",
"Joystick"
],
"foldername": "TankDrive",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Mecanum Drive",
"description": "Control a mecanum drivetrain with a joystick in teleop.",
"tags": [
"Basic Robot",
"Mecanum Drive",
"Joystick"
],
"foldername": "MecanumDrive",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Ultrasonic",
"description": "View values from a ping-response ultrasonic sensor.",
"tags": [
"Hardware",
"Ultrasonic",
"SmartDashboard",
"Shuffleboard"
],
"foldername": "Ultrasonic",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "UltrasonicPID",
"description": "Maintain a set distance from an obstacle with an ultrasonic sensor and PID control.",
"tags": [
"Basic Robot",
"Ultrasonic",
"PID",
"Differential Drive"
],
"foldername": "UltrasonicPID",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Gyro",
"description": "Drive a differential drive straight with a gyro sensor.",
"tags": [
"Basic Robot",
"Differential Drive",
"PID",
"Gyro",
"Analog",
"Joystick"
],
"foldername": "Gyro",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Gyro Mecanum",
"description": "Drive a mecanum drivetrain using field-oriented controls with a joystick.",
"tags": [
"Basic Robot",
"Mecanum Drive",
"Gyro",
"Analog",
"Joystick"
],
"foldername": "GyroMecanum",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "HID Rumble",
"description": "Make human interface devices (HID) rumble.",
"tags": [
"Hardware",
"XboxController"
],
"foldername": "HidRumble",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "PotentiometerPID",
"description": "Maintain elevator position setpoints with a potentiometer and PID control.",
"tags": [
"Basic Robot",
"Analog",
"Elevator",
"PID",
"Joystick"
],
"foldername": "PotentiometerPID",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Elevator with exponential profiled PID",
"description": "Reach elevator position setpoints with exponential profiles and smart motor controller PID.",
"tags": [
"Basic Robot",
"Elevator",
"Exponential Profile",
"Smart Motor Controller",
"Joystick"
],
"foldername": "ElevatorExponentialProfile",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Elevator with trapezoid profiled PID",
"description": "Reach elevator position setpoints with trapezoid profiles and smart motor controller PID.",
"tags": [
"Basic Robot",
"Elevator",
"Trapezoid Profile",
"Smart Motor Controller",
"Joystick"
],
"foldername": "ElevatorTrapezoidProfile",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Elevator with profiled PID controller",
"description": "Reach elevator position setpoints with an encoder and profiled PID control.",
"tags": [
"Basic Robot",
"Elevator",
"Profiled PID",
"Joystick"
],
"foldername": "ElevatorProfiledPID",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Getting Started",
"description": "A differential-drive robot with split-stick Xbox arcade drive with a simple time-based autonomous.",
"tags": [
"Basic Robot"
],
"foldername": "GettingStarted",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Simple Vision",
"description": "Use the CameraServer class to stream from a USB Webcam without processing the images.",
"tags": [
"Vision"
],
"foldername": "QuickVision",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Intermediate Vision",
"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.",
"tags": [
"Vision"
],
"foldername": "IntermediateVision",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "AprilTags Vision",
"description": "On-roboRIO detection of AprilTags using an attached USB camera.",
"tags": [
"Vision",
"AprilTags"
],
"foldername": "AprilTagsVision",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "I2C Communication",
"description": "Communicate with external devices (such as an Arduino) using the roboRIO's I2C port.",
"tags": [
"Hardware",
"I2C"
],
"foldername": "I2CCommunication",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Digital Communication Sample",
"description": "Communicates with external devices (such as an Arduino) using the roboRIO's DIO.",
"tags": [
"Hardware",
"Digital Output"
],
"foldername": "DigitalCommunication",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Axis Camera Sample",
"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.",
"tags": [
"Vision"
],
"foldername": "AxisCameraSample",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "GearsBot",
"description": "A fully functional Command-Based program for WPI's GearsBot robot.",
"tags": [
"Complete Robot",
"Command-based",
"Differential Drive",
"Elevator",
"Arm",
"Analog",
"Digital Input",
"SmartDashboard",
"XboxController"
],
"foldername": "GearsBot",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "HAL",
"description": "Use the low-level HAL C functions. This example is for advanced users.",
"tags": [
"Basic Robot",
"HAL"
],
"foldername": "HAL",
"gradlebase": "c",
"commandversion": 2
},
{
"name": "Shuffleboard",
"description": "Present various data via the Shuffleboard API.",
"tags": [
"Basic Robot",
"Differential Drive",
"Elevator",
"Analog",
"Encoder",
"Shuffleboard"
],
"foldername": "ShuffleBoard",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "'Traditional' Hatchbot",
"description": "A fully-functional command-based hatchbot for the 2019 game, written in the 'traditional' style, i.e. commands are given their own classes.",
"tags": [
"Complete Robot",
"Command-based",
"Differential Drive",
"Encoder",
"Shuffleboard",
"Sendable",
"DataLog",
"Pneumatics",
"XboxController"
],
"foldername": "HatchbotTraditional",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "'Inlined' Hatchbot",
"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.",
"tags": [
"Complete Robot",
"Command-based",
"Differential Drive",
"Encoder",
"Shuffleboard",
"Sendable",
"DataLog",
"Pneumatics",
"PS4Controller"
],
"foldername": "HatchbotInlined",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Rapid React Command Bot",
"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.",
"tags": [
"Complete Robot",
"Command-based",
"Differential Drive",
"Intake",
"Flywheel",
"Encoder",
"Pneumatics",
"Digital Input",
"PID",
"XboxController"
],
"foldername": "RapidReactCommandBot",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Select Command Example",
"description": "Use SelectCommand to select an autonomous routine.",
"tags": [
"Command-based"
],
"foldername": "SelectCommand",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Frisbeebot",
"description": "A simple frisbee shooter for the 2013 game, demonstrating use of PIDSubsystem.",
"tags": [
"Complete Robot",
"Command-based",
"Differential Drive",
"Flywheel",
"Encoder",
"XboxController",
"PID"
],
"foldername": "Frisbeebot",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Gyro Drive Commands",
"description": "Control a robot's angle with PID and a gyro, in command-based.",
"tags": [
"Command-based",
"Differential Drive",
"Encoder",
"PS4Controller",
"PID",
"Profiled PID",
"Gyro"
],
"foldername": "GyroDriveCommands",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "SwerveBot",
"description": "Use kinematics and odometry with a swerve drive.",
"tags": [
"Swerve Drive",
"Odometry",
"XboxController",
"Gyro",
"Encoder"
],
"foldername": "SwerveBot",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "MecanumBot",
"description": "Use kinematics and odometry with a mecanum drive.",
"tags": [
"Mecanum Drive",
"Odometry",
"Encoder",
"Gyro",
"XboxController"
],
"foldername": "MecanumBot",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "DifferentialDriveBot",
"description": "Use kinematics and odometry with a differential drive.",
"tags": [
"Differential Drive",
"Odometry",
"Encoder",
"Gyro",
"XboxController"
],
"foldername": "DifferentialDriveBot",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "RamseteCommand",
"description": "Follow a pre-generated trajectory with a differential drive using RamseteCommand.",
"tags": [
"Differential Drive",
"Command-based",
"Ramsete",
"Trajectory",
"Path Following",
"Odometry",
"Encoder",
"Gyro",
"XboxController"
],
"foldername": "RamseteCommand",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Arcade Drive Xbox Controller",
"description": "Control a differential drive with split-stick arcade drive in teleop.",
"tags": [
"Basic Robot",
"Differential Drive",
"XboxController"
],
"foldername": "ArcadeDriveXboxController",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Tank Drive Xbox Controller",
"description": "Control a differential drive with Xbox tank drive in teleop.",
"tags": [
"Basic Robot",
"Differential Drive",
"XboxController"
],
"foldername": "TankDriveXboxController",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Duty Cycle Encoder",
"description": "View values from a duty-cycle encoder.",
"tags": [
"Hardware",
"Duty Cycle",
"Encoder",
"SmartDashboard"
],
"foldername": "DutyCycleEncoder",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Duty Cycle Input",
"description": "View duty-cycle input.",
"tags": [
"Hardware",
"Duty Cycle",
"SmartDashboard"
],
"foldername": "DutyCycleInput",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Addressable LED",
"description": "Display a rainbow pattern on an addressable LED strip.",
"tags": [
"Hardware",
"Basic Robot",
"AddressableLEDs"
],
"foldername": "AddressableLED",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "DMA",
"description": "Read various sensors using DMA.",
"tags": [
"Hardware",
"DMA",
"SmartDashboard"
],
"foldername": "DMA",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "MecanumControllerCommand",
"description": "Follow a pre-generated trajectory with a mecanum drive using MecanumControllerCommand.",
"tags": [
"Command-based",
"Mecanum Drive",
"Gyro",
"Encoder",
"Odometry",
"Trajectory",
"Path Following",
"XboxController"
],
"foldername": "MecanumControllerCommand",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "SwerveControllerCommand",
"description": "Follow a pre-generated trajectory with a swerve drive using SwerveControllerCommand.",
"tags": [
"Command-based",
"Swerve Drive",
"Gyro",
"Encoder",
"Odometry",
"Trajectory",
"Path Following",
"XboxController"
],
"foldername": "SwerveControllerCommand",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "ArmBot",
"description": "Control an arm with ProfiledPIDSubsystem.",
"tags": [
"Command-based",
"Arm",
"Encoder",
"Profiled PID",
"XboxController",
"Differential Drive"
],
"foldername": "ArmBot",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "ArmBotOffboard",
"description": "Control an arm with TrapezoidProfileSubsystem and smart motor controller PID.",
"tags": [
"Command-based",
"Arm",
"Smart Motor Controller",
"Trapezoid Profile",
"XboxController",
"Differential Drive"
],
"foldername": "ArmBotOffboard",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "DriveDistanceOffboard",
"description": "Drive a differential drivetrain a set distance using TrapezoidProfileCommand and smart motor controller PID.",
"tags": [
"Command-based",
"Differential Drive",
"Trapezoid Profile",
"Smart Motor Controller",
"XboxController"
],
"foldername": "DriveDistanceOffboard",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "RamseteController",
"description": "Follow a pre-generated trajectory with a differential drive using RamseteController.",
"tags": [
"Basic Robot",
"Differential Drive",
"Ramsete",
"PID",
"Odometry",
"Path Following",
"Trajectory",
"XboxController"
],
"foldername": "RamseteController",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "RomiReference",
"description": "An example command-based robot program that can be used with the Romi reference robot design.",
"tags": [
"Romi",
"Command-based",
"Differential Drive",
"Digital Input",
"Joystick"
],
"foldername": "RomiReference",
"gradlebase": "cppromi",
"commandversion": 2,
"extravendordeps": [
"romi"
]
},
{
"name": "XRP Reference",
"description": "An example command-based robot program that can be used with the XRP reference robot design.",
"tags": [
"XRP",
"Command-based",
"Differential Drive",
"Digital Input",
"Joystick"
],
"foldername": "XRPReference",
"gradlebase": "cppxrp",
"commandversion": 2,
"extravendordeps": [
"xrp"
]
},
{
"name": "StateSpaceFlywheel",
"description": "Control a flywheel using a state-space model (based on values from CAD), with a Kalman Filter and LQR.",
"tags": [
"Basic Robot",
"Flywheel",
"State-Space",
"LQR",
"Encoder",
"Joystick"
],
"foldername": "StateSpaceFlywheel",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "StateSpaceFlywheelSysId",
"description": "Control a flywheel using a state-space model (based on values from SysId), with a Kalman Filter and LQR.",
"tags": [
"Basic Robot",
"Flywheel",
"SysId",
"State-Space",
"LQR",
"Encoder",
"Joystick"
],
"foldername": "StateSpaceFlywheelSysId",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "StateSpaceElevator",
"description": "Control an elevator using a state-space model (based on values from CAD), with a Kalman Filter and LQR.",
"tags": [
"Basic Robot",
"Elevator",
"State-Space",
"LQR",
"Encoder",
"Joystick"
],
"foldername": "StateSpaceElevator",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "StateSpaceArm",
"description": "Control an arm using a state-space model (based on values from CAD), with a Kalman Filter and LQR.",
"tags": [
"Basic Robot",
"Arm",
"State-Space",
"LQR",
"Encoder",
"Joystick"
],
"foldername": "StateSpaceArm",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "ElevatorSimulation",
"description": "Simulate an elevator.",
"tags": [
"Basic Robot",
"Elevator",
"State-Space",
"Simulation",
"Mechanism2d",
"Profiled PID"
],
"foldername": "ElevatorSimulation",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Elevator Exponential Profile Simulation",
"description": "Simulate an elevator.",
"tags": [
"Basic Robot",
"Elevator",
"State-Space",
"Simulation",
"Mechanism2d",
"Profiled PID"
],
"foldername": "ElevatorExponentialSimulation",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "DifferentialDrivePoseEstimator",
"description": "Combine differential-drive odometry with vision data using DifferentialDrivePoseEstimator.",
"tags": [
"Differential Drive",
"State-Space",
"Pose Estimator",
"Vision",
"PID",
"XboxController"
],
"foldername": "DifferentialDrivePoseEstimator",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "MecanumDrivePoseEstimator",
"description": "Combine mecanum-drive odometry with vision data using MecanumDrivePoseEstimator.",
"tags": [
"Mecanum Drive",
"State-Space",
"Pose Estimator",
"Vision",
"PID",
"XboxController"
],
"foldername": "MecanumDrivePoseEstimator",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "ArmSimulation",
"description": "Simulate a single-jointed arm.",
"tags": [
"Basic Robot",
"Arm",
"State-Space",
"Simulation",
"Mechanism2d",
"Preferences"
],
"foldername": "ArmSimulation",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "UnitTesting",
"description": "Test a robot project with basic unit tests in simulation.",
"tags": [
"Intake",
"Pneumatics"
],
"foldername": "UnitTest",
"gradlebase": "cpp",
"commandversion": 2,
"hasunittests": true
},
{
"name": "SimpleDifferentialDriveSimulation",
"description": "Simulate a differential drivetrain and follow trajectories with RamseteController (non-command-based).",
"tags": [
"Differential Drive",
"State-Space",
"Ramsete",
"Path Following",
"Trajectory",
"Encoder",
"XboxController",
"Simulation"
],
"foldername": "SimpleDifferentialDriveSimulation",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "StateSpaceDriveSimulation",
"description": "Simulate a differential drivetrain and follow trajectories with RamseteCommand (command-based).",
"tags": [
"Command-based",
"Differential Drive",
"State-Space",
"XboxController",
"Simulation"
],
"foldername": "StateSpaceDifferentialDriveSimulation",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "SwerveDrivePoseEstimator",
"description": "Combine swerve-drive odometry with vision data using SwerveDrivePoseEstimator.",
"tags": [
"Swerve Drive",
"State-Space",
"Pose Estimator",
"Vision",
"PID",
"XboxController"
],
"foldername": "SwerveDrivePoseEstimator",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "Flywheel BangBangController",
"description": "A sample program to demonstrate the use of a BangBangController with a flywheel to control RPM",
"tags": [
"Flywheel",
"Simulation",
"Joystick"
],
"foldername": "FlywheelBangBangController",
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "SysIdRoutine",
"description": "A sample command-based robot demonstrating use of the SysIdRoutine command factory",
"tags": [
"SysId",
"Command-based",
"DataLog"
],
"foldername": "SysId",
"gradlebase": "cpp",
"commandversion": 2
}
]