Study Archives/Robotics

[로봇 학습의 이해 ②] 시뮬레이션과 Sim-to-Real

ns4A

1편에서 로봇 행동 생성이라는 관점을 먼저 살펴봤습니다.
로봇은 단순히 모터를 움직이는 기계가 아니라, 상황을 인식하고 목표를 해석한 뒤 적절한 행동을 만들어내는 시스템에 가깝다고 정리할 수 있었습니다.

그런데 여기서 자연스럽게 다음 질문이 생깁니다.

로봇이 이렇게 복잡한 행동을 배워야 한다면, 그 학습은 어디에서 이루어져야 할까요?

가장 직관적인 답은 현실입니다.
진짜 로봇을 실제 공간에 두고 반복적으로 학습시키면 되지 않을까 생각할 수 있습니다.
하지만 실제로는 이 방식이 생각보다 훨씬 비싸고, 느리고, 위험합니다.
그래서 로보틱스에서는 아주 오래전부터, 그리고 최근에는 더 적극적으로 시뮬레이션을 활용해 왔습니다.

이번 글에서는 로봇 시뮬레이션이 왜 중요한지, 현실 로봇 학습과 무엇이 다른지, 그리고 Sim-to-Real이라는 표현이 왜 자주 등장하는지까지 차근차근 정리해보겠습니다.


로봇 시뮬레이션이란 무엇일까

로봇 시뮬레이션은 말 그대로 현실의 로봇과 환경을 가상공간 안에 재현하는 것입니다.
다만 단순히 3D 화면에 로봇을 그려놓는 정도로 끝나는 것은 아닙니다.

진짜 로봇 시뮬레이션이 되려면 최소한 아래와 같은 요소가 함께 들어가야 합니다.

  • 로봇의 관절 구조
  • 링크의 길이와 질량
  • 충돌 판정
  • 마찰과 중력 같은 물리 효과
  • 카메라, LiDAR, IMU 같은 센서 출력
  • 로봇이 상호작용할 물체와 환경

즉, 시뮬레이터는 단순한 그래픽 툴이 아니라
로봇이 행동했을 때 어떤 결과가 나오는지 계산해주는 가상 실험실에 가깝습니다.

조금 쉽게 말하면, 현실에서는 로봇을 한 번 잘못 움직이면 물건을 떨어뜨리거나 장비를 부술 수 있습니다.
하지만 시뮬레이터 안에서는 같은 실수를 수천 번 반복해도 실제 비용이 거의 들지 않습니다.
이 차이가 생각보다 매우 큽니다.


왜 현실에서 바로 학습하면 안 될까

겉보기에는 현실 데이터가 가장 정확해 보입니다.
실제 센서로 보고, 실제 모터로 움직이고, 실제 환경에서 부딪혀 보는 것이니까요.

그런데 문제는 현실이 너무 비싸다는 데 있습니다.

1. 데이터 수집 비용이 크다

로봇 학습은 한두 번 움직여서 끝나지 않습니다.
같은 작업을 수백 번, 수천 번 반복해야 하는 경우가 많습니다.
그 과정에서 사람의 개입도 필요하고, 장비 세팅 시간도 들고, 환경을 다시 맞추는 비용도 계속 발생합니다.

2. 실패 비용이 크다

강화학습이나 탐색 기반 학습은 원래 시행착오를 많이 겪습니다.
즉, 잘못된 행동을 계속 시도하면서 점점 나아지는 구조입니다.
그런데 현실 로봇에서 이 시행착오를 그대로 허용하면 충돌, 파손, 과부하가 쉽게 발생할 수 있습니다.

3. 시간도 오래 걸린다

현실 세계에서는 로봇이 동시에 한 공간에서 한 번의 실험만 할 수 있는 경우가 많습니다.
반면 시뮬레이션에서는 같은 환경을 여러 개 복제해서 병렬로 돌릴 수 있습니다.
이 차이는 학습 속도에서 엄청난 격차를 만듭니다.

결국 현실은 정확하지만,
너무 비싸고 위험하고 느리다는 문제가 있습니다.


시뮬레이션이 중요한 이유

이제 반대로 시뮬레이션의 장점을 생각해보겠습니다.

반복 실험이 쉽다

시뮬레이터에서는 실험을 리셋하는 비용이 매우 작습니다.
실패하면 처음 상태로 되돌리고 다시 시작하면 됩니다.
현실처럼 물건을 다시 배치하거나 장비를 점검하는 시간이 거의 들지 않습니다.

위험한 시도도 가능하다

