피지컬 AI 입문 가이드: 뜻부터 로봇 없이 시작하는 첫 실습까지
이 글과 연결된 글 보기
드래그로 이동 · 휠/두 손가락으로 확대 · 방향키로 글 선택 · 0으로 맞춤. 실선: 본문 링크, 점선: 시리즈·주제의 대표 연결.표시된 글 14편 목록
피지컬 AI는 AI가 화면 밖으로 나와서 카메라와 센서로 보고, 스스로 판단하고, 모터로 직접 움직이는 기술입니다. 이 글은 꼭 알아야 할 단어 네 개를 먼저 정리하고, 로봇 없이 무료 Colab에서 실제 로봇팔 시연 데이터를 열어 보고, 가상 로봇팔에 그 동작을 틀어 보고, 학습된 VLA 모델이 로봇을 움직이는 것까지 제가 직접 해 본 순서대로 안내합니다. 끝까지 따라 하면 "피지컬 AI가 뭔데?"라는 질문에 내 손으로 돌려 본 결과로 답할 수 있습니다.
이 글은 이런 분께 필요합니다
- 뉴스에서 "피지컬 AI"를 자주 듣는데, 생성형 AI랑 뭐가 다른지 한 번에 정리하고 싶은 분
- 로봇 공부를 해 보고 싶은데 로봇팔을 사기 전에 무엇부터 해야 할지 모르는 분
- 회사에서 피지컬 AI 관련 기획이나 정부 사업을 검토해야 해서 기본 개념과 생태계를 빠르게 잡고 싶은 분
준비물은 구글 계정 하나입니다. 실습은 모두 Google Colab 무료 GPU(T4)에서 돌렸고, 로봇이나 개발 환경 설치는 필요 없습니다. 코드는 복사해서 셀에 붙여 넣기만 하면 됩니다. 전체 실습은 기다리는 시간을 포함해 30분 정도 걸립니다.
2026년 10월 28일 Colab 무료 런타임(Python 3.13, PyTorch 2.11, Tesla T4)과 LeRobot 0.6.1로 확인했습니다. 라이브러리 버전이 바뀌면 명령어가 달라질 수 있어서 버전을 고정해 두었습니다.
피지컬 AI, 한 문장으로
NVIDIA는 피지컬 AI를 공장 로봇이나 로보택시 같은 자율 기계가 실제 세계를 인식하고, 이해하고, 복잡한 동작을 수행하게 하는 기술이라고 정의합니다. 이 말을 대중적으로 퍼뜨린 사람도 NVIDIA의 젠슨 황입니다.
생성형 AI와 나란히 놓으면 차이가 분명해집니다.
| 구분 | 생성형 AI | 피지컬 AI |
|---|---|---|
| 입력 | 글, 이미지 | 카메라 영상, 관절 각도, 힘·촉각 센서 |
| 출력 | 글, 이미지, 코드 | 모터를 움직이는 명령(관절 각도, 그리퍼 열고 닫기) |
| 틀렸을 때 | 다시 생성하면 됨 | 컵이 깨지고, 사람이 다칠 수 있음 |
| 학습 데이터 | 인터넷에 이미 많음 | 아주 적음. 사람이 로봇을 조종해서 직접 모아야 함 |
| 대표 예 | ChatGPT, Gemini, Claude | 휴머노이드, 물류 로봇팔, 자율주행차 |
마지막 두 줄이 핵심입니다. 피지컬 AI는 실수 비용이 크고 데이터가 부족합니다. 그래서 이 분야의 기술은 대부분 "적은 데이터로 어떻게 배우게 할까"와 "현실에서 부수기 전에 어디서 연습시킬까"를 푸는 쪽으로 발전하고 있습니다.
왜 지금 이렇게 많이 들릴까요
2026년 들어 큰 회사들이 로봇의 두뇌를 공개하는 속도가 빨라졌습니다. 구글 딥마인드는 7월에 Gemini Robotics 2를 내놓으면서 휴머노이드의 발끝부터 손끝까지 전신을 제어하는 VLA 모델이라고 소개했습니다. NVIDIA는 로봇과 자율주행 학습용 월드 모델 Cosmos와 휴머노이드용 모델 GR00T를 공개 모델로 풀고 있습니다. Hugging Face는 3D 프린터로 뽑는 로봇팔과 오픈소스 라이브러리 LeRobot으로 개인도 직접 해 볼 수 있는 길을 열었습니다.
국내도 움직임이 큽니다. 정부는 2027년 피지컬 AI 예산안을 올해 9000억원에서 3조 1000억원으로 늘렸고, 제조·물류·농업·항만 실증을 지원할 계획입니다. 다만 이 예산은 국회 심의를 거쳐 확정됩니다.
먼저 알아 둘 단어 4개
피지컬 AI 기사를 읽다 보면 같은 단어가 계속 나옵니다. 이 네 개만 알면 대부분의 뉴스와 발표 자료를 따라갈 수 있습니다.
1. VLA (Vision-Language-Action, 비전 언어 행동 모델). 카메라 영상(Vision)과 말로 한 지시(Language)를 받아서 로봇의 동작(Action)을 내놓는 모델입니다. ChatGPT가 다음 단어를 내놓는다면 VLA는 다음 관절 각도를 내놓습니다. 위 그림처럼 보고, 판단하고, 움직이고, 바뀐 장면을 다시 보는 고리를 1초에 수십 번 돕니다.
2. 모방학습과 텔레오퍼레이션. 로봇에게 일을 가르치는 가장 흔한 방법은 사람이 먼저 해 보이는 것입니다. 사람이 리더 팔을 손으로 움직이면 똑같이 생긴 팔로워 팔이 따라 움직이고(텔레오퍼레이션), 그동안 카메라 영상과 관절 값이 녹화됩니다. 이 녹화본 수십 개로 모델을 학습시키는 것이 모방학습입니다.
3. 시뮬레이션과 sim-to-real. 진짜 로봇은 비싸고 느리고 부서집니다. 그래서 물리 법칙을 흉내 낸 가상 세계(시뮬레이터)에서 먼저 연습시키고, 그 결과를 현실 로봇으로 옮깁니다. 이 옮기는 과정을 sim-to-real이라고 부르고, 가상과 현실의 차이 때문에 생각보다 잘 안 되는 경우가 많습니다.
4. 월드 모델. "이렇게 움직이면 다음 장면이 어떻게 될까"를 예측하는 모델입니다. 학습용 가상 영상을 대량으로 만들거나 로봇이 행동하기 전에 결과를 상상해 보는 데 씁니다. NVIDIA Cosmos가 대표적입니다.
이제 직접 손으로 확인해 보겠습니다.
Step 1. Colab 열고 LeRobot 설치하기
Colab에서 새 노트북을 만들고, 메뉴 런타임 → 런타임 유형 변경에서 하드웨어 가속기를 T4 GPU로 바꿉니다. 그다음 첫 셀에 아래를 붙여 넣고 실행합니다.
!pip install -q "lerobot[dataset,metaworld,smolvla]==0.6.1" "mujoco==3.3.7" "imageio[ffmpeg]"
!pip show lerobot mujoco | grep -E "^(Name|Version)"
LeRobot은 Hugging Face가 만든 로봇 학습 라이브러리입니다. 로봇 데이터 불러오기, 시뮬레이션, 모델 학습과 평가를 같은 명령어 체계로 할 수 있습니다. 대괄호 안의 dataset, metaworld, smolvla는 이번 실습에 필요한 추가 기능만 고른 것입니다.
설치가 끝나면 lerobot 0.6.1과 mujoco 3.3.7이 출력됩니다. 제 환경에서는 1분이 안 걸렸습니다.
Step 2. 실제 로봇팔 시연 데이터 열어 보기
피지컬 AI가 무엇을 먹고 크는지부터 보겠습니다. Hugging Face에 공개된 lerobot/svla_so100_pickplace 데이터셋은 사람이 SO-100 로봇팔을 조종해서 "큐브를 집어 상자에 넣기"를 50번 시연한 녹화본입니다.
from lerobot.datasets.lerobot_dataset import LeRobotDataset
ds = LeRobotDataset("lerobot/svla_so100_pickplace")
print("에피소드:", ds.num_episodes, "프레임:", ds.num_frames, "fps:", ds.fps)
for k, v in ds.features.items():
print(k, v["dtype"], v["shape"])
sample = ds[0]
print("지시문:", sample["task"])
print("첫 동작:", [round(x, 1) for x in sample["action"].tolist()])
제가 돌렸을 때 나온 결과입니다(줄을 조금 줄였습니다).
에피소드: 50 프레임: 19631 fps: 30
action float32 (6,)
observation.state float32 (6,)
observation.images.top video (480, 640, 3)
observation.images.wrist video (480, 640, 3)
...
지시문: Pick up the cube and place it in the box.
첫 동작: [0.6, -87.2, 74.6, 72.3, 82.5, 0.1]
이 출력이 로봇 데이터의 전부입니다. 1초에 30번씩 세 가지가 기록됩니다.
- 카메라 두 대: 위에서 내려다보는 카메라(
top)와 손목에 달린 카메라(wrist) - 지금 자세 (
observation.state): 관절 6개의 각도. 어깨 회전, 어깨 들기, 팔꿈치, 손목 굽힘, 손목 회전, 그리퍼 - 다음 동작 (
action): 사람이 리더 팔로 보낸 목표 각도 6개

