No version for distro humble showing github. Known supported distros are highlighted in the buttons above.

Package Summary

Version 0.0.0
License BSD-3-Clause-Clear
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/castacks/airstack.git
VCS Type git
VCS Version develop
Last Updated 2026-09-11
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Trajectory classes and generators for creating, transforming, and sampling candidate trajectories used by AirStack planners and controllers.

Maintainers

  • Andrew Jong

Authors

No additional authors.

Trajectory Library

Contact: John Keller

trajectory_library is a C++ library (no node of its own) for generating and manipulating candidate trajectories for obstacle-avoidance planners. It provides the Trajectory/Waypoint classes used throughout the local layer to interpolate, transform, trim, merge, and visualize waypoint paths, plus a TrajectoryLibrary class that loads a library of candidate trajectory generators from a YAML config file — the file the DROAN local planner (asm_droan module) points its trajectory_library_config parameter at. Every trajectory converts to/from airstack_msgs/msg/TrajectoryXYZVYaw, the trajectory-controller command type (see the Interface Conventions Specification §5).

Core classes

Defined in include/trajectory_library/trajectory_library.hpp, implemented in src/trajectory_library.cpp:

Class What it is Key operations
Waypoint One sample: position, yaw, velocity, acceleration, jerk, time interpolate(), as_odometry_msg() (→ airstack_msgs/Odometry)
Trajectory A timed waypoint sequence in a TF frame; constructible from TrajectoryXYZVYaw or nav_msgs/Path (positions only, velocity 0) closest-point queries, get_waypoint(time), get_odom(time), to_frame(), merge(), trim(), get_trimmed_trajectory_between_distances(), get_reversed_trajectory(), get_markers() (RViz), get_TrajectoryXYZVYaw_msg()
TrajectoryLibrary Loads a set of candidate-trajectory generators from a YAML file get_static_trajectories(), get_dynamic_trajectories(odom), get_markers()

Waypoint times are generated lazily from positions and speeds (generate_waypoint_times()): the time to each waypoint is segment distance divided by the average of the two endpoint speeds (floored at 0.01 m/s). When a TrajectoryXYZVYaw is ingested, each waypoint’s scalar velocity is turned into a velocity vector along the local segment direction.

Trajectory generator classes

The library distinguishes static generators (fixed shape, computed once, get_trajectory()) from dynamic generators (recomputed from the robot’s current odometry, get_trajectory(odom)):

Class Kind What it generates Parameters (constructor)
CurveTrajectory static A constant-speed arc in the x-y plane of frame, integrating heading at a fixed turn rate for time seconds in dt steps; yaw either follows the heading or is fixed linear_velocity (m/s), angular_velocity (rad/s), frame, time (s), dt (s), use_heading, yaw (rad)
AccelerationTrajectory dynamic Forward-integrates the robot’s current position/velocity (transformed into frame) under a constant acceleration for horizon ht in dt steps; per-waypoint speed capped at max_velocity frame, ax, ay, az (m/s²), dt (s), ht (s), max_velocity (m/s)
TakeoffTrajectory dynamic A 3-waypoint vertical (optionally tilted) climb of height meters from the current pose, ending with a near-zero-velocity waypoint height (m), velocity (m/s), path_roll, path_pitch (rad), relative_to_orientation

Only curve and acceleration can be created from the YAML config; TakeoffTrajectory is constructed programmatically (the takeoff_landing_planner builds its takeoff/landing trajectories with it). Entries with any other type are silently skipped by the parser (src/trajectory_library.cpp:1284-1344).

Config file format (trajectory_library_config)

TrajectoryLibrary(config_filename, node_ptr) loads a YAML file with a single top-level key, trajectories:, a list of generator definitions. Each entry’s keys depend on its type:

type: curve → one static CurveTrajectory:

Key Unit Meaning
linear_velocity m/s Constant speed along the arc
angular_velocity deg/s Turn rate (converted to rad/s at load)
frame TF frame Frame the arc starts at the origin of (e.g. tracking_point_stabilized)
time s Duration of the arc
dt s Waypoint spacing in time
yaw heading or deg The literal string heading makes yaw follow the direction of travel; a number fixes yaw to that value

type: acceleration → one dynamic AccelerationTrajectory. The acceleration vector is given either componentwise (x/y/z) or polar (magnitude/magnitude_yaw/magnitude_pitch); if neither complete set is present the entry is rejected with a console message:

Key Unit Meaning
frame TF frame Frame the integration happens in (e.g. look_ahead_point_stabilized)
x, y, z m/s² Acceleration vector components
magnitude m/s² Alternative: acceleration magnitude…
magnitude_yaw, magnitude_pitch deg …rotated by this yaw/pitch from the +x axis
dt s Integration/waypoint time step
ht s Horizon time (how long to integrate)
max_velocity m/s Speed cap applied to each generated waypoint

$(param <name>) substitution: any scalar value may be the string $(param name), which is replaced at load time with the value of the ROS parameter name on the node that constructed the TrajectoryLibrary (parser: include/trajectory_library/trajectory_library.hpp, parse<T>()). This is how one config file serves different speed profiles: DROAN’s droan.yaml sets dt, ht, ht_long, max_velocity, and magnitude as node parameters and the trajectory YAML references them. TrajectoryLibrary’s constructor declares these five parameter names (with placeholder defaults) so the substitution always resolves.

Real excerpt from config/long.yaml — the default library for droan_local_planner (an acceleration fan: one entry per magnitude_yaw heading, 22.5° apart, plus climbing/descending variants):

---
trajectories:
  - dt: $(param dt)
    frame: look_ahead_point_stabilized
    ht: $(param ht_long)
    magnitude: $(param magnitude)
    magnitude_pitch: 0
    magnitude_yaw: 0
    max_velocity: $(param max_velocity)
    type: acceleration
  - dt: $(param dt)
    frame: look_ahead_point_stabilized
    ht: $(param ht_long)
    magnitude: $(param magnitude)
    magnitude_pitch: 0
    magnitude_yaw: 22.5
    max_velocity: $(param max_velocity)
    type: acceleration
  # ... more headings ...

And a curve example from config/backup.yaml:

trajectories:
  - type: curve
    linear_velocity: 1
    angular_velocity: -45
    frame: tracking_point_stabilized
    dt: 0.2
    time: 3
    yaw: heading

Shipped config files

Installed to share/trajectory_library/config/; reference them with $(find-pkg-share trajectory_library)/config/<file>.yaml:

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged trajectory_library at Robotics Stack Exchange

No version for distro jazzy showing github. Known supported distros are highlighted in the buttons above.

Package Summary

Version 0.0.0
License BSD-3-Clause-Clear
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/castacks/airstack.git
VCS Type git
VCS Version develop
Last Updated 2026-09-11
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Trajectory classes and generators for creating, transforming, and sampling candidate trajectories used by AirStack planners and controllers.

Maintainers

  • Andrew Jong

Authors

No additional authors.

Trajectory Library

Contact: John Keller

trajectory_library is a C++ library (no node of its own) for generating and manipulating candidate trajectories for obstacle-avoidance planners. It provides the Trajectory/Waypoint classes used throughout the local layer to interpolate, transform, trim, merge, and visualize waypoint paths, plus a TrajectoryLibrary class that loads a library of candidate trajectory generators from a YAML config file — the file the DROAN local planner (asm_droan module) points its trajectory_library_config parameter at. Every trajectory converts to/from airstack_msgs/msg/TrajectoryXYZVYaw, the trajectory-controller command type (see the Interface Conventions Specification §5).

Core classes

Defined in include/trajectory_library/trajectory_library.hpp, implemented in src/trajectory_library.cpp:

Class What it is Key operations
Waypoint One sample: position, yaw, velocity, acceleration, jerk, time interpolate(), as_odometry_msg() (→ airstack_msgs/Odometry)
Trajectory A timed waypoint sequence in a TF frame; constructible from TrajectoryXYZVYaw or nav_msgs/Path (positions only, velocity 0) closest-point queries, get_waypoint(time), get_odom(time), to_frame(), merge(), trim(), get_trimmed_trajectory_between_distances(), get_reversed_trajectory(), get_markers() (RViz), get_TrajectoryXYZVYaw_msg()
TrajectoryLibrary Loads a set of candidate-trajectory generators from a YAML file get_static_trajectories(), get_dynamic_trajectories(odom), get_markers()

