Gemma 4와 Raspberry Pi로 데스크톱 반려 로봇 ‘DinoDesk AI’를 만든 이야기

하루 종일 나를 쳐다보는 카메라 없이도 책상 위에서 다정하게 말을 건네고, 작업 타이머를 챙겨주거나 까다로운 버그를 함께 고민해 주는, 레트로 게임 캐릭터 같은 아기자기한 데스크톱 친구가 있으면 좋겠다고 생각해 본 적 없으신가요?
바로 그 질문에서 우리의 레고 공룡 AI 반려 로봇, DinoDesk AI가 탄생했습니다.

저와 동료 샤마(Shama)는 8비트 레트로 감성과 레고 테크닉(LEGO Technic)의 기계적 움직임에 현대적인 하이브리드 LLM 스위칭 아키텍처(로컬 ↔ 클라우드) 를 결합한 스마트 저전력 데스크톱 로봇을 만들기로 했습니다. 책상 위의 Raspberry Pi를 Gemma 4와 Gemini Flash가 함께 구동되는 로컬 PC 게이트웨이와 연결하여, 100% 사생활 보장(카메라 없음), 즉각적이고 비용이 들지 않는 로컬 대화, 그리고 필요할 때 언제든 활용할 수 있는 심층 클라우드 추론 기능을 모두 갖춘 든든한 동반자를 완성했죠.
DinoDesk AI를 처음부터 어떻게 설계하고, 배선하고, 프로그래밍했는지 그 비하인드 스토리를 지금부터 자세히 들려드릴게요.
1. 하이브리드 두뇌: 로컬 Gemma 4 ↔ 클라우드 Gemini#
AI 하드웨어 반려 로봇을 만들 때 마주하는 가장 큰 딜레마 중 하나는 ‘두뇌를 어디에 둘 것인가’입니다. 모든 처리가 클라우드에서 이루어진다면 “지금 몇 시야?” 같은 가벼운 질문 하나에도 API 토큰 비용이 들고, 네트워크 지연이 발생하며, 내 음성 데이터가 인터넷으로 전송됩니다. 반대로 기기 내부의 작은 온디바이스 모델에만 의존한다면, 거대한 코드베이스에 새 기능을 추가해 달라거나 복잡한 개념을 설명해 달라고 하는 순간 로봇은 한계에 부딪히고 맙니다.
그래서 저희는 사용자의 메인 PC에서 호스팅되는 통합 LLM 게이트웨이(라우터) 를 중심으로 하이브리드 LLM 아키텍처를 구축했습니다. 책상 위의 Raspberry Pi는 현재 어떤 엔진이 활성화되어 있든 상관없이 Wi-Fi를 통해 동일한 OpenAI 호환 요청을 전송합니다.
┌─────────────────────────────────────────────────┐
│ [ 메인 PC / 로컬 게이트웨이 ] │
│ │
│ ┌─────────────────────────────────────────┐ │
│ │ 동적 모델 라우터 / 스위치 │ │
│ └────────────────────┬────────────────────┘ │
│ │ │
│ ┌──────────────────┴──────────────────┐ │
│ v v │
│ [ 로컬 엔진 ] [ 클라우드 엔진 ] │
│ LM Studio / Gemma 4 Gemini Flash / │
│ (지연 시간 제로, 프라이빗) Gemini Live │
└────────────────────────┬────────────────────────┘
│
│ Wi-Fi (통합 OpenAI 호환 스트림)
v
┌─────────────────────────────────────────────────┐
│ [ DinoDesk AI (RPi) ] │
│ - Pirate Audio LCD & I2S 비프 스피커 │
│ - 푸시 버튼 & 추가 센서 │
└─────────────────────────────────────────────────┘
세 가지 지능 모드#
| 모드 | 활성 모델 | 강점 및 주요 용도 | 전환 방법 |
|---|---|---|---|
| 🟢 로컬 모드 (기본값) | Gemma 4 (LM Studio 경유) | 비용 제로, 오프라인, 100% 프라이빗. 일상적인 대화, 데스크 타이머, 빠른 상태 확인을 위해 약 200ms의 첫 토큰 지연 시간으로 즉각 응답합니다. | Pirate Audio 버튼 X 더블클릭, 정전식 터치 센서 3초 길게 누르기, 또는 음성 명령(“클라우드 모드로 전환해 줘”) |
| 🟡 클라우드 모드 | Gemini Flash / Gemini Live | 고차원 추론 및 복잡한 문제 해결. 코딩 지원, 복잡한 수학, 깊이 있는 설명, 외국어 튜터링 등에 이상적입니다(첫 토큰 지연 약 800ms). | 위와 동일 |
| ⚡ 자동 하이브리드 모드 | 자동 라우팅 | 기본적으로 로컬 Gemma 4를 사용합니다. 복잡도 분류기가 다단계 추론 키워드(“설명해 줘”, “비교해 줘”, “코드 작성해 줘”)를 감지하면 프롬프트를 Gemini Flash로 자연스럽게 전달합니다. | 시스템 자동 라우팅 |
자동 하이브리드 모드에서 질문이 클라우드로 전달되면, 답변이 진행되는 동안 로봇의 상태 표시가 🟢 초록색에서 🟡 황금색으로 잠시 바뀌었다가 답변이 끝나면 다시 초록색으로 돌아옵니다. 덕분에 지금 어느 두뇌가 대답하고 있는지 한눈에 알 수 있습니다.
2. 부품과 촉각 메커니즘: 레고와 Pirate Audio의 만남#
저희는 DinoDesk AI가 차가운 스마트 스피커가 아니라 손으로 만지고 교감할 수 있는 장난감처럼 느껴지기를 바랐습니다. 그래서 밀폐된 플라스틱 케이스를 3D 프린팅하는 대신, 누구나 쉽게 커스터마이징하거나 수리할 수 있도록 기본 레고 브릭과 테크닉 레버 메커니즘으로 몸체를 조립했습니다.
핵심 부품 목록 (BOM)#
- 메인 컨트롤러: Raspberry Pi + 32GB MicroSD
- 디스플레이 & 오디오 쉴드: Pimoroni Pirate Audio Speaker (1.3인치 240×240 ST7789 IPS LCD + I2S 1W 스피커 + 택타일 버튼 4개)
- 빨간 버튼: 기분 좋은 클릭감으로 음성 녹음을 시작하거나 멈출 수 있는 미니 푸시 버튼 스위치
- 오디오 입력: 소형 USB 미니 마이크
- 모션 시스템: 목 움직임과 꼬리 흔들기를 구동하는 모터
본격적인 외형을 조립하기 전, 먼저 Raspberry Pi와 간단한 레고 세트로 기본 로직 프로토타입을 만들었습니다.

