diff --git a/docsSite/docs/getting-started/_category_.json b/docsSite/docs/getting-started/_category_.json index 432f74ed..0da3477a 100644 --- a/docsSite/docs/getting-started/_category_.json +++ b/docsSite/docs/getting-started/_category_.json @@ -1,6 +1,6 @@ { "label": "Getting Started", - "position": 2, + "position": 3, "collapsed": false, "link": { "type": "generated-index", diff --git a/docsSite/docs/legal/_category_.json b/docsSite/docs/legal/_category_.json index 71f459bb..385e54cb 100644 --- a/docsSite/docs/legal/_category_.json +++ b/docsSite/docs/legal/_category_.json @@ -1,6 +1,6 @@ { "label": "Legal", - "position": 5, + "position": 6, "link": { "type": "generated-index" } diff --git a/docsSite/docs/more-features/_category_.json b/docsSite/docs/more-features/_category_.json index 64387424..d46a0d53 100644 --- a/docsSite/docs/more-features/_category_.json +++ b/docsSite/docs/more-features/_category_.json @@ -1,6 +1,6 @@ { "label": "More Features", - "position": 4, + "position": 5, "collapsed": false, "link": { "type": "generated-index" diff --git a/docsSite/docs/tab-reference/3d-field.md b/docsSite/docs/tab-reference/3d-field.md index f8725640..6f9dbed3 100644 --- a/docsSite/docs/tab-reference/3d-field.md +++ b/docsSite/docs/tab-reference/3d-field.md @@ -39,7 +39,11 @@ To see a full list of supported object types, click the `?` icon. This list also Geometry data should be published as a byte-encoded struct or protobuf. Various 2D and 3D geometry types are supported, including `Pose2d`, `Pose3d`, `Translation2d`, `Translation3d`, and more. -Many FRC libraries support these formats, including WPILib and AdvantageKit. The example code below shows how to log 3D pose data in Java. +:::warning +The legacy number array format for geometry data is now deprecated. See [here](../whats-new/legacy-formats.md) for details. +::: + +Many FRC libraries support the struct format, including WPILib and AdvantageKit. The example code below shows how to log 3D pose data in Java. diff --git a/docsSite/docs/tab-reference/_category_.json b/docsSite/docs/tab-reference/_category_.json index 23ba148e..647c1e4d 100644 --- a/docsSite/docs/tab-reference/_category_.json +++ b/docsSite/docs/tab-reference/_category_.json @@ -1,6 +1,6 @@ { "label": "Tab Reference", - "position": 3, + "position": 4, "collapsed": false, "link": { "type": "generated-index", diff --git a/docsSite/docs/tab-reference/odometry.md b/docsSite/docs/tab-reference/odometry.md index 7c9953d6..794f4ed1 100644 --- a/docsSite/docs/tab-reference/odometry.md +++ b/docsSite/docs/tab-reference/odometry.md @@ -40,7 +40,11 @@ To see a full list of supported object types, click the `?` icon. This list also Geometry data should be published as a byte-encoded struct or protobuf. Various 2D and 3D geometry types are supported, including `Pose2d`, `Pose3d`, `Translation2d`, `Translation3d`, and more. -Many FRC libraries support these formats, including WPILib and AdvantageKit. The example code below shows how to log 2D pose data in Java. +:::warning +The legacy number array format for geometry data is now deprecated. See [here](../whats-new/legacy-formats.md) for details. +::: + +Many FRC libraries support the struct format, including WPILib and AdvantageKit. The example code below shows how to log 2D pose data in Java. diff --git a/docsSite/docs/tab-reference/swerve.md b/docsSite/docs/tab-reference/swerve.md index af7c25ce..87180280 100644 --- a/docsSite/docs/tab-reference/swerve.md +++ b/docsSite/docs/tab-reference/swerve.md @@ -38,7 +38,11 @@ To get started, drag a field to the "Sources" section. Delete a source using the Data should be published as a byte-encoded struct or protobuf, using the `SwerveModuleState[]`, `ChassisSpeeds`, `Rotation2d`, or `Rotation3d` types. -Many FRC libraries support these formats, including WPILib and AdvantageKit. The example code below shows how to log swerve module states in Java. +:::warning +The legacy number array format for swerve data is now deprecated. See [here](../whats-new/legacy-formats.md) for details. +::: + +Many FRC libraries support the struct format, including WPILib and AdvantageKit. The example code below shows how to log swerve module states in Java. diff --git a/docsSite/docs/whats-new/_category_.json b/docsSite/docs/whats-new/_category_.json new file mode 100644 index 00000000..db91748d --- /dev/null +++ b/docsSite/docs/whats-new/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "What's New in 2025?", + "position": 2, + "collapsed": true +} diff --git a/docsSite/docs/whats-new/full-changelog.md b/docsSite/docs/whats-new/full-changelog.md new file mode 100644 index 00000000..e55c837b --- /dev/null +++ b/docsSite/docs/whats-new/full-changelog.md @@ -0,0 +1,187 @@ +--- +sidebar_position: 1 +--- + +# Full Changelog + +### Log File Loading + +- Significantly improved log decoding speed (up to 100x faster). +- Enabled selection of multiple files using the standard "Open" menu. +- Added the option to open additional logs while another log is already open. + +### Timeline + +- Completely redesigned the timeline interface for improved usability. +- Enabled zooming and panning functionality. +- Users can zoom by clicking and dragging with the Shift key held down. +- Implemented visual highlights for auto and teleop periods. +- Hovering over timestamps now displays a preview of the corresponding data. +- Added timestamps directly on the timeline for easier reference. +- The cursor now snaps to the start and end of match periods. + +### Window Design + +- Implemented a translucent sidebar on Windows 11 for a more modern look. +- Integrated the title bar into the main window on Windows +- Introduced custom menu bars for both Windows and Linux. +- Adjusted the loading bar height for better visibility. +- Added keyboard playback controls for pop-out windows. +- Added keyboard shortcuts for toggling the sidebar and control panel. + +### 📖 Documentation + +- Documentation is now available online at https://docs.advantagescope.org. +- Upgraded to a modern documentation interface. +- All documentation has been updated to reflect the new features released in 2025. +- In the app, documentation can now be accessed in a pop-out window. + +### 📉 Line Graph + +- Enhanced customization options, including the ability to manually change line color, thickness, and display mode (smooth or with sample points). +- Added support for graphs with discrete fields. +- Improved UI for hiding fields and enabling drag-and-drop reordering of fields. +- Enabled dragging fields between left and right axes. +- Non-primary axes now have independent gridlines. +- Users can zoom by clicking and dragging with the Shift key held down. +- Implemented options to select recent unit conversion presets and reset units with a button click. +- Added integration and differentiation functions. +- Included a help menu that provides information about specific object types. +- Line graphs can now be accessed in a pop-out window. +- The cursor now snaps to changes in discrete fields. +- Added preview text for empty raw values. + +### 🗺️ Odometry + +- Introduced support for 3D poses. +- Improved the UI for configuring poses. +- Added the ability to temporarily hide objects. +- Implemented a button to clear all poses. +- Enabled drag-and-drop reordering of poses. +- Users can now resize the control menu. +- Redesigned the options UI for a more intuitive experience. +- Included a help menu that provides information about specific object types. +- Implemented value previews in the pose list. +- Added the option to change the ghost color. +- Separated vision targets by their associated robot object. +- Enabled customization of vision target colors and thickness. +- Added visualization of swerve states. +- Implemented rotation override for all robot types. +- Allowed users to change trajectory colors and thickness. +- Expanded heatmap range options to include auto, teleop, and teleop (no endgame). +- Added deprecation warnings for numeric array formats ([details](./legacy-formats.md)). + +### 👀 3D Field + +- Supported the combination of 2D and 3D poses. +- Improved the UI for configuring poses. +- Added the ability to temporarily hide objects. +- Implemented a button to clear all poses. +- Enabled drag-and-drop reordering of poses. +- Users can now resize the control menu. +- Redesigned the options UI for a more intuitive experience. +- Zooming controls are smoother on some devices. +- Included a help menu that provides information about specific object types. +- Implemented value previews in the pose list. +- Improved the efficiency of model rendering. +- Added an indicator to show when models are loading. +- Simplified models based on the rendering mode. +- Added support for using different robot models for each pose. +- Introduced heatmap objects for data visualization. +- Expanded coloroptions for the ghost robot. +- Linked vision targets, components, and mechanisms to their respective object sets. +- Enabled customization of vision target thickness. +- Allowed users to change trajectory color and thickness. +- Added visualization of swerve states. +- Implemented rotation override for all robot types. +- Expanded heatmap range options to include auto, teleop, and teleop (no endgame). +- Increased the variety of cone color options. +- Removed source links for fields and robots to simplify the interface. +- Added deprecation warnings for numeric array formats ([details](./legacy-formats.md)). +- Added a mysterious "XR" button... + +### 🔢 Table + +- Enabled drag-and-drop functionality for rearranging fields in the table. +- Tables can now be accessed in a pop-out window. + +### 💬 Console + +- The console can now be accessed in a pop-out window. + +### 📊 Statistics + +- Improved the configuration UI for a more user-friendly experience. +- Added support for more than 3 fields. +- Added support for multiple reference fields. +- Implemented the ability to temporarily hide fields. +- Introduced a button to clear all fields. +- Enabled drag-and-drop reordering of fields. +- Users can now resize the control menu. +- Included a help menu that provides information about specific field types. +- Expanded range options to include visible range, auto, teleop, teleop (no endgame), live (30 seconds), and live (10 seconds) +- Sampling options are now handled automatically. +- Statistics can now be accessed in a pop-out window. + +### 🎬 Video + +- Improved the overall user interface for video playback. +- Fixed issues with YouTube video download functionality. + +### 🎮 Joysticks + +- Increased the number of joysticks that can be visualized. +- Introduced a new interface for configuring joysticks. + +### 🦀 Swerve + +- Added support an unlimited number of fields. +- Added support for chassis speeds. +- Expanded the range of object colors. +- Allowed users to manually customize object color. +- Implemented the ability to temporarily hide objects. +- Enabled drag-and-drop reordering of objects. +- Added a button to clear all objects. +- Implemented value previews in the source list. +- Allowed users to customize module layout per-source. +- Redesigned the options UI for a more intuitive experience. +- Added deprecation warnings for numeric array formats ([details](./legacy-formats.md)). +- Included a help menu that provides information about specific object types. + +### ⚙️ Mechanism + +- Added support for an unlimited number of objects. +- Implemented the ability to temporarily hide objects. +- Enabled drag-and-drop reordering of objects. +- Provided a button to clear all objects. +- Implemented value previews in the source list. +- Included a help menu that provides information about the supported sources. + +### 🔵 Points + +- Added support for an unlimited number of fields. +- Implemented the ability to temporarily hide objects. +- Provided a button to clear all objects. +- Enabled drag-and-drop reordering of objects. +- Implemented value previews in the source list. +- Redesigned the options UI for a more intuitive experience. +- Included a help menu that provides information about specific object types. + +### 🔍 Metadata + +- Metadata can now be accessed in a pop-out window. + +### Miscellaneous + +- Added feature to remember the last object type for all fields. +- Improved keyboard shortcuts for opening tabs. +- Added drag-and-drop functionality for the tab bar. +- Reordered tabs to prioritize odometry and 3D field after line graph. +- Made odometry and 3D field default tabs. +- Fixed errors that occurred when assets were partially downloaded. +- Fixed issues with leading zeroes in RIO addresses. +- Switched WPILib Linux distribution from a package to a directory. +- Added an AppArmor profile for Ubuntu. +- Updated the WPILib logo. +- Added startup alerts, feedback buttons, and survey prompts for the beta version. +- Added a privacy policy document ([link](../legal/privacy-policy.md)). diff --git a/docsSite/docs/whats-new/index.md b/docsSite/docs/whats-new/index.md new file mode 100644 index 00000000..63389818 --- /dev/null +++ b/docsSite/docs/whats-new/index.md @@ -0,0 +1,3 @@ +# What's New in 2025? + +TODO: Provide a brief description of important features. diff --git a/docsSite/docs/whats-new/legacy-formats.md b/docsSite/docs/whats-new/legacy-formats.md new file mode 100644 index 00000000..e51a79a3 --- /dev/null +++ b/docsSite/docs/whats-new/legacy-formats.md @@ -0,0 +1,152 @@ +--- +sidebar_position: 2 +--- + +# Legacy Format Deprecation + +WPILib supports the type-safe and unit-safe **struct format** for publishing complex data types such as geometry objects, swerve states, and more! Starting in 2025, AdvantageScope takes advantage of the struct format to streamline the process of configuring fields for visualization. For example, 2D and 3D poses can now be used side-by-side on the [🗺 Odometry](../tab-reference/odometry.md) and [👀 3D Field](../tab-reference/3d-field.md) tabs with **no manual configuration** and **no unit errors**. + +In 2024, AdvantageScope supported both structs and the legacy "number array" format for geometry types. The legacy format packed structured data into a format like `double[]` (e.g. a pose would be represented by the array `[x, y, rotation]`). + +:::info +For more information on the design of structs and their advantages, check out [this post](https://www.chiefdelphi.com/t/introducing-monologue-annotation-based-telemetry-and-data-logging-for-java-teams/443917/5). +::: + +## What's Changing? + +In 2025, AdvantageScope continues to support both the modern struct format and the legacy number array format. However, **the legacy number array format is now deprecated and will be removed in 2026**. AdvantageScope will present a warning when the legacy format is used, and additional information must be manually provided to specify the packing format and units. + +| | Modern Struct Format | Legacy Number Array Format | +| --------------- | -------------------- | -------------------------- | +| **2024** (v3.x) | ✅ Recommended | ✅ Supported | +| **2025** (v4.x) | ✅ Recommended | ⚠️ Deprecated | +| **2026** (v5.x) | ✅ Recommended | ❌ Removed | + +:::warning +While the legacy format can still be used in 2025, additional information must be provided about the packing format and units of each field. After adding an array field to a tab, the format can be configured by clicking the icon to the left of the field name. +::: + +## How Do I Update? + +Most major tools and libraries used in FRC already support the modern struct format (check the documentation of each library for details). Below, you can see how to upgrade to the modern format for several common libraries. The struct format supports both single objects and object arrays (such as `Pose2d[]`). + +:::tip +If you rely on a library that hasn't upgraded to the new format, reach out the developers for details. +::: + +
+NetworkTables + +To publish struct data to NetworkTables, create a `StructPublisher` with the desired type and call `set()` as shown below. + +```java +StructPublisher publisher = NetworkTableInstance.getDefault() + .getStructTopic("MyPose", Pose2d.struct).publish(); +publisher.set(new Pose2d()); +``` + +:::tip +WPILib does not yet have a struct alternative to the [`SmartDashboard`](https://github.wpilib.org/allwpilib/docs/release/java/edu/wpi/first/wpilibj/smartdashboard/SmartDashboard.html) style `put` methods. Consider using another logging library such as Monologue that supports an imperative API. +::: + +
+ +
+Field2d + +WPILib's `Field2d` class does not yet support the modern struct format. Stay tuned for updates! + +:::tip +In the meantime, users who wish to try the modern format can publish pose data using the NetworkTables API shown above. +::: + +
+ +
+Monologue + +To publish struct data using Monologue, simply return a supported object type from a method tagged with `@Log`: + +```java +@Log +public Pose2d getPose() { + return new Pose2d(); +} +``` + +Objects can also be logged imperatively: + +```java +log("MyPose", new Pose2d()); +``` + +
+ +
+Epilogue + +To publish struct data using Epilogue, simply return a supported object type from a logged method: + +```java +@Logged +public class MyClass { + public Pose2d getPose() { + return new Pose2d(); + } +} +``` + +
+ +
+AdvantageKit + +To log and replay struct data using AdvantageKit, simply pass a supported object type to the `recordOutput` method, return it from a method/field tagged with `@AutoLogOutput`, or include it in an inputs class tagged with `@AutoLog`. + +```java +// Standard output logging +Logger.recordOutput("MyPose", new Pose2d()); + +// Annotation output logging +public class MyClass { + @AutoLogOutput + public Pose2d getPose() { + return new Pose2d(); + } + + @AutoLogOutput + public Pose2d myPose = new Pose2d(); +} + +// Inputs class +@AutoLog +public class Inputs { + public Pose2d myPose = new Pose2d(); +} +``` + +
+ +
+DataLog + +To append struct data to a raw `DataLog`, create a `StructLogEntry` with the desired type and call `set()` as shown below. + +```java +StructLogEntry logEntry = + StructLogEntry.create(DataLogManager.getLog(), "MyPose", Pose2d.struct); +logEntry.append(new Pose2d()); +``` + +
+ +
+Phoenix Signal Logger + +The Phoenix signal logger does not currently support the modern struct format. Consider publishing geometry data using one of the logging libraries shown above instead of using custom signals in Phoenix. + +:::tip +AdvantageScope can automatically merge log files from multiple sources, such as Hoot and WPILOG files. See [here](../getting-started/manage-files.md) for details. +::: + +