Waypoint times are generated lazily from positions and speeds (generate_waypoint_times()): the time to each waypoint is segment distance divided by the average of the two endpoint speeds (floored at 0.01 m/s). When a TrajectoryXYZVYaw is ingested, each waypoint’s scalar velocity is turned into a velocity vector along the local segment direction.

Trajectory generator classes

The library distinguishes static generators (fixed shape, computed once, get_trajectory()) from dynamic generators (recomputed from the robot’s current odometry, get_trajectory(odom)):

Class Kind What it generates Parameters (constructor)
CurveTrajectory static A constant-speed arc in the x-y plane of frame, integrating heading at a fixed turn rate for time seconds in dt steps; yaw either follows the heading or is fixed linear_velocity (m/s), angular_velocity (rad/s), frame, time (s), dt (s), use_heading, yaw (rad)
AccelerationTrajectory dynamic Forward-integrates the robot’s current position/velocity (transformed into frame) under a constant acceleration for horizon ht in dt steps; per-waypoint speed capped at max_velocity frame, ax, ay, az (m/s²), dt (s), ht (s), max_velocity (m/s)
TakeoffTrajectory dynamic A 3-waypoint vertical (optionally tilted) climb of height meters from the current pose, ending with a near-zero-velocity waypoint height (m), velocity (m/s), path_roll, path_pitch (rad), relative_to_orientation

Only curve and acceleration can be created from the YAML config; TakeoffTrajectory is constructed programmatically (the takeoff_landing_planner builds its takeoff/landing trajectories with it). Entries with any other type are silently skipped by the parser (src/trajectory_library.cpp:1284-1344).

Config file format (trajectory_library_config)

TrajectoryLibrary(config_filename, node_ptr) loads a YAML file with a single top-level key, trajectories:, a list of generator definitions. Each entry’s keys depend on its type:

type: curve → one static CurveTrajectory:

Key Unit Meaning
linear_velocity m/s Constant speed along the arc
angular_velocity deg/s Turn rate (converted to rad/s at load)
frame TF frame Frame the arc starts at the origin of (e.g. tracking_point_stabilized)
time s Duration of the arc
dt s Waypoint spacing in time
yaw heading or deg The literal string heading makes yaw follow the direction of travel; a number fixes yaw to that value

type: acceleration → one dynamic AccelerationTrajectory. The acceleration vector is given either componentwise (x/y/z) or polar (magnitude/magnitude_yaw/magnitude_pitch); if neither complete set is present the entry is rejected with a console message:

Key Unit Meaning
frame TF frame Frame the integration happens in (e.g. look_ahead_point_stabilized)
x, y, z m/s² Acceleration vector components
magnitude m/s² Alternative: acceleration magnitude…
magnitude_yaw, magnitude_pitch deg …rotated by this yaw/pitch from the +x axis
dt s Integration/waypoint time step
ht s Horizon time (how long to integrate)
max_velocity m/s Speed cap applied to each generated waypoint

$(param <name>) substitution: any scalar value may be the string $(param name), which is replaced at load time with the value of the ROS parameter name on the node that constructed the TrajectoryLibrary (parser: include/trajectory_library/trajectory_library.hpp, parse<T>()). This is how one config file serves different speed profiles: DROAN’s droan.yaml sets dt, ht, ht_long, max_velocity, and magnitude as node parameters and the trajectory YAML references them. TrajectoryLibrary’s constructor declares these five parameter names (with placeholder defaults) so the substitution always resolves.

Real excerpt from config/long.yaml — the default library for droan_local_planner (an acceleration fan: one entry per magnitude_yaw heading, 22.5° apart, plus climbing/descending variants):

---
trajectories:
  - dt: $(param dt)
    frame: look_ahead_point_stabilized
    ht: $(param ht_long)
    magnitude: $(param magnitude)
    magnitude_pitch: 0
    magnitude_yaw: 0
    max_velocity: $(param max_velocity)
    type: acceleration
  - dt: $(param dt)
    frame: look_ahead_point_stabilized
    ht: $(param ht_long)
    magnitude: $(param magnitude)
    magnitude_pitch: 0
    magnitude_yaw: 22.5
    max_velocity: $(param max_velocity)
    type: acceleration
  # ... more headings ...

And a curve example from config/backup.yaml:

trajectories:
  - type: curve
    linear_velocity: 1
    angular_velocity: -45
    frame: tracking_point_stabilized
    dt: 0.2
    time: 3
    yaw: heading

Shipped config files

Installed to share/trajectory_library/config/; reference them with $(find-pkg-share trajectory_library)/config/<file>.yaml:

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged trajectory_library at Robotics Stack Exchange

No version for distro kilted showing github. Known supported distros are highlighted in the buttons above.

Package Summary

Version 0.0.0
License BSD-3-Clause-Clear
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/castacks/airstack.git
VCS Type git
VCS Version develop
Last Updated 2026-09-11
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Trajectory classes and generators for creating, transforming, and sampling candidate trajectories used by AirStack planners and controllers.

Maintainers

  • Andrew Jong

Authors

No additional authors.

Trajectory Library

Contact: John Keller

trajectory_library is a C++ library (no node of its own) for generating and manipulating candidate trajectories for obstacle-avoidance planners. It provides the Trajectory/Waypoint classes used throughout the local layer to interpolate, transform, trim, merge, and visualize waypoint paths, plus a TrajectoryLibrary class that loads a library of candidate trajectory generators from a YAML config file — the file the DROAN local planner (asm_droan module) points its trajectory_library_config parameter at. Every trajectory converts to/from airstack_msgs/msg/TrajectoryXYZVYaw, the trajectory-controller command type (see the Interface Conventions Specification §5).

Core classes

Defined in include/trajectory_library/trajectory_library.hpp, implemented in src/trajectory_library.cpp:

Class What it is Key operations
Waypoint One sample: position, yaw, velocity, acceleration, jerk, time interpolate(), as_odometry_msg() (→ airstack_msgs/Odometry)
Trajectory A timed waypoint sequence in a TF frame; constructible from TrajectoryXYZVYaw or nav_msgs/Path (positions only, velocity 0) closest-point queries, get_waypoint(time), get_odom(time), to_frame(), merge(), trim(), get_trimmed_trajectory_between_distances(), get_reversed_trajectory(), get_markers() (RViz), get_TrajectoryXYZVYaw_msg()
TrajectoryLibrary Loads a set of candidate-trajectory generators from a YAML file get_static_trajectories(), get_dynamic_trajectories(odom), get_markers()

Waypoint times are generated lazily from positions and speeds (generate_waypoint_times()): the time to each waypoint is segment distance divided by the average of the two endpoint speeds (floored at 0.01 m/s). When a TrajectoryXYZVYaw is ingested, each waypoint’s scalar velocity is turned into a velocity vector along the local segment direction.

Trajectory generator classes

The library distinguishes static generators (fixed shape, computed once, get_trajectory()) from dynamic generators (recomputed from the robot’s current odometry, get_trajectory(odom)):

Class Kind What it generates Parameters (constructor)
CurveTrajectory static A constant-speed arc in the x-y plane of frame, integrating heading at a fixed turn rate for time seconds in dt steps; yaw either follows the heading or is fixed linear_velocity (m/s), angular_velocity (rad/s), frame, time (s), dt (s), use_heading, yaw (rad)
AccelerationTrajectory dynamic Forward-integrates the robot’s current position/velocity (transformed into frame) under a constant acceleration for horizon ht in dt steps; per-waypoint speed capped at max_velocity frame, ax, ay, az (m/s²), dt (s), ht (s), max_velocity (m/s)
TakeoffTrajectory dynamic A 3-waypoint vertical (optionally tilted) climb of height meters from the current pose, ending with a near-zero-velocity waypoint height (m), velocity (m/s), path_roll, path_pitch (rad), relative_to_orientation