현실에서는 충돌이 위험한 행동도 시뮬레이터에서는 먼저 테스트해볼 수 있습니다.
그래서 로봇이 어떤 상황에서 실패하는지 더 공격적으로 확인할 수 있습니다.

대규모 병렬 학습이 가능하다

이 부분이 특히 중요합니다.
예를 들어 하나의 로봇 환경을 1개만 돌리는 것이 아니라, 같은 환경을 수백 개 혹은 수천 개 복제해 동시에 학습시킬 수 있습니다.
이렇게 하면 로봇이 훨씬 빠르게 다양한 경우를 경험하게 됩니다.

센서와 제어를 함께 검증할 수 있다

시뮬레이션은 단순히 강화학습만을 위한 도구가 아닙니다.
로봇 모델이 제대로 움직이는지, 센서 값이 어떻게 나오는지, 제어 로직이 이상 없는지까지 같이 볼 수 있습니다.
즉, 개발 초기 단계에서 하드웨어와 소프트웨어를 함께 점검하는 공간이 됩니다.

정리하면 시뮬레이터는
비용을 줄이고, 위험을 낮추고, 실험 속도를 높이는 도구라고 볼 수 있습니다.


Physical AI와 Embodied AI

최근 로보틱스를 공부하다 보면 Physical AI, Embodied AI 같은 표현이 자주 등장합니다.
둘 다 비슷해 보이지만 초점은 조금 다릅니다.

Embodied AI

Embodied AI는 말 그대로 몸을 가진 에이전트가 환경과 상호작용하며 학습하는 관점에 가깝습니다.
여기서는 “어떻게 배우는가”가 중요합니다.
즉, 센서를 통해 보고, 행동하고, 결과를 다시 받아 학습하는 루프 자체에 초점이 있습니다.

Physical AI

반면 Physical AI는 현실 세계의 물리적 문제를 실제로 해결하는 AI 시스템이라는 느낌이 더 강합니다.
즉, 실제 로봇이 움직이고, 물체를 옮기고, 공간을 탐색하고, 물리적 결과를 만들어내는 쪽에 초점이 있습니다.

조금 단순하게 구분하면 이렇습니다.

  • Embodied AI: 몸을 통해 배우는 관점
  • Physical AI: 물리 세계에서 실제로 작동하는 관점

둘은 완전히 분리되는 개념이라기보다, 많이 겹칩니다.
다만 로봇 시뮬레이션을 이해할 때는 이 차이를 알고 있으면 좋습니다.
시뮬레이터는 단순히 가상공간을 만드는 도구가 아니라,
몸을 가진 에이전트가 물리 세계를 배우는 연습장이기 때문입니다.


시뮬레이션에서 주로 배우는 것들

시뮬레이터 안에서 로봇이 할 수 있는 일은 생각보다 다양합니다.
그중 가장 대표적인 두 가지는 아래와 같습니다.

내비게이션

로봇이 공간 안에서 목적지까지 이동하는 문제입니다.
장애물을 피하고, 경로를 계획하고, 현재 위치를 추정하는 능력이 필요합니다.

매니퓰레이션

로봇 팔이나 그리퍼를 이용해 물체를 집고, 옮기고, 놓고, 조작하는 문제입니다.
같은 “움직임”이라도 내비게이션보다 훨씬 더 정밀한 접촉과 힘 조절이 필요합니다.

이 두 작업은 겉보기에는 달라 보이지만 공통점이 있습니다.
둘 다 현실에서는 실패 비용이 크고, 센서와 제어의 복잡도가 높기 때문에
시뮬레이션의 이점을 크게 누릴 수 있다는 점입니다.


Sim-to-Real은 왜 중요할까

여기까지 보면 시뮬레이션이 거의 만능처럼 보일 수도 있습니다.
그런데 실제로는 아주 중요한 문제가 하나 있습니다.

시뮬레이터는 현실이 아니라는 점입니다.

시뮬레이터에서 아무리 잘 배운 정책이라도, 현실 로봇에 바로 올리면 예상보다 성능이 떨어지는 경우가 많습니다.
이 차이를 보통 Sim-to-Real Gap이라고 부릅니다.

즉,

  • 시뮬레이션에서는 잘 됨
  • 실제 로봇에서는 이상하게 흔들림
  • 센서가 현실에서 더 지저분함
  • 마찰이나 충돌 반응이 기대와 다름

이런 문제가 생기는 것입니다.

