Introduce ROS2 Actions task executor architecture#329
Merged
Conversation
…e the task executor
Add a cascaded task executor paradigm: ExplorationTask (random_walk) → NavigateTask (droan_gl / droan_local_planner) → trajectory_controller. Each layer is activated on demand via ROS2 action goals rather than continuous timers or toggle services. Key changes: - task_msgs: add NavigateTask.action (global_plan + goal_tolerance_m → success/distance feedback) - random_walk: convert to ExplorationTask action server; replace publish_plan() with async NavigateTask client; remove stall detection (DROAN's rewind_monitor handles recovery); remap exploration_task and navigate_task in global bringup - droan_gl / droan_local_planner: add NavigateTask action server; ownership of trajectory mode (ADD_SEGMENT on goal start, TRACK on goal end); switch to MultiThreadedExecutor; remap navigate_task and set_trajectory_mode in local bringup - behavior_executive: remove global_planner_toggle_client and ADD_SEGMENT logic from global_plan_action handler — now just signals success to the BT, since DROAN owns trajectory mode
…in droan to use latest data instead of timestamped to reduce warnings
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What does this pull request do?
We want users to be able to specify task parameters at run time. E.g. we want to get to supporting tasks like CoverageTask, LanguageTask, NavigateTask, TakeoffTask, etc. This redesigns the architecture to start supporting *Task.action messages.
Introduces a task executor architecture for the AirStack autonomy stack. Task executors are ROS 2 action servers that carry out discrete, goal-directed missions (exploration, navigation) on demand, as opposed to perpetual nodes that run continuously.
The key addition is a two-level cascade:
How did you implement it?
task_msgspackage — new shared message package defining 7 task action types:NavigateTask,ExplorationTask,CoverageTask,ObjectSearchTask,ObjectCountingTask,FixedTrajectoryTask,SemanticSearchTaskrandom_walk_planner— converted from a perpetual topic-driven node to anExplorationTaskaction server; internally sendsNavigateTaskgoals to the local planner for each waypoint segmentdroan_gl— addedNavigateTaskaction server; accepts anav_msgs/Pathgoal, enablesADD_SEGMENTmode on the trajectory controller, and monitors goal distance; renamedexpand.cpp→droan_gl_node.cppdroan_local_planner— addedNavigateTaskaction server with the same interface asdroan_glbehavior_executive— replaced the oldglobal_planner_toggleservice call with anExplorationTaskaction client; dispatches an exploration goal when the "Follow Global Plan" behavior tree action fires/{robot_name}/tasks/{name}inbehavior.launch.xml,global.launch.xml, andlocal.launch.xmldroan_gltotf2::TimePointZeroto eliminate extrapolation errors in simulationTesting
How do you run the tests?
AUTOLAUNCH=false airstack up robot-desktopWhat do the tests do?
End-to-end validation of the full cascade: behavior_executive dispatches an
ExplorationTasktorandom_walk_planner, which generates waypoints and sendsNavigateTaskgoals todroan_gl, which feeds trajectory segments to the trajectory controller.What are the expected results of the tests?
random_walk_plannerlogs:"Sent NavigateTask goal (N waypoints)"droan_gllogs:"Waypoint reached, planning next segment"Did you update the docs (and where)?
docs/robot/autonomy/system_architecture.md— new "Node Types: Perpetual vs Task Executor" section with comparison table, lifecycle diagram, and task cascade diagramdocs/robot/autonomy/tasks.md— new page documenting all 7 task action types with goal/feedback/result field tablesdocs/robot/autonomy/integration_checklist.md— new "Step 0: Module Type" decision guide, task executor checklist section (2b), testing items, common issue, and updated referencesmkdocs.yml— added Tasks page to navigationrandom_walk/README.md,droan_gl/README.md,droan_local_planner/README.md— each updated with a "Task Executor" section describing the action interface, cascade, and CLI test commands.agents/skills/add-task-executor/SKILL.md— new agent skill documenting how to implement a task executor🤖 Generated with Claude Code