What Changes during Generation?
Last updated 1/3/2026
This document describes what changes and doesn't change within the generation of a trajectory file.
Input
pre.traj and pre.chor
* Presumed to already be schema-updated to the current version
Output
post.traj
* Some fields present in the Rust representation of the trajectory schema are internal and marked to be skipped in serialization. Those are not considered part of the output.
pre.chor is unchanged
* Schema updates might cause the file contents to be replaced with the updated version
After Successful Trajectory Generation
nameis unchangedversionis unchangedparamsis unchangedsnapshotcorresponds to theparamsfield- EXCEPT for the waypoint control intervals being different/updated if and only if
override_intervalsis false on a given waypoint snapshot.waypoints[n].headingmatchesparams.waypoints[n].heading.val, not any adjusted value.trajectoryis fully dependent on the generator result, thesnapshotwaypoints'.intervalsand.splitfields, the project type from the project file, and the robot config from the project file.trajectory.typeis either "Swerve" or "Differential"trajectory.waypointsis a list of waypoint timestamps with the same length assnapshot.waypoints. Its first element is 0 (seconds).trajectory.samplesis the list of samplestrajectory.splitsis the sample index of every waypoint that starts a split segment. The end waypoint is not included, even if marked split. The start waypoint is always included, even if not marked split. Thustrajectory.splitsalways includes sample index 0 as its first element, and may have other elements.-
trajectory.configis a snapshot of the robot config. -
eventsis unchanged except that the marker target timestamps are updated as follows for each markermarker: - If
marker.from.target(an index ofsnapshot.waypoints) is not None/undefined and is in bounds,marker.from.target_timestamp = trajectory.waypoints[marker.from.target]