# SaltyBot Autonomous Behavior Tree Coordinator (Issue #482) ## Overview Autonomous mode state machine with 5 states: ``` idle → patrol → investigate → interact → return → idle ``` ## States ### IDLE: Waiting/Charging - Robot stationary, waiting for activation - Timeout: 60 seconds - Transition: Moves to PATROL when activated ### PATROL: Autonomous Patrolling - Executes waypoint routes within geofence (#441) - Integrates curiosity (#470) for autonomous exploration - Monitors for person detection - Battery check: Returns to IDLE if <20% ### INVESTIGATE: Person Investigation - Approaches and tracks detected person (#212) - Fallback: Navigate to last known position - Transition: → INTERACT when person approached ### INTERACT: Social Interaction - Face recognition and greeting - Gesture detection and response (#454) - Timeout: 30 seconds - Transition: → RETURN ### RETURN: Return to Home/Dock - Navigates back to home pose - Nav2 recovery behaviors with retries - Transition: → IDLE when complete ## Blackboard Variables ```python battery_level: float # Battery percentage (0-100) person_detected: bool # Person detection state obstacle_state: str # 'clear' | 'near' | 'blocked' current_mode: str # State: idle/patrol/investigate/interact/return home_pose: PoseStamped # Home/dock location ``` ## Safety Features - **E-Stop** (#459): Highest priority, halts operation immediately - **Battery protection**: Returns home if <20% - **Geofence** (#441): Keeps patrol within 5m boundary - **Obstacle avoidance**: LIDAR monitoring ## Integration with Features - **Patrol** (#446): Waypoint routes - **Curiosity** (#470): Exploration during patrol - **Person Following**: Approach detected persons - **E-Stop** (#459): Emergency override - **Geofence** (#441): Boundary constraint ## Launch ```bash ros2 launch saltybot_bringup autonomous_mode.launch.py ``` ## Files - `autonomous_coordinator.xml`: BehaviorTree definition - `launch/autonomous_mode.launch.py`: Full launch setup - `saltybot_bringup/bt_nodes.py`: Custom BT node plugins - `BEHAVIOR_TREE_README.md`: Documentation