Only curve and acceleration can be created from the YAML config; TakeoffTrajectory is constructed programmatically (the takeoff_landing_planner builds its takeoff/landing trajectories with it). Entries with any other type are silently skipped by the parser (src/trajectory_library.cpp:1284-1344).

Config file format (trajectory_library_config)

TrajectoryLibrary(config_filename, node_ptr) loads a YAML file with a single top-level key, trajectories:, a list of generator definitions. Each entry’s keys depend on its type:

type: curve → one static CurveTrajectory:

Key Unit Meaning
linear_velocity m/s Constant speed along the arc
angular_velocity deg/s Turn rate (converted to rad/s at load)
frame TF frame Frame the arc starts at the origin of (e.g. tracking_point_stabilized)
time s Duration of the arc
dt s Waypoint spacing in time
yaw heading or deg The literal string heading makes yaw follow the direction of travel; a number fixes yaw to that value

type: acceleration → one dynamic AccelerationTrajectory. The acceleration vector is given either componentwise (x/y/z) or polar (magnitude/magnitude_yaw/magnitude_pitch); if neither complete set is present the entry is rejected with a console message:

Key Unit Meaning
frame TF frame Frame the integration happens in (e.g. look_ahead_point_stabilized)
x, y, z m/s² Acceleration vector components
magnitude m/s² Alternative: acceleration magnitude…
magnitude_yaw, magnitude_pitch deg …rotated by this yaw/pitch from the +x axis
dt s Integration/waypoint time step
ht s Horizon time (how long to integrate)
max_velocity m/s Speed cap applied to each generated waypoint

$(param <name>) substitution: any scalar value may be the string $(param name), which is replaced at load time with the value of the ROS parameter name on the node that constructed the TrajectoryLibrary (parser: include/trajectory_library/trajectory_library.hpp, parse<T>()). This is how one config file serves different speed profiles: DROAN’s droan.yaml sets dt, ht, ht_long, max_velocity, and magnitude as node parameters and the trajectory YAML references them. TrajectoryLibrary’s constructor declares these five parameter names (with placeholder defaults) so the substitution always resolves.

Real excerpt from config/long.yaml — the default library for droan_local_planner (an acceleration fan: one entry per magnitude_yaw heading, 22.5° apart, plus climbing/descending variants):

---
trajectories:
  - dt: $(param dt)
    frame: look_ahead_point_stabilized
    ht: $(param ht_long)
    magnitude: $(param magnitude)
    magnitude_pitch: 0
    magnitude_yaw: 0
    max_velocity: $(param max_velocity)
    type: acceleration
  - dt: $(param dt)
    frame: look_ahead_point_stabilized
    ht: $(param ht_long)
    magnitude: $(param magnitude)
    magnitude_pitch: 0
    magnitude_yaw: 22.5
    max_velocity: $(param max_velocity)
    type: acceleration
  # ... more headings ...

And a curve example from config/backup.yaml:

trajectories:
  - type: curve
    linear_velocity: 1
    angular_velocity: -45
    frame: tracking_point_stabilized
    dt: 0.2
    time: 3
    yaw: heading

Shipped config files

Installed to share/trajectory_library/config/; reference them with $(find-pkg-share trajectory_library)/config/<file>.yaml:

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged trajectory_library at Robotics Stack Exchange

No version for distro lyrical showing github. Known supported distros are highlighted in the buttons above.

Package Summary

Version 0.0.0
License BSD-3-Clause-Clear
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/castacks/airstack.git
VCS Type git
VCS Version develop
Last Updated 2026-09-11
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Trajectory classes and generators for creating, transforming, and sampling candidate trajectories used by AirStack planners and controllers.

Maintainers

  • Andrew Jong

Authors

No additional authors.

Trajectory Library

Contact: John Keller

trajectory_library is a C++ library (no node of its own) for generating and manipulating candidate trajectories for obstacle-avoidance planners. It provides the Trajectory/Waypoint classes used throughout the local layer to interpolate, transform, trim, merge, and visualize waypoint paths, plus a TrajectoryLibrary class that loads a library of candidate trajectory generators from a YAML config file — the file the DROAN local planner (asm_droan module) points its trajectory_library_config parameter at. Every trajectory converts to/from airstack_msgs/msg/TrajectoryXYZVYaw, the trajectory-controller command type (see the Interface Conventions Specification §5).

Core classes

Defined in include/trajectory_library/trajectory_library.hpp, implemented in src/trajectory_library.cpp:

Class What it is Key operations
Waypoint One sample: position, yaw, velocity, acceleration, jerk, time interpolate(), as_odometry_msg() (→ airstack_msgs/Odometry)
Trajectory A timed waypoint sequence in a TF frame; constructible from TrajectoryXYZVYaw or nav_msgs/Path (positions only, velocity 0) closest-point queries, get_waypoint(time), get_odom(time), to_frame(), merge(), trim(), get_trimmed_trajectory_between_distances(), get_reversed_trajectory(), get_markers() (RViz), get_TrajectoryXYZVYaw_msg()
TrajectoryLibrary Loads a set of candidate-trajectory generators from a YAML file get_static_trajectories(), get_dynamic_trajectories(odom), get_markers()

Waypoint times are generated lazily from positions and speeds (generate_waypoint_times()): the time to each waypoint is segment distance divided by the average of the two endpoint speeds (floored at 0.01 m/s). When a TrajectoryXYZVYaw is ingested, each waypoint’s scalar velocity is turned into a velocity vector along the local segment direction.

Trajectory generator classes

The library distinguishes static generators (fixed shape, computed once, get_trajectory()) from dynamic generators (recomputed from the robot’s current odometry, get_trajectory(odom)):

Class Kind What it generates Parameters (constructor)
CurveTrajectory static A constant-speed arc in the x-y plane of frame, integrating heading at a fixed turn rate for time seconds in dt steps; yaw either follows the heading or is fixed linear_velocity (m/s), angular_velocity (rad/s), frame, time (s), dt (s), use_heading, yaw (rad)
AccelerationTrajectory dynamic Forward-integrates the robot’s current position/velocity (transformed into frame) under a constant acceleration for horizon ht in dt steps; per-waypoint speed capped at max_velocity frame, ax, ay, az (m/s²), dt (s), ht (s), max_velocity (m/s)
TakeoffTrajectory dynamic A 3-waypoint vertical (optionally tilted) climb of height meters from the current pose, ending with a near-zero-velocity waypoint height (m), velocity (m/s), path_roll, path_pitch (rad), relative_to_orientation

Only curve and acceleration can be created from the YAML config; TakeoffTrajectory is constructed programmatically (the takeoff_landing_planner builds its takeoff/landing trajectories with it). Entries with any other type are silently skipped by the parser (src/trajectory_library.cpp:1284-1344).

Config file format (trajectory_library_config)

TrajectoryLibrary(config_filename, node_ptr) loads a YAML file with a single top-level key, trajectories:, a list of generator definitions. Each entry’s keys depend on its type:

type: curve → one static CurveTrajectory:

Key Unit Meaning
linear_velocity m/s Constant speed along the arc
angular_velocity deg/s Turn rate (converted to rad/s at load)
frame TF frame Frame the arc starts at the origin of (e.g. tracking_point_stabilized)
time s Duration of the arc
dt s Waypoint spacing in time
yaw heading or deg The literal string heading makes yaw follow the direction of travel; a number fixes yaw to that value

type: acceleration → one dynamic AccelerationTrajectory. The acceleration vector is given either componentwise (x/y/z) or polar (magnitude/magnitude_yaw/magnitude_pitch); if neither complete set is present the entry is rejected with a console message:

Key Unit Meaning
frame TF frame Frame the integration happens in (e.g. look_ahead_point_stabilized)
x, y, z m/s² Acceleration vector components
magnitude m/s² Alternative: acceleration magnitude…
magnitude_yaw, magnitude_pitch deg …rotated by this yaw/pitch from the +x axis
dt s Integration/waypoint time step
ht s Horizon time (how long to integrate)
max_velocity m/s Speed cap applied to each generated waypoint