데이터셋 첫 에피소드(약 15초)를 5초 간격으로 뽑았습니다. 큐브를 잡고, 상자에 넣고, 제자리로 돌아옵니다.
결국 로봇을 학습시킨다는 것은 "이 화면과 이 자세일 때 사람은 다음에 이렇게 움직였다"는 짝을 수만 개 보여 주는 일입니다. 코드 없이 영상으로 보고 싶다면 브라우저에서 LeRobot 데이터셋 시각화 페이지를 열고 lerobot/svla_so100_pickplace를 입력하면 됩니다. 로그인 없이 두 카메라 영상, 지시문, 관절 값 그래프를 같이 볼 수 있고, 3D REPLAY 탭에서는 녹화된 관절 값으로 로봇을 3D로 다시 움직여 볼 수 있습니다.

Step 3. 가상 SO-101 로봇팔 띄우기
이번에는 로봇을 가상으로 하나 만듭니다. LeRobot 팀이 공개한 lerobot/so101-tabletop-mujoco 환경은 SO-101 로봇팔과 큐브 4개, 초록 상자가 놓인 책상을 물리 시뮬레이터 MuJoCo로 구현한 것입니다.
import os
os.environ["MUJOCO_GL"] = "egl" # Colab처럼 화면 없는 서버에서 그림을 그리기 위한 설정
import numpy as np, imageio
from lerobot.envs.factory import make_env
envs = make_env("lerobot/so101-tabletop-mujoco", n_envs=1, trust_remote_code=True)
env = envs["so101_tabletop"][0]
obs, info = env.reset(seed=0)
front = obs["pixels"]["front"][0]
wrist = obs["pixels"]["wrist"][0]
imageio.imwrite("so101.png", np.concatenate([front, wrist], axis=1))
print("관절 각도:", obs["agent_pos"][0].round(1))
from IPython.display import Image
Image("so101.png")

