Nuevo para 2022
Importante
Debido a la gran cantidad de cambios de última hora y sustanciales entre 2021 y 2022, se aconseja que los equipos existentes lean detenidamente este documento.
Se han realizado una serie de mejoras en el software del Sistema de Control de FRC para 2022. Este artículo describirá y proporcionará una breve visión general de los nuevos cambios y características, así como un registro de cambios más completo para los cambios de Java/C++ WPILib. Este documento sólo incluye los cambios más relevantes para los usuarios finales, la lista completa de cambios puede verse en los distintos repositorios de WPILib GitHub. WPILib reconoce que algunos de estos cambios pueden causar problemas en los equipos en la actualización a corto plazo. Esperamos que se compense a largo plazo a medida que mejoremos el funcionamiento interno de WPILib.
Debido a los cambios internos de GradleRIO, es necesario actualizar los proyectos de años anteriores. Después de Instalar WPILib para 2022, cualquier proyecto de 2020 o 2021 debe ser :doc:`importado</docs/software/vscode-overview/importing-gradle-project> ` para ser compatible.
It’s recommended to also review the list of known issues.
Cambios importantes (Java/C++)
Estos cambios contienen algunos de los principales cambios en la biblioteca que es importante que el usuario reconozca. Esto no incluye todos los cambios de ruptura, ver las otras secciones de este documento para más cambios.
Drive class functions such as
DifferentialDrive
andMecanumDrive
no longer invert the right side by default. Please usesetInverted
on your motor controllers to invert the right side to maintain the same behaviorLa antigua Command-Based ha sido eliminada de la lista de nuevas plantillas en VS Code. Por favor, migre a la nueva librería Command-Based. La antigua Command-Based sigue estando disponible para dar soporte al código existente.
IterativeRobot ha sido eliminado. Por favor, utilice la plantilla TimedRobot en su lugar
WPILib
Librería General
Reescribir :doc:`Mecanismo2d </docs/software/dashboards/glass/mech2d-widget> ` para utilizar NetworkTables
Se ha mejorado el mensaje de error cuando un programa se bloquea
Se ha añadido soporte para DMA a Java
Añadida la plantilla de proyecto
TimesliceRobot
. Esto permite a los usuarios a timeslice programar funciones periódicasSe ha añadido un ejemplo de C++TankDrive
Se ha añadido una clase de controlador
PS4Controller
Se ha añadido un mensaje mejor para cuando un puerto I2C está fuera de rango
Added
Debouncer
(Java, C++) class. This helps with filtering rising and falling edges when dealing with boolean valuesAñadida la clase
PneumaticHub
para su uso con el REV Pneumatic HubGenericHID has been updated to static functions to use for non-defined controller types.
XboxController
has migrated away from taking arguments in functions and instead has functions with no arguments. An example conversion is below:controller.getTriggerAxis(GenericHID.Hand.kLeft)
->controller.getLeftTriggerAxis()
controller.getX(GenericHID.Hand.kLeft)
->controller.getLeftX()
Las funciones
getInstance()
enCameraServer
,DriverStation
,LiveWindow
,Preferences
,SendableRegistry
, han sido obviadas y sustituidas por funciones estáticasTimer::HasPeriodPassed()
andTimer.hasPeriodPassed()
have been deprecated. UseAdvanceIfElapsed()
insteadSeveral new classes have been added to enable simpler access to
Counter
:ExternalDirectionCounter
(Java/ C++),Tachometer
(Java/ C++), andUpDownCounter
(Java/ C++)DutyCycleEncoder
: add support for setting duty cycle rangeAdded
ADIS16448_IMU
andADIS16470_IMU
classes.Added
BangBangController
class (Java, C++) for maximally-aggressive velocity control of high-inertia mechanisms, which is useful for flywheel shooters.
Cambios Importantes
PDP
es ahoraPowerDistribution
Varias clases relacionadas con el
PCM
(Solenoide, Compresor) ahora requieren unPneumaticsModuleType
para soportar el Módulo de Control Neumático CTRE o el Hub Neumático REV. Los métodos específicos de los proveedores se han trasladado a las clasesPneumaticsControlModule
oPneumaticHub
.Sendable se ha dividido en componentes de NetworkTables (llamados NTSendable*, espacio de nombres
nt
) y componentes que no son de NetworkTables (movidos a wpiutil, espacio de nombreswpi
). Esto facilitará a los proveedores y a las bibliotecas externas la integración de SendableInterruptableSendableBase
se ha dividido enAsynchronousInterrupt
ySynchronousInterrupt
. En lugar de que una clase, comoDigitalInput
extienda aInterruptableSendableBase
y que todos los métodos de interrupción se accedan a través deDigitalInput
, los equipos deben construirAsynchronousInterrupt
oSynchronousInterrupt
, y pasarle elDigitalSource
(por ejemplo,DigitalInput
).C++:
DriverStation.ReportWarning
yDriverStation.ReportError
han sido eliminados. UtiliceFRC_ReportError
en la cabecerafrcErrors.h
. El estado defrc::err::Error
se puede utilizar para los errores yfrc::warn::Warning
se puede utilizar para las advertencias.SpeedController
has been renamed toMotorController
Various portions of the API still refers to
SpeedController
for backwards compatibility. Users should passMotorController
instead
Several duplicate
SpeedController
methods have been removed. Useset
instead ofsetSpeed
. Usedisable
instead ofsetDisable
. Several low level methods have been removed: position, bounds, periodMultiplier, zeroLatch, and raw methods. Use thePWM
class directly if this level of control is needed.Se ha cambiado el nombre de varias funciones de la Estación de Conducción In[Mode] (IE:
InDisabled
->inDisabled
)Normalize
has been renamed toDesaturate
inDifferentialDrive
,MecanumDrive
,KilloughDrive
,MecanumDriveWheelSpeeds
,DifferentialDriveWheelSpeeds
.NormalizeWheelSpeeds
has been renamed toDesaturateWheelSpeeds
inSwerveDriveKinematics
.Se ha eliminado el programa obsoleto
wpilibj.cameraserver
. Utilicecameraserver
en su lugarSe ha eliminado el obsoleto
RobotDrive
. Utilice en su lugarDifferentialDrive
.Se ha eliminado la clase
GearTooth
. Utiliza la claseContador
en su lugarC++: se ha eliminado
WPILib.h
. Porfavor solo incluya lo que necesiteC++:
wpi::StringRef
se sustituye porstd::string_view
. Se trata de un reemplazo de tipo drop in en la mayoría de los casosC++:
wpi::ArrayRef
se sustituye porwpi::span
. Se trata de un backport modificado destd::span
de C++20.C++:
wpi::Twine
se sustituye por fmtlib. Tiene más características y es estándar en C++20C++:
wpi::sys::path
se sustituye porfs::path
de#include <wpi/fs.h>
que se basa enstd::filesystem
.C++: los métodos de
frc::filesystem
se han simplificado para devolverstd::string
, en lugar de utilizar un parámetro de punteroC++:
wpi::math
is replaced withwpi::numbers
which is based on C++20std::numbers
.C++: El soporte para
std::cout
fue eliminado de las unidades porque<iostream>
tiene una sobrecarga significativa en tiempo de compilación. Utilice fmtlib en su lugar, un análogo destd::format()
de C++20 (por ejemplo,fmt::print("{}", 2_m)
). Las cabeceras de las unidades incluyen automáticamente fmtlib. Si todavía quieres usarstd::cout
, llama avalue()
en la variable que se imprime (por ejemplo,std::cout << velocity.value()
).C++: Various classes have migrated to use units:
Ultrasonic
,CommandScheduler
,CommandState
,WaitUntilCommand
,MecanumControllerCommand
,RamseteCommand
,SwerveControllerCommand
,TrapezoidProfileCommand
,WaitCommand
,Counter
,CounterBase
,DriverStation
,Encoder
,InterruptableSensorBase
,MotorSafety
,Notifier
,SPI
,SerialPort
,SlewRateLimiter
,Solenoid
,Timer
,Watchdog
, and Old Commands:Command
,CommandGroup
,CommandGroupEntry
,TimedCommand
,WaitCommand
,WaitForChildren
,WaitUntilCommand
The old
PIDController
,PIDSource
andPIDOutput
classes have been moved from the main library to the Old Commands Vendordep. Wrapper classes in the pidwrappers package have been added for PIDSource and PIDoutput support for WPILib classes, also in the Old Commands Vendordep. These classes have been deprecated since 2020. The new PID Controller inedu.wpi.first.math.controller
for Java andfrc2
for C++ is the recommended replacement.Preferences
putX methods (e.g. putDouble) have been deprecated and replaced with setX methods for consistency with the rest of WPILib API.
Renombramiento de paquetes
Nos hemos comprometido a cambiar varios nombres de organización que nos permitirán ser más flexibles con las nuevas clases en el futuro. El importador de proyectos de VS Code actualizará los proyectos existentes para utilizar los nuevos paquetes/encabezados.
Several packages moved from
wpilibj
tomath
:controller
,estimator
,geometry
,kinematics
,math
,spline
,system
,trajectory
wpiutil.math
was moved tomath
wpiutil
es ahorautil
SlewRateLimiter
,LinearFilter
, andMedianFilter
now live inmath.filters
, along with the newly-addedDebouncer
.Timer
se ha movido defrc2
afrc
Controladores de motor (
VictorSPX
,PWMSparkMax
, etc) han sido movidos al paquetemotorcontrol
.edu.wpi.cscore
has moved toedu.wpi.first.cscore
Simulación
Uses multi-file
json
save formats instead ofini
and supports loading/saving the workspace; when started from the VS Code tool menu, these default to using the project directory for saving rather than the system-global location
Shuffleboard
Añade un widget para
Field2d
Añade iconos a los diseños de los widgets
Añade títulos a los widgets
Mostrar el aviso de salida para guardar sólo si no se ha guardado
Utiliza la barra de menús del sistema
Añade pestaña de confirmación clara
Guardar la preferencia del modo de visualización de los títulos de los widgets
Fix: CameraServer streams
Fix: Shuffleboard not starting on Windows N. Media Feature Pack is still needed for camera support.
SmartDashboard
No hay cambios nuevos
Glass
Uses multi-file
json
save formats instead ofini
and supports loading/saving the workspace; when started from the VS Code tool menu, these default to using the project directory for saving rather than the system-global location
Axon
Hemos creado una nueva herramienta para el aprendizaje automático en FIRST Robotics Competition. Axon permite a los usuarios ver y crear conjuntos de datos, entrenar modelos de aprendizaje automático, probar sus modelos dentro de la interfaz gráfica de usuario basada en el navegador y exportarlos para su uso en una Raspberry Pi. La detección de objetos complejos (como paneles de escotilla y otros robots) nunca ha sido tan fácil y una guía de usuario de principio a fin está disponible en el WPILib docs. Axon proporciona la funcionalidad de entrenar modelos de aprendizaje automático para reconocer cualquier objeto que desee (definido en un conjunto de datos caseros), u objetos genéricos como gatos, aviones y perros calientes.
Axon es un sustituto de la anterior solución Jupyter Notebook basada en AWS que se lanzó en la temporada 2019. Axon tiene una instalación y una experiencia de usuario sin problemas en general, y una interfaz gráfica de usuario mucho más amigable para principiantes y expertos.
Ejecutar modelos de aprendizaje automático en la imagen WPILib Raspberry Pi nunca ha sido tan fácil; el nuevo script de Python para la Pi cuenta con un flujo de datos NetworkTables sincronizado en el tiempo, así como un flujo MJPEG de inferencia en vivo de mejor calidad.
PathWeaver
No hay cambios nuevos
GradleRIO
Gradle has been updated to version 7.3.2
Los internos de GradleRIO han sido actualizados para ser más fáciles de leer, más mantenibles y más fáciles de modificar para los equipos avanzados.
El despliegue es más personalizable
cscore
La versión de OpenCV soportada ha sido aumentada a OpenCV4
OutlineViewer
OutlineViewer ha sido actualizado para ser basado en C++ usando la biblioteca ImGui. Esto hace que OutlineViewer sea más fácil de mantener y más eficaz.
Importante
La versión Java de OutlineViewer está descontinuada y ya no recibe soporte.
Instalador de WPILib todo en uno
Simplified installation choices
Visual Studio Code has been updated to 1.63.2
Se actualizó las extensiones de los lenguajes Java y C++
Fix Linux desktop icon permissions
Add year to tools shortcuts name
Handle issues with JDK running and UAC canceled
Visual Studio Code Extension
Importante
¡El importador de proyectos solamente importará proyectos 2020/2021!
El importador de proyectos ha sido actualizado para la temporada 2022. El importador de proyectos intentará actualizar el código importado, pero puede ser necesario realizar cambios manuales debido a la complejidad de los cambios de última hora de este año.
Eliminar el importador de proyectos de Eclipse
Fix chcp not found warning during simulation on Windows
Add additional information to the project information command display
RobotBuilder
Importante
Debido a los cambios en los archivos del proyecto, Robotbuilder no importará archivos yaml guardados de 2021 o anteriores.
Actualización para compilar con WPILib 2022 (eliminar RobotDrive y GearTooth), actualizar los controladores PID y la neumática
Mejorar la detección de tipos para detectar cambios en ciertos tipos de C++ que antes no se detectaban como cambios
Añadir la configuración del proyecto para activar o desactivar el soporte de escritorio
Corregir la exportación de Java de DoubleSolenoid, RobotDrive4, MecanumDrive, y Killough drive para evitar una copia local extra
Fijar la exportación en C++ de ConditionalCommand
No validar los parámetros de tiempo de espera que sean inferiores a 0
SysID
SysId is a fully featured system identification utility that supersedes frc-characterization. It features an easy-to-use interface, advanced graphing analytics, Romi integration and other cool features!.
Importante
¡frc-characterization está descontinuado y ya no es soportado!
Romi
A Romi Library has been created to contain several helper classes that are a part of the
RomiReference
example. Romi Vendordep.