This package provides ROS nodes that wrap the erl_path_planning library for use in robotics
applications. It includes support for both standard 2D path planning and Linear Temporal
Logic (LTL) based path planning for mission specification.
| A* 2D | A* 2D with LTL |
|---|---|
![]() |
![]() |
- A* Path Planning: Optimal path planning using the A* algorithm
- LTL Mission Planning: Support for complex mission specifications using Linear Temporal Logic
- ROS2 Integration: Full integration with ROS2 interfaces
- Flexible Precision: Supports both single and double precision computation
- Configurable Motion Primitives: Customizable grid-based motion with diagonal movements
- Robot Footprint Support: Considers robot geometry for collision checking
- QoS Configuration: Flexible QoS settings for all topics
All A* nodes inherit from a common base class (AstarNode) that provides the following shared parameters:
double_precision(bool, default: false): Use double precision instead of floatglobal_frame(string, default: "map"): Global reference framerobot_frame(string, default: "base_link"): Robot reference framestart_source(string, default: "topic"): Start source ("topic" or "tf")
default_qos_reliability(string, default: "best_effort"): Default QoS reliability for topicsdefault_qos_durability(string, default: "transient_local"): Default QoS durability for topics
start_topic(string, default: "start"): Start pose topicstart_topic_reliability(string, default: uses default_qos_reliability)start_topic_durability(string, default: uses default_qos_durability)goal_topic(string, default: "goals"): Goal positions topicgoal_topic_reliability(string, default: uses default_qos_reliability)goal_topic_durability(string, default: uses default_qos_durability)goal_tolerance_topic(string, default: "goal_tolerances"): Goal tolerances topicgoal_tolerance_topic_reliability(string, default: uses default_qos_reliability)goal_tolerance_topic_durability(string, default: uses default_qos_durability)terminal_cost_topic(string, default: "terminal_costs"): Terminal costs topicterminal_cost_topic_reliability(string, default: uses default_qos_reliability)terminal_cost_topic_durability(string, default: uses default_qos_durability)
path_topic(string, default: "plan"): Path output topicpath_topic_reliability(string, default: uses default_qos_reliability)path_topic_durability(string, default: uses default_qos_durability)cost_topic(string, default: "cost"): Cost output topiccost_topic_reliability(string, default: uses default_qos_reliability)cost_topic_durability(string, default: uses default_qos_durability)goal_idx_topic(string, default: "goal_idx"): Goal index output topicgoal_idx_topic_reliability(string, default: uses default_qos_reliability)goal_idx_topic_durability(string, default: uses default_qos_durability)
plan_srv_name(string, default: "plan"): Planning service namereset_srv_name(string, default: "reset"): Reset service name
eps(double, default: 1.0): Suboptimality factor (1.0 = optimal, >1.0 = faster but suboptimal)max_num_iterations(int, default: 100000): Maximum number of search iterationslog(bool, default: false): Enable verbose loggingreopen_inconsistent(bool, default: false): Reopen inconsistent nodes in search
Standard 2D A* path planner for grid-based navigation.
map(nav_msgs/OccupancyGrid): Occupancy grid map for planning (default topic: "map")start(std_msgs/Float64MultiArray): Start position as (x, y) vector (default topic: "start")goals(std_msgs/Float64MultiArray): Goal positions as (2, N) matrix (default topic: "goals")goal_tolerances(std_msgs/Float64MultiArray): Goal tolerances (default topic: "goal_tolerances")terminal_costs(std_msgs/Float64MultiArray): Terminal costs for each goal (default topic: "terminal_costs")
plan(nav_msgs/Path): Computed path from start to goalcost(std_msgs/Float64): Total cost of the computed pathgoal_idx(std_msgs/Int64): Index of the reached goal
plan(std_srvs/srv/Trigger): Trigger path planningreset(std_srvs/srv/Trigger): Reset the planner state
See Common Parameters for A* Based Nodes above.
Additional Node-Specific Parameters:
Map Configuration:
map_topic(string, default: "map"): Occupancy grid topicmap_topic_reliability(string, default: "best_effort"): QoS reliability settingmap_topic_durability(string, default: "transient_local"): QoS durability setting
Motion Primitives:
max_axis_step(int, default: 1): Maximum step along one axis for motion primitivesallow_diagonal(bool, default: true): Allow diagonal movements
Robot Configuration:
robot_metric_contour(double[], default: []): Robot footprint contour as [x1, y1, x2, y2, ...] (minimum 3 points)
Environment Settings:
obstacle_threshold(int, default: varies): Occupancy threshold for obstacles (0-100)add_map_cost(bool, default: false): Add map costs to path costmap_cost_factor(double, default: 0.0): Factor to scale map costs
A* path planner with Linear Temporal Logic (LTL) mission specification support.
occ_map(nav_msgs/OccupancyGrid): Occupancy grid map (default topic: "occ_map")label_map(erl_geometry_msgs/GridMapMsg): Label map (UINT32) for atomic propositions (default topic: "label_map")fsa_spot(std_msgs/String): Finite State Automaton in Spot HOA format (default topic: "fsa_spot")start(std_msgs/Float64MultiArray): Start position (default topic: "start")goals(std_msgs/Float64MultiArray): Goal positions (default topic: "goals")goal_tolerances(std_msgs/Float64MultiArray): Goal tolerances (default topic: "goal_tolerances")terminal_costs(std_msgs/Float64MultiArray): Terminal costs (default topic: "terminal_costs")
plan(nav_msgs/Path): Computed path satisfying LTL specificationcost(std_msgs/Float64): Total cost of the computed pathgoal_idx(std_msgs/Int64): Index of the reached goalap_dict(std_msgs/String): Atomic proposition dictionary in YAML format
plan(std_srvs/srv/Trigger): Trigger LTL-aware path planningreset(std_srvs/srv/Trigger): Reset the planner state
See Common Parameters for A* Based Nodes above.
Additional LTL-Specific Topics:
label_map_topic(string, default: "label_map"): Label map topiclabel_map_topic_reliability(string, default: "best_effort")label_map_topic_durability(string, default: "transient_local")occ_map_topic(string, default: "occ_map"): Occupancy map topicocc_map_topic_reliability(string, default: "best_effort")occ_map_topic_durability(string, default: "transient_local")fsa_topic(string, default: "fsa_spot"): FSA topic in Spot HOA formatfsa_topic_reliability(string, default: "reliable")fsa_topic_durability(string, default: "transient_local")ap_dict_topic(string, default: "ap_dict"): Atomic proposition dictionary output topic
Note: The astar_2d_ltl_node does not use the map_topic parameter. Instead, it uses occ_map_topic and label_map_topic for separate occupancy and label information.
# Launch with default parameters
ros2 run erl_path_planning_ros astar_2d_node
# Launch with custom parameters
ros2 run erl_path_planning_ros astar_2d_node --ros-args \
-p double_precision:=true \
-p global_frame:=map \
-p eps:=1.5 \
-p max_axis_step:=2 \
-p allow_diagonal:=true \
-p robot_metric_contour:="[-0.3, -0.3, 0.3, -0.3, 0.3, 0.3, -0.3, 0.3]"
# Publish start and goals
ros2 topic pub /start std_msgs/msg/Float64MultiArray \
"{layout: {dim: [{size: 2, stride: 1}]}, data: [0.0, 0.0]}"
ros2 topic pub /goals std_msgs/msg/Float64MultiArray \
"{layout: {dim: [{size: 2, stride: 1}, {size: 1, stride: 1}]}, data: [5.0, 5.0]}"
# Trigger planning
ros2 service call /plan std_srvs/srv/Trigger# Launch LTL planner
ros2 run erl_path_planning_ros astar_2d_ltl_node --ros-args \
-p double_precision:=false \
-p eps:=1.0 \
-p max_num_iterations:=200000
# The node will wait for:
# - Occupancy map on /occ_map
# - Label map on /label_map
# - FSA specification on /fsa_spot
# Then publish the atomic proposition dictionary on /ap_dict
# Trigger planning
ros2 service call /plan std_srvs/srv/Triggererl_path_planning: Core path planning algorithmserl_env: Environment representationserl_geometry_msgs: ProvidesGridMapMsgerl_common: Common utilities- ROS1 Noetic (TODO)
- ROS2 Humble or later
# In your ROS2 workspace
colcon build --packages-select erl_path_planning_ros
