Skip to content

AI Robot Server — Сорен

Локальный AI-сервер для роботизированной совы на ESP32-S3 Голосовое управление · Компьутерное зрение · 18 сервоприводов

Sunny_

Published September 29, 2026 · Updated October 27, 2026

Original author: nikita-razgulyaevOriginal source (new tab)

AI Robot Server — Сорен

Project description

Soren: W5500-Based AI Owl Robot with Voice Interaction, Computer Vision, and 18-Servo Control

Overview

Soren은 ESP32-S3와 WIZnet W5500 Ethernet Controller를 기반으로, 음성 인식과 AI 대화, 컴퓨터 비전 및 다중 서보모터 제어를 결합한 올빼미 형태의 AI 로봇 프로젝트입니다.

이 프로젝트는 단순히 사용자의 질문에 음성으로 응답하는 AI 챗봇을 넘어, 대화 내용과 감정 상태에 따라 머리, 날개, 꼬리, 다리, 부리 등을 움직이는 물리적 로봇을 구현하는 것을 목표로 합니다.

로봇의 이름인 Soren은 캐서린 래스키(Kathryn Lasky)의 소설 Guardians of Ga'Hoole에 등장하는 올빼미 캐릭터에서 유래했습니다. 개발자는 캐릭터의 성격과 배경 설정을 AI 모델에 반영하여, 로봇이 단순한 명령 수행 장치가 아닌 고유한 성격과 기억을 가진 대화형 캐릭터로 동작하도록 구성했습니다.

시스템은 크게 ESP32-S3 기반 로봇 하드웨어와 Python 기반 AI 서버로 구분됩니다.

ESP32-S3는 마이크, 카메라, 스피커 및 18개의 서보모터를 제어하는 장치 측 컨트롤러 역할을 수행하도록 설계되었습니다. AI 서버는 음성 인식(STT), 언어 모델(LLM), 음성 합성(TTS), 컴퓨터 비전 및 로봇의 감정·동작 제어를 담당합니다.

특히 WIZnet W5500을 ESP32-S3의 유선 Ethernet 인터페이스로 사용하도록 설계하여, 로봇과 AI 서버 사이에서 오디오 데이터, 영상 데이터 및 동작 제어 명령을 WebSocket으로 교환하는 구조를 채택했습니다. Ethernet 연결이 불가능할 경우에는 Wi-Fi로 전환하는 기능도 문서에 명시되어 있습니다.

GitHub: https://github.com/nikita-razgulyaev/AI-Robot-Server

웹 제어 패널 이미지: https://github.com/nikita-razgulyaev/AI-Robot-Server/blob/main/docs/interface.png

Why Soren?

일반적인 AI 음성 비서는 사용자의 음성을 인식하고 질문에 답변하는 소프트웨어 중심의 시스템입니다. 반면 실제 로봇에 AI를 적용하려면 대화 처리뿐 아니라 물리적 움직임, 주변 환경 인식 및 장치와 서버 간 통신 기능까지 함께 고려해야 합니다.

특히 음성 인식과 LLM 추론, 음성 합성 및 영상 분석은 비교적 많은 연산 자원을 필요로 하므로, 이러한 기능을 모두 마이크로컨트롤러에서 처리하기에는 한계가 있습니다.

Soren은 AI 연산과 하드웨어 제어를 분리하는 방식을 채택했습니다.

AI 서버에서는 음성을 텍스트로 변환하고, 언어 모델을 통해 응답을 생성한 뒤 다시 음성으로 합성합니다. 또한 카메라 영상에서 객체와 얼굴, 사람의 자세를 분석하고, AI가 판단한 감정 상태를 로봇의 움직임에 반영합니다.

ESP32-S3는 센서 데이터 수집과 서보모터 및 오디오 주변장치 제어를 담당하도록 구성되어 있습니다.