$(param <name>) substitution: any scalar value may be the string $(param name), which is replaced at load time with the value of the ROS parameter name on the node that constructed the TrajectoryLibrary (parser: include/trajectory_library/trajectory_library.hpp, parse<T>()). This is how one config file serves different speed profiles: DROAN’s droan.yaml sets dt, ht, ht_long, max_velocity, and magnitude as node parameters and the trajectory YAML references them. TrajectoryLibrary’s constructor declares these five parameter names (with placeholder defaults) so the substitution always resolves.

Real excerpt from config/long.yaml — the default library for droan_local_planner (an acceleration fan: one entry per magnitude_yaw heading, 22.5° apart, plus climbing/descending variants):

---
trajectories:
  - dt: $(param dt)
    frame: look_ahead_point_stabilized
    ht: $(param ht_long)
    magnitude: $(param magnitude)
    magnitude_pitch: 0
    magnitude_yaw: 0
    max_velocity: $(param max_velocity)
    type: acceleration
  - dt: $(param dt)
    frame: look_ahead_point_stabilized
    ht: $(param ht_long)
    magnitude: $(param magnitude)
    magnitude_pitch: 0
    magnitude_yaw: 22.5
    max_velocity: $(param max_velocity)
    type: acceleration
  # ... more headings ...

And a curve example from config/backup.yaml:

trajectories:
  - type: curve
    linear_velocity: 1
    angular_velocity: -45
    frame: tracking_point_stabilized
    dt: 0.2
    time: 3
    yaw: heading

Shipped config files

Installed to share/trajectory_library/config/; reference them with $(find-pkg-share trajectory_library)/config/<file>.yaml:

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged trajectory_library at Robotics Stack Exchange

No version for distro rolling showing github. Known supported distros are highlighted in the buttons above.

Package Summary

Version 0.0.0
License BSD-3-Clause-Clear
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/castacks/airstack.git
VCS Type git
VCS Version develop
Last Updated 2026-09-11
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Trajectory classes and generators for creating, transforming, and sampling candidate trajectories used by AirStack planners and controllers.

Maintainers

  • Andrew Jong

Authors

No additional authors.

Trajectory Library

Contact: John Keller

trajectory_library is a C++ library (no node of its own) for generating and manipulating candidate trajectories for obstacle-avoidance planners. It provides the Trajectory/Waypoint classes used throughout the local layer to interpolate, transform, trim, merge, and visualize waypoint paths, plus a TrajectoryLibrary class that loads a library of candidate trajectory generators from a YAML config file — the file the DROAN local planner (asm_droan module) points its trajectory_library_config parameter at. Every trajectory converts to/from airstack_msgs/msg/TrajectoryXYZVYaw, the trajectory-controller command type (see the Interface Conventions Specification §5).

Core classes

Defined in include/trajectory_library/trajectory_library.hpp, implemented in src/trajectory_library.cpp:

Class What it is Key operations
Waypoint One sample: position, yaw, velocity, acceleration, jerk, time interpolate(), as_odometry_msg() (→ airstack_msgs/Odometry)
Trajectory A timed waypoint sequence in a TF frame; constructible from TrajectoryXYZVYaw or nav_msgs/Path (positions only, velocity 0) closest-point queries, get_waypoint(time), get_odom(time), to_frame(), merge(), trim(), get_trimmed_trajectory_between_distances(), get_reversed_trajectory(), get_markers() (RViz), get_TrajectoryXYZVYaw_msg()
TrajectoryLibrary Loads a set of candidate-trajectory generators from a YAML file get_static_trajectories(), get_dynamic_trajectories(odom), get_markers()

Waypoint times are generated lazily from positions and speeds (generate_waypoint_times()): the time to each waypoint is segment distance divided by the average of the two endpoint speeds (floored at 0.01 m/s). When a TrajectoryXYZVYaw is ingested, each waypoint’s scalar velocity is turned into a velocity vector along the local segment direction.

Trajectory generator classes

The library distinguishes static generators (fixed shape, computed once, get_trajectory()) from dynamic generators (recomputed from the robot’s current odometry, get_trajectory(odom)):

Class Kind What it generates Parameters (constructor)
CurveTrajectory static A constant-speed arc in the x-y plane of frame, integrating heading at a fixed turn rate for time seconds in dt steps; yaw either follows the heading or is fixed linear_velocity (m/s), angular_velocity (rad/s), frame, time (s), dt (s), use_heading, yaw (rad)
AccelerationTrajectory dynamic Forward-integrates the robot’s current position/velocity (transformed into frame) under a constant acceleration for horizon ht in dt steps; per-waypoint speed capped at max_velocity frame, ax, ay, az (m/s²), dt (s), ht (s), max_velocity (m/s)
TakeoffTrajectory dynamic A 3-waypoint vertical (optionally tilted) climb of height meters from the current pose, ending with a near-zero-velocity waypoint height (m), velocity (m/s), path_roll, path_pitch (rad), relative_to_orientation

Only curve and acceleration can be created from the YAML config; TakeoffTrajectory is constructed programmatically (the takeoff_landing_planner builds its takeoff/landing trajectories with it). Entries with any other type are silently skipped by the parser (src/trajectory_library.cpp:1284-1344).

Config file format (trajectory_library_config)

TrajectoryLibrary(config_filename, node_ptr) loads a YAML file with a single top-level key, trajectories:, a list of generator definitions. Each entry’s keys depend on its type:

type: curve → one static CurveTrajectory:

Key Unit Meaning
linear_velocity m/s Constant speed along the arc
angular_velocity deg/s Turn rate (converted to rad/s at load)
frame TF frame Frame the arc starts at the origin of (e.g. tracking_point_stabilized)
time s Duration of the arc
dt s Waypoint spacing in time
yaw heading or deg The literal string heading makes yaw follow the direction of travel; a number fixes yaw to that value

type: acceleration → one dynamic AccelerationTrajectory. The acceleration vector is given either componentwise (x/y/z) or polar (magnitude/magnitude_yaw/magnitude_pitch); if neither complete set is present the entry is rejected with a console message:

Key Unit Meaning
frame TF frame Frame the integration happens in (e.g. look_ahead_point_stabilized)
x, y, z m/s² Acceleration vector components
magnitude m/s² Alternative: acceleration magnitude…
magnitude_yaw, magnitude_pitch deg …rotated by this yaw/pitch from the +x axis
dt s Integration/waypoint time step
ht s Horizon time (how long to integrate)
max_velocity m/s Speed cap applied to each generated waypoint

$(param <name>) substitution: any scalar value may be the string $(param name), which is replaced at load time with the value of the ROS parameter name on the node that constructed the TrajectoryLibrary (parser: include/trajectory_library/trajectory_library.hpp, parse<T>()). This is how one config file serves different speed profiles: DROAN’s droan.yaml sets dt, ht, ht_long, max_velocity, and magnitude as node parameters and the trajectory YAML references them. TrajectoryLibrary’s constructor declares these five parameter names (with placeholder defaults) so the substitution always resolves.

Real excerpt from config/long.yaml — the default library for droan_local_planner (an acceleration fan: one entry per magnitude_yaw heading, 22.5° apart, plus climbing/descending variants):

---
trajectories:
  - dt: $(param dt)
    frame: look_ahead_point_stabilized
    ht: $(param ht_long)
    magnitude: $(param magnitude)
    magnitude_pitch: 0
    magnitude_yaw: 0
    max_velocity: $(param max_velocity)
    type: acceleration
  - dt: $(param dt)
    frame: look_ahead_point_stabilized
    ht: $(param ht_long)
    magnitude: $(param magnitude)
    magnitude_pitch: 0
    magnitude_yaw: 22.5
    max_velocity: $(param max_velocity)
    type: acceleration
  # ... more headings ...

And a curve example from config/backup.yaml:

trajectories:
  - type: curve
    linear_velocity: 1
    angular_velocity: -45
    frame: tracking_point_stabilized
    dt: 0.2
    time: 3
    yaw: heading

Shipped config files

Installed to share/trajectory_library/config/; reference them with $(find-pkg-share trajectory_library)/config/<file>.yaml:

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged trajectory_library at Robotics Stack Exchange

