WPILib 示例项目
警告
虽然我们要尽力保持WPILib示例的功能,但并不意味着可以直接使用示例代码。如果要使代码在用户的机器人上工作,至少要更改特定于机器人的常量。为了演示的目的,许多需要实际测试得出的常数的值都被“伪造”了。我们强烈鼓励用户编写自己的代码(从零开始或从现有模板开始),而不是复制示例代码。
WPILib示例项目演示了许多库功能和使用模式。项目范围从单一功能的简单演示到完整的具有竞争能力的机器人程序。输入Ctrl + Shift + P键,然后选择`WPILib: Create a new project` 并选择示例,即可在VS Code中使用所有这些示例。

基本范例
这些示例演示了基本的机器人功能。对于刚开始熟悉机器人编程但机器人功能受到严重限制的入门团队,它们很有用。
Arcade Drive (Java, C++, Python): Demonstrates a simple differential drive implementation using “arcade”-style controls through the
DifferentialDriveclass.Arcade Drive Xbox Controller (Java, C++, Python): Demonstrates the same functionality seen in the previous example, except using an
XboxControllerinstead of an ordinary joystick.Getting Started (Java, C++, Python): Demonstrates a simple autonomous routine that drives forwards for two seconds at half speed.
Mecanum Drive (Java, C++, Python): Demonstrates a simple mecanum drive implementation using the
MecanumDriveclass.Motor Controller (Java, C++, Python): Demonstrates how to control the output of a motor with a joystick with an encoder to read motor position.
Simple Vision (Java, C++, Python): Demonstrates how to stream video from a USB camera to the dashboard.
Relay (Java, C++, Python): Demonstrates the use of the
Relayclass to control a relay output with a set of joystick buttons.Solenoids (Java, C++, Python): Demonstrates the use of the
SolenoidandDoubleSolenoidclasses to control solenoid outputs with a set of joystick buttons.TankDrive (Java, C++, Python): Demonstrates a simple differential drive implementation using “tank”-style controls through the
DifferentialDriveclass.Tank Drive Xbox Controller (Java, C++, Python): Demonstrates the same functionality seen in the previous example, except using an
XboxControllerinstead of an ordinary joystick.
控制示例
这些示例演示了通用机器人控件的WPILib实现。可能存在传感器,但不是这些示例的重点概念。
DifferentialDriveBot (Java, C++, Python): Demonstrates an advanced differential drive implementation, including encoder-and-gyro odometry through the
DifferentialDriveOdometryclass, and composition with PID velocity control through theDifferentialDriveKinematicsandPIDControllerclasses.DifferentialDrivePoseEstimator (Java, C++): Demonstrates an advanced differential drive implementation with all the features of
DifferentialDriveBot. In addition this example usesDifferentialDrivePoseEstimatorto track the robots position on the field. It demonstrates these features by using WPILib Simulation.Elevator with Profiled PID Controller (Java, C++, Python): Demonstrates the use of the
ProfiledPIDControllerclass to control the position of an elevator mechanism.Elevator with Trapezoid Profiled PID (Java, C++, Python): Demonstrates the use of the
TrapezoidProfileclass in conjunction with a “smart motor controller” to control the position of an elevator mechanism.Elevator with Exponential Profiled PID (Java, C++): Demonstrates the use of the
ExponentialProfileclass in conjunction with a “smart motor controller” to control the position of an elevator mechanism.Flywheel Bang-Bang Controller (Java, C++, Python): Uses the
BangBangControllerclass to simply yet effectively control a flywheel.Gyro Mecanum (Java, C++, Python): Demonstrates field-oriented control of a mecanum robot through the
MecanumDriveclass in conjunction with a gyro.MecanumBot (Java, C++, Python): Demonstrates an advanced mecanum drive implementation, including encoder-and-gyro odometry through the
MecanumDriveOdometryclass, and composition with PID velocity control through theMecanumDriveKinematicsandPIDControllerclasses.Mecanum Drive PoseEstimator (Java, C++): Demonstrates an advanced mecanum drive implementation with all the features of
MecanumBot. In addition this example usesMecanumDrivePoseEstimatorto track the robots position on the field.PotentiometerPID (Java, C++, Python): Demonstrates the use of the
PIDControllerclass and a potentiometer to control the position of an elevator mechanism.SwerveBot (Java, C++, Python): Demonstrates an advanced swerve drive implementation, including encoder-and-gyro odometry through the
SwerveDriveOdometryclass, and composition with PID position and velocity control through theSwerveDriveKinematicsandPIDControllerclasses.Swerve Drive PoseEstimator (Java, C++): Demonstrates an advanced swerve drive implementation with all the features of
SwerveBot. In addition this example usesSwerveDrivePoseEstimatorto track the robots position on the field.UltrasonicPID (Java, C++, Python): Demonstrates the use of the
PIDControllerclass in conjunction with an ultrasonic sensor to drive to a set distance from an object.
传感器实例
这些示例演示了使用WPILib进行传感器读取和数据处理。可能存在机制控制,但不是这些示例强调的概念。
HTTP Camera (Java, C++): Demonstrates the use of OpenCV and a HTTP Camera to overlay a rectangle on a captured video feed and stream it to the dashboard.
Power Distribution CAN Monitoring (Java, C++, Python): Demonstrates obtaining sensor information from a Power Distribution module over CAN using the
PowerDistributionclass.Duty Cycle Encoder (Java, C++, Python): Demonstrates the use of the
DutyCycleEncoderclass to read values from a PWM-type absolute encoder.DutyCycleInput (Java, C++, Python): Demonstrates the use of the
DutyCycleInputclass to read the frequency and fractional duty cycle of a PWM input.Encoder (Java, C++, Python): Demonstrates the use of the
Encoderclass to read values from a quadrature encoder.Gyro (Java, C++, Python): Demonstrates the use of the
AnalogGyroclass to measure robot heading and stabilize driving.Intermediate Vision (Java, C++, Python): Demonstrates the use of OpenCV and a USB camera to overlay a rectangle on a captured video feed and stream it to the dashboard.
AprilTagsVision (Java, C++, Python): Demonstrates on-roboRIO detection of AprilTags using an attached USB camera.
Ultrasonic (Java, C++, Python): Demonstrates the use of the
Ultrasonicclass to read data from an ultrasonic sensor in conjunction with theMedianFilterclass to reduce signal noise.SysIdRoutine (Java, C++, Python): Demonstrates the use of the SysIdRoutine API to gather characterization data for a differential drivetrain.
基于指令的示例
这些示例演示了 :ref:`Command-Based framework <docs/software/commandbased/what-is-command-based:What Is “Command-Based” Programming?>`的使用。
DriveDistanceOffboard (Java, C++, Python): Demonstrates the use of a
TrapezoidProfileCommandin conjunction with a “smart motor controller” to drive forward by a set distance with a trapezoidal motion profile.Rapid React Command Bot (Java, C++): This project uses the latest command based best practices and the Epilogue logging system. It is capable of playing the FRC 2022 game Rapid React.
Inlined Hatchbot (Java, C++, Python): A complete set of robot code for a simple hatch-delivery bot typical of the 2019 FRC game Destination: Deep Space. Commands are written in an “inline” style, in which explicit subclassing of
Commandis avoided.Traditional Hatchbot (Java, C++, Python): A complete set of robot code for a simple hatch-delivery bot typical of the 2019 FRC game Destination: Deep Space. Commands are written in a “traditional” style, in which subclasses of
Commandare written for each robot action.MecanumControllerCommand (Java, C++): Demonstrates trajectory generation and following with a mecanum drive using the
TrajectoryGeneratorandMecanumControllerCommandclasses.Select Command Example (Java, C++, Python): Demonstrates the use of the
SelectCommandclass to run one of a selection of commands depending on a runtime-evaluated condition.SwerveControllerCommand (Java, C++): Demonstrates trajectory generation and following with a swerve drive using the
TrajectoryGeneratorandSwerveControllerCommandclasses.
状态空间示例
这些示例演示了 :ref:`State-Space Control <docs/software/advanced-controls/state-space/state-space-intro:Introduction to State-Space Control>`的使用。
StateSpaceFlywheel (Java, C++, Python): Demonstrates state-space control of a flywheel.
StateSpaceFlywheelSysId (Java, C++, Python): Demonstrates state-space control using SysId’s System Identification for controlling a flywheel.
StateSpaceElevator (Java, C++, Python): Demonstrates state-space control of an elevator.
StateSpaceArm (Java, C++, Python): Demonstrates state-space control of an Arm.
模拟物理实例
这些示例说明了物理模拟的用法。
ElevatorSimulation (Java, C++, Python): Demonstrates the use of physics simulation with a simple elevator.
ElevatorSimulation with Exponential PID (Java, C++): Demonstrates the use of physics simulation of an elevator being controlled with exponential profiled PID.
ArmSimulation (Java, C++, Python): Demonstrates the use of physics simulation with a simple single-jointed arm.
SimpleDifferentialDriveSimulation (Java, C++): A barebones example of a basic drivetrain that can be used in simulation.
其他例子
这些示例演示了不属于上述任何类别的其他WPILib功能。
Addressable LED (Java, C++, Python): Demonstrates the use of the
AddressableLEDclass to control RGB LEDs for robot decoration and/or driver feedback.Digital Communication (Java, C++, Python): This is a sample program demonstrating how to communicate to a light controller from the robot code using the roboRIO’s DIO ports.
I2C Communication (Java, C++, Python): This is a sample program demonstrating how to communicate to a light controller from the robot code using the roboRIO’s I2C port.
DMA (Java, C++): Demonstrates the use of DMA (Direct Memory Access) to read from sensors without using the RoboRIO’s CPU.
HAL (C++): Demonstrates the use of HAL (Hardware Abstraction Layer) without the use of the rest of WPILib. This example is for advanced users (C++ only).
HID Rumble (Java, C++, Python): Demonstrates the use of the “rumble” functionality for tactile feedback on supported HIDs (such as XboxControllers).
Shuffleboard (Java, C++, Python): Demonstrates configuring tab/widget layouts on the “Shuffleboard” dashboard from robot code through the
Shuffleboardclass’s fluent builder API.RomiReference (Java, C++, Python): A command based example of how to run the Romi robot.
XRPReference (Java, C++): A command based example of how to run the XRP robot.
Mechanism2d (Java, C++, Python): A simple example of using Mechanism2d.
EventLoop (Java, C++): Demonstrates the use of the
EventLoopclass that allows code to be called based on a boolean condition in the event-driven programming style.UnitTest (Java, C++): Shows how to do Unit Testing. The test files need to be in a separate Test directory (Java, C++).