물리 버튼 컨트롤#
음성이나 센서 트리거가 있더라도, 즉각적인 물리적 제어를 위한 전용 하드웨어 버튼은 언제나 든든하고 직관적입니다.
- 버튼 A (GPIO 5) — 취소 / 음소거: 진행 중인 응답 스트림을 즉시 중단하고 소리를 끄며, 로봇을
Idle(대기)상태로 되돌립니다. - 버튼 B (GPIO 6) — 홈 리센터: 현재 상태를 방해하지 않고 모든 서보 모터를 정중앙 기본 위치로 정렬합니다.
- 버튼 X (GPIO 16) — 표정 & 엔진 전환: 한 번 클릭하면 얼굴 표정을 수동으로 순환시키고, 더블클릭하면 로컬 ↔ 클라우드 모드를 전환합니다.
- 버튼 Y (GPIO 24) — 꼬리 테스트 & 볼륨 조절: 한 번 누르면 기구 정렬을 확인하는 꼬리 흔들기 시퀀스가 작동하며, 2초간 길게 누르면 비프음 볼륨(
낮음 → 중간 → 높음 → 음소거)이 순환됩니다.
3. 공룡에 생명 불어넣기: 5단계 유한 상태 기계(FSM)#
반려 로봇은 눈빛, 목소리, 그리고 몸짓이 하나로 어우러져 움직일 때 비로소 살아있는 것처럼 느껴집니다. 저희는 240×240 LCD의 눈 표정, 8비트 비프음, 그리고 모터 움직임을 조화롭게 제어하는 5단계 유한 상태 기계(FSM, Finite State Machine) 를 설계했습니다.
┌──────────┐ 버튼 ┌───────────┐ 버튼 뗌 ┌──────────┐ 스트림 ┌──────────┐
│ Sleeping │──────────> │ Idle │───────────>│Listening │─────────> │ Thinking │
└──────────┘ (깨어남) └───────────┘ (트리거) └──────────┘ (전송) └──────────┘
^ │
│ ┌──────────┐ │
└──────────────│ Speaking │<───────────────────────┘
(완료) └──────────┘ (토큰 도착)
| 상태 | 진입 조건 | Pirate Audio LCD 표정 | 8비트 오디오 피드백 | 모터 동작 (목 / 꼬리) |
|---|---|---|---|---|
| 1. Sleeping (수면) | 3분간 활동 없음 또는 방이 어두워짐 | (- _ -)감은 눈 + zzz | 무음 (또는 부드러운 코골이 소리 선택 가능) | 모터 힘 풀림; 머리가 살짝 아래로 숙여짐 |
| 2. Idle (대기) | 기본 대기 상태 | (• •)자율적인 눈 깜빡임 | 간헐적인 기상/깜빡임 효과음 | 머리 정면 정렬; 목이 천천히 좌우로 흔들림 |
| 3. Listening (듣는 중) | 버튼 클릭 또는 센서 트리거 | (O O)눈이 밝고 크게 커짐 | “삐-뿝!” 상승 톤 | 머리를 사용자 쪽으로 15° 기울임 |
| 4. Thinking (생각 중) | 오디오 전송 완료; 라우터 추론 중 | (º º)빙글빙글 도는 눈동자 + 모드 배지 | 불규칙한 처리 효과음 (틱-틱-포) | 목이 좌우로 천천히 흔들림 |
| 5. Speaking (말하는 중) | SSE 토큰 스트림 수신 중 | 풍부한 눈 깜빡임 + 스크롤되는 자막 | 토큰마다 8비트 타자기 비프음 | 텍스트 길이에 맞춰 리듬감 있게 꼬리 흔들기 |
DinoDesk AI를 만들면서 저희는 AI가 굳이 브라우저 탭이나 클라우드 데이터 센터 안에만 갇혀 있을 필요가 없다는 사실을 다시금 깨달았습니다. Gemma 4 같은 오픈 모델에 픽셀 눈동자와 8비트 목소리, 살랑거리는 레고 꼬리를 달아주고, 복잡한 문제가 생겼을 때 Gemini에게 도움을 요청할 수 있는 능력까지 부여하면 책상 위가 놀라울 만큼 생동감 넘치는 공간으로 변합니다. 🦖✨
아직 한창 개발 중인 단계라 완벽하진 않지만, 곧 음성 대화 기능까지 멋지게 완성해서 다시 찾아오겠습니다! 그때까지는 버튼을 누를 때마다 나오는 깨알 같은 8비트 효과음을 즐겨주세요. 삐-뿝!
전체 코드 저장소는 여기에서 클론하실 수 있습니다: https://github.com/google-gemma/dinodesk-ai-companion/
여러분은 어떤 재미있는 프로젝트를 구상하고 계신지 댓글로 자유롭게 공유해 주세요!