Skip to main content

🧠 Mission Manager Node

See the source code for implementation details.

The Mission Manager Node is the central coordinator — it decides what the robot should do next, manages state transitions, and ensures smooth integration between perception, navigation, and manipulation.


🔄 State Machine Overview​

The Mission Manager operates as a finite state machine (FSM).
Each state represents a high-level behavior, with transitions triggered by events like detections, goal completions, or errors.


🚨 Interrupt Logic​

The Mission Manager can interrupt ongoing navigation when:

  • A valid /target_pose is published by the Object Detector
  • The detected object matches configured class filters
  • Confidence exceeds a threshold

Interrupt flow:

  1. Cancel current waypoint navigation
  2. Store the interrupted goal (optional resume)
  3. Send navigation goal to the detected object's position
  4. After pick/drop, return to base or resume waypoints
Pro Tip

Interrupts are rate-limited — if multiple detections occur quickly, only the most recent high-confidence one is used.


🛠 System Orchestration​

The Mission Manager coordinates:

TaskHow It's Done
ExplorationSends sequential waypoint goals to Nav2
Object HandlingListens for /target_pose from Object Detector
Navigation ControlUses nav2_msgs/action/NavigateToPose
Pick/Place ControlSends triggers to Pick & Drop Nodes
State FeedbackLogs progress and plays audio feedback (optional)
Error RecoveryRetries goals, skips failed steps, logs errors

⚙️ Configuration Options​

In mission_manager.py or launch params:

ParameterDescriptionDefault
waypointsList of (x, y, yaw) navigation goalsSee nav_handler
base_poseCoordinates of drop zone / homeSet in pose_setter
object_class_filterOnly trigger on specific detected classesNone
confidence_thresholdMinimum YOLO confidence to trigger0.7
nav_goal_timeoutSeconds to wait for navigation before skipping10
pick_timeoutSeconds to wait for pick operation before skipping15
drop_timeoutSeconds to wait for drop operation before skipping15

📜 Sample Output & Logs​

[mission_manager]: 🟢 Exploration started.
[mission_manager]: 🚀 Navigating to waypoint: (0.37, -0.10, -13.3°)
[mission_manager]: 📸 Object detected: bottle (conf=0.85) at (1.25, -0.45)
[mission_manager]: ⏹ Interrupting navigation for object pickup.
[mission_manager]: 🚀 Navigating to: (1.25, -0.45)
[mission_manager]: 🤖 Pick successful.
[mission_manager]: 🚗 Returning to base: (1.95, -9.86)
[mission_manager]: 📦 Drop successful.
[mission_manager]: 🔄 Resuming waypoint navigation.

🧩 Integration Points​

FromToData / Action
Object DetectorMission Manager/target_pose (PoseStamped)
Mission ManagerNav2NavigateToPose action goal
Mission ManagerPick/Drop NodesService/Topic trigger
Nav2Mission ManagerAction feedback/result

🛠 Troubleshooting​

IssuePossible CauseSolution
Ignores detectionsClass filter or confidence threshold too highLower threshold in config
Doesn't resume waypoints after pickMissing resume logicCheck mission_manager code path
Navigation never cancels on detectCancel action call not workingEnsure correct Nav2 cancel API usage
Mission stuck in pick/dropPick/Drop nodes not returning completion flagDebug pick/drop node logic

📚 Learn More​


🎯 Next Steps​