가상 로봇 수천 대가 11번 배운 다가가기 — 네 번은 점수표의 빈틈으로 무너졌다
교육용 AMR로봇암이 블록까지 다가가는 한 단계만 강화학습으로 가르쳤습니다. 11번 학습시켜 네 번은 "가만히 서 있기" 같은 보상 허점으로 무너졌고, 학습 점수가 좋아 보였던 한 번은 실제로는 한 번도 도착하지 못했습니다. 마지막 정책은 가상 환경 200번 중 199번 도착했지만 목표 시간에는 미치지 못했습니다.

11번 학습시켰고, 그중 네 번은 무너졌습니다. 교육용 AMR로봇암이 블록까지 다가가는 한 단계를 강화학습으로 가르친 기록입니다. 무너진 학습은 학습 점수가 아니라 따로 200번씩 시험해 보는 평가로 잡아냈습니다. 마지막 정책은 가상 환경 200번 중 199번 목표에 도착했지만, 처음 정한 목표 시간에는 가상 환경에서도 미치지 못했습니다.
5편에서는 숫자 두 개짜리 작은 문제를 CPU로 짧은 시간에 학습시켰습니다. 이번 편은 그보다 훨씬 큰 문제를, 가상 로봇 수천 대를 동시에 움직여 학습시킨 이야기입니다.
왜 "다가가기" 한 단계만 학습시켰나요?
로봇이 블록을 집는 과정은 네 단계입니다. ① 블록 찾기 → ② 블록까지 다가가기 → ③ 블록 둘레를 돌며 각도 맞추기 → ④ 팔 뻗어 집기. 사람이 짠 규칙으로 돌렸을 때 가장 오래 걸린 곳이 ② 다가가기였습니다.
이 단계는 세 가지 목표가 서로 부딪칩니다.
- 빨리 가야 하는데, 빨리 가면 블록이 카메라 화면 아래로 빠져 놓칩니다.
- 가까운 블록을 보려면 카메라를 숙여야 하는데, 숙이는 동안 로봇은 멈춥니다.
- 정확한 자리에 서야 집을 수 있는데, 조금만 더 가면 블록을 밀어 버립니다.
나머지 세 단계는 계산으로 정확히 풀리고, 팔을 움직이는 것처럼 틀리면 위험한 동작도 있어 사람이 짠 규칙을 그대로 썼습니다.
원칙 — 계산으로 풀리는 곳은 계산으로, 목표가 서로 부딪쳐 정답을 정하기 어려운 곳에만 학습을 씁니다.
어떻게 학습시켰나요?
Isaac Lab에서 가상 로봇 수천 대를 동시에 움직이며 학습시켰습니다. 로봇은 짧은 간격마다 블록이 어디에 보이는지, 카메라가 얼마나 숙여져 있는지, 직전에 무엇을 했는지 등을 보고 앞으로 갈 속도, 옆으로 갈 속도, 카메라를 숙일지를 정합니다. 이렇게 정하는 규칙을 정책이라고 부릅니다.
수천 대의 카메라 영상을 모두 그리면 너무 느려서, 영상을 그리는 대신 "이 카메라 자세에서 블록이 보이는지, 화면 어디에 보이는지"를 계산해 넣었습니다. 대신 실물 카메라처럼 늦게 들어오고 흔들리는 값을 넣었습니다.
학습을 시작하기 전에 사람이 짠 규칙을 가상 환경에서 똑같이 재현했습니다. 처음에는 규칙을 짐작으로 옮겼다가 64번 중 57번이 블록을 지나쳤고, 실물 프로그램을 그대로 옮긴 뒤에야 실물 기록과 같은 경향이 나왔습니다. 비교 기준이 틀리면 학습이 나아졌는지도 말할 수 없기 때문입니다.
점수표는 어떻게 정했나요?
강화학습은 점수를 가장 많이 받는 행동을 찾습니다. 그래서 점수표가 곧 "무엇을 원하는지"입니다. 중요도는 놓치지 않기·지나치지 않기 > 정확히 서기 > 빨리 가기 순서로 정했습니다.
| 항목 | 더함/뺌 | 뜻 |
|---|---|---|
| 다가감 | 더함 | 블록에 가까워질수록 조금씩 |
| 도착 | 더함 | 도착하면 크게 |
| 시간 | 뺌 | 오래 걸릴수록 손해 |
| 놓침 | 뺌 | 다시 찾아야 함 |
| 지나침 | 뺌 | 목표를 넘어 더 가면 그 자리에서 끝 |
| 카메라 숙임 | 뺌 | 쓸데없는 숙임 줄이기 |
도착은 카메라로 잰 값이 아니라 가상 환경 속 실제 거리로 판정했습니다. 측정값이 흔들려 우연히 범위에 들어온 순간에 점수가 나는 허점을 막기 위해서입니다.
11번의 학습에서 무슨 일이 있었나요?
| 차수 | 바꾼 것 | 결과(가상 환경 200번) |
|---|---|---|
| 1차 | 처음 학습 | 거의 움직이지 않음 — "제자리에 서 있기" |
| 2차 | 일부를 블록 가까이에서 출발 | 여전히 제자리 |
| 규칙 흉내 | 사람이 짠 규칙을 먼저 따라 하게 함 | 도착 0번(지나침 76번) |
| 3차 | 흉내에서 출발해 학습 | 181번 도착, 중앙값 22.4초 |
| 4차 | 더 오래 학습 | 빨라졌지만, 카메라 각도가 ±3° 틀어지면 33번 지나침 |
| 5차 | 카메라 오차를 한 번에 크게 넣음 | 다시 제자리 |
| 6차 | 오차를 작게부터 조금씩 | 185번 도착 |
| 7차 | 더 큰 오차로 더 학습 | 도착 0번 — 학습 점수는 좋아 보였음 |
| 8차 | 부드러운 가감속 점수 추가 | 200번 도착, 중앙값 19.9초 |
| 9차 | 실물에서 확인 안 된 가정을 넣음 | 빨라지지 않아 버림 |
| 10차 | 출발 조건을 무작위로 흔듦 | 199번 도착 — 옆걸음이 한쪽으로 쏠리는 버릇이 남음 |
| 11차 | 좌우 대칭 학습(마지막) | 쏠림은 사라졌지만 77번 도착 → 쓰지 않음 |
1차: 벌점이 무서워 시험을 안 보는 학생
다가가다 놓치면 크게 깎이고, 가만히 서 있으면 덜 깎이는 점수표였습니다. 로봇은 아예 움직이지 않는 쪽을 골랐습니다. 점수표에 빈틈이 있으면 강화학습은 정확히 그 빈틈을 찾아냅니다.
규칙 흉내: 드문 동작은 따라 하지 않는다
사람이 짠 규칙을 먼저 따라 하게 했더니, 처음에는 카메라를 한 번도 숙이지 않았습니다. 숙이는 순간은 전체 예시에서 아주 적은 부분뿐이라, "안 숙인다"만 배워도 대부분 맞기 때문입니다. 드문 숙임 예시에 큰 무게를 주고 나서야 숙이기를 따라 했습니다. 흉내만으로는 도착하지 못했지만, 여기서 출발한 3차부터 학습이 풀리기 시작했습니다.
5차: 한 번에 어렵게 하면 포기한다
4차 정책은 카메라 각도가 조금만 틀어져도 블록을 지나쳤습니다. 그래서 오차를 한 번에 크게 넣었더니 다시 제자리에 서 버렸습니다. 지나침이 잦아지자 다가가기 자체를 포기한 것으로 보입니다. 오차를 작은 값부터 조금씩 키운 6차에서야 지나침이 줄었습니다.
7차: 학습 점수만 믿으면 안 된다
7차는 학습하면서 받은 평균 점수가 정상처럼 보였습니다. 하지만 따로 200번 시험해 보니 한 번도 도착하지 못했습니다. 블록 가까이에서 출발하는 쉬운 시도가 섞여 점수가 부풀었을 것으로 추정합니다. 그래서 차수마다 학습 점수와 별개로 같은 조건의 200번 평가를 돌렸습니다.
부드럽게 움직이라고 했더니 빨라졌습니다
"출발할 때도 멈출 때도 급하게 하지 말 것"이라는 조건을 더했습니다. 가속도에 한계를 걸지 않고, 가속도가 클수록 더 크게 깎는 점수만 넣었습니다.
| 가상 환경 200번 | 6차 | 8차(부드러운 가감속) |
|---|---|---|
| 도착 | 185번 | 200번 |
| 도착 시간 중앙값 | 21.0초 | 19.9초 |
| 최대 가속도 | 1.69 m/s² | 0.61 m/s² |
조건을 하나 더했는데 오히려 빨라졌습니다. 속도 그래프는 급출발·급정지의 "네모 계단"에서 "둥근 언덕"으로 바뀌었습니다. 빨라진 이유는 따로 시험하지 않았지만, 급정지 뒤 다시 속도를 올리는 시간이 줄어든 영향으로 보입니다.
최종 정책은 어떻게 골랐나요?
8차는 200번 모두 도착했지만, 실물 주행 기록을 넣어 정책의 대답만 보는 시험에서 블록 반대쪽으로 옆걸음하는 경우가 나왔습니다. 입력 하나만 바꿔 넣고 대답을 보는 "찌르기 시험"으로 다시 확인했습니다. 10차로도 쏠림이 완전히 사라지지 않았고, 좌우 대칭으로 학습한 11차는 쏠림을 없앤 대신 도착이 77번으로 떨어졌습니다.
그래서 학습을 11차에서 멈추고, 10차 정책에 규칙 한 줄을 더했습니다. "블록이 옆에 있는데 정책이 반대쪽으로 옆걸음하려 하면, 옆 속도를 0으로 바꾼다."
이 한 줄이 새 문제를 만들었습니다. 로봇 없이 명령과 결과를 이어 계산하는 모의 주행 200번에서, 5번은 로봇이 계속 서 있었습니다. 정책이 반대쪽으로 아주 작은 옆걸음만 내고, 규칙이 그것을 0으로 바꾸면서 서로 막힌 것입니다. "한동안 명령이 거의 0이면 잠깐 사람이 짠 규칙의 명령을 쓴다"는 탈출 규칙을 더한 뒤 200번 모두 움직였습니다.
| 최종 정책(가상 환경 200번) | 결과 |
|---|---|
| 도착 / 지나침 / 놓침 | 199 / 0 / 0(시간 초과 1) |
| 도착 시간 중앙값 | 21.7초 |
| 최대 가속도 | 0.59 m/s² |
| 카메라 각도 ±3° 틀어짐 | 198번 도착, 지나침 0 |
같은 가상 환경에서 사람이 짠 규칙은 최대 가속도 1.71 m/s²였습니다. 다만 규칙 쪽은 200번 전체의 중앙값이고, 정책 쪽은 도착한 시도의 중앙값이라 재는 범위가 조금 다릅니다.
아직 이루지 못한 것
- 목표 시간 18초 이하에는 미치지 못했습니다. 가상 환경에서도 21.7초입니다.
- 좌우가 완전히 대칭인 정책은 만들지 못했습니다. 지금은 규칙 한 줄로 막고 있습니다.
- 가상 로봇의 움직임 근거가 약합니다. 가상 로봇은 실물 시험 값으로 맞췄는데, 그 시험에 쓴 로봇의 이동 기록이 실제 움직임이 아니라 보낸 명령으로 계산한 값이었습니다(5편과 같은 문제). 아주 느릴 때 실제로 움직이는 양이 명령보다 적다고 가정하고(80%, 60%) 다시 평가해 보니 도착은 흔들리지 않았지만, 사람이 짠 규칙보다 빠른 정도가 3.8초에서 60%일 때 0.9초까지 줄었습니다. 실제 움직임을 다시 재야 학습의 이득을 정확히 말할 수 있습니다.
이 과정에서 배운 것
- 점수표의 빈틈은 반드시 찾아냅니다. "가만히 서 있기"가 덜 손해라면 로봇은 서 있습니다.
- 학습 점수와 실제 과제 평가는 따로 봅니다. 7차는 점수가 좋았지만 도착 0번이었습니다.
- 드문 동작은 무게를 줘야 따라 합니다. 숙이기처럼 가끔 나오는 동작은 그냥 두면 사라집니다.
- 어려움은 조금씩 키웁니다. 한 번에 크게 키우면 학습이 포기합니다.
- 안전장치도 시험합니다. 문제를 막는 한 줄이 다른 문제를 만들 수 있습니다.
자주 묻는 질문
강화학습 정책이 사람이 짠 규칙보다 낫나요?
이 글의 비교는 모두 가상 환경 안의 값입니다. 가상 환경에서는 더 부드럽게 움직였지만 목표 시간에는 미치지 못했고, 가상 로봇의 움직임 근거가 약해 빠른 정도는 다시 재야 합니다. 실물에서의 비교는 다음 편에서 조건과 함께 적습니다.
학습이 잘되고 있는지는 무엇으로 판단하나요?
학습하면서 받는 점수만 보지 않고, 학습과 별개로 같은 조건에서 200번씩 시험해 도착·지나침·놓침을 셌습니다. 7차는 점수가 좋아 보였지만 이 평가에서 도착 0번이었습니다.
가상 로봇 수천 대를 돌리려면 어떤 컴퓨터가 필요한가요?
그래픽카드가 있는 PC 한 대로 학습했습니다. 카메라 영상을 그리지 않고 계산으로 대신해 수천 대를 동시에 돌릴 수 있었습니다.
이런 과정을 수업에서 다룰 수 있나요?
수업에서 다루는 범위와 방법은 교육 상담에서 안내합니다.
이 글의 숫자는 모두 Isaac Lab 2.3.2 가상 환경 값입니다. 가상 로봇은 바퀴를 굴리지 않고 차체에 속도를 직접 주는 방식이라 메카넘 바퀴의 옆 미끄러짐은 재현되지 않습니다.
다음 단계
다음 편에서는 이 정책을 실물 로봇에 넣고, 사람이 짠 규칙과 같은 자리에서 비교한 결과를 조건과 한계를 함께 적을 예정입니다. 수업에서 다루는 방법은 교육 상담에서 안내합니다.
사용한 버전: Isaac Lab 2.3.2
출처: 저희가 직접 진행한 교육용 AMR로봇암 블록 다가가기 강화학습(2026-09-28). 학습 환경의 세부 설정(점수 값, 도착 판정 기준, 신경망 구조, 학습 설정값)은 이 글에 싣지 않았습니다.
이 글과 그림의 저작권은 SV로보틱스에 있습니다. 원문 링크를 밝힌 인용은 환영하며, 전문 복제·재배포와 교육 자료로의 전재는 허락이 필요합니다.