sl-webui 50d1ebbdcc feat: Behavior tree coordinator for autonomous mode (Issue #482)
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>
2026-03-05 14:42:57 -05:00

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 definition
  • launch/autonomous_mode.launch.py: Full launch setup
  • saltybot_bringup/bt_nodes.py: Custom BT node plugins
  • BEHAVIOR_TREE_README.md: Documentation