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 and MecanumDrive no longer invert the right side by default. Please use setInverted on your motor controllers to invert the right side to maintain the same behavior

  • La 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ódicas

  • Se 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 values

  • Añadida la clase PneumaticHub para su uso con el REV Pneumatic Hub

  • GenericHID 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() en CameraServer, DriverStation, LiveWindow, Preferences, SendableRegistry, han sido obviadas y sustituidas por funciones estáticas

  • Timer::HasPeriodPassed() and Timer.hasPeriodPassed() have been deprecated. Use AdvanceIfElapsed() instead

  • Several new classes have been added to enable simpler access to Counter: ExternalDirectionCounter (Java/ C++), Tachometer (Java/ C++), and UpDownCounter (Java/ C++)

  • DutyCycleEncoder: add support for setting duty cycle range

  • Added ADIS16448_IMU and ADIS16470_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 ahora PowerDistribution

  • Varias clases relacionadas con el PCM (Solenoide, Compresor) ahora requieren un PneumaticsModuleType 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 clases PneumaticsControlModule o PneumaticHub.

  • 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 nombres wpi). Esto facilitará a los proveedores y a las bibliotecas externas la integración de Sendable

  • InterruptableSendableBase se ha dividido en AsynchronousInterrupt y SynchronousInterrupt. En lugar de que una clase, como DigitalInput extienda a InterruptableSendableBase y que todos los métodos de interrupción se accedan a través de DigitalInput, los equipos deben construir AsynchronousInterrupt o SynchronousInterrupt, y pasarle el DigitalSource (por ejemplo, DigitalInput).

  • C++: DriverStation.ReportWarning y DriverStation.ReportError han sido eliminados. Utilice FRC_ReportError en la cabecera frcErrors.h. El estado de frc::err::Error se puede utilizar para los errores y frc::warn::Warning se puede utilizar para las advertencias.

  • SpeedController has been renamed to MotorController

    • Various portions of the API still refers to SpeedController for backwards compatibility. Users should pass MotorController instead

  • Several duplicate SpeedController methods have been removed. Use set instead of setSpeed. Use disable instead of setDisable. Several low level methods have been removed: position, bounds, periodMultiplier, zeroLatch, and raw methods. Use the PWM 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 to Desaturate in DifferentialDrive, MecanumDrive, KilloughDrive, MecanumDriveWheelSpeeds, DifferentialDriveWheelSpeeds. NormalizeWheelSpeeds has been renamed to DesaturateWheelSpeeds in SwerveDriveKinematics.

  • Se ha eliminado el programa obsoleto wpilibj.cameraserver. Utilice cameraserver en su lugar

  • Se ha eliminado el obsoleto RobotDrive. Utilice en su lugar DifferentialDrive.

  • Se ha eliminado la clase GearTooth. Utiliza la clase Contador en su lugar

  • C++: se ha eliminado WPILib.h. Porfavor solo incluya lo que necesite

  • C++: wpi::StringRef se sustituye por std::string_view. Se trata de un reemplazo de tipo drop in en la mayoría de los casos

  • C++: wpi::ArrayRef se sustituye por wpi::span. Se trata de un backport modificado de std::span de C++20.

  • C++: wpi::Twine se sustituye por fmtlib. Tiene más características y es estándar en C++20

  • C++: wpi::sys::path se sustituye por fs::path de #include <wpi/fs.h> que se basa en std::filesystem.

  • C++: los métodos de frc::filesystem se han simplificado para devolver std::string, en lugar de utilizar un parámetro de puntero

  • C++: wpi::math is replaced with wpi::numbers which is based on C++20 std::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 de std::format() de C++20 (por ejemplo, fmt::print("{}", 2_m)). Las cabeceras de las unidades incluyen automáticamente fmtlib. Si todavía quieres usar std::cout, llama a value() 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 and PIDOutput 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 in edu.wpi.first.math.controller for Java and frc2 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 to math: controller, estimator, geometry, kinematics, math, spline, system, trajectory

  • wpiutil.math was moved to math

  • wpiutil es ahora util

  • SlewRateLimiter, LinearFilter, and MedianFilter now live in math.filters, along with the newly-added Debouncer.

  • Timer se ha movido de frc2 a frc

  • Controladores de motor (VictorSPX, PWMSparkMax, etc) han sido movidos al paquete motorcontrol.

  • edu.wpi.cscore has moved to edu.wpi.first.cscore

Simulación

  • Uses multi-file json save formats instead of ini 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 of ini 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.