Package Summary

Version 0.0.0
License BSD-3-Clause-Clear
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/castacks/airstack.git
VCS Type git
VCS Version develop
Last Updated 2026-09-11
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Trajectory classes and generators for creating, transforming, and sampling candidate trajectories used by AirStack planners and controllers.

Maintainers

  • Andrew Jong

Authors

No additional authors.

Trajectory Library

Contact: John Keller

trajectory_library is a C++ library (no node of its own) for generating and manipulating candidate trajectories for obstacle-avoidance planners. It provides the Trajectory/Waypoint classes used throughout the local layer to interpolate, transform, trim, merge, and visualize waypoint paths, plus a TrajectoryLibrary class that loads a library of candidate trajectory generators from a YAML config file — the file the DROAN local planner (asm_droan module) points its trajectory_library_config parameter at. Every trajectory converts to/from airstack_msgs/msg/TrajectoryXYZVYaw, the trajectory-controller command type (see the Interface Conventions Specification §5).

Core classes

Defined in include/trajectory_library/trajectory_library.hpp, implemented in src/trajectory_library.cpp:

Class What it is Key operations
Waypoint One sample: position, yaw, velocity, acceleration, jerk, time interpolate(), as_odometry_msg() (→ airstack_msgs/Odometry)
Trajectory A timed waypoint sequence in a TF frame; constructible from TrajectoryXYZVYaw or nav_msgs/Path (positions only, velocity 0) closest-point queries, get_waypoint(time), get_odom(time), to_frame(), merge(), trim(), get_trimmed_trajectory_between_distances(), get_reversed_trajectory(), get_markers() (RViz), get_TrajectoryXYZVYaw_msg()
TrajectoryLibrary Loads a set of candidate-trajectory generators from a YAML file get_static_trajectories(), get_dynamic_trajectories(odom), get_markers()

Waypoint times are generated lazily from positions and speeds (generate_waypoint_times()): the time to each waypoint is segment distance divided by the average of the two endpoint speeds (floored at 0.01 m/s). When a TrajectoryXYZVYaw is ingested, each waypoint’s scalar velocity is turned into a velocity vector along the local segment direction.

Trajectory generator classes

The library distinguishes static generators (fixed shape, computed once, get_trajectory()) from dynamic generators (recomputed from the robot’s current odometry, get_trajectory(odom)):

Class Kind What it generates Parameters (constructor)
CurveTrajectory static A constant-speed arc in the x-y plane of frame, integrating heading at a fixed turn rate for time seconds in dt steps; yaw either follows the heading or is fixed linear_velocity (m/s), angular_velocity (rad/s), frame, time (s), dt (s), use_heading, yaw (rad)
AccelerationTrajectory dynamic Forward-integrates the robot’s current position/velocity (transformed into frame) under a constant acceleration for horizon ht in dt steps; per-waypoint speed capped at max_velocity frame, ax, ay, az (m/s²), dt (s), ht (s), max_velocity (m/s)
TakeoffTrajectory dynamic A 3-waypoint vertical (optionally tilted) climb of height meters from the current pose, ending with a near-zero-velocity waypoint height (m), velocity (m/s), path_roll, path_pitch (rad), relative_to_orientation

Only curve and acceleration can be created from the YAML config; TakeoffTrajectory is constructed programmatically (the takeoff_landing_planner builds its takeoff/landing trajectories with it). Entries with any other type are silently skipped by the parser (src/trajectory_library.cpp:1284-1344).

Config file format (trajectory_library_config)

TrajectoryLibrary(config_filename, node_ptr) loads a YAML file with a single top-level key, trajectories:, a list of generator definitions. Each entry’s keys depend on its type:

type: curve → one static CurveTrajectory:

Key Unit Meaning
linear_velocity m/s Constant speed along the arc
angular_velocity deg/s Turn rate (converted to rad/s at load)
frame TF frame Frame the arc starts at the origin of (e.g. tracking_point_stabilized)
time s Duration of the arc
dt s Waypoint spacing in time
yaw heading or deg The literal string heading makes yaw follow the direction of travel; a number fixes yaw to that value

type: acceleration → one dynamic AccelerationTrajectory. The acceleration vector is given either componentwise (x/y/z) or polar (magnitude/magnitude_yaw/magnitude_pitch); if neither complete set is present the entry is rejected with a console message:

Key Unit Meaning
frame TF frame Frame the integration happens in (e.g. look_ahead_point_stabilized)
x, y, z m/s² Acceleration vector components
magnitude m/s² Alternative: acceleration magnitude…
magnitude_yaw, magnitude_pitch deg …rotated by this yaw/pitch from the +x axis
dt s Integration/waypoint time step
ht s Horizon time (how long to integrate)
max_velocity m/s Speed cap applied to each generated waypoint

$(param <name>) substitution: any scalar value may be the string $(param name), which is replaced at load time with the value of the ROS parameter name on the node that constructed the TrajectoryLibrary (parser: include/trajectory_library/trajectory_library.hpp, parse<T>()). This is how one config file serves different speed profiles: DROAN’s droan.yaml sets dt, ht, ht_long, max_velocity, and magnitude as node parameters and the trajectory YAML references them. TrajectoryLibrary’s constructor declares these five parameter names (with placeholder defaults) so the substitution always resolves.

Real excerpt from config/long.yaml — the default library for droan_local_planner (an acceleration fan: one entry per magnitude_yaw heading, 22.5° apart, plus climbing/descending variants):

---
trajectories:
  - dt: $(param dt)
    frame: look_ahead_point_stabilized
    ht: $(param ht_long)
    magnitude: $(param magnitude)
    magnitude_pitch: 0
    magnitude_yaw: 0
    max_velocity: $(param max_velocity)
    type: acceleration
  - dt: $(param dt)
    frame: look_ahead_point_stabilized
    ht: $(param ht_long)
    magnitude: $(param magnitude)
    magnitude_pitch: 0
    magnitude_yaw: 22.5
    max_velocity: $(param max_velocity)
    type: acceleration
  # ... more headings ...

And a curve example from config/backup.yaml:

trajectories:
  - type: curve
    linear_velocity: 1
    angular_velocity: -45
    frame: tracking_point_stabilized
    dt: 0.2
    time: 3
    yaw: heading

Shipped config files

Installed to share/trajectory_library/config/; reference them with $(find-pkg-share trajectory_library)/config/<file>.yaml:

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged trajectory_library at Robotics Stack Exchange

No version for distro galactic showing github. Known supported distros are highlighted in the buttons above.

Package Summary

Version 0.0.0
License BSD-3-Clause-Clear
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/castacks/airstack.git
VCS Type git
VCS Version develop
Last Updated 2026-09-11
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Trajectory classes and generators for creating, transforming, and sampling candidate trajectories used by AirStack planners and controllers.

Maintainers

  • Andrew Jong

Authors

No additional authors.

Trajectory Library

Contact: John Keller

trajectory_library is a C++ library (no node of its own) for generating and manipulating candidate trajectories for obstacle-avoidance planners. It provides the Trajectory/Waypoint classes used throughout the local layer to interpolate, transform, trim, merge, and visualize waypoint paths, plus a TrajectoryLibrary class that loads a library of candidate trajectory generators from a YAML config file — the file the DROAN local planner (asm_droan module) points its trajectory_library_config parameter at. Every trajectory converts to/from airstack_msgs/msg/TrajectoryXYZVYaw, the trajectory-controller command type (see the Interface Conventions Specification §5).

Core classes

Defined in include/trajectory_library/trajectory_library.hpp, implemented in src/trajectory_library.cpp:

Class What it is Key operations
Waypoint One sample: position, yaw, velocity, acceleration, jerk, time interpolate(), as_odometry_msg() (→ airstack_msgs/Odometry)
Trajectory A timed waypoint sequence in a TF frame; constructible from TrajectoryXYZVYaw or nav_msgs/Path (positions only, velocity 0) closest-point queries, get_waypoint(time), get_odom(time), to_frame(), merge(), trim(), get_trimmed_trajectory_between_distances(), get_reversed_trajectory(), get_markers() (RViz), get_TrajectoryXYZVYaw_msg()
TrajectoryLibrary Loads a set of candidate-trajectory generators from a YAML file get_static_trajectories(), get_dynamic_trajectories(odom), get_markers()

