Sancho is a socially-aware mobile robot built on the AgileX Ranger Mini v3 platform. It autonomously navigates indoor environments, detects and recognizes people using computer vision and body-pose estimation, holds conversations powered by LLMs, and physically orients its animated head and face toward whoever is speaking β all orchestrated through a modular ROS 2 architecture.
Developed by the MAPIRlab research group at the University of MΓ‘laga.
Demonstration of a hierarchical Behavior Tree architecture for the Sancho service robot. The video showcases autonomous roaming, speech-based task assignment, mission execution, task interruption, and battery-aware priority management. The system is capable of dynamically switching between behaviors while preserving execution state and ensuring safe operation.
Demonstration of a multimodal Human-Robot Interaction (HRI) architecture that combines audio and visual perception to identify, localize, and track human interlocutors. The system uses sound source localization, body tracking, face recognition, and an identity cache to maintain robust attention during natural interactions, even under temporary occlusions or face turns. The robot coordinates its mobile base and pan-tilt head to naturally orient itself toward the active speaker.
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β sancho_bringup β
β (Primary Entry Point β Launch Hub) β
β ββββββββββββββββββββ βββββββββββββββββββββ βββββββββββββββββββββββββββ β
β β sancho_descriptionβ β sancho_hardware β β Processing Layer β β
β β (URDF / TF) β β (HAL / Drivers) β β (Scan Merger + Filter) β β
β ββββββββββββββββββββ βββββββββββββββββββββ βββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β β
βΌ βΌ βΌ
βββββββββββββββββββ βββββββββββββββββββββ ββββββββββββββββββββββββββββββββ
β sancho_perceptionβ β sancho_vision β β sancho_navigation β
β (MoveNet Body ββββΆβ (Face Detection/ β β (Nav2 + CBF Safety + β
β Pose Pipeline) β β Recognition/GUI) β β Roaming + Semantic Filter) β
βββββββββββββββββββ βββββββββββββββββββββ ββββββββββββββββββββββββββββββββ
β β β
βΌ βΌ βΌ
βββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββββββββββββββββββββββ
β sancho_control β β sancho_audio β β sancho_behavior β
β (Head Tracking β β (Mic Capture / β β (Orchestrator State Machine + β
β P-Controller) β β VAD / DOA / β β Interaction Manager + β
β β β Wake Word / β β sancho_bt_plugins for Nav2) β
β β β Assistant) β β β
βββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β sancho_hri β
β (LLM / STT / TTS Provider Gateway + Conversational AI) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββ ββββββββββββββββββββββ βββββββββββββββββββββββββββ
β sancho_web_bridge β β sancho_interfaces β β sancho_lifecycle_utils β
β (WebSocket / β β (Custom msgs/srvs/ β β (Lifecycle Node β
β REST API) β β actions) β β Auto-Configurator) β
ββββββββββββββββββββ ββββββββββββββββββββββ βββββββββββββββββββββββββββ
| Package | Description |
|---|---|
| sancho_bringup | π Primary entry point. Top-level launch files that bring up the robot description, hardware drivers, and processing layers. |
| sancho_description | URDF model, 3D meshes, and TF tree broadcasting for the Ranger Mini v3 platform. |
| sancho_hardware | Hardware Abstraction Layer β driver wrappers for LiDARs, cameras, base, head servos, and animated face. |
| sancho_interfaces | All custom ROS 2 message (33), service (31), and action (1) definitions. |
| sancho_perception | Human body pose estimation (MoveNet), 3D projection, social group detection via DBSCAN, and waypoint generation. |
| sancho_vision | Face detection, recognition, body-face fusion tracking, spatial clustering, and HRI GUI. |
| sancho_audio | Full audio pipeline β microphone capture, VAD, DOA estimation, wake word, and conversational assistant logic. |
| sancho_control | Head tracking P-controller that converts face pixel positions into pan/tilt servo commands. |
| sancho_navigation | Nav2 configuration, autonomous roaming, CBF safety filter, semantic scan splitting, maps and behavior trees. |
| sancho_behavior | High-level behavioral orchestrator (Search β Navigate β Socialize state machine) and interaction manager. |
| sancho_bt_plugins | Custom C++ BehaviorTree.CPP v3 plugins for Nav2 (e.g., IsLocalized condition). |
| sancho_hri | Provider-agnostic LLM, STT, and TTS gateways plus the sancho_ai conversational brain with per-user memory. |
| sancho_web_bridge | WebSocket-based ROS bridge, REST API, web assistant, session and database management. |
| sancho_lifecycle_utils | Utility node for automated lifecycle configuration and activation of managed nodes. |
| cliff_detector | Depth-image-based cliff and stair detection for navigation safety. |
Third-party dependencies are vendored in
ros2_ws/src/third_party_pkgs/and includeastra_camera,interbotix_ptu,laser_scan_merger,urg_node2,usb_cam,ranger_ros2,ugv_sdk,ByteTrack,image_pipeline,nav2_social_costmap_plugin, andpeople_msgs.
| Component | Model / Driver | Purpose |
|---|---|---|
| Mobile Base | AgileX Ranger Mini v3 (ranger_ros2 / ugv_sdk) |
4WD skid-steer chassis, odometry, velocity control |
| Front LiDAR | Hokuyo URG (urg_node2) |
Forward 2D obstacle scanning (/scan_1st) |
| Rear LiDAR | Hokuyo URG (urg_node2) |
Rear 2D obstacle scanning (/scan_2nd) |
| RGB-D Camera | Orbbec Astra (astra_camera) |
RGB + depth for perception, face detection, and cliff detection |
| Nose Camera | USB Camera (usb_cam) |
High-resolution front-facing camera mounted on head |
| Pan/Tilt Head | WidowX WXXMS Turret (interbotix_ptu) |
2-DOF Dynamixel head for gaze control |
| Animated Face | ESP32 + LCD/LED display (custom firmware) | Expressive eye animations and lip-synced speaking |
| Microphone Array | Orbbec stereo mic / XMOS XVF3800 DSP | Audio capture, VAD, and Direction of Arrival |
| SBC | Linux PC (Ubuntu 22.04) | Main compute running ROS 2 Humble |
See the full Workspace Setup Guide for prerequisites and build instructions.
# Launch the full physical robot
ros2 launch sancho_bringup sancho_full_bringup.launch.pysancho_robot/
βββ README.md β You are here
βββ firmware/ β ESP32 face firmware (Arduino)
βββ web_ui/ β Web frontend
βββ ros2_ws/
β βββ README.md β Workspace build guide
β βββ src/
β βββ sancho_bringup/ β π Primary entry point
β βββ sancho_description/ β URDF & TF
β βββ sancho_hardware/ β Hardware drivers
β βββ sancho_interfaces/ β Custom msg/srv/action
β βββ sancho_perception/ β Body pose pipeline
β βββ sancho_vision/ β Face detection & recognition
β βββ sancho_audio/ β Audio & voice assistant
β βββ sancho_control/ β Head tracking control
β βββ sancho_navigation/ β Nav2 + autonomous navigation
β βββ sancho_behavior/ β High-level behavior orchestration
β βββ sancho_bt_plugins/ β Nav2 BT plugins (C++)
β βββ sancho_hri/ β LLM / STT / TTS gateway
β βββ sancho_web_bridge/ β Web bridge & REST API
β βββ sancho_lifecycle_utils/ β Lifecycle management utility
β βββ cliff_detector/ β Depth-based cliff detection
β βββ third_party_pkgs/ β Vendored external packages
βββ .env β API keys (not committed)
See LICENSE.