2023 için yeni

2023 yılı için FRC® Kontrol Sistemi yazılımında bir takım iyileştirmeler yapılmıştır. Bu makale, Java/C++ WPILib değişiklikleri için daha eksiksiz bir değişiklik günlüğünün yanı sıra yeni değişiklikler ve özellikler hakkında kısa bir bakış sunacak ve sağlayacaktır. Bu belge yalnızca son kullanıcılar için ilgili değişiklikleri içerir, değişikliklerin tam listesi çeşitli WPILib GitHub depolarında görüntülenebilir.

It’s recommended to also review the list of known issues.

Önceki Yıllardaki Projeleri İçe Aktarmak

Dahili GradleRIO değişiklikleri nedeniyle, önceki yılların projelerini güncellemek gerekir. Installing WPILib for 2023 yüklendikten sonra, uyumlu olması için herhangi bir 2022 projesinin imported olması gerekir.

Büyük Değişiklikler (Java/C++)

Bu değişiklikler, kitaplıkta yapılan ve kullanıcının bilmesi gereken önemli değişikliklerden bazılarını içerir. Bu bütün büyük değişiklikleri içermez, daha fazla değişiklik görmek için bu belgenin diğer kısımlarına bakın.

  • NetworkTables has been completely rewritten as version 4.0. This introduces pub/sub semantics to NetworkTables and adds a number of new features, including timestamped updates. Its wire protocol is also now WebSockets-based for easier use by browser applications. While most of the changes should be transparent to users who don’t use the new features, there are several breaking changes. NetworkTables V3 clients are still compatible, but V2 support has been dropped.

  • Added support for on-robot telemetry recording into data logs

  • LiveWindow telemetrisi artık varsayılan olarak devre dışı. Bu telemetri, loop overrun uyarılarının devamlı bir kaynağı olarak gözlemlenmiştir. Önceki davranışı geri getirmek için LiveWindow.enableAllTelemetry kullanın

  • AprilTag library has been added

  • Paketlenmiş Java sürümü 11’den 17’ye yükseltildi

  • C++ 20 destekleyen GCC 12.1. Windows üzerinden C++ Simülasyonu çalıştırmak için Visual Studio 2022 gereklidir

  • CameraServer now supports USB cameras on Mac operating systems

Desteklenen İşletim Sistemleri ve Mimariler:
  • Windows 10 & 11, 64 bit. 32 bit ve Arm desteklenmiyor

  • Ubuntu 22.04,64 bit. Glibc >= 2.32 yüklü olan diğer Linux dağıtımları çalışabilir ancak desteklenmemektedir.

  • macOS 11 or later, Intel and Arm.

Uyarı

Artık desteklenmeyen işletim sistemleri: macOS 10.15, Ubuntu 18.04 & 20.04, Windows 7, Windows 8.1 ve herhangi bir 32-bit Windows sürümü.

WPILib

Genel Kütüphane

  • Deprecated PerpetualCommand/perpetually(), use RepeatCommand/repeatedly() instead

  • Renamed withInterrupt(BooleanSupplier) to until()

  • Added InterpolatedTreeMap

  • Added RepeatCommand and matching repeatedly decorator

  • Added unless(BooleanSupplier) decorator

  • Added ignoringDisable(boolean) decorator to set the runsWhenDisabled property of a command

  • Added finallyDo(BooleanConsumer) and handleInterrupt(Runnable) decorators

  • Added static command factories in Commands

  • Added ComputerVisionUtil

  • Added EventLoop and BooleanEvent, an expansion of the existing Trigger framework encompassing non-commandbased

  • Added BooleanEvent-returning factory methods to the HID classes

  • Added command-based versions of HID classes (CommandXboxController etc.) with Trigger-returning factory methods

  • Added LTV unicycle controllers

  • Added Rotation2d factory method that uses rotations and radians; fromRotations() and fromRadians()

  • HolonomicDriveController now uses continuous input on heading PID

  • Added various 3d geometry classes

    • Pose3d

    • Quaternion

    • Rotation3d

    • Transform3d

    • Translation3d

    • Twist3d

    • CoordinateAxis

    • CoordinateSystem

  • Added various pneumatic sim classes

    • CTREPCMSim

    • DoubleSolenoidSim

    • REVPHSim

    • SolenoidSim

  • Added getAngle() to Translation2d

  • Deprecated Compressor.enable(). Use isEnabled instead

  • Add missing PS4Controller triangle methods

  • Add method to disable LW actuator control in test mode

  • Enhanced Sendable representation of commands

  • Deprecated CommandGroupBase; the static factories have been moved to Commands

  • Refactor SelectCommand’s Supplier<Command> constructor and ProxyScheduleCommand into ProxyCommand

  • Remove isFinished check for default commands

  • Add method to remove default commands

  • Trigger and Button methods were renamed to be consistent and Button class deprecated.

    • Trigger’s bindings are changed to use True/False terminology, as it should be unambiguous. Each binding type has both True and False variants; for brevity, only the True variants are listed here:

      • onTrue (replaces whenActive and whenPressed): schedule on rising edge.

      • whileTrue (replaces whileActiveOnce): schedule on rising edge, cancel on falling edge.

      • toggleOnTrue (replaces toggleWhenActive): on rising edge, schedule if unscheduled and cancel if scheduled.

    • Two binding types are completely deprecated:

      • cancelWhenActive: this is a fairly niche use case which is better described as having the trigger’s rising edge (Trigger.rising()) as an end condition for the command (using Command.until()).

      • whileActiveContinuously: however common, this relied on the no-op behavior of scheduling an already-scheduled command. The more correct way to repeat the command if it ends before the falling edge is using Command.repeatedly/RepeatCommand or a RunCommand – the only difference is if the command is interrupted, but that is more likely to result in two commands perpetually canceling each other than achieve the desired behavior. Manually implementing a blindly-scheduling binding like whileActiveContinuously is still possible, though might not be intuitive.

  • Precompile common template instantiations to improve C++ compile times.