Waypoint times are generated lazily from positions and speeds (generate_waypoint_times()): the time to each waypoint is segment distance divided by the average of the two endpoint speeds (floored at 0.01 m/s). When a TrajectoryXYZVYaw is ingested, each waypoint’s scalar velocity is turned into a velocity vector along the local segment direction.

Trajectory generator classes

The library distinguishes static generators (fixed shape, computed once, get_trajectory()) from dynamic generators (recomputed from the robot’s current odometry, get_trajectory(odom)):

Class Kind What it generates Parameters (constructor)
CurveTrajectory static A constant-speed arc in the x-y plane of frame, integrating heading at a fixed turn rate for time seconds in dt steps; yaw either follows the heading or is fixed linear_velocity (m/s), angular_velocity (rad/s), frame, time (s), dt (s), use_heading, yaw (rad)
AccelerationTrajectory dynamic Forward-integrates the robot’s current position/velocity (transformed into frame) under a constant acceleration for horizon ht in dt steps; per-waypoint speed capped at max_velocity frame, ax, ay, az (m/s²), dt (s), ht (s), max_velocity (m/s)
TakeoffTrajectory dynamic A 3-waypoint vertical (optionally tilted) climb of height meters from the current pose, ending with a near-zero-velocity waypoint height (m), velocity (m/s), path_roll, path_pitch (rad), relative_to_orientation

Only curve and acceleration can be created from the YAML config; TakeoffTrajectory is constructed programmatically (the takeoff_landing_planner builds its takeoff/landing trajectories with it). Entries with any other type are silently skipped by the parser (src/trajectory_library.cpp:1284-1344).

Config file format (trajectory_library_config)

TrajectoryLibrary(config_filename, node_ptr) loads a YAML file with a single top-level key, trajectories:, a list of generator definitions. Each entry’s keys depend on its type:

type: curve → one static CurveTrajectory:

Key Unit Meaning
linear_velocity m/s Constant speed along the arc
angular_velocity deg/s Turn rate (converted to rad/s at load)
frame TF frame Frame the arc starts at the origin of (e.g. tracking_point_stabilized)
time s Duration of the arc
dt s Waypoint spacing in time
yaw heading or deg The literal string heading makes yaw follow the direction of travel; a number fixes yaw to that value

type: acceleration → one dynamic AccelerationTrajectory. The acceleration vector is given either componentwise (x/y/z) or polar (magnitude/magnitude_yaw/magnitude_pitch); if neither complete set is present the entry is rejected with a console message:

Key Unit Meaning
frame TF frame Frame the integration happens in (e.g. look_ahead_point_stabilized)
x, y, z m/s² Acceleration vector components
magnitude m/s² Alternative: acceleration magnitude…
magnitude_yaw, magnitude_pitch deg …rotated by this yaw/pitch from the +x axis
dt s Integration/waypoint time step
ht s Horizon time (how long to integrate)
max_velocity m/s Speed cap applied to each generated waypoint

$(param <name>) substitution: any scalar value may be the string $(param name), which is replaced at load time with the value of the ROS parameter name on the node that constructed the TrajectoryLibrary (parser: include/trajectory_library/trajectory_library.hpp, parse<T>()). This is how one config file serves different speed profiles: DROAN’s droan.yaml sets dt, ht, ht_long, max_velocity, and magnitude as node parameters and the trajectory YAML references them. TrajectoryLibrary’s constructor declares these five parameter names (with placeholder defaults) so the substitution always resolves.

Real excerpt from config/long.yaml — the default library for droan_local_planner (an acceleration fan: one entry per magnitude_yaw heading, 22.5° apart, plus climbing/descending variants):

---
trajectories:
  - dt: $(param dt)
    frame: look_ahead_point_stabilized
    ht: $(param ht_long)
    magnitude: $(param magnitude)
    magnitude_pitch: 0
    magnitude_yaw: 0
    max_velocity: $(param max_velocity)
    type: acceleration
  - dt: $(param dt)
    frame: look_ahead_point_stabilized
    ht: $(param ht_long)
    magnitude: $(param magnitude)
    magnitude_pitch: 0
    magnitude_yaw: 22.5
    max_velocity: $(param max_velocity)
    type: acceleration
  # ... more headings ...

And a curve example from config/backup.yaml:

trajectories:
  - type: curve
    linear_velocity: 1
    angular_velocity: -45
    frame: tracking_point_stabilized
    dt: 0.2
    time: 3
    yaw: heading

Shipped config files

Installed to share/trajectory_library/config/; reference them with $(find-pkg-share trajectory_library)/config/<file>.yaml:

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged trajectory_library at Robotics Stack Exchange

No version for distro iron showing github. Known supported distros are highlighted in the buttons above.

Package Summary

Version 0.0.0
License BSD-3-Clause-Clear
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/castacks/airstack.git
VCS Type git
VCS Version develop
Last Updated 2026-09-11
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Trajectory classes and generators for creating, transforming, and sampling candidate trajectories used by AirStack planners and controllers.

Maintainers

  • Andrew Jong

Authors

No additional authors.

Trajectory Library

Contact: John Keller

trajectory_library is a C++ library (no node of its own) for generating and manipulating candidate trajectories for obstacle-avoidance planners. It provides the Trajectory/Waypoint classes used throughout the local layer to interpolate, transform, trim, merge, and visualize waypoint paths, plus a TrajectoryLibrary class that loads a library of candidate trajectory generators from a YAML config file — the file the DROAN local planner (asm_droan module) points its trajectory_library_config parameter at. Every trajectory converts to/from airstack_msgs/msg/TrajectoryXYZVYaw, the trajectory-controller command type (see the Interface Conventions Specification §5).

Core classes

Defined in include/trajectory_library/trajectory_library.hpp, implemented in src/trajectory_library.cpp:

Class What it is Key operations
Waypoint One sample: position, yaw, velocity, acceleration, jerk, time interpolate(), as_odometry_msg() (→ airstack_msgs/Odometry)
Trajectory A timed waypoint sequence in a TF frame; constructible from TrajectoryXYZVYaw or nav_msgs/Path (positions only, velocity 0) closest-point queries, get_waypoint(time), get_odom(time), to_frame(), merge(), trim(), get_trimmed_trajectory_between_distances(), get_reversed_trajectory(), get_markers() (RViz), get_TrajectoryXYZVYaw_msg()
TrajectoryLibrary Loads a set of candidate-trajectory generators from a YAML file get_static_trajectories(), get_dynamic_trajectories(odom), get_markers()

Waypoint times are generated lazily from positions and speeds (generate_waypoint_times()): the time to each waypoint is segment distance divided by the average of the two endpoint speeds (floored at 0.01 m/s). When a TrajectoryXYZVYaw is ingested, each waypoint’s scalar velocity is turned into a velocity vector along the local segment direction.

Trajectory generator classes

The library distinguishes static generators (fixed shape, computed once, get_trajectory()) from dynamic generators (recomputed from the robot’s current odometry, get_trajectory(odom)):

Class Kind What it generates Parameters (constructor)
CurveTrajectory static A constant-speed arc in the x-y plane of frame, integrating heading at a fixed turn rate for time seconds in dt steps; yaw either follows the heading or is fixed linear_velocity (m/s), angular_velocity (rad/s), frame, time (s), dt (s), use_heading, yaw (rad)
AccelerationTrajectory dynamic Forward-integrates the robot’s current position/velocity (transformed into frame) under a constant acceleration for horizon ht in dt steps; per-waypoint speed capped at max_velocity frame, ax, ay, az (m/s²), dt (s), ht (s), max_velocity (m/s)
TakeoffTrajectory dynamic A 3-waypoint vertical (optionally tilted) climb of height meters from the current pose, ending with a near-zero-velocity waypoint height (m), velocity (m/s), path_roll, path_pitch (rad), relative_to_orientation