Soren의 주요 특징은 다음과 같습니다.

  • AI 음성 대화: STT → LLM → TTS 파이프라인을 통해 음성 기반 대화 기능 제공
  •  메모리를 갖춘 LLM 문자 모델 — Qwen 7B (문자 데이터셋으로 재학습) + 벡터 메모리 (Qdrant) + Soren의 전기 및 세계관을 기반으로 한 RAG
  • 컴퓨터 비전: YOLOv8, MediaPipe 및 OpenCV를 활용한 객체·얼굴·자세 분석
  • 감정 표현 엔진 - 고유한 서보 포즈와 눈빛 조명을 갖춘 7가지 감정 상태
  • 18채널 서보 제어: 머리, 날개, 다리, 꼬리 및 부리의 움직임 제어
  • 유선·무선 통신: W5500 Ethernet을 우선 사용하고 Wi-Fi를 예비 연결로 활용하는 구조
  • 웹 제어판 - 음성 및 텍스트 채팅, 서보 모터 수동 제어, 모드 전환, 애니메이션

이러한 구조를 통해 Soren은 AI 대화 시스템과 물리적인 로봇 동작을 결합한 임베디드 응용 플랫폼을 보여줍니다.

Technical Architecture

ESP32-S3-Based AI Robot System

Soren은 로봇 하드웨어와 AI 서버가 역할을 분담하는 구조로 설계되었습니다.

주요 하드웨어 및 소프트웨어 구성은 다음과 같습니다.

ComponentDescription
Main MCUESP32-S3 with PSRAM
Ethernet ControllerWIZnet W5500 (SPI)
Backup ConnectivityESP32-S3 Wi-Fi
AI ServerPython / FastAPI
AI Language ModelQwen 2.5 7B 기반 로컬 모델 및 설정 가능한 클라우드 LLM
Speech Recognitionfaster-whisper
Text-to-SpeechSilero TTS / edge-tts
Computer VisionYOLOv8 / MediaPipe / OpenCV
Servo ControllerPCA9685, 16-channel I²C PWM
Actuators18 Servo Motors
MicrophoneINMP441 (I²S)
Audio AmplifierMAX98357A (I²S)
CameraOV2640
LED LightingAddressable LED Strip
CommunicationWebSocket / HTTP
Vector DatabaseQdrant

로봇의 MCU는 외부 장치에서 전달받은 동작 명령에 따라 서보모터를 제어하고, 마이크와 카메라에서 수집한 데이터를 AI 서버로 전달하도록 구성되어 있습니다.

반면 AI 서버는 상대적으로 연산량이 큰 음성 처리 및 영상 분석을 담당합니다.

System Architecture

전체 시스템의 데이터 흐름은 다음과 같습니다.

        User Voice / Camera Input
                    |
                    v
              ESP32-S3 Robot
       Microphone / Camera / Servo
                    |
                    v
           WIZnet W5500 Ethernet
             (Wi-Fi Fallback)
                    |
                 WebSocket
                    |
                    v
              FastAPI Server
                    |
        +-----------+-----------+
        |           |           |
        v           v           v
    Voice AI      Vision     Robot Brain
  STT -> LLM     YOLOv8      Emotion /
     -> TTS     MediaPipe    Motion Control
        |           |           |
        +-----------+-----------+
                    |
              WebSocket
                    |
                    v
              ESP32-S3 Robot
          Audio / Servo Commands
                    |
                    v
        Speaker / Wings / Head / Tail

사용자가 로봇에 말을 하면 마이크에서 수집한 오디오가 서버로 전달됩니다.

AI 서버는 이를 텍스트로 변환하고, LLM으로 응답을 생성한 뒤 TTS를 통해 음성을 합성합니다.

이 과정에서 로봇의 감정 상태나 움직임에 필요한 제어 정보도 생성할 수 있으며, 서버는 음성 데이터와 서보모터 제어 명령을 ESP32-S3로 전송하도록 구성되어 있습니다.

또한 카메라 입력을 통해 주변의 객체 및 얼굴을 감지하고, 분석 결과를 로봇의 반응과 움직임에 활용할 수 있습니다.

Voice AI and Computer Vision

Soren의 AI 기능은 여러 모듈로 구성되어 있습니다.

Voice AI Pipeline

음성 대화는 크게 세 단계로 처리됩니다.

  • STT (Speech-to-Text): faster-whisper를 사용하여 마이크에서 입력된 음성을 텍스트로 변환합니다.
  • LLM (Large Language Model): 텍스트 입력을 바탕으로 Soren 캐릭터에 맞는 응답을 생성합니다.
  • TTS (Text-to-Speech): 생성된 텍스트를 음성으로 합성하여 로봇 스피커로 출력합니다.