그래서 로보틱스에서는 단순히 “시뮬레이션에서 학습했다”로 끝나지 않고,
시뮬레이션에서 배운 것을 현실로 얼마나 잘 옮길 수 있는가가 매우 중요한 문제가 됩니다.

이 과정을 Sim-to-Real이라고 부릅니다.


왜 시뮬레이션과 현실은 다를까

이 차이는 크게 두 가지로 나눠 생각하면 이해가 쉽습니다.

물리적 차이

시뮬레이터 안에서는 질량, 마찰, 강성, 충돌 계수 같은 값이 수치로 정해져 있습니다.
그런데 현실에서는 이 값들이 정확하게 고정되어 있지 않습니다.

예를 들어 같은 바닥처럼 보여도 미세하게 마찰이 다를 수 있고,
같은 물체라도 무게중심이 조금 어긋날 수 있으며,
관절의 유격이나 센서 오차도 계속 발생할 수 있습니다.

시각적 차이

카메라 기반 로봇의 경우에는 더 복잡합니다.
현실에서는 조명이 조금만 바뀌어도 이미지가 달라지고, 반사나 그림자도 생기고, 카메라 노이즈도 들어옵니다.
시뮬레이션 화면이 너무 깨끗하면 오히려 현실에서 성능이 떨어질 수 있습니다.

결국 시뮬레이션과 현실의 차이는
“가짜라서 안 된다”가 아니라,
현실은 생각보다 훨씬 불확실하고 지저분하다는 문제에 가깝습니다.


Sim-to-Real Gap을 줄이는 방법

그렇다면 이 차이를 어떻게 줄일 수 있을까요.
대표적으로 자주 이야기되는 방법이 두 가지 있습니다.

도메인 랜덤화

이 방법은 직관이 꽤 재미있습니다.
시뮬레이터를 일부러 더 불편하게 만드는 것입니다.

예를 들어 학습할 때마다

  • 조명을 조금씩 바꾸고
  • 물체 색을 바꾸고
  • 질량과 마찰을 흔들고
  • 카메라 각도와 노이즈를 조금씩 바꾸고
  • 배경 텍스처도 바꿔봅니다

이렇게 하면 로봇은 하나의 완벽한 환경에만 익숙해지는 대신,
조금씩 다른 수많은 환경에 적응하게 됩니다.

쉽게 말하면 “시험 문제를 미리 외우는 것”이 아니라
“문제 유형 자체에 익숙해지는 것”에 가깝습니다.

시스템 식별

이 방법은 반대로 현실을 더 잘 측정해서 시뮬레이터를 현실에 가깝게 맞추는 접근입니다.
로봇의 질량, 관성, 마찰, 구동 특성 같은 파라미터를 실제 실험으로 추정해서
시뮬레이터 안의 값도 그에 맞게 조정하는 방식입니다.

즉,

  • 도메인 랜덤화는 시뮬레이터를 다양하게 흔드는 방법
  • 시스템 식별은 시뮬레이터를 현실에 더 가깝게 맞추는 방법

이라고 이해하면 됩니다.

실제로는 두 접근이 함께 쓰이는 경우가 많습니다.


로봇 시뮬레이션의 실제 흐름

로봇 시뮬레이션을 하나의 개발 파이프라인으로 보면 보통 아래 흐름으로 생각할 수 있습니다.

1. 환경 구성

먼저 로봇이 활동할 공간을 만듭니다.
바닥, 벽, 책상, 장애물, 조명, 조작할 물체 등을 배치합니다.

2. 로봇 모델 구성

로봇의 링크, 관절, 질량, 충돌 모델, 센서, 말단장치를 정의합니다.
이 단계가 부정확하면 뒤에서 학습한 결과도 흔들리기 쉽습니다.

3. 관측과 행동 정의

로봇이 무엇을 볼 것인지, 무엇을 할 수 있는지를 정합니다.
예를 들어 입력은 카메라 이미지와 관절 상태, 출력은 관절 위치 명령이나 토크 명령이 될 수 있습니다.

4. 보상 혹은 목표 정의

강화학습이라면 어떤 행동이 좋은 행동인지 알려주는 보상을 설계해야 합니다.
모방학습이라면 어떤 시연을 따라야 하는지 정의해야 합니다.

5. 반복 학습

에이전트가 시행착오를 반복하면서 점점 더 나은 정책을 배웁니다.
이 단계에서 병렬 환경과 빠른 롤아웃이 큰 역할을 합니다.

6. 현실 이전

시뮬레이션에서 배운 정책을 실제 로봇으로 옮겨 테스트합니다.
이때 비로소 Sim-to-Real의 성패가 드러납니다.

