Skip to content

Releases: SleipnirGroup/Choreo

Choreo v2025.0.0-beta-2

02 Oct 21:54
721ea59
Compare
Choose a tag to compare
Pre-release

This update fixes a critical issue with ChoreoLib Java, leading to trajectories unable to load.
It also removes a useless item that was being written to files but was unused, and should not have been in the v2025.0.0 spec.

FYI: Documentation improvement is underway and is visible in the below changelog, but the published documentation is not tied to releases.

What's Changed

Full Changelog: v2025.0.0-beta-1...v2025.0.0-beta-2

Choreo v2025.0.0-beta-1

02 Oct 06:53
97f6b77
Compare
Choose a tag to compare
Pre-release

Choreo 2025

The SleipnirGroup team of developers is ready to release the open beta of Choreo for the 2025 season.

Get It Here!

|624x323

Thank you to all the teams that used Choreo in 2024 and shared your needs, struggles, and suggestions for improvement. Our work for 2025 has focused on many issues and enhancements.

General

Math Expressions with Variable and Unit Support:

This feature addresses a few struggles in 2024 Choreo:

  1. Default units (SI, radians) being inflexible, unintuitive, and forcing the user to convert by hand.
  2. No good way to define field constants or waypoint locations that are shared among all trajectories.
  3. No good way to define robot configuration in terms of other constants (i.e. bumper size and module placement in terms of frame size.

To improve user experience, we have replaced almost every number input in the application with mathematical expression inputs, powered by mathJS. MathJS has full dimensional analysis awareness, allowing inputs to be specified in whichever unit you like, and rejecting inputs that are not dimensionally correct. Choreo will also save the expression as you typed it, instead of evaluating and discarding it at the moment of submission.

Furthermore, Choreo allows you to define a project-wide set of variables that can be substituted into any appropriate expression in the project. Variables can be defined as single numbers with a variety of dimensions, but Choreo also has aggregate variables to organize the x, y, and heading components of an important pose.

The expression and variable features open up a wide range of capabilities, similar to parametric sketches in a CAD program. We’re excited to see how teams use these new tools.

|624x177

Robot Config

Support for non-centered/non-rectangular modules

Choreo 2024 asked for a wheelbase, track width, bumper length, and bumper width. This described many robots, but especially in 2024, many robots had intakes that made the bumpers not centered at the center of rotation, or they had module placement that was not centered or even rectangular. Choreo 2025 makes robot configuration more flexible, permitting and honoring these configurations.

NOTE: due to path mirroring, Choreo 2025 still only supports module and bumper dimensions that are symmetric across the robot x-axis (the front-back line, meaning left-right mirror symmetry). In robot configuration, users only edit the left side of the robot dimensions.

The user interface design for robot configuration is an area of planned improvement.

|624x439

Generation

Command-Line Generation

Choreo now ships with a command-line tool that takes in a .chor file and one or more associated .traj, and generates the .traj files, modifying them in-place. Further details will be described in the docs.

Fix Inability to Cancel Generation

This issue was inherent to the architecture of Choreo, but through the architecture changes related to command-line generation, we were able to make generation individually cancelable at any point.

(Proper) Continuous Heading Support

Choreo 2025 modifies the internal logic of the solver to handle robot rotation as a unit vector instead of an angle number. This allows Choreo to take the fastest rotational movement, even if it would previously wrap -pi to pi. Therefore, heading initial guesses are not as important to manually tweak.

Waypoints

Heading Initial Guess

Choreo 2025 removes the ability to set the heading initial guess on translation and empty waypoints. Due to the above improvements to the solver, and other logic implemented to automatically calculate heading initial guesses, the feature was unnecessary, counterproductive, and cluttered the UI.

|163x99

Remove Initial Guess Points

Choreo 2025 removes the (non-constrainable) initial guess point waypoint type and subsumes its functionality into the Empty Waypoint, whose location can be constrained using Keep-In or Keep-Out Zones. The Empty Waypoint can be the endpoint of a path, but not the start point.

Individual Sample Override

Instead of a default sample override being applied to an entire path, with the same number of samples for each waypoint, Choreo 2025 has a checkbox on each waypoint to specify an individual override between that waypoint and the next.

|223x49

Constraints

Interactive Constraint Overlay

The user interface for adding and editing constraints has been revised. Previously, a click target for adding a constraint was at every waypoint and the midpoint of every segment. Now, click one waypoint, then click the other, without the UI clutter.

When a constraint is selected, the field highlights the range it applies to. For constraints with additional field points/lines to modify (currently Point At and Keep In/Out Zones), the field will also display draggable field objects tied to the constraint.

The display also shows when hovering over the constraint in the sidebar.

Keep-In Zones/Field Border Constraint

Choreo 2025 adds a new type of constraint, which is a zone (currently rectangle or circle) that the robot must stay entirely inside, including the bumpers, for the duration of the constraint scope. For the first beta, a Keep-In Rectangle the size of the field will be part of new paths. If and when arbitrary (convex) polygons are supported as Keep-In zones, functionality will be added to add a polygon that better fits the field border.

Obstacles (Keep-Out Zones) as Constraints

Obstacles have been changed to be part of the constraints system and renamed to Keep-Out zones for consistency. While the solver still struggles in some obstacle setups, the ability to apply the constraint to only a section of the path makes the problem more feasible.

|364x63

Toggleable Constraints

Choreo 2025 adds a checkbox to each constraint that allows the constraint to be disabled without being deleted. This can be useful for comparing the effects of individual constraints.

Generation Pre-checks/Feedback

Choreo 2025 expands the additional checks on the trajectory, performed before starting the solver, which are intended to identify conflicting constraints and other causes of infeasibility. New checks include:

  • Verifying that Pose waypoints under Point-At constraints are compliant
  • Verifying that 0 Max Angular Velocity constraints do not conflict with Pose waypoints with differing headings
  • More to come!

|386x152

Path Splitting

Splitting Paths

Splitting paths was previously done through a project-wide switch that made every Stop Point constraint be a path splitting point. In 2025, the Stop Point constraint is entirely separate from splitting. Every waypoint except for path endpoints has a checkbox which can be used to mark a waypoint as a split point. NOTE: Choreo does not enforce stopping at split points, but for most usage, adding a Stop Point constraint is still advised.

|230x39

Artifacts

The releases now have many more artifacts than last year.

We support Windows arm64 and x86_64, MacOS aarch64 and x86_64, and Linux x86_64.

Users should normally be downloading the -setup installers for Windows, the .dmg for MacOS, and the AppImage, .deb for Debian and Ubuntu, or .rpm for Fedora.

For each platform, there is a separate executable for command-line generation. We hope to find a way to put the command-line functionality into the main Choreo app.

Finally, we have standalone executables. These are generated for potential bundling with WPILib 2025 and are not the recommended way of installing Choreo.

Choreolib

ChoreoLib 2025 Beta is compatible with WPILib 2024.

Python

ChoreoLib 2025 officially supports Python at PyPI (sleipnirgroup-choreolib). This is new for 2025.

C++/Java

For C++ and Java, the vendordep link is specific ...

Read more

Choreo v2025.0.0-alpha-3

01 Oct 20:55
cbef0db
Compare
Choose a tag to compare
Pre-release
[ci] Fix release executable upload (#798)

Choreo v2024.2.3

19 Jun 06:36
bb79db0
Compare
Choose a tag to compare

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.
image

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.

image

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.
image

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 doubles. 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 and moduleForcesY, 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

Read more

Choreo v2024.2.2

26 Mar 19:38
d091fd4
Compare
Choose a tag to compare

This release brings several bug fixes and automatic reopening of the last opened file.

We now ship a native Windows ARM binary in addition to Windows x86_64. The native binary should be more performant for Windows ARM systems, since it avoids emulation.

IMPORTANT As of this version, opening a Choreo file will no longer automatically re-export all trajectories. This was causing trouble for teams using version control systems, especially due to another bug fixed in this version. You can still export all the trajectories at once from the app menu.

  • Fixes a visual issue with the stale-trajectory indicators in the path selector always showing all trajectories stale after opening the file.
  • Fixes an issue where trajectory files would have their event markers cleared out when being exported.
    • This bug happened when loading a .chor file with stale trajectories, which loaded the markers without their corresponding timestamp on the trajectory, then automatically exported all the trajectories, skipping the "broken" markers.
    • While we have disabled the automatic export as mentioned above, we have also updated the .chor file version to v0.3.1 to preserve the markers' timestamp on the trajectory, regardless of whether the trajectory is stale or not.
  • Fixes an issue that would cause an additional } to end up at the end of the .chor file, making it unloadable.

ChoreoLib

ChoreoLib now has ChoreoTrajectory.getFlippedInitialPose() and getFlippedFinalPose() for cleaner usage of these positions depending on alliance.

.traj Spec Changes

No changes.

We intend to include this section in future releases to avoid unnanounced compatibility breakage with non-SleipnirGroup consumers of .traj files (PathPlanner, LabVIEW/Python unofficial Choreo libraries, etc).

Full Changelog

New Contributors

Full Changelog: v2024.2.1...v2024.2.2

Choreo v2024.2.1

05 Mar 01:35
aa23952
Compare
Choose a tag to compare

This release fixes macOS arm64 code signing issues. Otherwise, it is identical to 2024.2.0.

Choreo v2024.2.0

04 Mar 22:59
28d644d
Compare
Choose a tag to compare

Choreo v2024.2.0

Please use v2024.2.1 instead, due to a macOS arm64 binary fix.

Documentation for the new features is not yet available on the Choreo docs. The below release notes should be enough to get started.

This release brings major performance improvements, bugfixes, event marker support (for PathPlannerLib interoperability only, not ChoreoLib yet) and a few user experience features. We also now ship a Linux AppImage version of Choreo.

As usual, it is always prudent to make a backup of your Choreo file before upgrading to a new version.

Introducing Sleipnir

We have replaced the numerical optimizer used to generate the trajectories. The new Sleipnir optimizer has been developed by members of Team 2363 with trajectory optimization in mind. You should immediately see up to 10x improvement in generation times, especially on longer paths. Sleipnir also does not have the issue where simple paths are infeasible for no apparent reason.

Initial Guess Bugfix

We fixed an issue relating to initial guess points and their order when sent to the solver. This is part of the issue with obstacles. Obstacles remain in beta for this update, but given Sleipnir and this fix, we suggest giving them another try.

Event Markers

We are finally introducing event marker support for teams that use the PathPlannerLib interoperability to follow Choreo paths. Here are a few important reminders about this integration:

  • For the PathPlanner GUI to pick up Choreo paths for the auto builder, the Choreo .chor file MUST be saved in project root (adjacent to build.gradle), and trajectories must already be generated. PathPlanner GUI will then show a folder of paths labeled "Choreo Paths". This part is not new, but bears repeating.
  • As of this writing, PathPlanner GUI does not show the event markers when previewing a Choreo path.
  • To make an AutoBuilder routine using Choreo paths, you must select "New Choreo Auto".

On to the event markers...

image

Event markers in Choreo are placed based on time offset before/after a specified waypoint. Add a marker by selecting the event marker on the navbar and clicking on the targeted waypoint. The target can be changed similarly to a constraint.

When the trajectory is (re)generated, the marker will appear at the proper timestamp and be exported to the .traj file.

Changes to the time offset will reflect in the .traj file immediately, relative to the timestamp of the targeted waypoint as of the last generation.

You can see the waypoints as they were in the last generation by turning on the "Samples" view layer and turning off "Waypoints".
image

Changes to the targeted waypoint will not reflect until trajectory regeneration.

Changes to the marker name are not part of the trajectory, so will not trigger updates to the .traj file.

The options for binding commands to markers mirror PathPlanner's functionality. Named commands use the same registry of names that PathPlanner markers use. However, there is currently no autofill menu with the existing command names. Changes to the command reflect immediately in the .traj.

There are a few reasons why event markers might not export. These will be shown with a ! next to the marker in the sidebar.

image

  1. There is a stop point (including the path endpoints) between the targeted waypoint and the marker's actual timestamp.
  2. The marker targets a waypoint that has been deleted. You need to select another waypoint in the marker config panel.
  3. The path had been modified between the last generation and adding the marker, so Choreo can't give the marker a proper timestamp. Regenerate the path.

Quality of Life Features

  • The icon for a path in the path selector now changes to a ! when the path has been modified without being regenerated.

  • A new shortcut and button have been added to zoom the field view to fit the current path. You can access this through Ctrl/Command-0 or the button just above the view layer menu.
    image

  • A range slider to show only a particular range of waypoints is now accessible by turning on the "Focus" view layer.
    image

  • The move to Sleipnir has addressed some of the issues with cancellation not having any effect.

ChoreoLib

  • For Java, added ChoreoTrajectory.getSamples() to allow users to work with the time-ordered list of samples directly.
  • Fixed C++ GetTrajectoryGroup() file matching.

Choreo v2024.1.3

07 Feb 00:03
5f1e3aa
Compare
Choose a tag to compare

This release fixes several bugs identified with v2024.1.2 features, along with several other bugs.

New Features

Path Duplication:

This new button in the path selector duplicates the currently selected path and selects the new path.
image

Waypoint Copy/Paste:

Your system's default copy-paste keybinds will copy the currently selected waypoint (if a waypoint is selected), and paste it in the same path or a different path. The pasted waypoint will be inserted after the selected waypoint in the destination path.

Experimental Switches:

This new panel in Document Settings allows users to enable features that are not currently stable enough to be enabled by default.

Currently, this panel just includes obstacles. Further work is planned to improve obstacle stability, but for now, here are a few tips for avoiding some of the issues with obstacles:

  1. Try to use obstacles larger than the robot bumper shape.
  2. Use Initial Guess Points to keep the gray waypoint-to-waypoint line from intersecting an obstacle or getting close enough that the robot moving along it would hit the obstacle. Choreo can make the trajectory hug the obstacle more tightly than the initial guess, but the solver has more trouble expanding the initial guess away from the obstacle to make the final trajectory compliant.
  3. Consider using shorter paths when using obstacles. Choreo currently applies a set of internal constraints for every sample in the path for every obstacle.

What's Changed

  • Clone split sections of trajectory before editing their timestamps by @shueja in #276
  • Remove save file location during file open by @shueja in #280
  • Fix single-generation toasts that imply multiple trajs by @shueja in #278
  • Fix robot config getting wiped on import to spec v0.2.1 by @shueja in #275
  • openFromContents throws w/ descriptive error if schema validation fails by @shueja in #279
  • Fix split trajectories not including the end stop point by @shueja in #277
  • Fix misaligned centerline and notes on 2024 image by @shueja in #281
  • Update Field Width Constant by @GalexY727 in #291
  • Don't save uuid when saving constraint by @shueja in #288
  • Use miklast high-quality field render, retrace field svg by @shueja in #284
  • Add copy-pasting of waypoints within and between paths by @shueja in #285
  • Obstacles beta switch by @Lewis-Seiden in #292
  • Added duplication of paths by @shueja in #286
  • Playback slider wpt positions properly skip guess pts. by @shueja in #296
  • Change version to 2024.1.3-pre1 by @shueja in #299

New Contributors

Full Changelog: v2024.1.2-b...v2024.1.3

Choreo v2024.1.3-pre2

01 Feb 19:03
bc06bc2
Compare
Choose a tag to compare
Choreo v2024.1.3-pre2 Pre-release
Pre-release

This pre-release fixes one bug and reverts one feature from v2024.1.3-pre2. Generating trajectories should actually be possible now.

What's Changed

Full Changelog: v2024.1.3-pre1...v2024.1.3-pre2

Choreo v2024.1.3-pre1

29 Jan 01:40
b84478d
Compare
Choose a tag to compare
Choreo v2024.1.3-pre1 Pre-release
Pre-release

This is a prerelease. Issues identified with the changes made here may be fixed for v2024.1.3.

This release fixes several bugs identified with v2024.1.2 features, along with several other bugs.

New Features

Path Duplication:

This new button in the path selector duplicates the currently selected path and selects the new path.
image

Waypoint Copy/Paste:

Your system's default copy-paste keybinds will copy the currently selected waypoint (if a waypoint is selected), and paste it in the same path or a different path. The pasted waypoint will be inserted after the selected waypoint in the destination path.

Experimental Switches:

This new panel in Document Settings allows users to enable features that are not currently stable enough to be enabled by default.

Currently, this panel just includes obstacles. Further work is planned to improve obstacle stability, but for now, here are a few tips for avoiding some of the issues with obstacles:

  1. Try to use obstacles larger than the robot bumper shape.
  2. Use Initial Guess Points to keep the gray waypoint-to-waypoint line from intersecting an obstacle or getting close enough that the robot moving along it would hit the obstacle. Choreo can make the trajectory hug the obstacle more tightly than the initial guess, but the solver has more trouble expanding the initial guess away from the obstacle to make the final trajectory compliant.
  3. Consider using shorter paths when using obstacles. Choreo currently applies a set of internal constraints for every sample in the path for every obstacle.

What's Changed

  • Clone split sections of trajectory before editing their timestamps by @shueja in #276
  • Remove save file location during file open by @shueja in #280
  • Fix single-generation toasts that imply multiple trajs by @shueja in #278
  • Fix robot config getting wiped on import to spec v0.2.1 by @shueja in #275
  • openFromContents throws w/ descriptive error if schema validation fails by @shueja in #279
  • Fix split trajectories not including the end stop point by @shueja in #277
  • Fix misaligned centerline and notes on 2024 image by @shueja in #281
  • TrajoptLib velocity and acceleration initial guesses by @Lewis-Seiden in #289
  • Update Field Width Constant by @GalexY727 in #291
  • Don't save uuid when saving constraint by @shueja in #288
  • Use miklast high-quality field render, retrace field svg by @shueja in #284
  • Add copy-pasting of waypoints within and between paths by @shueja in #285
  • Obstacles beta switch by @Lewis-Seiden in #292
  • Added duplication of paths by @shueja in #286
  • Playback slider wpt positions properly skip guess pts. by @shueja in #296
  • Change version to 2024.1.3-pre1 by @shueja in #299

New Contributors

Full Changelog: v2024.1.2-b...v2024.1.3-pre1