LLM은 로컬 모델 또는 클라우드 모델을 선택할 수 있도록 구성되어 있습니다. 로컬 추론에는 llama.cpp 기반 모델을 사용하며, 원격 추론은 별도의 API를 통해 처리합니다.

음성 합성은 Silero TTS와 edge-tts를 지원합니다.

Computer Vision

컴퓨터 비전 기능에는 다음 기술이 사용됩니다.

TechnologyFunction
YOLOv8카메라 영상에서 객체 감지
MediaPipe사람의 자세 및 주요 특징점 분석
OpenCV영상 처리 및 얼굴 감지
Face Tracking감지된 얼굴의 위치 추적

카메라에는 OV2640이 사용되며, 프로젝트 문서에서는 QVGA(320×240) 영상과 상태에 따른 프레임 속도 조절 방식을 설명하고 있습니다.

이러한 기능을 통해 로봇이 주변 환경을 인식하고, 영상 분석 결과를 동작 제어에 활용할 수 있도록 설계되었습니다.

Emotion-Based Servo Control

감정 상태서보모터를 통한 자세 표현눈 LED 효과 설정
평온 (Calm)모든 서보모터를 기본 각도인 90°로 설정은은한 흰색
호기심 (Curious)머리의 회전·앞뒤 기울임·옆 기울임과 꼬리 각도 변경청록색 깜빡임
반가움 (Greeting)양쪽 날개와 꼬리, 머리, 부리의 각도 변경밝은 노란색 맥동
졸림 (Sleepy)날개·다리·머리·부리의 자세 변경어두운 호박색의 느린 효과
경계 (Alert)날개·다리·머리·꼬리의 자세 변경밝은 흰색 유지
장난스러움 (Playful)한쪽 날개와 꼬리를 움직이고 머리 방향·기울기 변경초록색 깜빡임
수줍음 (Shy)날개 접힘 각도와 머리 방향·기울기, 부리 각도 변경은은한 연보라색
자부심 (Proud)양쪽 날개·다리·꼬리·머리의 자세 변경밝은 금색 유지
불만 (Displeased)날개·머리·꼬리·부리의 각도 변경밝은 주황색 깜빡임

Soren은 총 18개의 서보모터를 사용하도록 설계되어 있습니다.

이 중 16개 채널은 PCA9685 I²C PWM Driver를 통해 제어하며, 나머지 2개 채널은 ESP32-S3의 PWM 출력으로 제어합니다.

서버에는 감정별 서보모터 자세를 정의한 JSON 파일이 있으며, 감정 상태에 따라 미리 정의된 자세를 적용할 수 있도록 구성되어 있습니다.

또한 서보모터의 목표 각도로 즉시 이동하는 대신 각도를 보간하여 움직임을 부드럽게 만드는 방식을 사용합니다.

이를 통해 AI가 생성한 대화와 감정 정보를 물리적인 로봇 동작으로 표현하는 것이 프로젝트의 핵심 목표입니다.

WIZnet Role in This Project

Soren에서 WIZnet W5500은 ESP32-S3 기반 로봇과 AI 서버를 연결하기 위한 유선 Ethernet 인터페이스로 설계되었습니다.

W5500은 SPI 인터페이스를 제공하는 Ethernet Controller이며, ESP32-S3에서 외부 유선 네트워크에 연결하기 위해 사용됩니다.

이 프로젝트는 AI 모델을 ESP32-S3 내부에서 직접 실행하는 대신 별도의 Python 서버에서 처리하는 구조이므로, 로봇과 서버 사이의 통신이 중요한 역할을 합니다.

서버는 오디오 처리, AI 응답 생성, 영상 분석 및 동작 제어 기능을 담당하며, ESP32-S3는 각종 하드웨어 주변장치를 제어하도록 설계되어 있습니다.

이 과정에서 W5500은 로봇에 유선 네트워크 연결을 제공하는 역할을 합니다.

Ethernet Communication and Wi-Fi Fallback

프로젝트 README에 따르면 ESP32-S3는 시작할 때 W5500 Ethernet 연결을 먼저 시도하도록 설계되었습니다.