가상 로봇도 실제 데이터와 똑같이 정면 카메라, 손목 카메라, 관절 6개 값을 내놓습니다.
trust_remote_code=True는 Hugging Face에 올라온 환경 코드를 내 컴퓨터에서 실행해도 된다는 동의입니다. LeRobot 공식 조직(lerobot/)이 올린 환경이라 그대로 썼지만, 모르는 사람이 올린 환경이라면 코드부터 열어 보는 것이 안전합니다.
Step 4. 사람이 한 동작을 가상 로봇에 그대로 틀어 보기
여기가 이 글에서 가장 중요한 실험입니다. Step 2에서 본 실제 시연의 action 값을 Step 3의 가상 로봇에 순서대로 넣어 봅니다. 사람이 큐브를 상자에 넣을 때 쓴 각도를 똑같이 따라 하면 가상 로봇도 큐브를 넣을 수 있을까요?
ep = LeRobotDataset("lerobot/svla_so100_pickplace", episodes=[0])
actions = np.stack([ep[i]["action"].numpy() for i in range(len(ep))])
obs, info = env.reset(seed=0)
frames = [np.concatenate([obs["pixels"]["front"][0], obs["pixels"]["wrist"][0]], axis=1)]
for a in actions[::3]: # 3프레임마다 하나씩 재생
obs, reward, terminated, truncated, info = env.step(a[None].astype(np.float32))
frames.append(np.concatenate([obs["pixels"]["front"][0], obs["pixels"]["wrist"][0]], axis=1))
imageio.mimsave("replay.mp4", frames, fps=10)
print("상자 안 큐브 수:", info["cubes_in_box"])
from IPython.display import Video
Video("replay.mp4", embed=True)
Colab 무료 런타임은 가상 카메라 그림을 CPU로 그려서 한 스텝에 1~2초가 걸립니다. 152스텝을 도는 데 제 환경에서 약 5분이 걸렸으니 그동안 다음 내용을 읽어 두면 됩니다.

