Choreo 2024.2.3
A Note on Support/Future Plans
This will be the last major feature update compatible with existing Choreo robot projects, but future bugfix updates to this version may occur if necessary. Please continue to report issues with 2024.2.3 on our bug tracker, but note that Choreo development will be shifting to features for 2025.
New Features in 2024.2.3
Solver Tolerance Relaxation: A change to the success conditions for generation has been made that relaxes the tolerance for feasibility/optimality, which was multiple orders of magnitude stricter than is sensible for the FRC usecase.
By relaxing this tolerance, we allow the optimizer to end earlier, and succeed in more conditions, without human-noticeable impact to the path.
Path Gradients: To present more information about the generated path, the trajectory line now has several options for a gradient along its length, mapped to various properties of the trajectory. See docs for details.
Solver Progress Animation: Choreo will now show intermediate states of the optimizer during generation. This is intended to give more visibility into what the optimizer is doing for a particular problem, and how it iteratively refines the initial guess in general.
Recording.2024-06-18.233111.mp4
Max Velocity Constraint Path Detail Fix: The Maximum Velocity constraint previously caused generation issues when set too low, because Choreo did not provide enough path detail for the slower section. This constraint has now been incorporated into the path detail counter to fix this issue.
Constraints
Point-At Constraint: This new constraint on segments or waypoints constrains the robot heading to face the given point, within the specified tolerance. Note that this constraint requires all waypoints in its range to be heading-unconstrained (i.e. translation waypoints), and works best when the robot enters the range already close to the desired angle. Additionally, rotating the initial-guess heading box of the translation waypoints towards the desired angle helps with optimization. This constraint is a feature we will continue refining for 2025, to require less manual work.
Maximum Angular Velocity Magnitude Constraint has been added.
Zero Velocity/Zero Angular Velocity constraints have been removed, and projects will be automatically upgraded to replace them with Max Velocity/Max Angular Velocity set to 0. The Stop Point constraint remains, and still has special behavior regarding trajectory splitting. A Max Velocity = 0 and Max Angular Velocity = 0 on a waypoint will not be considered a split point. NOTE: Maximum Velocity = 0 on a segment is now possible, but will be infeasible.
Quality-of-Life
New Keyboard Shortcuts: Ctrl/Cmd-O for File Open, and Escape to unselect the current top bar and sidebar selections.
Keyboard Shortcuts Doc Panel: A list of all the shortcuts and gestures such as pan/zoom/etc is now in Document Settings -> Controls.
Right-Click Waypoint Add Menu: Right-clicking on the field now brings up a waypoint type selector. Clicking a type adds that waypoint where you right-clicked. This does not modify your navbar selection, and works when a waypoint type is not selected in the navbar.
Waypoint Number on Waypoint Config Panel: The waypoint config panel is now marked with the currently selected waypoint number.
Selected Waypoint Draws on Top: In areas where several waypoints are closely positioned, the selected one will now draw on top, so it can be clicked and dragged.
Heading Wraparound Bug Fix: A bug that could cause the robot to take the "long way" when heading wrapping has been fixed.
ChoreoLib
(C++/Java) Removed ChoreoTrajectoryState::AsArray()
/ChoreoTrajectoryState.asArray()
due to the increased complexity of the ChoreoTrajectoryState structure.
(C++/Java) Exposed module force vectors from TrajoptLib: ChoreoTrajectoryState
has two new fields moduleForcesX
and moduleForcesY
, each an array of four double
s. These arrays represent the X and Y components of the module force vectors in Newtons, in field-space. Forces appear in the following order: [FL, FR, BL, BR]. These are not used in the provided ChoreoLib path follower, but are now available for teams to incorporate in custom followers, especially to take advantage of torque control on drive motors.
.traj Spec Changes
- Added
moduleForcesX
andmoduleForcesY
, two arrays of four doubles, to the trajectory state. See the ChoreoLib section above for the significance of these. These additions should not break parsing except in libraries which error on JSON fields which do not match to object fields.
What's Changed
- Update supported systems table in docs by @calcmogul in #417
- [build] Replace deprecated eslint plugin by @spacey-sooty in #420
- Add Git and version numbers to build requirements by @calcmogul in #425
- Feature: Path Gradient by @Awesomeplayer165 in #419
- Fix app name in task manager by @bruingineer in #430
- Upgrade TrajoptLib to require lower minimum CMake version by @calcmogul in #431
- Unselect sidebar and navbar items with escape key by @calcmogul in #429
- Make control interval count heuristic account for max velocity constraint by @bruingineer in #426
- Add PointAt constraint by @bruingineer in #427
- Feature: Add Open File Shortcut by @Awesomeplayer165 in #435
- Codebase: Refactor from VisibilityPanel to ViewOptionsPanel by @Awesomeplayer165 in #437
- Update TrajoptLib to fix Sleipnir memory leak by @calcmogul in #440
- Condense Actions .yml scripts by @calcmogul in #441
- Docs: View Options Panel by @Awesomeplayer165 in #436
- Bugfix: Angular Velocity Gradient by @Awesomeplayer165 in #433
- Document Path Gradient API by @Awesomeplayer165 in #434
- Solver status feedback by @shueja in #439
- Make selected waypoint always draw above others by @shueja in #444
- Feature: add modal fade out effect by @Awesomeplayer165 in #449
- Add list of keyboard shortcuts to document settings by @shueja in #447
- Feature: Context Menu by @Awesomeplayer165 in #448
- Upgrade TrajoptLib to use larger solver tolerance by @calcmogul in #451
- Fix error when converting undefined waypoint id to index by @shueja in #452
- Upgrade Node dependencies by @calcmogul in #454
- Fix ChoreoSwerveCommand C++ constructor copy warnings by @spacey-sooty in #457
- Clear undo history after opening file by @shueja in #463
- Max angular velocity constraint by @bruingineer in #462
- Fix comma typos in ChoreoLib example by @calcmogul in #465
- Don't apply max velocity constraint to end point by @bruingineer in #466
- Apply angle modulus to initial guess dtheta by @bruingineer in #467
- remove duplicate initial guess waypoint constraint check by @bruingineer in #471
- Use Temurin JDK to build ChoreoLib by @calcmogul in #474
- Use ubuntu-22.04 instead of ubuntu-latest by @calcmogul in #473
- Upgrade to spotless 6.25.0 by @calcmogul in #475
- Upgrade to Tauri 1.6.5 by @calcmogul in #477
- Upgrade to Tauri 1.6.6 by @calcmogul in #481
- Remove ChoreoTrajectoryState::AsArray() by @calcmogul in #482
- Sort and auto-approve apt packages by @calcmogul in #483
- Upgrade to prettier 3.3.2 by @calcmogul in #486
- Fix ChoreoTrajectoryState constructor docs typo by @calcmogul in #485
- Fix ChoreoTrajectoryState member docs typo by @calcmogul in #488
- Move copy and open directory buttons in menu to stable position. by @shueja in #490
- Add waypoint number to config panel by @shueja in #445
- Upgrade TrajoptLib to expose swerve module forces by @calcmogul in #493
- Add module forces to trajectory states by @BBScholar in #480
- Use quiet flag with apt-get update by @calcmogul in #494
- Merge zero and max magnitude constraints by @calcmogul in #464
- Change version number to 2024.2.3 by @shueja in #495
- Upgrade TrajoptLib to fix Rust callbacks only working once by @calcmogul in #496
- Update Trajoptlib: fix use-after-free in solver status by @shueja in #497
- Fix non-split case for split trajectories gradient by @shueja in #499
- Improve handling of sidebar and navbar selection being undefined/-1 by @shueja in #500
- Fix artifact paths for cross-compiled mac artifacts by @shueja in #501
New Contributors
- @bruingineer made their first contribution in #430
- @BBScholar made their first contribution in #480
Full Changelog: v2024.2.2...v2024.2.3