Son Dakika Değişiklikler

Önemli

2023 sürümü artık eski komut tabanlı framework içermiyor. Kullanıcılar, yeni komut tabanlı framework kullanmak için mevcut kodu yeniden düzenlemelidir.

Tehlike

Updated DifferentialDrive and MecanumDrive classes to use North-West-Up axis conventions to match the rest of WPILib. The Z-axis (i.e. turning) will need to be inverted to restore the old behavior.

  • NetworkTables 4.0 (NT4) introduced several breaking changes. Shuffleboard classes now return GenericEntry instead of NetworkTableEntry; as GenericEntry provides nearly all the same methods, a simple textual replacement of the class name should suffice. Also, the force setters have been removed. See the NT4 migration guide for more information.

  • Removed deprecated MakeMatrix() from StateSpaceUtil

  • Removed deprecated KilloughDrive class

  • Removed Vector2d, which was an implementation detail of MecanumDrive and KilloughDrive. In Java, use Vector<N2> (edu.wpi.first.math.Vector) or Translation2d (edu.wpi.first.math.geometry.Translation2d) instead. In C++, use Eigen::Vector2d from <Eigen/Core> or Translation2d from <frc/geometry/Translation2d.h> instead.

  • Removed deprecated SpeedController and SpeedControllerGroup classes. Use MotorController and MotorControllerGroup instead

  • Removed deprecated MatrixUtils class

  • Removed various deprecated overloads that used above mentioned classes

  • Removed various deprecated getInstance() functions. Static functions are available instead

  • Removed various deprecated functions in SimDevice

  • Refactored command interruptible to be an enum property (getInterruptionBehavior()) of the command object rather than a boolean flag when scheduling; the withInterruptBehavior(InterruptBehavior) decorator can be used to set this property

  • Command lifecycle methods of command groups cannot be overridden

  • [C++ only] Command Decorators changed to return CommandPtr – a new move-only value type for holding commands

  • SwerveDriveOdometry and SwerveDrivePoseEstimator now use wheel distances instead of wheel speeds; Use SwerveModulePosition to represent a swerve module’s angle and distance driven.

  • SwerveDriveOdometry and SwerveDrivePoseEstimator now take in the wheel distances in an array rather than as a variadic parameter.

  • MecanumDriveOdometry and MecanumDrivePoseEstimator now use wheel distances instead of wheel speeds; Use MecanumDriveWheelPositions to represent the wheel distances.

  • Constructors and resetPosition methods on all odometry and pose estimation classes now have mandatory wheel distance parameters.

  • Odometry and pose estimator constructor and function arguments have been rearranged to be consistent between implementations. Users should consult the API documentation for the particular class they’re using and update the method calls accordingly.

  • Removed wpi versions of C++20 methods

    • Use std::numbers instead of wpi::numbers (include <numbers>)

    • Use std::span instead of wpi::span (include <span>)

  • Removed template argument from ElevatorFeedforward in C++.

Simülasyon

  • Added precision setting for NetworkTables decimal values

  • Added docking support for GUI elements

  • Save secondary Y axis in plots

Shuffleboard

  • Added vertical orientation option to number bar widget

  • Fixed Field2d widget not auto populating

  • Update PowerDistribution Widget to support 24 channels

  • Added 2023 Charged Up field image

  • Update PID widget to remove features no longer supported by PIDController (kF and enable)

SmartDashboard

Önemli

SmartDashboard is not supported on Apple Silicon (Arm64) Macs.

  • Update PowerDistribution Widget to support 24 channels

  • Add option to clear all plots

  • Update PID widget to remove features no longer supported by PIDController (kF and enable)

Glass

  • Added precision setting for NetworkTables decimal values

  • Added docking support for GUI elements

  • Save secondary Y axis in plots

PathWeaver

  • Added 2023 Charged Up field image

GradleRIO

  • Upgrade to Gradle 7.5.1

  • Fixed issue where start-up scripts could get damaged if roboRIO powered off during deploy

cscore

  • Update to opencv 4.6.0

  • Added ArUco module

OutlineViewer

  • Added precision setting for NetworkTables decimal values

WPILib Hepsi Bir Arada Yükleyici

  • Apple Silicon (Arm64) Macs are now supported

  • Update to VS Code 1.74

  • Update to use .NET 7

  • Add links to changelog and known issues

Visual Studio Kod Uzantısı

  • Update templates to JUnit 5.8.2

  • Add copy button from project versions dialog

  • Allow importing Romi projects

RobotBuilder

Önemli

With the removal of old command-based, the legacy RobotBuilder install has been removed.

Uyarı

Due to project file changes, Robotbuilder will not import yaml save files from 2022 or earlier.

  • Add support for DoubleSupplier and std::function<double> parameters

  • Add option to put commands tied to Joystick Buttons to SmartDashboard

  • Add PS4 Controller

  • Validate Team Number

SysID

  • Added Pigeon 2 support

  • User can now specify a measurement delay of 0

  • Fixed Override Units option not overriding units per rotations

Romi

  • Büyük değişiklikler yok