이 흐름을 보면,
시뮬레이션은 단순한 “예행연습”이 아니라
현실 배포 이전의 전체 개발 과정이라고 보는 편이 더 맞습니다.


Gazebo, MuJoCo, Isaac Sim은 어떻게 다를까

로보틱스를 공부하다 보면 자주 마주치는 대표 시뮬레이터가 몇 가지 있습니다.
초보자 입장에서는 이름이 많아서 오히려 헷갈릴 수 있는데, 아주 거칠게만 구분하면 아래처럼 이해할 수 있습니다.

Gazebo

ROS와 함께 많이 등장하는 전통적인 로봇 시뮬레이터입니다.
센서와 환경 상호작용을 확인하고, 실제 로봇 소프트웨어와 연결해보는 데 익숙한 흐름을 제공합니다.
내비게이션, 센서 검증, 기본적인 로봇 테스트에서 많이 접하게 됩니다.

MuJoCo

접촉과 동역학 계산이 빠르고 강력해서 강화학습 실험에서 자주 쓰입니다.
렌더링보다 물리와 학습 루프 효율 쪽에 강점이 있는 편입니다.
로봇 팔뿐 아니라 다양한 제어 문제에서 널리 사용됩니다.

Isaac Sim

NVIDIA 생태계와 연결되는 시뮬레이터로, 고품질 렌더링과 GPU 활용, 대규모 병렬 학습과의 연결이 강점입니다.
특히 Sim-to-Real, 디지털 트윈, 고성능 로봇 학습 환경 쪽에서 자주 언급됩니다.

굳이 하나를 고르자면 어떤 것이 최고다라고 말하기는 어렵습니다.
결국 무엇을 하려는지에 따라 선택이 달라집니다.

  • ROS 연동과 전통적인 로봇 개발 흐름이 중요하면 Gazebo
  • 강화학습 실험 효율이 중요하면 MuJoCo
  • 고급 렌더링과 병렬 학습, NVIDIA 생태계 활용이 중요하면 Isaac Sim

정도로 이해하면 처음에는 충분합니다.


USD와 디지털 장면 표현

최근 시뮬레이션 이야기를 하다 보면 USD라는 표현도 자주 나옵니다.
USD는 Universal Scene Description의 약자로,
복잡한 3D 장면을 구조적으로 표현하기 위한 포맷이라고 생각하면 됩니다.

처음에는 조금 멀게 느껴질 수 있습니다.
하지만 로봇 시뮬레이션에서는 꽤 중요합니다.
왜냐하면 시뮬레이터 안에는 단순히 로봇만 있는 것이 아니라, 로봇이 상호작용할 환경 전체가 들어가야 하기 때문입니다.

예를 들어

  • 방 구조
  • 책상과 선반
  • 물체 배치
  • 카메라 위치
  • 조명
  • 충돌 가능한 지오메트리

이 모든 것을 일관된 형태로 표현해야 합니다.

즉, USD는 로봇을 위한 알고리즘 그 자체라기보다
로봇이 활동하는 3D 세상을 정리하는 언어에 가깝습니다.


마무리

로봇 시뮬레이션은 단순히 개발 편의를 위한 보조 도구가 아닙니다.
현실에서 바로 하기 어려운 수많은 실험을 대신 수행하고, 로봇이 안전하게 시행착오를 겪을 수 있게 해주는 핵심 인프라에 가깝습니다.

특히 최근처럼 로봇이 더 복잡한 행동을 배우고, 더 다양한 환경에서 동작해야 하는 시대에는
시뮬레이션의 중요성이 더 커질 수밖에 없습니다.

물론 시뮬레이터는 현실이 아닙니다.
그래서 Sim-to-Real gap이라는 어려운 문제도 계속 따라옵니다.
하지만 바로 그 문제를 줄이기 위해 도메인 랜덤화, 시스템 식별, 고품질 물리 엔진과 렌더링 기술이 계속 발전하고 있습니다.

결국 로봇 시뮬레이션은
현실을 완전히 대체하는 공간이라기보다,
현실에 들어가기 전에 최대한 많이 배우고 검증하는 공간이라고 보는 편이 가장 정확합니다.

다음 글에서는 이 시뮬레이션 환경 안에서 로봇이 실제로 어떤 방식으로 배우는지,
즉 강화학습의 가장 기본 개념인 에이전트, 상태, 행동, 보상, 그리고 MDP가 무엇인지부터 이어서 정리해보겠습니다.