결과는 상자 안 큐브 수: [0]이었습니다. 팔은 사람이 움직인 대로 내려갔다가 옆으로 돌고 다시 제자리로 돌아왔지만, 큐브는 하나도 상자에 들어가지 않았습니다. 오히려 노란 큐브를 건드려 밀어 놓았습니다.
실패한 이유가 바로 피지컬 AI가 필요한 이유입니다.
- 장면이 다릅니다. 실제 데이터에서는 (위 카메라 화면 기준) 빨간 큐브가 로봇 아래쪽에, 상자는 왼쪽 위에 있었습니다. 가상 책상의 큐브와 상자는 위치가 전혀 다릅니다. 녹화된 각도는 "그때 그 자리"에서만 맞는 답입니다.
- 로봇이 보지 않습니다. 녹화본을 틀기만 하는 방식은 눈을 감고 움직이는 것과 같습니다. 큐브가 1cm만 옮겨져도 빗나갑니다.
- 같은 숫자도 로봇마다 뜻이 조금씩 다릅니다. 데이터는 SO-100으로, 가상 로봇은 SO-101로 만들었습니다. 각도 0이 어디인지 맞추는 캘리브레이션이 다르면 같은 값을 넣어도 자세가 미묘하게 달라집니다.
그래서 피지컬 AI는 동작을 외우게 하지 않고, 화면을 보고 그때그때 다음 동작을 고르는 모델을 학습시킵니다. 그 모델을 정책(policy)이라고 부르고, 말로 한 지시까지 알아듣는 정책이 VLA입니다. 다음 단계에서 이걸 돌려 봅니다.
Step 5. 학습된 VLA가 로봇을 움직이게 하기
SmolVLA는 Hugging Face가 만든 4억 5천만 파라미터짜리 작은 VLA입니다. 그중 로봇 조작 벤치마크 Meta-World의 50가지 과제로 추가 학습된 lerobot/smolvla_metaworld를 가져와서, "서랍 열기" 과제를 3번 시켜 봅니다.
!MUJOCO_GL=egl lerobot-eval \
--policy.path=lerobot/smolvla_metaworld \
--env.type=metaworld \
--env.task=drawer-open-v3 \
--eval.batch_size=1 \
--eval.n_episodes=3 \
--eval.use_async_envs=false \
--policy.device=cuda \
--rename_map='{"observation.image": "observation.images.camera1"}' \
--output_dir=outputs/eval_drawer
각 옵션의 뜻은 이렇습니다.
| 옵션 | 뜻 |
|---|---|
--policy.path | Hugging Face에서 가져올 학습된 모델 |
--env.task=drawer-open-v3 | 시킬 일. 모델에는 "Open a drawer"라는 문장으로 전달됩니다 |
--eval.n_episodes=3 | 3번 시도 |
--eval.use_async_envs=false | 시뮬레이터를 한 프로세스에서 돌림. Colab에서 오류를 피하려고 넣었습니다(막힐 때 표 참고) |
--rename_map | 시뮬레이터 카메라 이름(observation.image)을 모델이 기대하는 이름(observation.images.camera1)으로 연결 |
제 결과는 3번 중 3번 성공(pc_success: 100.0)이었고, 한 번에 약 52초, 모델 내려받기까지 합쳐 3분 정도 걸렸습니다. 결과 영상은 outputs/eval_drawer/videos/ 폴더에 저장됩니다.