Ethernet 연결 과정에서 약 4초 이내에 링크 또는 IP 주소가 확보되지 않으면 Wi-Fi 연결을 사용하도록 구성되어 있습니다.

네트워크가 연결되면 로봇과 서버는 WebSocket 연결을 유지하며, 오디오 데이터 및 서보모터 제어 명령 등을 교환하도록 설계되었습니다.

또한 연결 상태를 확인하기 위한 Heartbeat 및 자동 재연결 기능이 명시되어 있습니다.

Network ParameterDocumented Configuration
Primary NetworkW5500 Ethernet
Backup NetworkESP32-S3 Wi-Fi
InterfaceSPI
Communication ProtocolWebSocket
Server Port8765
Heartbeat Interval30 seconds
Connection Timeout60 seconds
Reconnection Interval5 seconds

특히 네트워크 연결이 끊겼을 때 연결을 복구하고, 음성 출력 도중 통신이 중단된 경우 복구 후 해당 문장을 다시 요청하는 방식도 README에 설명되어 있습니다.

W5500 Hardware Interface

공개된 하드웨어 설명에서는 W5500과 ESP32-S3 사이의 SPI 연결을 다음과 같이 정의하고 있습니다.

W5500 SignalESP32-S3 GPIO
SCKGPIO0
MISOGPIO46
MOSIGPIO19
CSGPIO20
RSTGPIO48

여기서 주의할 점은 ESP32-S3의 GPIO19와 GPIO20이 Native USB 기능과 중복되는 핀이라는 것입니다.

또한 GPIO0은 부트 스트래핑과 관련된 핀이기 때문에 개발 과정에서 핀 기능을 고려해야 합니다.

개발자는 이러한 GPIO 사용 제약을 고려하여 SPI 핀을 배치하고, UART 로그를 확인할 수 있도록 GPIO43과 GPIO44를 확보하는 구성을 문서화했습니다.

WIZnet W5500의 기술적 역할은 AI 추론이나 서보모터 제어를 직접 수행하는 것이 아니라, 로봇 하드웨어와 AI 서버 사이의 Ethernet 네트워크 연결을 제공하는 것입니다.

따라서 이 프로젝트는 W5500을 이용한 네트워크 인터페이스와 별도 AI 서버를 결합하는 시스템 아키텍처 사례로 볼 수 있습니다.

Implementation and Verification

AI Server Implementation

Soren의 AI 서버는 Python 기반 FastAPI 프레임워크를 사용하여 구현되었습니다.

FastAPI는 HTTP API와 WebSocket 통신을 제공하며, 로봇 장치와 웹 제어 패널 사이의 데이터 교환을 담당합니다.

주요 API는 다음과 같습니다.

EndpointFunction
/서버 기본 상태 확인
/statusAI 모듈 및 서버 상태 조회
/audio_mode오디오 입력 및 출력 방식 변경
/ai_modeAI 모듈 동작 모드 변경
/speak텍스트 기반 AI 응답 및 음성 생성
/voice입력 음성 기반 AI 응답 생성
/panel웹 제어 패널
/ws로봇과의 WebSocket 통신

웹 제어 패널을 통해 음성 및 텍스트 대화를 실행하고, AI 모듈의 사용 모드를 변경하거나 서보모터를 직접 제어할 수 있습니다.

또한 wave, nod, shake_head, idle 등의 애니메이션 명령을 사용할 수 있도록 구성되어 있습니다.

Character Memory and RAG

Soren의 AI 응답 시스템에는 캐릭터에 대한 설정과 대화 기억 기능이 포함되어 있습니다.

개발자는 캐릭터의 배경 설정, 관계, 성격 및 세계관을 별도의 데이터로 구성하고, 언어 모델이 이를 참고해 응답을 생성할 수 있도록 설계했습니다.

이를 위해 Qdrant 기반 벡터 데이터베이스와 RAG(Retrieval-Augmented Generation) 방식을 사용합니다.

RAG는 사용자의 질문과 관련된 정보를 외부 지식 저장소에서 검색한 후, 검색 결과를 언어 모델에 제공하는 방식입니다.

