This is the 4th beta release of WPILib for the 2024 season. Please join the discussions regarding beta testing at https://github.com/wpilibsuite/2024Beta/discussions.
This release requires the 2024_v2.0 beta roboRIO image to use on a robot. This image is included in the NI 2024 Beta 2 Game Tools.
Getting Started
Check out what's new for 2024 and jump directly to the WPILib installation guide.
If you're starting from a 2023 robot project, you will need to import it to create a 2024 project.
Downloads
For 2024, we are considering different options for our downloads due to GitHub file size limitations, and are testing this during the beta. Download links from alternate hosting sites are below. There are three download sites in addition to "split" zip files in the GitHub release. For the split zip files, you will need to download both the .zip and .z01 files and then unzip them to get the installer image (this can be done in Windows Explorer by selecting both files and running "Extract All"). Feedback regarding what of these download options works best for you is welcome on the beta forum.
- Windows: [JFrog] - [WPI] - [CloudFlare] (2.0 GB)
- Mac (Arm): [JFrog] - [WPI] - [CloudFlare] (2.1 GB)
- Mac (Intel): [JFrog] - [WPI] - [CloudFlare] (2.2 GB)
- Linux: [JFrog] - [WPI] - [CloudFlare] (2.3 GB)
What's Changed Since Beta 3
WPILib:
- Fix garbage data for match info before DS connection by @ThadHouse in #5879
- Default LiveWindowEnabledInTest to false by @Starlight220 in #5950
- Add hex string constructor to Color and Color8Bit by @srimanachanta in #5063
- Make Color::HexString() constexpr by @calcmogul in #5985
- Use final for joystick get axis methods by @spacey-sooty in #6024
- Change default Rio log dir from /home/lvuser to /home/lvuser/logs by @PeterJohnson in #5899, use logs subdirectory on USB drives by @PeterJohnson in #5975, change sim location to logs subdir by @PeterJohnson in #6039
- DataLogManager: join on Stop() call by @PeterJohnson in #5910
- Fix PS5 Controller mappings by @ThadHouse in #6050
Math:
- Reorder TrapezoidProfile.calculate() arguments by @calcmogul in #5874
- Replace gyro rotation with poseEstimator rotation by @ElliotScher in #5900
- Change G to gearing in LinearSystemId factories by @DeltaDizzy in #5834
- Clean up VecBuilder and MatBuilder by @KangarooKoala in #5906
- Clean up StateSpaceUtil by @calcmogul in #5891
- Use RKDP in DifferentialDrivetrainSim to fix numerical instability by @calcmogul in #5931
- Add basic wpiunits support to wpimath by @SamCarlberg in #5821
- Move serde functions to separate classes by @pjreiniger in #5918
- Add protobuf / struct serde for trivial types by @pjreiniger in #5935
- Make KalmanFilter variant for asymmetric updates by @calcmogul in #5951
- Explicitly export wpimath protobuf files by @ThadHouse in #5957
- Optimize 2nd derivative of quintic splines by @prateekma in #3292
- Add generic circular buffer class to Java by @calcmogul in #5969
- Remove unused SimpleMatrixUtils class by @calcmogul in #5979
- Add simulated annealing by @calcmogul in #5961
- Fix TimeInterpolatableBuffer crash by @calcmogul in #5972
- Make gcem call std functions if not constant-evaluated by @calcmogul in #5983
- Update to latest Eigen by @calcmogul in #5996
- Fix GCEM namespace usage and add hypot(x, y, z) by @calcmogul in #6002
- Struct cleanup by @KangarooKoala in #6011
- Rotate traveling salesman solution so input and solution have same initial pose by @Ashray-g in #6015
- Simplify calculation of C for DARE precondition by @calcmogul in #6022
- Fix MecanumDriveWheelSpeeds desaturate() by @Gold856 in #6040
NetworkTables:
- Only datalog meta-topics if specifically requested by @PeterJohnson in #5873
- ProtobufSubscriber: Make mutex and msg mutable by @PeterJohnson in #5927
- Increase client meta-topic decoding limit by @PeterJohnson in #5934
- Update transmit period on topic add/remove by @PeterJohnson in #6021
- Add cached topic property by @KangarooKoala in #5494
Commands:
- Add static Trigger factories for robot mode changes by @DeltaDizzy in #5902
- Add GetName to Subsystem, use in Scheduler tracer epochs by @rzblue in #5836
- CommandPtr: Prevent null initialization by @Starlight220 in #5991
- CommandCompositionError: Include stacktrace of original composition by @Starlight220 in #5984
Examples:
- C++: Match array parameter bounds by @PeterJohnson in #5880
- C++: Update examples to CommandPtr by @ncorrea210 in #5988
- Call resetOdometry() when controller command is executed by @ElliotScher in #5905
- C++: Add "inline" specifier to constants.h constants by @ncorrea210 in #6049
Docs:
- Exclude eigen and protobuf from doxygen by @rzblue in #5871
- Improve AprilTag docs by @Gold856 in #5895
- wpiunits Documentation improvements by @agasser in #5932
- Update getAlliance() docs by @calcmogul in #5971
- Add SysId doc links to LinearSystemId in C++ by @calcmogul in #5960
Vision Processing (CameraServer and AprilTags):
- Add GetTags to C++ version of AprilTagFieldLayout by @r4stered in #5872
- CvSink: Allow specifying output PixelFormat by @MrRedness in #5943
- Move RawFrame to wpiutil and add function to generate RawFrames of AprilTags by @r4stered in #5923
- Replace CS_PixelFormat with WPI_PixelFormat by @calcmogul in #5954
- Add pixelFormat overload of getVideo() by @MrRedness in #5966
Other:
- [wpiutil] MemoryBuffer: Fix normal read and file type check by @PeterJohnson in #5875
- [hal] Add capability to read power distribution data as a stream by @ThadHouse in #4983
- [wpiutil] Change Struct to allow non-constexpr implementations by @PeterJohnson in #5992
- [wpiunits] Overload Measure.per(Time) to return Measure by @SamCarlberg in #6018
- [hal] Add usage reporting ids from 2024v2 image by @guineawheek in #6041
GradleRIO:
- Update to gradle 8.5 by @ThadHouse in wpilibsuite/GradleRIO#694
- Warn and don't start program if NoApp is triggered by @ThadHouse in wpilibsuite/GradleRIO#700
- Add custom frc kill script to work around jvm bug by @ThadHouse in wpilibsuite/GradleRIO#699
VS Code:
- Cancel sim when escape is pressed at extension selection by @rzblue in wpilibsuite/vscode-wpilib#636
- Hide cancel button on modal dialogs by @sciencewhiz in wpilibsuite/vscode-wpilib#635
- Fix global project options not showing by @ThadHouse in wpilibsuite/vscode-wpilib#640
- Update .gitignore with log file formats by @JCaporuscio in wpilibsuite/vscode-wpilib#642
Installer:
- Include XRP and Romi dependencies by @sciencewhiz in wpilibsuite/WPILibInstaller-Avalonia#371
- Update AdvantageScope to 3.0.0-beta-5 by @PeterJohnson in wpilibsuite/WPILibInstaller-Avalonia#374
- Add Python extensions by @Gold856 in wpilibsuite/WPILibInstaller-Avalonia#372
- Update vscode to 1.85.1 and update extensions by @PeterJohnson in wpilibsuite/WPILibInstaller-Avalonia#377
Full Changelog: v2024.1.1-beta-3...v2024.1.1-beta-4
New Contributors
WPILib is developed by a small team of volunteers and the FIRST community. Thanks to the following new contributors (since the beta-1 release) for helping make WPILib better for all teams!
- @binex-dsk made their first contribution in #5886
- @ElliotScher made their first contribution in #5900
- @spacey-sooty made their first contribution in #5897
- @MrRedness made their first contribution in #5943
- @agasser made their first contribution in #5932
- @ncorrea210 made their first contribution in #5988
- @guineawheek made their first contribution in #6041
MD5 Hashes
f605a65b464039de462f95e975038e54 WPILib_Linux-2024.1.1-beta-4.tar.gz
68f36bacbc7810f75e5765a197f7ba84 WPILib_Windows-2024.1.1-beta-4.iso
d099cf13a9fde1c764f1fec120f2bcc5 WPILib_macOS-Intel-2024.1.1-beta-4.dmg
50098c2e3f4161fe5149379fcb656809 WPILib_macOS-Arm64-2024.1.1-beta-4.dmg
SHA256 Hashes
cd66bcb463ad991c15ac74d8f5641768e45ab510a4ce45324ca922d01ae49d47 WPILib_Linux-2024.1.1-beta-4.tar.gz
800e0b51aa8d651fdce59189dba2f2e7ecd1e97cde173a37beb8abc58c435fea WPILib_Windows-2024.1.1-beta-4.iso
af3271e7750f673d96c3e3bdfeb6407aafb1f6ec9138ba0f92bec0e2f88c20c7 WPILib_macOS-Intel-2024.1.1-beta-4.dmg
2d0d4ffe8d0e7a0940f84820b274874fb394818dc88f9141a749a9516dcd3c49 WPILib_macOS-Arm64-2024.1.1-beta-4.dmg