State machine: idle → patrol → investigate → interact → return - IDLE: Waiting for activation or battery recovery - PATROL: Autonomous patrolling with curiosity-driven exploration (#470) - INVESTIGATE: Approach and track detected persons - INTERACT: Social interaction with face recognition and gestures - RETURN: Navigate back to home/dock with recovery behaviors Integrations: - Patrol mode (#446): Waypoint routes with geofence (#441) - Curiosity behavior (#470): Autonomous exploration - Person following: Approach detected persons - Emergency stop cascade (#459): Highest priority safety - Geofence constraint (#441): Keep patrol within boundaries Blackboard variables: - battery_level: Current battery percentage - person_detected: Person detection state - current_mode: Current behavior tree state - home_pose: Home/dock location Files: - behavior_trees/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 Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2.1 KiB
2.1 KiB
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
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
ros2 launch saltybot_bringup autonomous_mode.launch.py
Files
autonomous_coordinator.xml: BehaviorTree definitionlaunch/autonomous_mode.launch.py: Full launch setupsaltybot_bringup/bt_nodes.py: Custom BT node pluginsBEHAVIOR_TREE_README.md: Documentation