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
Maintainers
- Andrew Jong
Authors
Random Walk Global Planner Baseline
The Random Walk Planner serves as a baseline global planner for stress testing system autonomy. Unlike more informed and intelligent planners, the Random Walk Planner generates a series of random trajectories to evaluate system robustness. Using the map published by VDB, the planner will generate and publish multiple linked straight-line trajectories, checking for collisions along these paths.
The blue line is the global plan generated by the random walk. The yellow line shows the past trajectory followed by the local planner when pursuing the previous random global plans.
Functionality
Upon activation by an ExplorationTask goal, the Random Walk Planner will:
- Generate a specified number of straight-line path segments.
- Continuously monitor the robot’s progress along the published path.
- Once the robot completes the current path, a new set of paths will be generated.
This loop continues, allowing the system to explore various trajectories and stress test the overall autonomy stack.
Parameters
| Parameter | Description |
|---|---|
num_paths_to_generate |
Number of straight-line paths to concatenate into a complete trajectory. |
max_start_to_goal_dist_m |
Maximum distance (m) from start to goal for each straight-line segment. |
checking_point_cnt |
Number of points along each segment to check for collisions. |
max_z_change_m |
Maximum allowed change in height (z-axis) between start and goal points. |
collision_padding_m |
Extra padding (m) around a voxel when checking for collisions. |
path_end_threshold_m |
Distance threshold (m) for considering the current path completed. |
max_yaw_change_degrees |
Maximum allowed yaw change between consecutive segments. |
robot_frame_id |
Frame name for the robot base, used for transform lookups. |
Task Executor
This node is a task executor: it runs as a ROS 2 action server and is activated on demand via an ExplorationTask goal. It does not plan continuously — planning only happens while a goal is active.
Action server: /{robot_name}/tasks/exploration
Type: task_msgs/action/ExplorationTask
Cascade
Random walk delegates navigation to the local planner via a second action:
GCS operator → ExplorationTask → random_walk_planner
↓
NavigateTask (/{robot_name}/tasks/navigate)
↓
local planner (mighty_bridge by default)
↓
trajectory_controller
Goal parameters
| Field | Type | Description |
|——-|——|————-|
| search_bounds | geometry_msgs/Polygon | Bounding polygon for search (empty = unbounded) |
| min_altitude_agl | float32 | Minimum flight altitude above ground (m) |
| max_altitude_agl | float32 | Maximum flight altitude above ground (m) |
| min_flight_speed | float32 | Minimum flight speed (m/s) |
| max_flight_speed | float32 | Maximum flight speed (m/s) |
| time_limit_sec | float32 | Maximum task duration in seconds (0 = no limit) |
Feedback (published ~1 Hz)
| Field | Type | Description |
|——-|——|————-|
| status | string | "planning" or "navigating" |
| progress | float32 | Elapsed / time_limit (0 if no time limit) |
| current_position | geometry_msgs/Point | Current robot position |
Result
| Field | Type | Description |
|——-|——|————-|
| success | bool | True if time limit reached normally; false if canceled or error |
| message | string | Human-readable completion reason |
CLI test
# Send a 30-second unbounded exploration goal with feedback
ros2 action send_goal /robot_1/tasks/exploration task_msgs/action/ExplorationTask \
'{min_altitude_agl: 3.0, max_altitude_agl: 8.0, min_flight_speed: 1.0, max_flight_speed: 3.0, time_limit_sec: 30.0}' \
--feedback
# Ctrl-C cancels the goal; the node returns success=false, message="Task canceled"
Subscriptions
| Topic | Type | Description |
|——-|——|————-|
| vdb_map_visualization | visualization_msgs/Marker | Occupancy map from VDB mapping |
| odometry | nav_msgs/Odometry | Robot state estimate |
Publications
| Topic | Type | Description |
|——-|——|————-|
| ~/global_plan | nav_msgs/Path | Generated path (also sent as NavigateTask goal) |
| ~/goal_point_viz | visualization_msgs/Marker | Goal point visualization |
| ~/traj_viz | visualization_msgs/Marker | Trajectory visualization |
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| rclcpp | |
| rclcpp_action | |
| std_msgs | |
| geometry_msgs | |
| nav_msgs | |
| visualization_msgs | |
| tf2 | |
| task_msgs |
System Dependencies
Dependant Packages
Launch files
- launch/random_walk_planner.launch.xml
-
random_walk_planner : canonical module launch file (RFC #379 §2/§4).
Starts the random-walk global planner exactly as the legacy global bringup
did. The C++ constructor names the node "random_walk_node" — do NOT set
launch name= or it will rename the node and break the node-name-prefixed
remap sources below. No namespace push either: the node lives at the robot
root (/$ROBOT_NAME/random_walk_node), as the stack entry is included under
the $ROBOT_NAME push in robot.launch.xml.
Every topic endpoint is a declared
defaulting to the canonical name (today's graph). The set_remap SOURCES stay relative (matching the frozen global bringup) so they resolve against the parent $ROBOT_NAME namespace at runtime; the arg targets are absolute. Wiring deviations are passed as include args by the stack entry file (stacks/ /launch/) — the single-locus rule: endpoints are declared args, applied locally via ; cross-module REWIRING lives only in stack entry files. -
- random_walk_config [default: $(find-pkg-share random_walk_planner)/config/random_walk_config.yaml]
- random_walk_vdb_map_topic [default: /$(env ROBOT_NAME)/vdb_mapping/vdb_map_visualization]
- random_walk_odometry_topic [default: /$(env ROBOT_NAME)/odometry_conversion/odometry]
- random_walk_global_plan_topic [default: /$(env ROBOT_NAME)/global_plan]
- random_walk_global_plan_toggle_topic [default: /$(env ROBOT_NAME)/behavior/global_plan_toggle]
- random_walk_exploration_task_topic [default: /$(env ROBOT_NAME)/tasks/exploration]
- random_walk_navigate_task_topic [default: /$(env ROBOT_NAME)/tasks/navigate]
-
random_walk_planner : canonical module launch file (RFC #379 §2/§4).
Starts the random-walk global planner exactly as the legacy global bringup
did. The C++ constructor names the node "random_walk_node" — do NOT set
launch name= or it will rename the node and break the node-name-prefixed
remap sources below. No namespace push either: the node lives at the robot
root (/$ROBOT_NAME/random_walk_node), as the stack entry is included under
the $ROBOT_NAME push in robot.launch.xml.
Every topic endpoint is a declared
Messages
Services
Plugins
Recent questions tagged random_walk_planner 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
Maintainers
- Andrew Jong
Authors
Random Walk Global Planner Baseline
The Random Walk Planner serves as a baseline global planner for stress testing system autonomy. Unlike more informed and intelligent planners, the Random Walk Planner generates a series of random trajectories to evaluate system robustness. Using the map published by VDB, the planner will generate and publish multiple linked straight-line trajectories, checking for collisions along these paths.
The blue line is the global plan generated by the random walk. The yellow line shows the past trajectory followed by the local planner when pursuing the previous random global plans.
Functionality
Upon activation by an ExplorationTask goal, the Random Walk Planner will:
- Generate a specified number of straight-line path segments.
- Continuously monitor the robot’s progress along the published path.
- Once the robot completes the current path, a new set of paths will be generated.
This loop continues, allowing the system to explore various trajectories and stress test the overall autonomy stack.
Parameters
| Parameter | Description |
|---|---|
num_paths_to_generate |
Number of straight-line paths to concatenate into a complete trajectory. |
max_start_to_goal_dist_m |
Maximum distance (m) from start to goal for each straight-line segment. |
checking_point_cnt |
Number of points along each segment to check for collisions. |
max_z_change_m |
Maximum allowed change in height (z-axis) between start and goal points. |
collision_padding_m |
Extra padding (m) around a voxel when checking for collisions. |
path_end_threshold_m |
Distance threshold (m) for considering the current path completed. |
max_yaw_change_degrees |
Maximum allowed yaw change between consecutive segments. |
robot_frame_id |
Frame name for the robot base, used for transform lookups. |
Task Executor
This node is a task executor: it runs as a ROS 2 action server and is activated on demand via an ExplorationTask goal. It does not plan continuously — planning only happens while a goal is active.
Action server: /{robot_name}/tasks/exploration
Type: task_msgs/action/ExplorationTask
Cascade
Random walk delegates navigation to the local planner via a second action:
GCS operator → ExplorationTask → random_walk_planner
↓
NavigateTask (/{robot_name}/tasks/navigate)
↓
local planner (mighty_bridge by default)
↓
trajectory_controller
Goal parameters
| Field | Type | Description |
|——-|——|————-|
| search_bounds | geometry_msgs/Polygon | Bounding polygon for search (empty = unbounded) |
| min_altitude_agl | float32 | Minimum flight altitude above ground (m) |
| max_altitude_agl | float32 | Maximum flight altitude above ground (m) |
| min_flight_speed | float32 | Minimum flight speed (m/s) |
| max_flight_speed | float32 | Maximum flight speed (m/s) |
| time_limit_sec | float32 | Maximum task duration in seconds (0 = no limit) |
Feedback (published ~1 Hz)
| Field | Type | Description |
|——-|——|————-|
| status | string | "planning" or "navigating" |
| progress | float32 | Elapsed / time_limit (0 if no time limit) |
| current_position | geometry_msgs/Point | Current robot position |
Result
| Field | Type | Description |
|——-|——|————-|
| success | bool | True if time limit reached normally; false if canceled or error |
| message | string | Human-readable completion reason |
CLI test
# Send a 30-second unbounded exploration goal with feedback
ros2 action send_goal /robot_1/tasks/exploration task_msgs/action/ExplorationTask \
'{min_altitude_agl: 3.0, max_altitude_agl: 8.0, min_flight_speed: 1.0, max_flight_speed: 3.0, time_limit_sec: 30.0}' \
--feedback
# Ctrl-C cancels the goal; the node returns success=false, message="Task canceled"
Subscriptions
| Topic | Type | Description |
|——-|——|————-|
| vdb_map_visualization | visualization_msgs/Marker | Occupancy map from VDB mapping |
| odometry | nav_msgs/Odometry | Robot state estimate |
Publications
| Topic | Type | Description |
|——-|——|————-|
| ~/global_plan | nav_msgs/Path | Generated path (also sent as NavigateTask goal) |
| ~/goal_point_viz | visualization_msgs/Marker | Goal point visualization |
| ~/traj_viz | visualization_msgs/Marker | Trajectory visualization |
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| rclcpp | |
| rclcpp_action | |
| std_msgs | |
| geometry_msgs | |
| nav_msgs | |
| visualization_msgs | |
| tf2 | |
| task_msgs |
System Dependencies
Dependant Packages
Launch files
- launch/random_walk_planner.launch.xml
-
random_walk_planner : canonical module launch file (RFC #379 §2/§4).
Starts the random-walk global planner exactly as the legacy global bringup
did. The C++ constructor names the node "random_walk_node" — do NOT set
launch name= or it will rename the node and break the node-name-prefixed
remap sources below. No namespace push either: the node lives at the robot
root (/$ROBOT_NAME/random_walk_node), as the stack entry is included under
the $ROBOT_NAME push in robot.launch.xml.
Every topic endpoint is a declared
defaulting to the canonical name (today's graph). The set_remap SOURCES stay relative (matching the frozen global bringup) so they resolve against the parent $ROBOT_NAME namespace at runtime; the arg targets are absolute. Wiring deviations are passed as include args by the stack entry file (stacks/ /launch/) — the single-locus rule: endpoints are declared args, applied locally via ; cross-module REWIRING lives only in stack entry files. -
- random_walk_config [default: $(find-pkg-share random_walk_planner)/config/random_walk_config.yaml]
- random_walk_vdb_map_topic [default: /$(env ROBOT_NAME)/vdb_mapping/vdb_map_visualization]
- random_walk_odometry_topic [default: /$(env ROBOT_NAME)/odometry_conversion/odometry]
- random_walk_global_plan_topic [default: /$(env ROBOT_NAME)/global_plan]
- random_walk_global_plan_toggle_topic [default: /$(env ROBOT_NAME)/behavior/global_plan_toggle]
- random_walk_exploration_task_topic [default: /$(env ROBOT_NAME)/tasks/exploration]
- random_walk_navigate_task_topic [default: /$(env ROBOT_NAME)/tasks/navigate]
-
random_walk_planner : canonical module launch file (RFC #379 §2/§4).
Starts the random-walk global planner exactly as the legacy global bringup
did. The C++ constructor names the node "random_walk_node" — do NOT set
launch name= or it will rename the node and break the node-name-prefixed
remap sources below. No namespace push either: the node lives at the robot
root (/$ROBOT_NAME/random_walk_node), as the stack entry is included under
the $ROBOT_NAME push in robot.launch.xml.
Every topic endpoint is a declared
Messages
Services
Plugins
Recent questions tagged random_walk_planner 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
Maintainers
- Andrew Jong
Authors
Random Walk Global Planner Baseline
The Random Walk Planner serves as a baseline global planner for stress testing system autonomy. Unlike more informed and intelligent planners, the Random Walk Planner generates a series of random trajectories to evaluate system robustness. Using the map published by VDB, the planner will generate and publish multiple linked straight-line trajectories, checking for collisions along these paths.
The blue line is the global plan generated by the random walk. The yellow line shows the past trajectory followed by the local planner when pursuing the previous random global plans.
Functionality
Upon activation by an ExplorationTask goal, the Random Walk Planner will:
- Generate a specified number of straight-line path segments.
- Continuously monitor the robot’s progress along the published path.
- Once the robot completes the current path, a new set of paths will be generated.
This loop continues, allowing the system to explore various trajectories and stress test the overall autonomy stack.
Parameters
| Parameter | Description |
|---|---|
num_paths_to_generate |
Number of straight-line paths to concatenate into a complete trajectory. |
max_start_to_goal_dist_m |
Maximum distance (m) from start to goal for each straight-line segment. |
checking_point_cnt |
Number of points along each segment to check for collisions. |
max_z_change_m |
Maximum allowed change in height (z-axis) between start and goal points. |
collision_padding_m |
Extra padding (m) around a voxel when checking for collisions. |
path_end_threshold_m |
Distance threshold (m) for considering the current path completed. |
max_yaw_change_degrees |
Maximum allowed yaw change between consecutive segments. |
robot_frame_id |
Frame name for the robot base, used for transform lookups. |
Task Executor
This node is a task executor: it runs as a ROS 2 action server and is activated on demand via an ExplorationTask goal. It does not plan continuously — planning only happens while a goal is active.
Action server: /{robot_name}/tasks/exploration
Type: task_msgs/action/ExplorationTask
Cascade
Random walk delegates navigation to the local planner via a second action:
GCS operator → ExplorationTask → random_walk_planner
↓
NavigateTask (/{robot_name}/tasks/navigate)
↓
local planner (mighty_bridge by default)
↓
trajectory_controller
Goal parameters
| Field | Type | Description |
|——-|——|————-|
| search_bounds | geometry_msgs/Polygon | Bounding polygon for search (empty = unbounded) |
| min_altitude_agl | float32 | Minimum flight altitude above ground (m) |
| max_altitude_agl | float32 | Maximum flight altitude above ground (m) |
| min_flight_speed | float32 | Minimum flight speed (m/s) |
| max_flight_speed | float32 | Maximum flight speed (m/s) |
| time_limit_sec | float32 | Maximum task duration in seconds (0 = no limit) |
Feedback (published ~1 Hz)
| Field | Type | Description |
|——-|——|————-|
| status | string | "planning" or "navigating" |
| progress | float32 | Elapsed / time_limit (0 if no time limit) |
| current_position | geometry_msgs/Point | Current robot position |
Result
| Field | Type | Description |
|——-|——|————-|
| success | bool | True if time limit reached normally; false if canceled or error |
| message | string | Human-readable completion reason |
CLI test
# Send a 30-second unbounded exploration goal with feedback
ros2 action send_goal /robot_1/tasks/exploration task_msgs/action/ExplorationTask \
'{min_altitude_agl: 3.0, max_altitude_agl: 8.0, min_flight_speed: 1.0, max_flight_speed: 3.0, time_limit_sec: 30.0}' \
--feedback
# Ctrl-C cancels the goal; the node returns success=false, message="Task canceled"
Subscriptions
| Topic | Type | Description |
|——-|——|————-|
| vdb_map_visualization | visualization_msgs/Marker | Occupancy map from VDB mapping |
| odometry | nav_msgs/Odometry | Robot state estimate |
Publications
| Topic | Type | Description |
|——-|——|————-|
| ~/global_plan | nav_msgs/Path | Generated path (also sent as NavigateTask goal) |
| ~/goal_point_viz | visualization_msgs/Marker | Goal point visualization |
| ~/traj_viz | visualization_msgs/Marker | Trajectory visualization |
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| rclcpp | |
| rclcpp_action | |
| std_msgs | |
| geometry_msgs | |
| nav_msgs | |
| visualization_msgs | |
| tf2 | |
| task_msgs |
System Dependencies
Dependant Packages
Launch files
- launch/random_walk_planner.launch.xml
-
random_walk_planner : canonical module launch file (RFC #379 §2/§4).
Starts the random-walk global planner exactly as the legacy global bringup
did. The C++ constructor names the node "random_walk_node" — do NOT set
launch name= or it will rename the node and break the node-name-prefixed
remap sources below. No namespace push either: the node lives at the robot
root (/$ROBOT_NAME/random_walk_node), as the stack entry is included under
the $ROBOT_NAME push in robot.launch.xml.
Every topic endpoint is a declared
defaulting to the canonical name (today's graph). The set_remap SOURCES stay relative (matching the frozen global bringup) so they resolve against the parent $ROBOT_NAME namespace at runtime; the arg targets are absolute. Wiring deviations are passed as include args by the stack entry file (stacks/ /launch/) — the single-locus rule: endpoints are declared args, applied locally via ; cross-module REWIRING lives only in stack entry files. -
- random_walk_config [default: $(find-pkg-share random_walk_planner)/config/random_walk_config.yaml]
- random_walk_vdb_map_topic [default: /$(env ROBOT_NAME)/vdb_mapping/vdb_map_visualization]
- random_walk_odometry_topic [default: /$(env ROBOT_NAME)/odometry_conversion/odometry]
- random_walk_global_plan_topic [default: /$(env ROBOT_NAME)/global_plan]
- random_walk_global_plan_toggle_topic [default: /$(env ROBOT_NAME)/behavior/global_plan_toggle]
- random_walk_exploration_task_topic [default: /$(env ROBOT_NAME)/tasks/exploration]
- random_walk_navigate_task_topic [default: /$(env ROBOT_NAME)/tasks/navigate]
-
random_walk_planner : canonical module launch file (RFC #379 §2/§4).
Starts the random-walk global planner exactly as the legacy global bringup
did. The C++ constructor names the node "random_walk_node" — do NOT set
launch name= or it will rename the node and break the node-name-prefixed
remap sources below. No namespace push either: the node lives at the robot
root (/$ROBOT_NAME/random_walk_node), as the stack entry is included under
the $ROBOT_NAME push in robot.launch.xml.
Every topic endpoint is a declared
Messages
Services
Plugins
Recent questions tagged random_walk_planner 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
Maintainers
- Andrew Jong
Authors
Random Walk Global Planner Baseline
The Random Walk Planner serves as a baseline global planner for stress testing system autonomy. Unlike more informed and intelligent planners, the Random Walk Planner generates a series of random trajectories to evaluate system robustness. Using the map published by VDB, the planner will generate and publish multiple linked straight-line trajectories, checking for collisions along these paths.
The blue line is the global plan generated by the random walk. The yellow line shows the past trajectory followed by the local planner when pursuing the previous random global plans.
Functionality
Upon activation by an ExplorationTask goal, the Random Walk Planner will:
- Generate a specified number of straight-line path segments.
- Continuously monitor the robot’s progress along the published path.
- Once the robot completes the current path, a new set of paths will be generated.
This loop continues, allowing the system to explore various trajectories and stress test the overall autonomy stack.
Parameters
| Parameter | Description |
|---|---|
num_paths_to_generate |
Number of straight-line paths to concatenate into a complete trajectory. |
max_start_to_goal_dist_m |
Maximum distance (m) from start to goal for each straight-line segment. |
checking_point_cnt |
Number of points along each segment to check for collisions. |
max_z_change_m |
Maximum allowed change in height (z-axis) between start and goal points. |
collision_padding_m |
Extra padding (m) around a voxel when checking for collisions. |
path_end_threshold_m |
Distance threshold (m) for considering the current path completed. |
max_yaw_change_degrees |
Maximum allowed yaw change between consecutive segments. |
robot_frame_id |
Frame name for the robot base, used for transform lookups. |
Task Executor
This node is a task executor: it runs as a ROS 2 action server and is activated on demand via an ExplorationTask goal. It does not plan continuously — planning only happens while a goal is active.
Action server: /{robot_name}/tasks/exploration
Type: task_msgs/action/ExplorationTask
Cascade
Random walk delegates navigation to the local planner via a second action:
GCS operator → ExplorationTask → random_walk_planner
↓
NavigateTask (/{robot_name}/tasks/navigate)
↓
local planner (mighty_bridge by default)
↓
trajectory_controller
Goal parameters
| Field | Type | Description |
|——-|——|————-|
| search_bounds | geometry_msgs/Polygon | Bounding polygon for search (empty = unbounded) |
| min_altitude_agl | float32 | Minimum flight altitude above ground (m) |
| max_altitude_agl | float32 | Maximum flight altitude above ground (m) |
| min_flight_speed | float32 | Minimum flight speed (m/s) |
| max_flight_speed | float32 | Maximum flight speed (m/s) |
| time_limit_sec | float32 | Maximum task duration in seconds (0 = no limit) |
Feedback (published ~1 Hz)
| Field | Type | Description |
|——-|——|————-|
| status | string | "planning" or "navigating" |
| progress | float32 | Elapsed / time_limit (0 if no time limit) |
| current_position | geometry_msgs/Point | Current robot position |
Result
| Field | Type | Description |
|——-|——|————-|
| success | bool | True if time limit reached normally; false if canceled or error |
| message | string | Human-readable completion reason |
CLI test
# Send a 30-second unbounded exploration goal with feedback
ros2 action send_goal /robot_1/tasks/exploration task_msgs/action/ExplorationTask \
'{min_altitude_agl: 3.0, max_altitude_agl: 8.0, min_flight_speed: 1.0, max_flight_speed: 3.0, time_limit_sec: 30.0}' \
--feedback
# Ctrl-C cancels the goal; the node returns success=false, message="Task canceled"
Subscriptions
| Topic | Type | Description |
|——-|——|————-|
| vdb_map_visualization | visualization_msgs/Marker | Occupancy map from VDB mapping |
| odometry | nav_msgs/Odometry | Robot state estimate |
Publications
| Topic | Type | Description |
|——-|——|————-|
| ~/global_plan | nav_msgs/Path | Generated path (also sent as NavigateTask goal) |
| ~/goal_point_viz | visualization_msgs/Marker | Goal point visualization |
| ~/traj_viz | visualization_msgs/Marker | Trajectory visualization |
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| rclcpp | |
| rclcpp_action | |
| std_msgs | |
| geometry_msgs | |
| nav_msgs | |
| visualization_msgs | |
| tf2 | |
| task_msgs |
System Dependencies
Dependant Packages
Launch files
- launch/random_walk_planner.launch.xml
-
random_walk_planner : canonical module launch file (RFC #379 §2/§4).
Starts the random-walk global planner exactly as the legacy global bringup
did. The C++ constructor names the node "random_walk_node" — do NOT set
launch name= or it will rename the node and break the node-name-prefixed
remap sources below. No namespace push either: the node lives at the robot
root (/$ROBOT_NAME/random_walk_node), as the stack entry is included under
the $ROBOT_NAME push in robot.launch.xml.
Every topic endpoint is a declared
defaulting to the canonical name (today's graph). The set_remap SOURCES stay relative (matching the frozen global bringup) so they resolve against the parent $ROBOT_NAME namespace at runtime; the arg targets are absolute. Wiring deviations are passed as include args by the stack entry file (stacks/ /launch/) — the single-locus rule: endpoints are declared args, applied locally via ; cross-module REWIRING lives only in stack entry files. -
- random_walk_config [default: $(find-pkg-share random_walk_planner)/config/random_walk_config.yaml]
- random_walk_vdb_map_topic [default: /$(env ROBOT_NAME)/vdb_mapping/vdb_map_visualization]
- random_walk_odometry_topic [default: /$(env ROBOT_NAME)/odometry_conversion/odometry]
- random_walk_global_plan_topic [default: /$(env ROBOT_NAME)/global_plan]
- random_walk_global_plan_toggle_topic [default: /$(env ROBOT_NAME)/behavior/global_plan_toggle]
- random_walk_exploration_task_topic [default: /$(env ROBOT_NAME)/tasks/exploration]
- random_walk_navigate_task_topic [default: /$(env ROBOT_NAME)/tasks/navigate]
-
random_walk_planner : canonical module launch file (RFC #379 §2/§4).
Starts the random-walk global planner exactly as the legacy global bringup
did. The C++ constructor names the node "random_walk_node" — do NOT set
launch name= or it will rename the node and break the node-name-prefixed
remap sources below. No namespace push either: the node lives at the robot
root (/$ROBOT_NAME/random_walk_node), as the stack entry is included under
the $ROBOT_NAME push in robot.launch.xml.
Every topic endpoint is a declared
Messages
Services
Plugins
Recent questions tagged random_walk_planner 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
Maintainers
- Andrew Jong
Authors
Random Walk Global Planner Baseline
The Random Walk Planner serves as a baseline global planner for stress testing system autonomy. Unlike more informed and intelligent planners, the Random Walk Planner generates a series of random trajectories to evaluate system robustness. Using the map published by VDB, the planner will generate and publish multiple linked straight-line trajectories, checking for collisions along these paths.
The blue line is the global plan generated by the random walk. The yellow line shows the past trajectory followed by the local planner when pursuing the previous random global plans.
Functionality
Upon activation by an ExplorationTask goal, the Random Walk Planner will:
- Generate a specified number of straight-line path segments.
- Continuously monitor the robot’s progress along the published path.
- Once the robot completes the current path, a new set of paths will be generated.
This loop continues, allowing the system to explore various trajectories and stress test the overall autonomy stack.
Parameters
| Parameter | Description |
|---|---|
num_paths_to_generate |
Number of straight-line paths to concatenate into a complete trajectory. |
max_start_to_goal_dist_m |
Maximum distance (m) from start to goal for each straight-line segment. |
checking_point_cnt |
Number of points along each segment to check for collisions. |
max_z_change_m |
Maximum allowed change in height (z-axis) between start and goal points. |
collision_padding_m |
Extra padding (m) around a voxel when checking for collisions. |
path_end_threshold_m |
Distance threshold (m) for considering the current path completed. |
max_yaw_change_degrees |
Maximum allowed yaw change between consecutive segments. |
robot_frame_id |
Frame name for the robot base, used for transform lookups. |
Task Executor
This node is a task executor: it runs as a ROS 2 action server and is activated on demand via an ExplorationTask goal. It does not plan continuously — planning only happens while a goal is active.
Action server: /{robot_name}/tasks/exploration
Type: task_msgs/action/ExplorationTask
Cascade
Random walk delegates navigation to the local planner via a second action:
GCS operator → ExplorationTask → random_walk_planner
↓
NavigateTask (/{robot_name}/tasks/navigate)
↓
local planner (mighty_bridge by default)
↓
trajectory_controller
Goal parameters
| Field | Type | Description |
|——-|——|————-|
| search_bounds | geometry_msgs/Polygon | Bounding polygon for search (empty = unbounded) |
| min_altitude_agl | float32 | Minimum flight altitude above ground (m) |
| max_altitude_agl | float32 | Maximum flight altitude above ground (m) |
| min_flight_speed | float32 | Minimum flight speed (m/s) |
| max_flight_speed | float32 | Maximum flight speed (m/s) |
| time_limit_sec | float32 | Maximum task duration in seconds (0 = no limit) |
Feedback (published ~1 Hz)
| Field | Type | Description |
|——-|——|————-|
| status | string | "planning" or "navigating" |
| progress | float32 | Elapsed / time_limit (0 if no time limit) |
| current_position | geometry_msgs/Point | Current robot position |
Result
| Field | Type | Description |
|——-|——|————-|
| success | bool | True if time limit reached normally; false if canceled or error |
| message | string | Human-readable completion reason |
CLI test
# Send a 30-second unbounded exploration goal with feedback
ros2 action send_goal /robot_1/tasks/exploration task_msgs/action/ExplorationTask \
'{min_altitude_agl: 3.0, max_altitude_agl: 8.0, min_flight_speed: 1.0, max_flight_speed: 3.0, time_limit_sec: 30.0}' \
--feedback
# Ctrl-C cancels the goal; the node returns success=false, message="Task canceled"
Subscriptions
| Topic | Type | Description |
|——-|——|————-|
| vdb_map_visualization | visualization_msgs/Marker | Occupancy map from VDB mapping |
| odometry | nav_msgs/Odometry | Robot state estimate |
Publications
| Topic | Type | Description |
|——-|——|————-|
| ~/global_plan | nav_msgs/Path | Generated path (also sent as NavigateTask goal) |
| ~/goal_point_viz | visualization_msgs/Marker | Goal point visualization |
| ~/traj_viz | visualization_msgs/Marker | Trajectory visualization |
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| rclcpp | |
| rclcpp_action | |
| std_msgs | |
| geometry_msgs | |
| nav_msgs | |
| visualization_msgs | |
| tf2 | |
| task_msgs |
System Dependencies
Dependant Packages
Launch files
- launch/random_walk_planner.launch.xml
-
random_walk_planner : canonical module launch file (RFC #379 §2/§4).
Starts the random-walk global planner exactly as the legacy global bringup
did. The C++ constructor names the node "random_walk_node" — do NOT set
launch name= or it will rename the node and break the node-name-prefixed
remap sources below. No namespace push either: the node lives at the robot
root (/$ROBOT_NAME/random_walk_node), as the stack entry is included under
the $ROBOT_NAME push in robot.launch.xml.
Every topic endpoint is a declared
defaulting to the canonical name (today's graph). The set_remap SOURCES stay relative (matching the frozen global bringup) so they resolve against the parent $ROBOT_NAME namespace at runtime; the arg targets are absolute. Wiring deviations are passed as include args by the stack entry file (stacks/ /launch/) — the single-locus rule: endpoints are declared args, applied locally via ; cross-module REWIRING lives only in stack entry files. -
- random_walk_config [default: $(find-pkg-share random_walk_planner)/config/random_walk_config.yaml]
- random_walk_vdb_map_topic [default: /$(env ROBOT_NAME)/vdb_mapping/vdb_map_visualization]
- random_walk_odometry_topic [default: /$(env ROBOT_NAME)/odometry_conversion/odometry]
- random_walk_global_plan_topic [default: /$(env ROBOT_NAME)/global_plan]
- random_walk_global_plan_toggle_topic [default: /$(env ROBOT_NAME)/behavior/global_plan_toggle]
- random_walk_exploration_task_topic [default: /$(env ROBOT_NAME)/tasks/exploration]
- random_walk_navigate_task_topic [default: /$(env ROBOT_NAME)/tasks/navigate]
-
random_walk_planner : canonical module launch file (RFC #379 §2/§4).
Starts the random-walk global planner exactly as the legacy global bringup
did. The C++ constructor names the node "random_walk_node" — do NOT set
launch name= or it will rename the node and break the node-name-prefixed
remap sources below. No namespace push either: the node lives at the robot
root (/$ROBOT_NAME/random_walk_node), as the stack entry is included under
the $ROBOT_NAME push in robot.launch.xml.
Every topic endpoint is a declared
Messages
Services
Plugins
Recent questions tagged random_walk_planner 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
Maintainers
- Andrew Jong
Authors
Random Walk Global Planner Baseline
The Random Walk Planner serves as a baseline global planner for stress testing system autonomy. Unlike more informed and intelligent planners, the Random Walk Planner generates a series of random trajectories to evaluate system robustness. Using the map published by VDB, the planner will generate and publish multiple linked straight-line trajectories, checking for collisions along these paths.
The blue line is the global plan generated by the random walk. The yellow line shows the past trajectory followed by the local planner when pursuing the previous random global plans.
Functionality
Upon activation by an ExplorationTask goal, the Random Walk Planner will:
- Generate a specified number of straight-line path segments.
- Continuously monitor the robot’s progress along the published path.
- Once the robot completes the current path, a new set of paths will be generated.
This loop continues, allowing the system to explore various trajectories and stress test the overall autonomy stack.
Parameters
| Parameter | Description |
|---|---|
num_paths_to_generate |
Number of straight-line paths to concatenate into a complete trajectory. |
max_start_to_goal_dist_m |
Maximum distance (m) from start to goal for each straight-line segment. |
checking_point_cnt |
Number of points along each segment to check for collisions. |
max_z_change_m |
Maximum allowed change in height (z-axis) between start and goal points. |
collision_padding_m |
Extra padding (m) around a voxel when checking for collisions. |
path_end_threshold_m |
Distance threshold (m) for considering the current path completed. |
max_yaw_change_degrees |
Maximum allowed yaw change between consecutive segments. |
robot_frame_id |
Frame name for the robot base, used for transform lookups. |
Task Executor
This node is a task executor: it runs as a ROS 2 action server and is activated on demand via an ExplorationTask goal. It does not plan continuously — planning only happens while a goal is active.
Action server: /{robot_name}/tasks/exploration
Type: task_msgs/action/ExplorationTask
Cascade
Random walk delegates navigation to the local planner via a second action:
GCS operator → ExplorationTask → random_walk_planner
↓
NavigateTask (/{robot_name}/tasks/navigate)
↓
local planner (mighty_bridge by default)
↓
trajectory_controller
Goal parameters
| Field | Type | Description |
|——-|——|————-|
| search_bounds | geometry_msgs/Polygon | Bounding polygon for search (empty = unbounded) |
| min_altitude_agl | float32 | Minimum flight altitude above ground (m) |
| max_altitude_agl | float32 | Maximum flight altitude above ground (m) |
| min_flight_speed | float32 | Minimum flight speed (m/s) |
| max_flight_speed | float32 | Maximum flight speed (m/s) |
| time_limit_sec | float32 | Maximum task duration in seconds (0 = no limit) |
Feedback (published ~1 Hz)
| Field | Type | Description |
|——-|——|————-|
| status | string | "planning" or "navigating" |
| progress | float32 | Elapsed / time_limit (0 if no time limit) |
| current_position | geometry_msgs/Point | Current robot position |
Result
| Field | Type | Description |
|——-|——|————-|
| success | bool | True if time limit reached normally; false if canceled or error |
| message | string | Human-readable completion reason |
CLI test
# Send a 30-second unbounded exploration goal with feedback
ros2 action send_goal /robot_1/tasks/exploration task_msgs/action/ExplorationTask \
'{min_altitude_agl: 3.0, max_altitude_agl: 8.0, min_flight_speed: 1.0, max_flight_speed: 3.0, time_limit_sec: 30.0}' \
--feedback
# Ctrl-C cancels the goal; the node returns success=false, message="Task canceled"
Subscriptions
| Topic | Type | Description |
|——-|——|————-|
| vdb_map_visualization | visualization_msgs/Marker | Occupancy map from VDB mapping |
| odometry | nav_msgs/Odometry | Robot state estimate |
Publications
| Topic | Type | Description |
|——-|——|————-|
| ~/global_plan | nav_msgs/Path | Generated path (also sent as NavigateTask goal) |
| ~/goal_point_viz | visualization_msgs/Marker | Goal point visualization |
| ~/traj_viz | visualization_msgs/Marker | Trajectory visualization |
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| rclcpp | |
| rclcpp_action | |
| std_msgs | |
| geometry_msgs | |
| nav_msgs | |
| visualization_msgs | |
| tf2 | |
| task_msgs |
System Dependencies
Dependant Packages
Launch files
- launch/random_walk_planner.launch.xml
-
random_walk_planner : canonical module launch file (RFC #379 §2/§4).
Starts the random-walk global planner exactly as the legacy global bringup
did. The C++ constructor names the node "random_walk_node" — do NOT set
launch name= or it will rename the node and break the node-name-prefixed
remap sources below. No namespace push either: the node lives at the robot
root (/$ROBOT_NAME/random_walk_node), as the stack entry is included under
the $ROBOT_NAME push in robot.launch.xml.
Every topic endpoint is a declared
defaulting to the canonical name (today's graph). The set_remap SOURCES stay relative (matching the frozen global bringup) so they resolve against the parent $ROBOT_NAME namespace at runtime; the arg targets are absolute. Wiring deviations are passed as include args by the stack entry file (stacks/ /launch/) — the single-locus rule: endpoints are declared args, applied locally via ; cross-module REWIRING lives only in stack entry files. -
- random_walk_config [default: $(find-pkg-share random_walk_planner)/config/random_walk_config.yaml]
- random_walk_vdb_map_topic [default: /$(env ROBOT_NAME)/vdb_mapping/vdb_map_visualization]
- random_walk_odometry_topic [default: /$(env ROBOT_NAME)/odometry_conversion/odometry]
- random_walk_global_plan_topic [default: /$(env ROBOT_NAME)/global_plan]
- random_walk_global_plan_toggle_topic [default: /$(env ROBOT_NAME)/behavior/global_plan_toggle]
- random_walk_exploration_task_topic [default: /$(env ROBOT_NAME)/tasks/exploration]
- random_walk_navigate_task_topic [default: /$(env ROBOT_NAME)/tasks/navigate]
-
random_walk_planner : canonical module launch file (RFC #379 §2/§4).
Starts the random-walk global planner exactly as the legacy global bringup
did. The C++ constructor names the node "random_walk_node" — do NOT set
launch name= or it will rename the node and break the node-name-prefixed
remap sources below. No namespace push either: the node lives at the robot
root (/$ROBOT_NAME/random_walk_node), as the stack entry is included under
the $ROBOT_NAME push in robot.launch.xml.
Every topic endpoint is a declared
Messages
Services
Plugins
Recent questions tagged random_walk_planner 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
Maintainers
- Andrew Jong
Authors
Random Walk Global Planner Baseline
The Random Walk Planner serves as a baseline global planner for stress testing system autonomy. Unlike more informed and intelligent planners, the Random Walk Planner generates a series of random trajectories to evaluate system robustness. Using the map published by VDB, the planner will generate and publish multiple linked straight-line trajectories, checking for collisions along these paths.
The blue line is the global plan generated by the random walk. The yellow line shows the past trajectory followed by the local planner when pursuing the previous random global plans.
Functionality
Upon activation by an ExplorationTask goal, the Random Walk Planner will:
- Generate a specified number of straight-line path segments.
- Continuously monitor the robot’s progress along the published path.
- Once the robot completes the current path, a new set of paths will be generated.
This loop continues, allowing the system to explore various trajectories and stress test the overall autonomy stack.
Parameters
| Parameter | Description |
|---|---|
num_paths_to_generate |
Number of straight-line paths to concatenate into a complete trajectory. |
max_start_to_goal_dist_m |
Maximum distance (m) from start to goal for each straight-line segment. |
checking_point_cnt |
Number of points along each segment to check for collisions. |
max_z_change_m |
Maximum allowed change in height (z-axis) between start and goal points. |
collision_padding_m |
Extra padding (m) around a voxel when checking for collisions. |
path_end_threshold_m |
Distance threshold (m) for considering the current path completed. |
max_yaw_change_degrees |
Maximum allowed yaw change between consecutive segments. |
robot_frame_id |
Frame name for the robot base, used for transform lookups. |
Task Executor
This node is a task executor: it runs as a ROS 2 action server and is activated on demand via an ExplorationTask goal. It does not plan continuously — planning only happens while a goal is active.
Action server: /{robot_name}/tasks/exploration
Type: task_msgs/action/ExplorationTask
Cascade
Random walk delegates navigation to the local planner via a second action:
GCS operator → ExplorationTask → random_walk_planner
↓
NavigateTask (/{robot_name}/tasks/navigate)
↓
local planner (mighty_bridge by default)
↓
trajectory_controller
Goal parameters
| Field | Type | Description |
|——-|——|————-|
| search_bounds | geometry_msgs/Polygon | Bounding polygon for search (empty = unbounded) |
| min_altitude_agl | float32 | Minimum flight altitude above ground (m) |
| max_altitude_agl | float32 | Maximum flight altitude above ground (m) |
| min_flight_speed | float32 | Minimum flight speed (m/s) |
| max_flight_speed | float32 | Maximum flight speed (m/s) |
| time_limit_sec | float32 | Maximum task duration in seconds (0 = no limit) |
Feedback (published ~1 Hz)
| Field | Type | Description |
|——-|——|————-|
| status | string | "planning" or "navigating" |
| progress | float32 | Elapsed / time_limit (0 if no time limit) |
| current_position | geometry_msgs/Point | Current robot position |
Result
| Field | Type | Description |
|——-|——|————-|
| success | bool | True if time limit reached normally; false if canceled or error |
| message | string | Human-readable completion reason |
CLI test
# Send a 30-second unbounded exploration goal with feedback
ros2 action send_goal /robot_1/tasks/exploration task_msgs/action/ExplorationTask \
'{min_altitude_agl: 3.0, max_altitude_agl: 8.0, min_flight_speed: 1.0, max_flight_speed: 3.0, time_limit_sec: 30.0}' \
--feedback
# Ctrl-C cancels the goal; the node returns success=false, message="Task canceled"
Subscriptions
| Topic | Type | Description |
|——-|——|————-|
| vdb_map_visualization | visualization_msgs/Marker | Occupancy map from VDB mapping |
| odometry | nav_msgs/Odometry | Robot state estimate |
Publications
| Topic | Type | Description |
|——-|——|————-|
| ~/global_plan | nav_msgs/Path | Generated path (also sent as NavigateTask goal) |
| ~/goal_point_viz | visualization_msgs/Marker | Goal point visualization |
| ~/traj_viz | visualization_msgs/Marker | Trajectory visualization |
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| rclcpp | |
| rclcpp_action | |
| std_msgs | |
| geometry_msgs | |
| nav_msgs | |
| visualization_msgs | |
| tf2 | |
| task_msgs |
System Dependencies
Dependant Packages
Launch files
- launch/random_walk_planner.launch.xml
-
random_walk_planner : canonical module launch file (RFC #379 §2/§4).
Starts the random-walk global planner exactly as the legacy global bringup
did. The C++ constructor names the node "random_walk_node" — do NOT set
launch name= or it will rename the node and break the node-name-prefixed
remap sources below. No namespace push either: the node lives at the robot
root (/$ROBOT_NAME/random_walk_node), as the stack entry is included under
the $ROBOT_NAME push in robot.launch.xml.
Every topic endpoint is a declared
defaulting to the canonical name (today's graph). The set_remap SOURCES stay relative (matching the frozen global bringup) so they resolve against the parent $ROBOT_NAME namespace at runtime; the arg targets are absolute. Wiring deviations are passed as include args by the stack entry file (stacks/ /launch/) — the single-locus rule: endpoints are declared args, applied locally via ; cross-module REWIRING lives only in stack entry files. -
- random_walk_config [default: $(find-pkg-share random_walk_planner)/config/random_walk_config.yaml]
- random_walk_vdb_map_topic [default: /$(env ROBOT_NAME)/vdb_mapping/vdb_map_visualization]
- random_walk_odometry_topic [default: /$(env ROBOT_NAME)/odometry_conversion/odometry]
- random_walk_global_plan_topic [default: /$(env ROBOT_NAME)/global_plan]
- random_walk_global_plan_toggle_topic [default: /$(env ROBOT_NAME)/behavior/global_plan_toggle]
- random_walk_exploration_task_topic [default: /$(env ROBOT_NAME)/tasks/exploration]
- random_walk_navigate_task_topic [default: /$(env ROBOT_NAME)/tasks/navigate]
-
random_walk_planner : canonical module launch file (RFC #379 §2/§4).
Starts the random-walk global planner exactly as the legacy global bringup
did. The C++ constructor names the node "random_walk_node" — do NOT set
launch name= or it will rename the node and break the node-name-prefixed
remap sources below. No namespace push either: the node lives at the robot
root (/$ROBOT_NAME/random_walk_node), as the stack entry is included under
the $ROBOT_NAME push in robot.launch.xml.
Every topic endpoint is a declared
Messages
Services
Plugins
Recent questions tagged random_walk_planner 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
Maintainers
- Andrew Jong
Authors
Random Walk Global Planner Baseline
The Random Walk Planner serves as a baseline global planner for stress testing system autonomy. Unlike more informed and intelligent planners, the Random Walk Planner generates a series of random trajectories to evaluate system robustness. Using the map published by VDB, the planner will generate and publish multiple linked straight-line trajectories, checking for collisions along these paths.
The blue line is the global plan generated by the random walk. The yellow line shows the past trajectory followed by the local planner when pursuing the previous random global plans.
Functionality
Upon activation by an ExplorationTask goal, the Random Walk Planner will:
- Generate a specified number of straight-line path segments.
- Continuously monitor the robot’s progress along the published path.
- Once the robot completes the current path, a new set of paths will be generated.
This loop continues, allowing the system to explore various trajectories and stress test the overall autonomy stack.
Parameters
| Parameter | Description |
|---|---|
num_paths_to_generate |
Number of straight-line paths to concatenate into a complete trajectory. |
max_start_to_goal_dist_m |
Maximum distance (m) from start to goal for each straight-line segment. |
checking_point_cnt |
Number of points along each segment to check for collisions. |
max_z_change_m |
Maximum allowed change in height (z-axis) between start and goal points. |
collision_padding_m |
Extra padding (m) around a voxel when checking for collisions. |
path_end_threshold_m |
Distance threshold (m) for considering the current path completed. |
max_yaw_change_degrees |
Maximum allowed yaw change between consecutive segments. |
robot_frame_id |
Frame name for the robot base, used for transform lookups. |
Task Executor
This node is a task executor: it runs as a ROS 2 action server and is activated on demand via an ExplorationTask goal. It does not plan continuously — planning only happens while a goal is active.
Action server: /{robot_name}/tasks/exploration
Type: task_msgs/action/ExplorationTask
Cascade
Random walk delegates navigation to the local planner via a second action:
GCS operator → ExplorationTask → random_walk_planner
↓
NavigateTask (/{robot_name}/tasks/navigate)
↓
local planner (mighty_bridge by default)
↓
trajectory_controller
Goal parameters
| Field | Type | Description |
|——-|——|————-|
| search_bounds | geometry_msgs/Polygon | Bounding polygon for search (empty = unbounded) |
| min_altitude_agl | float32 | Minimum flight altitude above ground (m) |
| max_altitude_agl | float32 | Maximum flight altitude above ground (m) |
| min_flight_speed | float32 | Minimum flight speed (m/s) |
| max_flight_speed | float32 | Maximum flight speed (m/s) |
| time_limit_sec | float32 | Maximum task duration in seconds (0 = no limit) |
Feedback (published ~1 Hz)
| Field | Type | Description |
|——-|——|————-|
| status | string | "planning" or "navigating" |
| progress | float32 | Elapsed / time_limit (0 if no time limit) |
| current_position | geometry_msgs/Point | Current robot position |
Result
| Field | Type | Description |
|——-|——|————-|
| success | bool | True if time limit reached normally; false if canceled or error |
| message | string | Human-readable completion reason |
CLI test
# Send a 30-second unbounded exploration goal with feedback
ros2 action send_goal /robot_1/tasks/exploration task_msgs/action/ExplorationTask \
'{min_altitude_agl: 3.0, max_altitude_agl: 8.0, min_flight_speed: 1.0, max_flight_speed: 3.0, time_limit_sec: 30.0}' \
--feedback
# Ctrl-C cancels the goal; the node returns success=false, message="Task canceled"
Subscriptions
| Topic | Type | Description |
|——-|——|————-|
| vdb_map_visualization | visualization_msgs/Marker | Occupancy map from VDB mapping |
| odometry | nav_msgs/Odometry | Robot state estimate |
Publications
| Topic | Type | Description |
|——-|——|————-|
| ~/global_plan | nav_msgs/Path | Generated path (also sent as NavigateTask goal) |
| ~/goal_point_viz | visualization_msgs/Marker | Goal point visualization |
| ~/traj_viz | visualization_msgs/Marker | Trajectory visualization |
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| rclcpp | |
| rclcpp_action | |
| std_msgs | |
| geometry_msgs | |
| nav_msgs | |
| visualization_msgs | |
| tf2 | |
| task_msgs |
System Dependencies
Dependant Packages
Launch files
- launch/random_walk_planner.launch.xml
-
random_walk_planner : canonical module launch file (RFC #379 §2/§4).
Starts the random-walk global planner exactly as the legacy global bringup
did. The C++ constructor names the node "random_walk_node" — do NOT set
launch name= or it will rename the node and break the node-name-prefixed
remap sources below. No namespace push either: the node lives at the robot
root (/$ROBOT_NAME/random_walk_node), as the stack entry is included under
the $ROBOT_NAME push in robot.launch.xml.
Every topic endpoint is a declared
defaulting to the canonical name (today's graph). The set_remap SOURCES stay relative (matching the frozen global bringup) so they resolve against the parent $ROBOT_NAME namespace at runtime; the arg targets are absolute. Wiring deviations are passed as include args by the stack entry file (stacks/ /launch/) — the single-locus rule: endpoints are declared args, applied locally via ; cross-module REWIRING lives only in stack entry files. -
- random_walk_config [default: $(find-pkg-share random_walk_planner)/config/random_walk_config.yaml]
- random_walk_vdb_map_topic [default: /$(env ROBOT_NAME)/vdb_mapping/vdb_map_visualization]
- random_walk_odometry_topic [default: /$(env ROBOT_NAME)/odometry_conversion/odometry]
- random_walk_global_plan_topic [default: /$(env ROBOT_NAME)/global_plan]
- random_walk_global_plan_toggle_topic [default: /$(env ROBOT_NAME)/behavior/global_plan_toggle]
- random_walk_exploration_task_topic [default: /$(env ROBOT_NAME)/tasks/exploration]
- random_walk_navigate_task_topic [default: /$(env ROBOT_NAME)/tasks/navigate]
-
random_walk_planner : canonical module launch file (RFC #379 §2/§4).
Starts the random-walk global planner exactly as the legacy global bringup
did. The C++ constructor names the node "random_walk_node" — do NOT set
launch name= or it will rename the node and break the node-name-prefixed
remap sources below. No namespace push either: the node lives at the robot
root (/$ROBOT_NAME/random_walk_node), as the stack entry is included under
the $ROBOT_NAME push in robot.launch.xml.
Every topic endpoint is a declared
Messages
Services
Plugins
Recent questions tagged random_walk_planner 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
Maintainers
- Andrew Jong
Authors
Random Walk Global Planner Baseline
The Random Walk Planner serves as a baseline global planner for stress testing system autonomy. Unlike more informed and intelligent planners, the Random Walk Planner generates a series of random trajectories to evaluate system robustness. Using the map published by VDB, the planner will generate and publish multiple linked straight-line trajectories, checking for collisions along these paths.
The blue line is the global plan generated by the random walk. The yellow line shows the past trajectory followed by the local planner when pursuing the previous random global plans.
Functionality
Upon activation by an ExplorationTask goal, the Random Walk Planner will:
- Generate a specified number of straight-line path segments.
- Continuously monitor the robot’s progress along the published path.
- Once the robot completes the current path, a new set of paths will be generated.
This loop continues, allowing the system to explore various trajectories and stress test the overall autonomy stack.
Parameters
| Parameter | Description |
|---|---|
num_paths_to_generate |
Number of straight-line paths to concatenate into a complete trajectory. |
max_start_to_goal_dist_m |
Maximum distance (m) from start to goal for each straight-line segment. |
checking_point_cnt |
Number of points along each segment to check for collisions. |
max_z_change_m |
Maximum allowed change in height (z-axis) between start and goal points. |
collision_padding_m |
Extra padding (m) around a voxel when checking for collisions. |
path_end_threshold_m |
Distance threshold (m) for considering the current path completed. |
max_yaw_change_degrees |
Maximum allowed yaw change between consecutive segments. |
robot_frame_id |
Frame name for the robot base, used for transform lookups. |
Task Executor
This node is a task executor: it runs as a ROS 2 action server and is activated on demand via an ExplorationTask goal. It does not plan continuously — planning only happens while a goal is active.
Action server: /{robot_name}/tasks/exploration
Type: task_msgs/action/ExplorationTask
Cascade
Random walk delegates navigation to the local planner via a second action:
GCS operator → ExplorationTask → random_walk_planner
↓
NavigateTask (/{robot_name}/tasks/navigate)
↓
local planner (mighty_bridge by default)
↓
trajectory_controller
Goal parameters
| Field | Type | Description |
|——-|——|————-|
| search_bounds | geometry_msgs/Polygon | Bounding polygon for search (empty = unbounded) |
| min_altitude_agl | float32 | Minimum flight altitude above ground (m) |
| max_altitude_agl | float32 | Maximum flight altitude above ground (m) |
| min_flight_speed | float32 | Minimum flight speed (m/s) |
| max_flight_speed | float32 | Maximum flight speed (m/s) |
| time_limit_sec | float32 | Maximum task duration in seconds (0 = no limit) |
Feedback (published ~1 Hz)
| Field | Type | Description |
|——-|——|————-|
| status | string | "planning" or "navigating" |
| progress | float32 | Elapsed / time_limit (0 if no time limit) |
| current_position | geometry_msgs/Point | Current robot position |
Result
| Field | Type | Description |
|——-|——|————-|
| success | bool | True if time limit reached normally; false if canceled or error |
| message | string | Human-readable completion reason |
CLI test
# Send a 30-second unbounded exploration goal with feedback
ros2 action send_goal /robot_1/tasks/exploration task_msgs/action/ExplorationTask \
'{min_altitude_agl: 3.0, max_altitude_agl: 8.0, min_flight_speed: 1.0, max_flight_speed: 3.0, time_limit_sec: 30.0}' \
--feedback
# Ctrl-C cancels the goal; the node returns success=false, message="Task canceled"
Subscriptions
| Topic | Type | Description |
|——-|——|————-|
| vdb_map_visualization | visualization_msgs/Marker | Occupancy map from VDB mapping |
| odometry | nav_msgs/Odometry | Robot state estimate |
Publications
| Topic | Type | Description |
|——-|——|————-|
| ~/global_plan | nav_msgs/Path | Generated path (also sent as NavigateTask goal) |
| ~/goal_point_viz | visualization_msgs/Marker | Goal point visualization |
| ~/traj_viz | visualization_msgs/Marker | Trajectory visualization |
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| rclcpp | |
| rclcpp_action | |
| std_msgs | |
| geometry_msgs | |
| nav_msgs | |
| visualization_msgs | |
| tf2 | |
| task_msgs |
System Dependencies
Dependant Packages
Launch files
- launch/random_walk_planner.launch.xml
-
random_walk_planner : canonical module launch file (RFC #379 §2/§4).
Starts the random-walk global planner exactly as the legacy global bringup
did. The C++ constructor names the node "random_walk_node" — do NOT set
launch name= or it will rename the node and break the node-name-prefixed
remap sources below. No namespace push either: the node lives at the robot
root (/$ROBOT_NAME/random_walk_node), as the stack entry is included under
the $ROBOT_NAME push in robot.launch.xml.
Every topic endpoint is a declared
defaulting to the canonical name (today's graph). The set_remap SOURCES stay relative (matching the frozen global bringup) so they resolve against the parent $ROBOT_NAME namespace at runtime; the arg targets are absolute. Wiring deviations are passed as include args by the stack entry file (stacks/ /launch/) — the single-locus rule: endpoints are declared args, applied locally via ; cross-module REWIRING lives only in stack entry files. -
- random_walk_config [default: $(find-pkg-share random_walk_planner)/config/random_walk_config.yaml]
- random_walk_vdb_map_topic [default: /$(env ROBOT_NAME)/vdb_mapping/vdb_map_visualization]
- random_walk_odometry_topic [default: /$(env ROBOT_NAME)/odometry_conversion/odometry]
- random_walk_global_plan_topic [default: /$(env ROBOT_NAME)/global_plan]
- random_walk_global_plan_toggle_topic [default: /$(env ROBOT_NAME)/behavior/global_plan_toggle]
- random_walk_exploration_task_topic [default: /$(env ROBOT_NAME)/tasks/exploration]
- random_walk_navigate_task_topic [default: /$(env ROBOT_NAME)/tasks/navigate]
-
random_walk_planner : canonical module launch file (RFC #379 §2/§4).
Starts the random-walk global planner exactly as the legacy global bringup
did. The C++ constructor names the node "random_walk_node" — do NOT set
launch name= or it will rename the node and break the node-name-prefixed
remap sources below. No namespace push either: the node lives at the robot
root (/$ROBOT_NAME/random_walk_node), as the stack entry is included under
the $ROBOT_NAME push in robot.launch.xml.
Every topic endpoint is a declared
Messages
Services
Plugins
Recent questions tagged random_walk_planner 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
Maintainers
- Andrew Jong
Authors
Random Walk Global Planner Baseline
The Random Walk Planner serves as a baseline global planner for stress testing system autonomy. Unlike more informed and intelligent planners, the Random Walk Planner generates a series of random trajectories to evaluate system robustness. Using the map published by VDB, the planner will generate and publish multiple linked straight-line trajectories, checking for collisions along these paths.
The blue line is the global plan generated by the random walk. The yellow line shows the past trajectory followed by the local planner when pursuing the previous random global plans.
Functionality
Upon activation by an ExplorationTask goal, the Random Walk Planner will:
- Generate a specified number of straight-line path segments.
- Continuously monitor the robot’s progress along the published path.
- Once the robot completes the current path, a new set of paths will be generated.
This loop continues, allowing the system to explore various trajectories and stress test the overall autonomy stack.
Parameters
| Parameter | Description |
|---|---|
num_paths_to_generate |
Number of straight-line paths to concatenate into a complete trajectory. |
max_start_to_goal_dist_m |
Maximum distance (m) from start to goal for each straight-line segment. |
checking_point_cnt |
Number of points along each segment to check for collisions. |
max_z_change_m |
Maximum allowed change in height (z-axis) between start and goal points. |
collision_padding_m |
Extra padding (m) around a voxel when checking for collisions. |
path_end_threshold_m |
Distance threshold (m) for considering the current path completed. |
max_yaw_change_degrees |
Maximum allowed yaw change between consecutive segments. |
robot_frame_id |
Frame name for the robot base, used for transform lookups. |
Task Executor
This node is a task executor: it runs as a ROS 2 action server and is activated on demand via an ExplorationTask goal. It does not plan continuously — planning only happens while a goal is active.
Action server: /{robot_name}/tasks/exploration
Type: task_msgs/action/ExplorationTask
Cascade
Random walk delegates navigation to the local planner via a second action:
GCS operator → ExplorationTask → random_walk_planner
↓
NavigateTask (/{robot_name}/tasks/navigate)
↓
local planner (mighty_bridge by default)
↓
trajectory_controller
Goal parameters
| Field | Type | Description |
|——-|——|————-|
| search_bounds | geometry_msgs/Polygon | Bounding polygon for search (empty = unbounded) |
| min_altitude_agl | float32 | Minimum flight altitude above ground (m) |
| max_altitude_agl | float32 | Maximum flight altitude above ground (m) |
| min_flight_speed | float32 | Minimum flight speed (m/s) |
| max_flight_speed | float32 | Maximum flight speed (m/s) |
| time_limit_sec | float32 | Maximum task duration in seconds (0 = no limit) |
Feedback (published ~1 Hz)
| Field | Type | Description |
|——-|——|————-|
| status | string | "planning" or "navigating" |
| progress | float32 | Elapsed / time_limit (0 if no time limit) |
| current_position | geometry_msgs/Point | Current robot position |
Result
| Field | Type | Description |
|——-|——|————-|
| success | bool | True if time limit reached normally; false if canceled or error |
| message | string | Human-readable completion reason |
CLI test
# Send a 30-second unbounded exploration goal with feedback
ros2 action send_goal /robot_1/tasks/exploration task_msgs/action/ExplorationTask \
'{min_altitude_agl: 3.0, max_altitude_agl: 8.0, min_flight_speed: 1.0, max_flight_speed: 3.0, time_limit_sec: 30.0}' \
--feedback
# Ctrl-C cancels the goal; the node returns success=false, message="Task canceled"
Subscriptions
| Topic | Type | Description |
|——-|——|————-|
| vdb_map_visualization | visualization_msgs/Marker | Occupancy map from VDB mapping |
| odometry | nav_msgs/Odometry | Robot state estimate |
Publications
| Topic | Type | Description |
|——-|——|————-|
| ~/global_plan | nav_msgs/Path | Generated path (also sent as NavigateTask goal) |
| ~/goal_point_viz | visualization_msgs/Marker | Goal point visualization |
| ~/traj_viz | visualization_msgs/Marker | Trajectory visualization |
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| rclcpp | |
| rclcpp_action | |
| std_msgs | |
| geometry_msgs | |
| nav_msgs | |
| visualization_msgs | |
| tf2 | |
| task_msgs |
System Dependencies
Dependant Packages
Launch files
- launch/random_walk_planner.launch.xml
-
random_walk_planner : canonical module launch file (RFC #379 §2/§4).
Starts the random-walk global planner exactly as the legacy global bringup
did. The C++ constructor names the node "random_walk_node" — do NOT set
launch name= or it will rename the node and break the node-name-prefixed
remap sources below. No namespace push either: the node lives at the robot
root (/$ROBOT_NAME/random_walk_node), as the stack entry is included under
the $ROBOT_NAME push in robot.launch.xml.
Every topic endpoint is a declared
defaulting to the canonical name (today's graph). The set_remap SOURCES stay relative (matching the frozen global bringup) so they resolve against the parent $ROBOT_NAME namespace at runtime; the arg targets are absolute. Wiring deviations are passed as include args by the stack entry file (stacks/ /launch/) — the single-locus rule: endpoints are declared args, applied locally via ; cross-module REWIRING lives only in stack entry files. -
- random_walk_config [default: $(find-pkg-share random_walk_planner)/config/random_walk_config.yaml]
- random_walk_vdb_map_topic [default: /$(env ROBOT_NAME)/vdb_mapping/vdb_map_visualization]
- random_walk_odometry_topic [default: /$(env ROBOT_NAME)/odometry_conversion/odometry]
- random_walk_global_plan_topic [default: /$(env ROBOT_NAME)/global_plan]
- random_walk_global_plan_toggle_topic [default: /$(env ROBOT_NAME)/behavior/global_plan_toggle]
- random_walk_exploration_task_topic [default: /$(env ROBOT_NAME)/tasks/exploration]
- random_walk_navigate_task_topic [default: /$(env ROBOT_NAME)/tasks/navigate]
-
random_walk_planner : canonical module launch file (RFC #379 §2/§4).
Starts the random-walk global planner exactly as the legacy global bringup
did. The C++ constructor names the node "random_walk_node" — do NOT set
launch name= or it will rename the node and break the node-name-prefixed
remap sources below. No namespace push either: the node lives at the robot
root (/$ROBOT_NAME/random_walk_node), as the stack entry is included under
the $ROBOT_NAME push in robot.launch.xml.
Every topic endpoint is a declared