חדש לעונת 2021

מספר שיפורים בוצעו בתוכנת מערכת הבקרה של FRC® לעונת 2021. מאמר זה יתאר ויספק סקירה קצרה של השינויים והתכונות החדשות וכן יומן שינויים מפורט יותר לשינויי WPILib ב-C++/Java. מסמך זה כולל רק את השינויים הרלוונטיים ביותר עבור משתמשי הקצה, ניתן לראות את רשימת השינויים המלאה ב-Repositories השונים של WPILib ב-GitHub.

חשוב

בשל שינויים פנימיים ב-GradleRIO, יש צורך לעדכן פרוייקטים של שנים קודמות. אחרי התקנת WPILib עבור עונת 2021, כל פרויקט 2020 חייב להיות מיובא כדי להיות תואם.

פיצ׳רים עיקריים

  • נוסף ממשק ממשק WebSocket ברמת החומרה כדי לאפשר גישה מרחוק לקוד הרובוט המדומה בסביבת שולחן עבודה.

  • תמיכה בפלטפורמת הרובוט Romi. קוד הרובוט של Romi פועל בסביבת סימולטור בשולחן העבודה ומדבר עם ה-Romi דרך ממשק ה-WebSocket החדש.

  • תצוגת נתוני רובוט חדשה - Glass, נוספה. ל-Glass יש ממשק משתמש דומה ל-GUI של הסימולטור ותומך בחלק ניכר מאותן התכונות; עם זאת, Glass אינו יכול לשמש כ-Dashboard עצמאי ואינו קשורה לתוכנית הרובוט.

  • תוכנית ההתקנה של WPILib נכתבה מחדש כדי לתמוך ב-macOS ובלינוקס וכדי לשפר את קלות השימוש.

    • תוכנית ההתקנה עבור macOS מאושרת, ומבטלת את הצורך במעקף ה-Gatekeeper.

    • אנא עיינו ב:ref:הוראות ההתקנה <docs/zero-to-robot/step-2/wpilib-setup:WPILib Installation Guide> כיוון שהן שונות משנים קודמות.

  • Added support for model-based control with Kalman filters, extended Kalman filters, unscented Kalman filters, and linear-quadratic regulators. See Introduction to State-Space Control for more information.

WPILib

Breaking Changes

  • curvature_t עבר מה-namespace של frc אל units (ב-C++)

  • Trajectory constraint methods are now const in C++. Teams defining their own custom constraints should mark the MaxVelocity() and MinMaxAcceleration() methods as const.

  • The Field2d class (added midway through the 2020 season) was moved from the simulation package (edu.wpi.first.wpilibj.simulation / frc/simulation/) to the SmartDashboard package (edu.wpi.first.wpilibj.smartdashboard / frc/SmartDashboard/). This allows teams to send their robot position over NetworkTables to be viewed in Glass. The Field2d instance can be sent using SmartDashboard.putData("Field", m_field2d) / frc::SmartDashboard::PutData("Field", &m_field2d) or by using one of the Shuffleboard methods. This must be done in order to see the Field2d in the Simulator GUI.

  • PWM Speed Controllers get() method has been modified to return the same value as was set() regardless of inversion. The value that still stakes into account the inversion can be retrieved with the getSpeed() method. This affects the following classes DMC60, Jaguar, PWMSparkMax, PWMTalonFX, PWMTalonSRX, PWMVenom, PWMVictorSPX, SD540, Spark, Talon, Victor, and VictorSP classes.

New Command-Based Library

  • Watchdog and epoch reporting has been added to the command scheduler. This will let teams know exactly which command or subsystem is responsible for a loop overrun if one occurs.

  • Added a withName() command decorator for Java teams. This lets teams set the name of a particular command using the decorator pattern.

  • נוספה המחלקה NetworkButton, המאפשרת למשתמשים להשתמש ב-NetworkTableEntry בוליאני ככפתור טריגר להפעלת פקודות.

  • Added a simulationPeriodic() method to Subsystem. This method runs periodically during simulation, in addition to the regular periodic() method.