Only curve and acceleration can be created from the YAML config; TakeoffTrajectory is constructed programmatically (the takeoff_landing_planner builds its takeoff/landing trajectories with it). Entries with any other type are silently skipped by the parser (src/trajectory_library.cpp:1284-1344).

Config file format (trajectory_library_config)

TrajectoryLibrary(config_filename, node_ptr) loads a YAML file with a single top-level key, trajectories:, a list of generator definitions. Each entry’s keys depend on its type:

type: curve → one static CurveTrajectory:

Key Unit Meaning
linear_velocity m/s Constant speed along the arc
angular_velocity deg/s Turn rate (converted to rad/s at load)
frame TF frame Frame the arc starts at the origin of (e.g. tracking_point_stabilized)
time s Duration of the arc
dt s Waypoint spacing in time
yaw heading or deg The literal string heading makes yaw follow the direction of travel; a number fixes yaw to that value

type: acceleration → one dynamic AccelerationTrajectory. The acceleration vector is given either componentwise (x/y/z) or polar (magnitude/magnitude_yaw/magnitude_pitch); if neither complete set is present the entry is rejected with a console message:

Key Unit Meaning
frame TF frame Frame the integration happens in (e.g. look_ahead_point_stabilized)
x, y, z m/s² Acceleration vector components
magnitude m/s² Alternative: acceleration magnitude…
magnitude_yaw, magnitude_pitch deg …rotated by this yaw/pitch from the +x axis
dt s Integration/waypoint time step
ht s Horizon time (how long to integrate)
max_velocity m/s Speed cap applied to each generated waypoint

$(param <name>) substitution: any scalar value may be the string $(param name), which is replaced at load time with the value of the ROS parameter name on the node that constructed the TrajectoryLibrary (parser: include/trajectory_library/trajectory_library.hpp, parse<T>()). This is how one config file serves different speed profiles: DROAN’s droan.yaml sets dt, ht, ht_long, max_velocity, and magnitude as node parameters and the trajectory YAML references them. TrajectoryLibrary’s constructor declares these five parameter names (with placeholder defaults) so the substitution always resolves.

Real excerpt from config/long.yaml — the default library for droan_local_planner (an acceleration fan: one entry per magnitude_yaw heading, 22.5° apart, plus climbing/descending variants):

---
trajectories:
  - dt: $(param dt)
    frame: look_ahead_point_stabilized
    ht: $(param ht_long)
    magnitude: $(param magnitude)
    magnitude_pitch: 0
    magnitude_yaw: 0
    max_velocity: $(param max_velocity)
    type: acceleration
  - dt: $(param dt)
    frame: look_ahead_point_stabilized
    ht: $(param ht_long)
    magnitude: $(param magnitude)
    magnitude_pitch: 0
    magnitude_yaw: 22.5
    max_velocity: $(param max_velocity)
    type: acceleration
  # ... more headings ...

And a curve example from config/backup.yaml:

trajectories:
  - type: curve
    linear_velocity: 1
    angular_velocity: -45
    frame: tracking_point_stabilized
    dt: 0.2
    time: 3
    yaw: heading

Shipped config files

Installed to share/trajectory_library/config/; reference them with $(find-pkg-share trajectory_library)/config/<file>.yaml:

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged trajectory_library at Robotics Stack Exchange

No version for distro melodic showing github. Known supported distros are highlighted in the buttons above.

Package Summary

Version 0.0.0
License BSD-3-Clause-Clear
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/castacks/airstack.git
VCS Type git
VCS Version develop
Last Updated 2026-09-11
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Trajectory classes and generators for creating, transforming, and sampling candidate trajectories used by AirStack planners and controllers.

Maintainers

  • Andrew Jong

Authors

No additional authors.

Trajectory Library

Contact: John Keller

trajectory_library is a C++ library (no node of its own) for generating and manipulating candidate trajectories for obstacle-avoidance planners. It provides the Trajectory/Waypoint classes used throughout the local layer to interpolate, transform, trim, merge, and visualize waypoint paths, plus a TrajectoryLibrary class that loads a library of candidate trajectory generators from a YAML config file — the file the DROAN local planner (asm_droan module) points its trajectory_library_config parameter at. Every trajectory converts to/from airstack_msgs/msg/TrajectoryXYZVYaw, the trajectory-controller command type (see the Interface Conventions Specification §5).

Core classes

Defined in include/trajectory_library/trajectory_library.hpp, implemented in src/trajectory_library.cpp:

Class What it is Key operations
Waypoint One sample: position, yaw, velocity, acceleration, jerk, time interpolate(), as_odometry_msg() (→ airstack_msgs/Odometry)
Trajectory A timed waypoint sequence in a TF frame; constructible from TrajectoryXYZVYaw or nav_msgs/Path (positions only, velocity 0) closest-point queries, get_waypoint(time), get_odom(time), to_frame(), merge(), trim(), get_trimmed_trajectory_between_distances(), get_reversed_trajectory(), get_markers() (RViz), get_TrajectoryXYZVYaw_msg()
TrajectoryLibrary Loads a set of candidate-trajectory generators from a YAML file get_static_trajectories(), get_dynamic_trajectories(odom), get_markers()

Waypoint times are generated lazily from positions and speeds (generate_waypoint_times()): the time to each waypoint is segment distance divided by the average of the two endpoint speeds (floored at 0.01 m/s). When a TrajectoryXYZVYaw is ingested, each waypoint’s scalar velocity is turned into a velocity vector along the local segment direction.

Trajectory generator classes

The library distinguishes static generators (fixed shape, computed once, get_trajectory()) from dynamic generators (recomputed from the robot’s current odometry, get_trajectory(odom)):

Class Kind What it generates Parameters (constructor)
CurveTrajectory static A constant-speed arc in the x-y plane of frame, integrating heading at a fixed turn rate for time seconds in dt steps; yaw either follows the heading or is fixed linear_velocity (m/s), angular_velocity (rad/s), frame, time (s), dt (s), use_heading, yaw (rad)
AccelerationTrajectory dynamic Forward-integrates the robot’s current position/velocity (transformed into frame) under a constant acceleration for horizon ht in dt steps; per-waypoint speed capped at max_velocity frame, ax, ay, az (m/s²), dt (s), ht (s), max_velocity (m/s)
TakeoffTrajectory dynamic A 3-waypoint vertical (optionally tilted) climb of height meters from the current pose, ending with a near-zero-velocity waypoint height (m), velocity (m/s), path_roll, path_pitch (rad), relative_to_orientation

Only curve and acceleration can be created from the YAML config; TakeoffTrajectory is constructed programmatically (the takeoff_landing_planner builds its takeoff/landing trajectories with it). Entries with any other type are silently skipped by the parser (src/trajectory_library.cpp:1284-1344).

Config file format (trajectory_library_config)

TrajectoryLibrary(config_filename, node_ptr) loads a YAML file with a single top-level key, trajectories:, a list of generator definitions. Each entry’s keys depend on its type:

type: curve → one static CurveTrajectory:

Key Unit Meaning
linear_velocity m/s Constant speed along the arc
angular_velocity deg/s Turn rate (converted to rad/s at load)
frame TF frame Frame the arc starts at the origin of (e.g. tracking_point_stabilized)
time s Duration of the arc
dt s Waypoint spacing in time
yaw heading or deg The literal string heading makes yaw follow the direction of travel; a number fixes yaw to that value

type: acceleration → one dynamic AccelerationTrajectory. The acceleration vector is given either componentwise (x/y/z) or polar (magnitude/magnitude_yaw/magnitude_pitch); if neither complete set is present the entry is rejected with a console message:

Key Unit Meaning
frame TF frame Frame the integration happens in (e.g. look_ahead_point_stabilized)
x, y, z m/s² Acceleration vector components
magnitude m/s² Alternative: acceleration magnitude…
magnitude_yaw, magnitude_pitch deg …rotated by this yaw/pitch from the +x axis
dt s Integration/waypoint time step
ht s Horizon time (how long to integrate)
max_velocity m/s Speed cap applied to each generated waypoint