Soren에서는 이를 통해 캐릭터의 세계관과 배경 지식에 맞는 응답을 생성할 수 있도록 구성되어 있습니다.

또한 대화 내용과 사용자 관련 정보, 감정적 상호작용 정보를 저장하기 위한 메모리 구조도 포함되어 있습니다.

다만 저장소의 현재 config.yaml에서는 빠른 응답을 위한 fast_mode가 활성화되어 있어, 일부 RAG 및 장기 기억 기능이 비활성화되도록 설정되어 있습니다. 따라서 이 기능들은 구현된 구성 요소이지만 실행 설정에 따라 사용 여부가 달라집니다.

Development and Testing

프로젝트 저장소에는 AI 서버의 기능을 확인하기 위한 테스트 스크립트가 포함되어 있습니다.

scripts/test_server.py: 실제 ESP32 장치 없이 서버 기능 테스트

scripts/test_all.py: 여러 AI 모듈을 대상으로 하는 테스트

scripts/test_github.py: 외부 모델 API 관련 테스트

scripts/check_model.py: 로컬 언어 모델 파일 확인

또한 WebSocket 서버, 음성 처리, 영상 분석, 감정 및 동작 제어 기능을 모듈별 Python 코드로 분리하여 구성했습니다.

공개 저장소에서 확인되는 것은 이러한 서버 구현과 테스트 코드의 존재입니다. ESP32-S3와 W5500을 결합한 로봇 하드웨어의 전체 동작 검증 결과는 별도로 확인되지 않았습니다.

Developer Takeaways

Soren은 AI 기반 대화 시스템과 물리적인 로봇 하드웨어를 결합하기 위한 소프트웨어 및 통신 구조를 보여주는 프로젝트입니다.

이 프로젝트에서 참고할 수 있는 주요 기술적 특징은 다음과 같습니다.

Separation of AI Processing and Hardware Control: AI 추론은 Python 서버에서 수행하고, ESP32-S3는 하드웨어 주변장치를 제어하도록 역할을 분리했습니다.

W5500-Based Wired Connectivity: WIZnet W5500을 사용하도록 설계하여 ESP32-S3와 외부 AI 서버 사이의 Ethernet 통신 경로를 제공합니다.

Ethernet and Wi-Fi Fallback: 유선 연결을 우선 사용하고 연결이 불가능할 경우 Wi-Fi로 전환하는 구조를 제시합니다.

Multimodal AI Interaction: 음성 인식, 자연어 처리 및 컴퓨터 비전을 결합하여 사용자와 로봇 사이의 상호작용을 확장합니다.

Emotion-Based Motion Control: AI의 감정 상태를 18채널 서보모터의 움직임과 연결하여 캐릭터의 표현력을 높입니다.

WebSocket-Based Robot Communication: 로봇 하드웨어와 AI 서버 사이에서 오디오 및 동작 제어 데이터를 교환하는 양방향 통신 구조를 사용합니다.

Soren은 단순한 음성 인식 또는 Ethernet 통신 예제를 넘어, AI 서비스와 임베디드 로봇을 하나의 시스템으로 연결하는 구조를 제시합니다.

특히 W5500 기반 Ethernet 인터페이스를 이용해 로봇 장치와 외부 AI 서버를 연결하도록 설계한 점은, AI 연산과 하드웨어 제어를 분리하는 네트워크 기반 로봇 시스템에서 참고할 수 있는 부분입니다.

이러한 구조는 AI 캐릭터 로봇뿐 아니라 교육용 로봇, 안내 로봇 및 원격 제어 기반의 인터랙티브 장치에도 응용할 수 있습니다.

References

AI-Robot-Server GitHub Repository: https://github.com/nikita-razgulyaev/AI-Robot-Server

AI Robot Server README: https://github.com/nikita-razgulyaev/AI-Robot-Server/blob/main/README.md

AI Server Source Code: https://github.com/nikita-razgulyaev/AI-Robot-Server/blob/main/websocket_server.py

ESP32-S3 and W5500 Hardware Description: https://github.com/nikita-razgulyaev/AI-Robot-Server#аппаратная-часть

WIZnet W5500 Datasheet: https://docs.wiznet.io/Product/iEthernet/W5500/datasheet

Comments

Comments