הספרייה הכללית

  • Holonomic Drive Controller - A controller that teams with holonomic drivetrains (i.e. swerve and mecanum) can use to follow trajectories. This also supports custom Rotation2d heading inputs that are separate from the trajectory because heading dynamics are decoupled from translational movement in holonomic drivetrains.

  • Added support for scheduling functions more often than the robot loop via addPeriodic() in TimedRobot. Previously, teams had to make a Notifier to run feedback controllers more often than the TimedRobot loop period of 20ms (running TimedRobot more often than this is not advised). Now, users can run feedback controllers more often than the main robot loop, but synchronously with the TimedRobot periodic functions so there aren’t any thread safety issues. See an example here.

  • נוספה הפונקציה toggle() עבור Solenoid ו-DoubleSolenoid.

  • Added a SpeedControllerGroup constructor that takes a std::vector<> (C++) / SpeedController[] (Java), allowing the list to be constructed dynamically. (Teams shouldn’t use this directly. This is only intended for bindings in languages like Python.)

  • נוספו פעולות (isOperatorControlEnabled() ו-isAutonomousEnabled()) כדי לבדוק את מצב ההפעלה והמשחק יחד.

  • Added a ScopedTracer class for C++ teams to be able to time pieces of code. Simply instantiate the ScopedTracer at the top of a block of code and the time will be printed to the console when the instance goes out of scope.

  • נוספה הפעולה הסטטית fromHSV(int h, int s, int v) ליצירת מופע Color מערכי HSV.

  • Added RT priority constructor to Notifier in C++. This makes the thread backing the Notifier run at real-time priority, reducing timing jitter.

  • נוספה הפעולה DriverStation.getInstance().isJoystickConnected(int) כדי לבדוק אם ג׳ויסטיק מחובר ל-Driver Station.

  • נוספה הפעולה DriverStation.getInstance().silenceJoystickConnectionWarning(boolean) כדי להשתיק את האזהרה כאשר ג׳ויסטיק אינו מחובר. להגדרה זו אין כל השפעה (לדוגמא, אזהרות ימשיכו להיות מודפסות) כאשר הרובוט מחובר ל-FMS אמיתי.

  • Added a constructor to Translation2d that takes in a distance and angle. This is effectively converting from polar coordinates to Cartesian coordinates.

  • נוספו EllipticalRegionConstraint, RectangularRegionConstraint, ו-MaxVelocityConstraint כדי לאפשר הגבלת מהירות מסלול באזור מסוים של הזירה.

  • נוסף האופרטור equals() למחלקה Trajectory כדי להשוות בין שני מסלולים או יותר.

  • Added zero-arg constructor to the Trajectory class in Java that creates an empty trajectory.

  • נוסף exception מיוחד כדי לתפוס התנהגות לא נכונה של מסלול. זה מודיע למשתמשים כאשר אילוצים המוגדרים על ידי המשתמש מתנהגים בצורה לא נכונה (לדוגמא, תאוצה מינימלית גדולה יותר מהאצה מקסימלית).

  • נוספה הפעולה getRotation2d() לממשק ה-Gyro. פעולה זו מטפלת באופן אוטומטי בהמרה ממוסכמות גירו למוסכמות גיאומטריה.

  • Added angular acceleration units for C++ teams. These are available in the <units/angular_acceleration.h> header.

  • Added X and Y component getters in Pose2d - getX() and getY() in Java, X() and Y() in C++.

  • Added implicit conversion from degree_t to Rotation2d in C++. This allows teams to use a degree value (i.e. 47_deg) wherever a Rotation2d is required.

  • Fixed bug in path following examples where odometry was not being reset to the starting pose of the trajectory.

  • Fixed some spline generation bugs for advanced users who were using control vectors directly.

  • Fixed theta controller continuous input in swerve examples. This fixes the behavior where the shortest path is not used during drivetrain rotation.

  • Deprecated units.h, use individual units headers instead which speeds compile times.

סימולציה

  • נוספה תמיכה בסימולציית מקלדת של ג’ויסטיק וירטואלי.

  • נוסף Mechanism2D להדמיית מנגנונים בסימולציה.

  • נוספו מחלקות פיזיקה של סימולציה למנגנוני רובוט נפוצים (DrivetrainSim, ElevatorSim, SingleJointedArmSim, and FlywheelSim)

Shuffleboard

  • Number Slider מציג כעת את ערך הטקסט

  • ה-Graphing Widget משתמש כעת ב-ChartFX, ספריית גרפים עם ביצועים גבוהים.

  • תוקנה תצוגת הספרות עם מספרים גדולים

  • ניתן להגדיר כעת גודל ומיקום בנפרד ב-Shuffleboard API.

  • ניתן להציג כעת קלט אנלוגי עם Text Widget

SmartDashboard

  • ניתן לציין את כתובת ה-IP של המארח בקונפיגורציה.

PathWeaver

  • Added support for reversed splines

  • מערכת הקואורדינטות ב-JSON המיוצא השתנתה ותואמת ל-GUI של הסימולטור. ראו ייבוא PathWeaver JSON למידע נוסף.

GradleRIO

  • Added a vendordep task for downloading vendor JSONs or fetching them from the user wpilib folder

  • Added a gradlerio.vendordep.folder.path property to set a non-default location for the vendor JSON folder

  • Renamed the wpi task (that prints current versions of WPILib and tools) to wpiVersions

  • נוספה היכולת להגדיר משתני סביבה במהלך סימולציה

    • להגדרת משתנה הסביבה HALSIMWS_HOST השתמש ב:

      sim {
        envVar "HALSIMWS_HOST", "10.0.0.2"
      }
      

CSCore

  • Now only lists streamable devices on Linux platforms.

הרחבת Visual Studio Code

  • Visual Studio Code עודכן לגרסת 1.52.1

  • הרחבות השפה של Java ו-C++ עודכנו

  • הרחבת הסימולציה של ה-Driverstation מופעלת כעת כברירת מחדל

  • מייבא הפרויקט שומר כעת על גרסת הפקודות המשמשת בפרויקט המקורי

  • הטקסטים במסכי פרויקט חדש וייבוא פרוייקט הובהרו

  • תיקון הייבוא של קבצים בינאריים

  • תוקן סדר הקישורים ב-build.gradle בפרויקט C++.

  • הפקודה בחרו הרחבת ברירת מחדל לסימולציה עודכנה לעבוד עם מספר הרחבות סימולציה

RobotBuilder

  • Updated to be compatible with the new command based framework and PID Controller.

    • בשל השינויים הגדולים בתבניות, ה-RobotBuilder לא יקבל קובץ שמירה מהשנה קודמת. עליכם ליצור מחדש את קובץ השמירה yaml ולייצא לתקיה חדשה.

    • A version of RobotBuilder that still exports to the old command based framework has included with the installer and is called RobotBuilder-Old

  • C++: use uniform initialization of objects in header

  • C++: fixed case of includes so that code compiles on case-sensitive filesystems

  • שימוש בשם הפרויקט כברירת מחדל לשמירת הקובץ

  • תיקון הייצוא של קובץ החיווט

  • תוקנה סיומת השורה עבור סקריפטים כך שהם יעבדו ב-macOS/Linux

  • נוסף XboxController

Robot Characterization

  • Added LQR latency compensation

  • The tool backend was improved to be more approachable for developers. Configuration and JSON files from the old tool will no longer work with the new version.

  • Deploy code in a new thread to avoid causing the GUI to hang.