$(param <name>) substitution: any scalar value may be the string $(param name), which is replaced at load time with the value of the ROS parameter name on the node that constructed the TrajectoryLibrary (parser: include/trajectory_library/trajectory_library.hpp, parse<T>()). This is how one config file serves different speed profiles: DROAN’s droan.yaml sets dt, ht, ht_long, max_velocity, and magnitude as node parameters and the trajectory YAML references them. TrajectoryLibrary’s constructor declares these five parameter names (with placeholder defaults) so the substitution always resolves.

Real excerpt from config/long.yaml — the default library for droan_local_planner (an acceleration fan: one entry per magnitude_yaw heading, 22.5° apart, plus climbing/descending variants):

---
trajectories:
  - dt: $(param dt)
    frame: look_ahead_point_stabilized
    ht: $(param ht_long)
    magnitude: $(param magnitude)
    magnitude_pitch: 0
    magnitude_yaw: 0
    max_velocity: $(param max_velocity)
    type: acceleration
  - dt: $(param dt)
    frame: look_ahead_point_stabilized
    ht: $(param ht_long)
    magnitude: $(param magnitude)
    magnitude_pitch: 0
    magnitude_yaw: 22.5
    max_velocity: $(param max_velocity)
    type: acceleration
  # ... more headings ...

And a curve example from config/backup.yaml:

trajectories:
  - type: curve
    linear_velocity: 1
    angular_velocity: -45
    frame: tracking_point_stabilized
    dt: 0.2
    time: 3
    yaw: heading

Shipped config files

Installed to share/trajectory_library/config/; reference them with $(find-pkg-share trajectory_library)/config/<file>.yaml:

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged trajectory_library at Robotics Stack Exchange

No version for distro noetic showing github. Known supported distros are highlighted in the buttons above.

Package Summary

Version 0.0.0
License BSD-3-Clause-Clear
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/castacks/airstack.git
VCS Type git
VCS Version develop
Last Updated 2026-09-11
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Trajectory classes and generators for creating, transforming, and sampling candidate trajectories used by AirStack planners and controllers.

Maintainers

  • Andrew Jong

Authors

No additional authors.

Trajectory Library

Contact: John Keller

trajectory_library is a C++ library (no node of its own) for generating and manipulating candidate trajectories for obstacle-avoidance planners. It provides the Trajectory/Waypoint classes used throughout the local layer to interpolate, transform, trim, merge, and visualize waypoint paths, plus a TrajectoryLibrary class that loads a library of candidate trajectory generators from a YAML config file — the file the DROAN local planner (asm_droan module) points its trajectory_library_config parameter at. Every trajectory converts to/from airstack_msgs/msg/TrajectoryXYZVYaw, the trajectory-controller command type (see the Interface Conventions Specification §5).

Core classes

Defined in include/trajectory_library/trajectory_library.hpp, implemented in src/trajectory_library.cpp:

Class What it is Key operations
Waypoint One sample: position, yaw, velocity, acceleration, jerk, time interpolate(), as_odometry_msg() (→ airstack_msgs/Odometry)
Trajectory A timed waypoint sequence in a TF frame; constructible from TrajectoryXYZVYaw or nav_msgs/Path (positions only, velocity 0) closest-point queries, get_waypoint(time), get_odom(time), to_frame(), merge(), trim(), get_trimmed_trajectory_between_distances(), get_reversed_trajectory(), get_markers() (RViz), get_TrajectoryXYZVYaw_msg()
TrajectoryLibrary Loads a set of candidate-trajectory generators from a YAML file get_static_trajectories(), get_dynamic_trajectories(odom), get_markers()

Waypoint times are generated lazily from positions and speeds (generate_waypoint_times()): the time to each waypoint is segment distance divided by the average of the two endpoint speeds (floored at 0.01 m/s). When a TrajectoryXYZVYaw is ingested, each waypoint’s scalar velocity is turned into a velocity vector along the local segment direction.

Trajectory generator classes

The library distinguishes static generators (fixed shape, computed once, get_trajectory()) from dynamic generators (recomputed from the robot’s current odometry, get_trajectory(odom)):

Class Kind What it generates Parameters (constructor)
CurveTrajectory static A constant-speed arc in the x-y plane of frame, integrating heading at a fixed turn rate for time seconds in dt steps; yaw either follows the heading or is fixed linear_velocity (m/s), angular_velocity (rad/s), frame, time (s), dt (s), use_heading, yaw (rad)
AccelerationTrajectory dynamic Forward-integrates the robot’s current position/velocity (transformed into frame) under a constant acceleration for horizon ht in dt steps; per-waypoint speed capped at max_velocity frame, ax, ay, az (m/s²), dt (s), ht (s), max_velocity (m/s)
TakeoffTrajectory dynamic A 3-waypoint vertical (optionally tilted) climb of height meters from the current pose, ending with a near-zero-velocity waypoint height (m), velocity (m/s), path_roll, path_pitch (rad), relative_to_orientation

Only curve and acceleration can be created from the YAML config; TakeoffTrajectory is constructed programmatically (the takeoff_landing_planner builds its takeoff/landing trajectories with it). Entries with any other type are silently skipped by the parser (src/trajectory_library.cpp:1284-1344).

Config file format (trajectory_library_config)

TrajectoryLibrary(config_filename, node_ptr) loads a YAML file with a single top-level key, trajectories:, a list of generator definitions. Each entry’s keys depend on its type:

type: curve → one static CurveTrajectory:

Key Unit Meaning
linear_velocity m/s Constant speed along the arc
angular_velocity deg/s Turn rate (converted to rad/s at load)
frame TF frame Frame the arc starts at the origin of (e.g. tracking_point_stabilized)
time s Duration of the arc
dt s Waypoint spacing in time
yaw heading or deg The literal string heading makes yaw follow the direction of travel; a number fixes yaw to that value

type: acceleration → one dynamic AccelerationTrajectory. The acceleration vector is given either componentwise (x/y/z) or polar (magnitude/magnitude_yaw/magnitude_pitch); if neither complete set is present the entry is rejected with a console message:

Key Unit Meaning
frame TF frame Frame the integration happens in (e.g. look_ahead_point_stabilized)
x, y, z m/s² Acceleration vector components
magnitude m/s² Alternative: acceleration magnitude…
magnitude_yaw, magnitude_pitch deg …rotated by this yaw/pitch from the +x axis
dt s Integration/waypoint time step
ht s Horizon time (how long to integrate)
max_velocity m/s Speed cap applied to each generated waypoint

$(param <name>) substitution: any scalar value may be the string $(param name), which is replaced at load time with the value of the ROS parameter name on the node that constructed the TrajectoryLibrary (parser: include/trajectory_library/trajectory_library.hpp, parse<T>()). This is how one config file serves different speed profiles: DROAN’s droan.yaml sets dt, ht, ht_long, max_velocity, and magnitude as node parameters and the trajectory YAML references them. TrajectoryLibrary’s constructor declares these five parameter names (with placeholder defaults) so the substitution always resolves.

Real excerpt from config/long.yaml — the default library for droan_local_planner (an acceleration fan: one entry per magnitude_yaw heading, 22.5° apart, plus climbing/descending variants):

---
trajectories:
  - dt: $(param dt)
    frame: look_ahead_point_stabilized
    ht: $(param ht_long)
    magnitude: $(param magnitude)
    magnitude_pitch: 0
    magnitude_yaw: 0
    max_velocity: $(param max_velocity)
    type: acceleration
  - dt: $(param dt)
    frame: look_ahead_point_stabilized
    ht: $(param ht_long)
    magnitude: $(param magnitude)
    magnitude_pitch: 0
    magnitude_yaw: 22.5
    max_velocity: $(param max_velocity)
    type: acceleration
  # ... more headings ...

And a curve example from config/backup.yaml:

trajectories:
  - type: curve
    linear_velocity: 1
    angular_velocity: -45
    frame: tracking_point_stabilized
    dt: 0.2
    time: 3
    yaw: heading

Shipped config files

Installed to share/trajectory_library/config/; reference them with $(find-pkg-share trajectory_library)/config/<file>.yaml:

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged trajectory_library at Robotics Stack Exchange