Start up docker container: docker compose up [-d]
-dflag runs container in detached mode
Gracefully shutdown container & remove image:
docker compose down --rmi local --remove-orphans
The planner provides a ROS service for path planning:
Service: /plan_path
Type: barracuda_msgs/PlanPath
Request:
geometry_msgs/PoseStamped goal_pose
Response:
barracuda_msgs/Waypoints waypoints
-
/robot_pose(geometry_msgs/PoseStamped)- Current robot position
-
/obstacle_pointcloud(sensor_msgs/PointCloud2)- Point cloud representing obstacles in the environment
-
/planned_path(barracuda_msgs/Waypoints)- The planned path as a series of waypoints
-
/planned_path_viz(nav_msgs/Path)- Visualization of the planned path for RViz
-
/rrt_tree(visualization_msgs/MarkerArray)- Visualization of the RRT tree structure
The navigation system includes a waypoint interpolation node that converts discrete RRT* waypoints into smooth, high-resolution paths suitable for robot control.
- Smart Interpolation: Uses linear interpolation for 2 waypoints, cubic spline for 3+ waypoints
- Speed Control: Ensures path execution never exceeds maximum safe speeds
- High Resolution: Generates dense waypoint sequences from sparse RRT* output
- Constant Timing: Provides consistent time intervals for smooth controller operation
| Parameter | Type | Default | Description |
|---|---|---|---|
~velocity |
double | 1.0 | Base velocity for time parameterization (m/s) |
~max_speed |
double | 2.0 | Maximum allowed speed safety limit (m/s) |
~base_dt |
double | 0.1 | Controller time step for speed estimation (s) |
~output_dt |
double | 0.02 | High-resolution sampling interval (s) |
Subscribed:
/rrt_waypoints(barracuda_msgs/Waypoints)- Sparse waypoints from the RRT* planner
Published:
/interpolated_path(nav_msgs/Path)- High-resolution interpolated path with speed control
- Speed Estimation: Analyzes waypoint distances to estimate maximum speeds
- Global Scaling: If any segment would exceed
max_speed, the entire path timing is scaled proportionally - Interpolation: Creates smooth curves (linear or cubic spline) between waypoints
- High-Resolution Sampling: Generates dense waypoints at constant
output_dtintervals - Safety: Guarantees speeds remain within limits while maintaining smooth motion
The target_odometry_publisher node converts the interpolated_path into a constant-speed target trajectory for downstream controllers (e.g., an LQR). It selects a lookahead waypoint along the path and publishes the corresponding pose and linear velocity as nav_msgs/Odometry.
- Executable:
barracuda_navigation/scripts/target_odometry_publisher.py
interpolated_path(nav_msgs/Path)odometry/filtered/global(nav_msgs/Odometry)
target_odometry(nav_msgs/Odometry)- Note: When launched inside the
barracudanamespace, the fully-qualified topic appears as/barracuda/target_odometry.
- Note: When launched inside the
| Parameter | Type | Default | Description |
|---|---|---|---|
~path_topic |
string | interpolated_path |
Input path topic |
~odom_topic |
string | odometry/filtered/global |
Input robot odometry topic |
~target_topic |
string | target_odometry |
Output target odometry topic |
~frame_id |
string | map |
Output frame if path has no frame |
~desired_speed |
double | 0.8 |
Constant translational speed (m/s) |
~lookahead_dist |
double | 1.5 |
Lookahead distance along path (m) |
~max_lookahead_dist |
double | 3.0 |
Cap for lookahead distance (m) |
~publish_rate |
double | 30.0 |
Publishing rate (Hz) |
~hold_at_end |
bool | true |
Hold final waypoint; publish zero linear velocity within ~hold_distance |
~hold_distance |
double | 0.3 |
Distance threshold to trigger final hold (m) |
- Finds the nearest path index to the current position and enforces forward progress (no backtracking).
- Chooses a target index where the along-path distance from the nearest index ≥
lookahead_dist(capped bymax_lookahead_dist). - Publishes:
- Pose: position with orientation aligned to the 3D path tangent (roll=0, pitch from slope, yaw from XY).
- Twist (linear): constant speed along the local 3D path tangent (vx, vy, vz); zeroed when holding at the final waypoint.
- Twist (angular): zeros (attitude control handled by your controller).
-
barracuda_navigation/launch/waypoint_interpolator_demo.launchruns:waypoint_interpolatorwaypoint_test_publishertarget_odometry_publisher
-
barracuda_navigation/launch/barracuda_navigation.launchruns:rrt_star_plannertarget_odometry_publisher
Example (demo):
roslaunch barracuda_navigation waypoint_interpolator_demo.launch
Then monitor:
rostopic echo /barracuda/target_odometry