모델은 카메라 화면, 로봇 손 위치, "Open a drawer"라는 문장을 보고 다음 동작 50개를 한꺼번에 계획하고, 그 동작을 마치면 바뀐 화면을 다시 보고 다음 50개를 계획합니다. Step 4처럼 녹화본을 트는 것이 아니라 매번 보고 정합니다.
같은 모델에 --env.task=button-press-v3만 바꿔서 다시 시키면 모델에는 "Press a button"이라는 문장이 들어가고, 이번에는 서랍 대신 버튼을 누릅니다. 제 환경에서는 이것도 3번 중 3번 성공했습니다. 모델 하나가 지시 문장에 따라 다른 일을 한다는 점이 VLA의 "L(Language)"이 하는 일입니다.
Step 4와 Step 5를 나란히 보면 피지컬 AI가 무엇인지 감이 옵니다. 녹화된 동작을 틀기만 하면 장면이 바뀌는 순간 실패하고, 보고 판단하는 모델은 지시와 화면에 맞춰 동작을 새로 만듭니다. 솔직히 덧붙이면, LeRobot 문서에 따르면 이 Meta-World 데이터는 물체와 목표 위치를 고정한 MT50 평가용이라 "처음 보는 배치에서도 되는가"까지 보여 주는 실험은 아닙니다. 그리고 이 모델은 Meta-World 가상 로봇으로 학습한 것이라, Step 3의 SO-101이나 여러분 책상 위 로봇에 바로 쓸 수는 없습니다. 내 로봇에서 쓰려면 내 로봇으로 모은 데이터로 다시 학습해야 합니다.
Step 6. 실물 로봇으로 넘어갈지 정하기
여기까지 해 보고 더 해 보고 싶다면 실물 로봇팔을 고민할 차례입니다. 이 단계는 공식 문서와 판매처 정보를 정리한 것이고, 저는 아직 실물 SO-101로 학습까지 해 보지 않았습니다.
입문용으로 가장 많이 쓰는 것은 Hugging Face와 The Robot Studio가 공개한 SO-101입니다. 설계도가 오픈소스라 부품을 직접 사서 3D 프린터로 뽑을 수도 있고, 완제품 키트를 살 수도 있습니다.
| 구성 | 비용(참고) | 출처 |
|---|---|---|
| 부품만, 리더+팔로워 두 팔 | $229.88 | 공식 저장소 부품표, 미국 가격 |
| 부품만, 팔로워 한 팔 | $121.94 | 같은 부품표 |
| 판매 키트 예: 두 팔 + 카메라, 미조립 | $329 | Robonine |
부품표 가격은 SO-ARM100 공식 저장소 기준이고 3D 프린팅 파트, 카메라, 배송비, 관세는 빠져 있습니다. 판매 키트는 판매처마다 구성(조립 여부, 카메라, 3D 프린팅 파트 포함 여부)이 달라서 결제 전에 꼭 확인해야 합니다. 직접 출력한다면 저장소 권장값은 PLA+ 소재, 채움(infill) 15%입니다.
처음 살 때 알아 둘 점은 세 가지입니다.
- 두 팔을 사야 합니다. 사람이 움직이는 리더 팔과 따라 하는 팔로워 팔이 있어야 시연 데이터를 모을 수 있습니다. "팔로워만" 들어 있는 키트로는 텔레오퍼레이션을 못 합니다.
- 학습에는 GPU가 필요합니다. LeRobot 문서 기준으로 ACT 모델 10만 스텝 학습에 A100 GPU로 약 1.5시간이 걸립니다. 노트북 대신 Colab 유료 GPU나 클라우드를 쓰는 경우가 많습니다.
- 장난감 수준의 팔입니다. 플라스틱 몸체와 취미용 서보라 무게와 정밀도에 한계가 있고 안전 정지 장치가 없습니다. 책상에 고정하고, 정책이 돌 때는 손을 가까이 두지 않습니다.
실물이 생긴 뒤의 흐름은 LeRobot 공식 안내대로 네 단계입니다. 리더 팔로 조종하고(텔레오퍼레이션), 시연을 50번 정도 녹화하고, 그 데이터로 정책을 학습하고, 로봇에 올려서 혼자 하게 합니다. Step 2에서 연 데이터셋이 바로 이 과정으로 만들어진 것입니다.
Step 7. 내 위치에 맞는 다음 코스 고르기
피지컬 AI는 로봇 공학, 머신러닝, 하드웨어, 산업 현장이 모두 걸친 분야라 누구나 같은 길로 갈 필요가 없습니다.
| 나는 | 다음에 할 일 |
|---|---|
| 개발자·학생 | Hugging Face의 무료 교재 Robot Learning: A Tutorial로 이론을 잡고, Colab 노트북으로 ACT나 SmolVLA를 직접 학습해 봅니다. 시뮬레이션을 깊게 보고 싶다면 NVIDIA의 Isaac Lab 입문 과정이 SO-101로 시험관을 꽂는 과제를 끝까지 안내합니다 |
| 기획·비개발 직군 | 오늘 해 본 4단계(데이터, 시뮬레이션, 재생, VLA)를 기준으로 뉴스와 발표를 읽어 봅니다. "어떤 데이터를 몇 시간 모았나", "시뮬레이션 성공률인가 실제 로봇 성공률인가"만 물어봐도 과장된 발표를 걸러낼 수 있습니다 |
| 사업·현장 담당 | 우리 현장의 반복 작업 중 "사람이 50번 시연할 수 있고, 실패해도 위험하지 않은 일"을 하나 고릅니다. 정부의 2027년 피지컬 AI 실증 사업은 국회 예산 심의 뒤 공고가 나오니 그 전에 후보 과제를 정리해 두면 좋습니다 |
막힐 때
| 증상 | 원인 | 해결 |
|---|---|---|
NamespaceNotFound: Namespace gym_pusht not found 같은 오류로 평가가 멈춤 | 시뮬레이터를 여러 프로세스로 띄울 때 환경 등록이 새 프로세스에 전달되지 않음(Colab에서 확인) | lerobot-eval에 --eval.use_async_envs=false를 붙입니다 |
Feature mismatch ... Missing features: ['observation.images.camera1'] | 시뮬레이터 카메라 이름과 모델이 학습 때 쓴 카메라 이름이 다름 | --rename_map='{"시뮬레이터 이름": "모델 이름"}'으로 연결합니다 |
ProcessorMigrationError: ... requires migration to processor format | 예전 형식으로 올라온 모델(예: 2025년 3월에 올라온 lerobot/diffusion_pusht). 0.6.1에서 마이그레이션 스크립트도 제 환경에서는 실패했습니다 | 모델 페이지 파일 목록에 policy_preprocessor.json이 있는 최근 모델을 고릅니다 |
| 시뮬레이션이 한 스텝에 1~2초씩 걸림 | Colab 무료 런타임에서 MuJoCo 화면을 CPU로 그림 | 정상입니다. 스텝 수를 줄이거나(actions[::5]) 기다립니다 |
Refusing to execute remote code | Hub 환경을 불러올 때 동의 옵션이 빠짐 | make_env(..., trust_remote_code=True). 믿을 수 있는 조직의 환경에만 씁니다 |
실행이 끝날 때 Exception ignored ... mujoco/egl ... TypeError: 'NoneType' object is not callable | 파이썬이 종료되면서 가상 카메라 그림판을 정리하는 순서 문제 | 결과에는 영향이 없습니다. 무시해도 됩니다 |
You are sending unauthenticated requests to the HF Hub 경고 | Hugging Face 로그인 없이 내려받음 | 무시해도 됩니다. 자주 쓰면 Hugging Face 토큰을 등록하면 빨라집니다 |
정리
- 피지컬 AI는 보고, 판단하고, 움직이는 AI입니다. 생성형 AI와 달리 실수 비용이 크고 데이터가 부족합니다.
- 로봇 데이터는 "카메라 화면, 지금 관절 각도, 다음 목표 각도"를 1초에 수십 번 기록한 것입니다.
- 사람 동작을 그대로 재생하면 장면이 조금만 달라져도 실패합니다(제 실험에서 큐브 0개). 그래서 화면을 보고 매 순간 동작을 고르는 정책, 그중에서도 말까지 알아듣는 VLA를 학습시킵니다.
- 로봇 없이도 Colab 무료 GPU에서 데이터 열기, 가상 로봇팔 띄우기, VLA 돌리기까지 30분이면 해 볼 수 있습니다. 실물 로봇은 그다음에 결정해도 늦지 않습니다.

