로봇에게 내 말로 피크닉 짐 싸기를 요청할 수 있을까?
요약
본 글은 오픈형 VLA(Vision-Language-Action) 모델인 SmolVLA를 활용하여 로봇에게 구체적인 지시사항을 주고, 이를 바탕으로 소풍 짐 싸기 같은 복합 작업을 수행하는 방법을 소개합니다. 특히, 사용자가 다양한 방식으로 요청할 때도 로봇이 정확히 이해하고 동작하도록 하는 '자신만의 말로 요청' 능력을 테스트했습니다.
핵심 포인트
- VLA 모델(SmolVLA)을 이용해 로봇의 시각-언어-행동 루프 구현
- 소풍 짐 싸기 등 복합적인 일상 작업을 로봇에게 지시 가능
- 다양한 표현 방식(Paraphrases)으로 요청해도 정확히 수행하는 능력 입증
제가 구현한 내용 (What I Built)
계획은 간단했습니다. 소풍을 떠나기 전에, 로봇에게 무엇을 챙길지 말로 지시하고 화면에서 벗어나면, 로봇이 나머지를 처리하는 것입니다.
저는 오픈형 비전-언어-행동(VLA: Vision-Language-Action) 모델인 SmolVLA를 사용하여 시뮬레이션 환경에서 이 루프를 구현했습니다. 이 모델은 두 개의 카메라 이미지, 로봇 팔의 상태(arm's state), 그리고 "버터를 집어 바구니에 넣어라"와 같은 문장을 읽고 연속적인 팔 동작을 출력합니다. 소풍 물품들은 LIBERO-Object 벤치마크의 열 가지 식료품입니다: 알파벳 수프, 크림치즈, 샐러드 드레싱, 바비큐 소스, 케첩, 토마토 소스, 버터, 우유, 초콜릿 푸딩, 오렌지 주스.
다음으로 제가 테스트한 부분은 실제로 외출할 자격이 되는지를 결정하는 부분입니다: 자신만의 말로 요청할 수 있는가?
데모 (Demo)
각 행은 하나의 항목을 나타냅니다. 왼쪽부터 오른쪽 순서로, 원본 문장(정확히 훈련에 사용된 문장), 그리고 A, B, C, D 네 가지 방식으로 사람이 대신 말할 수 있는 표현이 나열되어 있습니다 (표의 Step 2 아래 참조). 각 타일은 열 번 시도 중 첫 번째 성공 에피소드 또는 모두 실패했을 경우 에피소드 0을 보여줍니다. 비디오를 더 자세히 보려면 GitHub에서 전체 해상도 버전을 확인하세요.
알파벳 수프 (Alphabet soup)

크림치즈 (Cream cheese)

버터(Butter)

오렌지 주스(Orange juice)

훈련 문장은 매번 성공했습니다. 'put ... in the basket'을 유지한 패러프레이즈 A와 D는 약 절반 정도의 시간(40회 중 22회, 40회 중 26회) 동안 작동했으며, B와 C는 거의 작동하지 않았습니다(각 40회 중 2회).
결과
단계 1: 아예 포장할 수 있을까?
먼저 기준선입니다. 원래 지침과 함께 모든 항목 10개를 각기 다른 시작 레이아웃에서 10 에피소드를 진행했습니다.
100 에피소드 중 89 에피소드가 성공했습니다. 바비큐 소스가 가장 약했으며(10회 중 6회), 네 가지 항목은 완벽했습니다(10/10). 이는 huggingface/lerobot#4614의 공개 실행 결과와 일치합니다(50개 중 42개, 84%). 따라서 이 설정은 다른 사람들이 본 결과를 재현합니다.
단계 2: 사람이 자신의 말로 요청할 수 있을까?
저는 10/10을 기록한 네 가지 항목을 가져와서, 단어 선택의 문제일 뿐 잡는 행위(grasp)의 문제가 아니라고 가정하고 각각에 대해 네 가지 패러프레이즈를 주었습니다:
| 지침 | 성공률 | |
|---|---|---|
| 원본 | {item}을 집어서 바구니 안에 놓아라 (pick up the {item} and place it in the basket) | 40/40 |
| ... | ||
| 전체 네 가지 패러프레이즈에 걸쳐: 160회 중 52회(33%). 모든 실패는 항목을 놓지 않은 채 280단계 제한까지 진행되었습니다. |
세 가지 점이 눈에 띄었습니다:
- 가장 자연스러운 피크닉 요청 두 가지가 거의 완전히 실패한다. "바구니에 버터(Butter)를"와 "우리 피크닉을 위해 버터를 싸줘(pack the butter for our picnic)"는 내가 문을 나서면서 정확히 할 말이다. 네 가지 항목 중, 이 두 표현은 각각 40번 시도에서 2번 작동했다.
- "바구니에 ... 넣어줘(put ... in the basket)"라는 구문을 유지하는 것이 도움이 되기는 하지만, 신뢰성이 높지는 않다. A와 D는 절반 정도의 성능을 보인다.
- 같은 문장이라도 한 항목에는 작동하고 다른 항목에서는 거의 실패할 수 있다. 버터는 A와 D 모두에서 10/10이었지만, 크림치즈(cream cheese)는 둘 다 3/10이었다.
만약 정확한 템플릿(template)만이 작동한다면, 사람은 외출하는 대신 화면에 남아 문장을 수정하게 된다. 'Touch Grass' 프로젝트의 경우, 바로 이 결과가 중요하다.
왜 의역(paraphrases)이 실패하는가?
다음은 가설이며, 실험을 통해서는 이를 구분할 수 없었다.
- 작업당 하나의 고정된 문장. 모든 LIBERO-Object 작업은 항목 이름만 변경된 단일 템플릿을 사용한다. 모델은 이 문장을 의미(meaning)로 보기보다는 작업 ID(task ID)로 취급할 수 있다.
- 언어 모델의 미세 조정(fine-tuned). 체크포인트 설정에
train_expert_only: False가 되어 있어, SmolVLM2 언어 레이어는 동일한 템플릿 문장으로 학습되었으며 일반 영어에서 벗어났을 수 있다. - 작은 모델. 언어 부분의 매개변수는 약 252M이다. 더 큰 백본(backbone)이라면 "집어 들다(grab)"나 "싸다(pack)"를 "줍다(pick up)"에 더 가깝게 매핑할 수 있을 것이다.
lerobot/pi05_libero_finetuned와 같은 더 큰 LIBERO 체크포인트에서 동일한 지침을 실행하면 이를 테스트할 수 있다. - 보지 못한 단어와 이동된 위치. B는 항목 이름을 맨 앞으로 옮기고, C와 D는 훈련 데이터에 절대 나타나지 않는 "싸다(pack)", "혹시 ~해줄 수 있어(could you)", 그리고 "피크닉(picnic)" 같은 단어를 추가한다.
구축 방법
모든 것은 하나의 노트북 CPU(Intel Core Ultra X7 358H, Windows 11, WSL Ubuntu 24.04)에서 실행되었다. GPU도 없고 클라우드도 사용하지 않았다.
- 모델(Model):
lerobot/smolvla_libero, LIBERO에 파인튜닝된 SmolVLA. - 러너(Runner): LeRobot 0.6.1. 베이스라인은 모든 모델 호출 시간을 측정하기 위해
lerobot-eval을 사용합니다. 패러프레이즈 실행은 초기 상태와 시드를 유지하면서 새로운 지침으로 교체하는 작은 롤아웃 루프를 사용합니다. - 시뮬레이션(Simulation): robosuite 및 MuJoCo의 LIBERO-Object.
두 개의 플래그가 중요합니다 (전체 명령어 발췌). 하나는 실행이 실패하는 것을 막고, 다른 하나는 성공률이 떨어지는 것을 막습니다.
python baseline/benchmark_eval.py \
--policy.path=lerobot/smolvla_libero \
--policy.device=cpu \
...
--rename_map: 체크포인트는camera1과camera2라는 이름의 카메라를 예상하지만, LeRobot 0.6.1은 저장된 매핑을 자동으로 적용하지 않습니다 (huggingface/lerobot#4578).--policy.n_action_steps=10: 체크포인트는 50으로 설정되어 있어, 다시 살펴보기 전에 전체 액션 청크를 재생합니다. lerobot#4614에서는 이로 인해 LIBERO-Object에서 20점(84%에서 64%)이 차감되었습니다.
로봇은 시뮬레이션에서는 빠르지만 실제 생활에서는 느리다
시뮬레이터는 모델이 생각하는 동안 일시 정지합니다. 실제 팔은 그렇지 않습니다.

각 SmolVLA 호출은 0.5초 분량의 움직임을 계획하지만, 이 CPU에서는 1.15초가 걸립니다. 실제 팔로 위 케첩 에피소드를 실행하면 정지하고 이동하는 과정이 발생합니다: 8.8초 분량의 움직임이 약 29.5초가 됩니다. 시뮬레이터가 기다리기 때문에 성공률에는 영향을 미치지 않지만, 실시간 제어는 GPU 또는 비동기 추론이 필요할 것입니다. 저는 어느 쪽도 테스트하지 않았습니다.
제가 하지 않은 것
실제 로봇도 없고 야외 테스트도 없습니다. 실제로 피크닉을 준비할 계획이었으나 포기했습니다. 여기에 있는 모든 것은 시뮬레이션입니다.
훈련 과정이 없습니다. 체크포인트는 공개된 대로 사용됩니다.
에피소드당 하나의 항목만 처리합니다. 전체 바구니를 한 번에 준비하는 것은 훈련 분포 밖에 있습니다.
코드
GitHub logo johyeongseob / hacktoberfest-2026
오픈 웨이트 AI, VLA 및 물리적 AI에 중점을 둔 Hacktoberfest 2026 프로젝트 및 실험.
Hacktoberfest 2026
오픈 웨이트 AI (open-weight AI), VLA (Vision-Language-Action), 그리고 물리적 AI (Physical AI)를 탐구하는 한 달간의 여정입니다.
목표
- 오픈 웨이트 AI 모델 탐색
- VLA/물리적 AI 프로젝트 구축
- DEV Challenges 참여
- 실험 및 학습 내용 문서화
프로젝트
dev-challenge/weekend-challenge/: 주말 챌린지(Weekend Challenge) 프로젝트 작업 공간devrelay/: DevRelay 사용 노트 및 검토된 에이전트 세션 기록models/: 모든 프로젝트를 위한 공유 로컬 모델 가중치; Git에서 제외됨
개발 환경
| 구성 요소 (Component) | 설정 (Configuration) |
|---|---|
| 호스트 (Host) | Windows |
| ... |
이 프로젝트는 dev-challenge/week-1에 위치하며, 기준선(baseline) 및 패러프레이즈 실험을 위한 실행 스크립트와 결과 페이지, 그리고 WSL 설정을 위한 참고 자료가 포함되어 있습니다.
오픈 혁신은 왜 중요한가?
이 프로젝트는 폐쇄형 모델로는 존재할 수 없었을 것입니다. 흥미로운 부분 자체가 내부를 들여다보는 것이었기 때문입니다.
- 체크포인트를 읽을 수 있었다. 공개된 설정 파일에 있는
train_expert_only: False라인이 '의역(paraphrases)에서 실패한다'는 것을 왜 그런지 테스트 가능한 가설로 바꾼 것이다. 폐쇄형 API였다면 성공률만 알려주고 그 외에는 아무것도 주지 않았을 것이다. - 낯선 사람과 비교할 수 있었다. 모델, 벤치마크, 평가 코드가 모두 공개되어 있어, 내 89/100 점수를 다른 하드웨어에서 진행된 공개 실행 결과와 비교하여, 의역 결과를 신뢰하기 전에 내 설정이 건전한지 알 수 있었다.
- 내 노트북에서 무료로 실행된다. CPU 환경에서 약 300 에피소드를 진행했고, 처음 3.3 GB 다운로드 후 오프라인으로 작동하며 API 비용이나 계정 등록 없이 가능하다.
- 다음 단계도 열려 있다. 도움이 될 가능성이 가장 높은 수정 방법은 다양한 지침(instructions)에 대한 미세 조정(fine-tuning)을 하거나 더 큰 오픈 모델로 교체하는 것인데, 이는 공급업체를 기다리기보다 내가 직접 할 수 있는 일이다.
솔직한 트레이드오프: CPU 추론(inference)으로는 실제 팔을 움직이게 하기에는 너무 느리고, 작업당 한 문장으로 미세 조정된 작은 오픈 모델은 아직 구어체 영어(casual English)를 이해하지 못한다. 하지만 나는 정확히 왜 그런지 알 수 있고, 그것이 바로 오픈 소스(open)가 나에게 주는 것이다.
나의 에이전트 세션
나는 이 내용을 4일 동안 Claude Code를 사용해 만들었다. 아래 세션은 선별된 부분이다: 결정 사항, 설정 버그, 결과, 그리고 실패 분석.
피크닉 짐 싸기 로봇: 노트북 CPU에서 의역 지침을 사용하는 SmolVLA 테스트 (선별 및 번역)
당신
[참고: 2026년 10월 8일~12일에 진행된 한국어 Claude Code 세션을 간추려 영어로 번역한 내용. 메시지는 선택되고 축약되었으며, 문구는 직역이 아닌 의역이다.]
첫 주 테마는 '풀밭에 나가기(Touch Grass)': 사람들을 화면에서 벗어나 야외로 데리고 나가는 것이다. 로봇을 이용해 부엌에서 피크닉 짐 싸기를 해보자.
에이전트
적합하다. 사람이 로봇에게 무엇을 쌀지 말해주고 떠난다. LIBERO-Object에는 식료품 품목(케첩, 버터, 크림치즈, 오렌지 주스 등)과 바구니가 열 개 있어 직접적으로 매칭된다. 장면은 조리대라기보다는 바닥이므로, 우리는 이것을 부엌의 준비 공간으로 설정하고 그렇게 말한다.
당신
Rank SmolVLA, pi0, pi0.5, GR00T N1, and RLDX-1 by how hard they are to train and run. Is SmolVLA already trained on LIBERO-Object, or do we need to fine-tune?
Agent
SmolVLA는 가장 가볍고 CPU에서 실행됩니다. lerobot/smolvla_libero는 이미 LIBERO에 대해 미세 조정(fine-tuned)되었으며, 여기에는 10개의 LIBERO-Object 작업이 포함되므로, 1주차는 추론(inference)만 가능합니다.
You
1주차에는 lerobot/smolvla_libero를 발표된 대로 사용하겠습니다. 단계별 마일스톤을 알려주세요.
Agent
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기