Skip to content

Choreo v2025.0.3

Latest
Compare
Choose a tag to compare
@github-actions github-actions released this 07 Feb 05:49
· 1 commit to main since this release
fe1f4fc

This release brings a few features related to variables, some new ChoreoLib AutoTrajectory Triggers, other ChoreoLib bugfixes, and internal changes.

Pose Assignment Dropdown

The waypoint configuration panel now has a searchable input to assign a pose variable to the waypoint. If you type a name that does not exist, it has an option to use the current waypoint expressions for a new pose variable.

The input does not show the last assigned variable, due to there being no waypoint-wide "assignment" property.

image
image

Pose Variable Panel Clarification

image

The expression fields in the pose variable list are now labeled matching the way they are accessed.

ChoreoLib

C++

  • Updated trajectory schema version to be correct

Python

  • Fixed several major type safety bugs.
  • Switched to dataclasses for SwerveSample, SwerveTrajectory, DifferentialSample, DifferentialTrajectory, and EventMarker
  • Added mypy type checking to our CI setup to catch further issues.

Java

  • Changed isAutonomousEnabled checks to isEnabled, allowing Choreo usage in teleop.
    • This does mean AutoRoutines do not automatically end on a transition from auto directly to teleop (a nearly sim-only situation).
    • However, if using RobotModeTriggers.autonomous().whileTrue() or the default template getAutonomousCommand(), those have mechanisms to end the routine when autonomous ends.
  • Added AutoRoutine.idle(), returning a Trigger that goes false at the start and true at the end of every routine.trajectory.cmd() command. idle() can be true when the routine is not being polled.
  • Deprecated AutoRoutine.anyDone(...) in favor if AutoRoutine.anyDoneDelayed(...) with identical usage.
  • Added AutoRoutine.allInactive(AutoTrajectory, AutoTrajectory...), returning a Trigger that is true when none of the provided trajectories are running, but the routine is still being polled.
  • AutoTrajectory: New Triggers, which standardize on seconds instead of cycles for delays.
    • Deprecated done(int cycles).
    • Added doneDelayed(double seconds) which rises to true a given time after the trajectory ends and falls on the next robot cycle.
    • Added doneFor(double seconds) which rises to true when the trajectory ends and falls after a given time.
    • Added recentlyDone() which rises to true when the trajectory ends and falls when another begins.
    • Added atTimeBeforeEnd(double timeBeforeEnd) which is similar to atTime but offsets from the end of the trajectory.
  • AutoTrajectory: Other new features
    • Added chain(AutoTrajectory other) which is shorthand for .done().onTrue(other.cmd())
    • Added spawnCmd() which schedules the .cmd() and ends instantly.
      • This is useful for ending a command group, such as:
firstTrajectory.done().onTrue(
  Commands.sequence(
    score(), // Requiring intake
    secondTrajectory.spawnCmd() // secondTrajectory triggers an intake command
  )
);

Without the secondTrajectory being scheduled separately from the sequence, it will be part of the sequence, which has all the requirements of score(), specifically the intake. This would lead to the sequence being cancelled when secondTrajectory triggers another intake command.

What's Changed

Full Changelog: v2025.0.2...v2025.0.3