목록으로
디지털 트윈
전체공개
한국어

디지털 트윈 기반 피지컬 AI 학습 — 4족 보행 로봇 Go2, 도면 없이 2층 재난 현장에 진입하다

Unitree Go2를 Newton 물리 엔진 위의 디지털 트윈으로 옮겨 계단 보행 정책을 GPU 병렬 강화학습으로 학습시키고, 일반 카메라 없이 라이다·열화상만으로 지도를 그리며 도면 없는 2층 건물의 목적지까지 진입하는 재난 대응 시나리오를 구축·검증한 과정입니다.

Go2가 카메라 없이 라이다와 열화상만으로 그린 2층 건물의 3차원 지도. 빨간 점은 1층 화점, 초록 구는 2층 목적지와 요구조자 위치
Go2가 카메라 없이 라이다와 열화상만으로 그린 2층 건물의 3차원 지도. 빨간 점은 1층 화점, 초록 구는 2층 목적지와 요구조자 위치

배경 — 도면 없는 재난 현장, 로봇이 먼저 들어간다

화재나 붕괴 현장에서 로봇의 첫 임무는 사람이 들어가기 전에 내부를 파악하는 것입니다. 그런데 현장은 연기로 가시거리가 1 m도 안 되고, 정전으로 조명도 없습니다. 사람의 눈과 같은 원리로 동작하는 일반 카메라는 거의 쓸모가 없습니다. 반면 라이다는 스스로 레이저를 쏘아 거리를 재고, 열화상 카메라는 물체가 내는 적외선으로 온도를 봅니다. 두 센서는 어둠의 영향을 받지 않고, 열화상은 연기도 상당 부분 투과합니다.

바퀴형 로봇은 계단과 문턱 앞에서 멈추지만 4족 보행 로봇은 넘을 수 있습니다. 이번 작업의 목표는 다음 시나리오를 시뮬레이션 안에서 끝까지 완성하는 것이었습니다.

Unitree Go2가 도면 없이 건물 입구에서 출발해, 라이다와 열화상만으로 지도를 그리며 계단 20단을 올라 2층 목적지까지 도착하고, 가는 길에 화점과 요구조자를 찾아낸다.

아래 영상이 최종 결과입니다. 먼저 로봇과 건물의 디지털 트윈(외형, 충돌 형상, 관절)을 보여 주고, 이어서 구조를 감춘 채 로봇이 스스로 지도를 넓혀 가며 2층까지 올라가는 과정을 보여 줍니다.

도면 없는 2층 진입 임무. 오른쪽 아래는 로봇의 열화상 영상, 오른쪽 위는 임무 상태이며 흰 점은 걸을 수 있는 면, 파란 점은 벽, 빨간 점은 화점이다

왜 디지털 트윈에서 학습하는가

4족 보행 로봇이 계단을 오르려면 다리 12개 관절을 초당 50번씩 조정해 균형을 잡아야 합니다. 이런 제어는 규칙으로 작성하기 어렵기 때문에, 요즘은 시뮬레이션 속에서 시행착오로 학습시키는 방식이 표준입니다. 실제 로봇으로 수백만 번 넘어지며 배울 수는 없으니, 로봇과 건물을 질량·관성·관절 한계·마찰까지 물리적으로 복제한 디지털 트윈을 만들고 그 안에서 수천 대를 동시에 학습시킵니다.

항목

내용

로봇

Unitree Go2 (구동 관절 12개)

물리 엔진

Newton 1.7 (NVIDIA Warp 기반, MuJoCo Warp 솔버)

학습

RSL-RL PPO, GPU 병렬 환경 2,048개

장비

NVIDIA GeForce RTX 3060 12 GB 1대

센서

라이다 + 열화상 카메라 (일반 카메라 미사용)

디지털 트윈 — 로봇과 건물을 물리 모델로 옮기기

보이는 모양과 계산하는 모양은 다르다

화면에 보이는 로봇의 매끈한 외형은 삼각형 수만 개로 이루어져 있어, 물리 엔진이 매 순간 접촉을 계산하기에는 너무 복잡합니다. 그래서 부품마다 단순한 볼록 껍질(convex hull) 형상을 따로 만들어 접촉 계산에 씁니다. 발이 계단 모서리에 걸리는지는 이 충돌 형상이 결정하므로, 시뮬레이션을 검증할 때는 반드시 충돌 형상부터 확인합니다.

Go2의 시각 형상 — 실제 로봇 외장을 그대로 옮긴 메시Go2의 시각 형상 — 실제 로봇 외장을 그대로 옮긴 메시 같은 로봇의 충돌 형상(Show Collision) — 물리 엔진은 이 단순화된 형상으로 접촉을 계산한다같은 로봇의 충돌 형상(Show Collision) — 물리 엔진은 이 단순화된 형상으로 접촉을 계산한다 관절 축(Show Joints) — 다리당 고관절 2축과 무릎 1축, 총 12개 관절을 정책이 50 Hz로 제어한다관절 축(Show Joints) — 다리당 고관절 2축과 무릎 1축, 총 12개 관절을 정책이 50 Hz로 제어한다

2층 건물 디지털 트윈

평가용 건물은 16 m × 10 m, 층고 3.0 m의 2층 구조입니다. 계단은 단높이 15 cm, 단너비 30 cm의 10단 계단 두 개가 중간 층계참에서 180° 꺾여 이어집니다. 1층에는 600 °C 화점을, 2층 목적지 근처에는 36.5 °C의 사람 크기 열원(요구조자)을 배치했습니다. 벽·바닥·계단은 모두 물리 충돌체이지만, 임무 중 로봇에게 이 구조는 주어지지 않습니다.

2층 건물의 충돌 형상. 로봇은 남쪽 출입구 앞에서 출발한다2층 건물의 충돌 형상. 로봇은 남쪽 출입구 앞에서 출발한다

Newton Viewer로 확인하기

Newton Viewer는 시뮬레이션을 실시간 3D로 확인하고 조작하는 도구입니다. 모델 오류는 대부분 이 화면에서 먼저 발견됩니다. 아래는 4족 로봇 100대(물체 1,300개)를 RTX 3060에서 약 237 FPS로 계산하는 모습입니다.

Newton Viewer — 왼쪽 패널에서 표시 항목을 켜고 끄며, 오른쪽 위에 FPS와 월드·물체·관절 수가 표시된다Newton Viewer — 왼쪽 패널에서 표시 항목을 켜고 끄며, 오른쪽 위에 FPS와 월드·물체·관절 수가 표시된다

기능

이번 작업에서의 용도

Pause · Step · Reset

로봇이 넘어지는 순간을 한 단계씩 진행하며 원인 확인

Show Visual · Show Collision

외형과 실제 접촉 계산 형상의 일치 여부 검증

Show Joints · Contacts · Center of Mass

관절 축 방향, 발 접촉 위치, 무게중심 확인

점·선·영상 기록 (log_points 등)

라이다 점군, 계획 경로, 열화상 영상을 같은 화면에 표시

창 없는 렌더링 · 프레임 캡처

이 글의 영상과 그림 제작 (1920×1080, 30 fps)

학습 — 계단을 오르는 보행 정책 만들기

기존 보행 정책은 계단을 못 오른다

Newton이 제공하는 Go2 사전학습 보행 정책은 평지용입니다. 같은 조건에서 시험해 보니 단높이 10 cm 이상 계단은 한 번도 통과하지 못했습니다. 이 정책은 몸의 자세와 관절 상태만 입력받기 때문에 앞에 계단이 있는지 볼 수 없습니다. 그래서 로봇 앞 지면의 높이를 입력으로 받는 계단 전용 정책을 새로 학습시켰습니다.

학습 설계

정책은 매 순간 93개 값을 보고 12개 관절의 목표 각도를 냅니다. 입력에는 몸의 속도와 기울기, 명령받은 속도, 관절 상태와 함께 로봇 앞 −0.3–0.9 m, 좌우 ±0.3 m 범위의 지면 높이 45점이 들어갑니다. 행동이 좋으면 가점, 나쁘면 감점하는 보상은 다음과 같이 설계했습니다.

보상 항목

의미

속도 추종 (+)

명령한 전진·회전 속도를 잘 따르면 가점

체공 시간 (+)

발을 끌지 않고 들어 올려 디디면 가점

정강이 접촉 (−)

허벅지·정강이가 단 모서리에 닿으면 감점

기울기·흔들림 (−)

몸통이 기울거나 출렁이면 감점

토크·관절 가속도 (−)

모터 과부하와 급격한 동작 억제

넘어짐 (−5, 종료)

기울기 60° 초과 또는 몸통이 바닥에 닿으면 종료

학습 지형은 단높이 0·4·7·10·13·15·17 cm의 계단 7종이며, 2,048대의 로봇이 이 지형 위에서 동시에 걷습니다. 1차 학습에서는 커리큘럼을 적용해, 낮은 계단에서 시작한 로봇이 계단을 끝까지 통과하면 한 단계 높은 계단으로 옮겨지게 했습니다. 로봇들이 배정된 계단 단계의 평균은 약 620회 반복 만에 15 cm 단계에 도달했고, 이후 최고 단계 근처를 유지했습니다.

학습 환경. 충돌 형상으로 지형을 먼저 보인 뒤 7종 계단에서의 병렬 보행을, 후반부에는 15 cm 계단에서 평지 정책과 학습 단계별 정책을 같은 명령으로 비교한다

단계

반복 · 경험량

소요 시간 (RTX 3060)

내용

1차 학습

2,000회 · 9,830만 스텝

131분

커리큘럼으로 계단 높이 단계적 상승

2차 학습

800회 · 3,932만 스텝

56분

회전 명령과 지면 높이 오차 보강 (아래 설명)

2,048대가 동시에 학습하므로 약 3시간의 학습이 로봇 1대 기준 약 32일의 경험(1억 3,760만 스텝 × 0.02초)에 해당합니다.

왜 2차 학습이 필요했나

1차 정책으로 계단은 잘 올랐지만, 실제 임무에 넣자 방향을 바꾸는 순간 반복해서 넘어졌습니다. 1차 학습의 명령이 대부분 직진이어서, 경로 계획이 실제로 내리는 느린 회전이나 층계참 위 회전은 거의 경험하지 못했기 때문입니다. 또 로봇이 직접 만든 지도에서 지면 높이가 3 cm만 어긋나도 계속 단을 오르려다 주저앉았습니다. 그래서 2차 학습에서는 회전 명령을 40%(걸으며 회전 25%, 제자리 회전 15%)로 늘리고, 지면 높이에 ±3 cm 오차를 섞었습니다.

같은 조건에서 세 정책을 비교한 결과입니다 (조건당 16대).

정책

계단 통과율 (4 / 10 / 15 / 17 cm)

느린 호 회전 넘어짐

층계참 위 회전 넘어짐

평지 사전학습 정책

31 / 0 / 0 / 0 %

0 %

6 %

1차 학습

81 / 69 / 94 / 75 %

25 %

31 %

2차 학습

100 / 100 / 94 / 75 %

0 %

6 %

학습된 정책은 학습한 범위 안에서만 믿을 수 있다는 점을 그대로 보여 주는 결과입니다. 정책을 쓸 경로 계획이 실제로 어떤 명령을 내리는지 먼저 확인하고, 그 분포에 맞춰 학습을 설계해야 합니다.

인식과 판단 — 라이다·열화상으로 지도를 그리며 이동

이번 작업에서 학습한 것은 보행 정책 하나입니다. 지도 작성, 경로 계획, 열원 판정은 검증 가능한 알고리즘으로 구현했습니다. 기능을 이렇게 나누면 어디서 실패했는지 추적할 수 있고, 기능마다 따로 검증하고 개선할 수 있습니다.

센서 구성 — 일반 카메라 없이

센서

사양

역할

라이다

수평 360° × 수직 +20 ~ −80°, 7,680점/스캔, 10 m, 5 Hz

바닥·계단·벽의 3차원 형상

열화상 카메라

160 × 120, 시야 70°, 5 Hz

화점(100 °C 이상), 요구조자(30–45 °C) 감지

두 센서는 Newton의 GPU 광선 추적으로 시뮬레이션하며, 로봇 몸통의 기울기를 그대로 따라 움직입니다.

3차원 지도 만들기

라이다가 찍은 점마다 면의 방향을 봅니다. 위를 향한 면은 걸을 수 있는 면, 나머지는 장애물로 10 × 10 × 5 cm 격자 칸에 기록하고, 각 칸에 열화상 온도를 함께 남깁니다. 여기에 실제로 부딪히며 찾아낸 판정 규칙을 더했습니다.

  • 챌판 판정: 아래에서 보면 위쪽 계단은 윗면이 안 보이고 수직면만 보입니다. 주변 0.5 m 안에 바로 아래 높이의 디딤면이 있으면 벽이 아니라 오를 수 있는 단으로 봅니다.
  • 낭떠러지 판정: 옆 칸이 0.2–1.6 m 꺼져 있으면 가장자리로 막습니다. 한 층 아래 바닥은 근거로 쓰지 않습니다.
  • 계단 측면: 계단 위에서는 디딤판 모서리가 옆 아래 바닥을 가립니다. 그래서 계단 위에서는 옆쪽에 같은 높이의 디딤면이 없으면 낭떠러지로 간주합니다.

길 찾기와 계단 모드

목적지가 아직 보이지 않으면 지도의 경계(미탐색 영역과 맞닿은 곳) 중 목적지에 가까워지는 곳으로 이동하며 지도를 넓힙니다. 넓은 공간에서는 효율적이지만, 폭 1.3 m의 계단에서는 목표가 계속 바뀌며 로봇을 가장자리로 몰았습니다. 그래서 실제 4족 로봇들처럼 계단 모드를 따로 두었습니다.

  1. 계단 인식: 지도의 디딤면에 평면을 맞춰 계단의 오르는 방향, 중심선, 첫 단 위치를 찾습니다.
  2. 정렬 접근: 첫 단 앞 중심선 위로 가서 오르는 방향으로 몸을 맞춥니다. 층계참처럼 좁은 곳에서는 확보된 평지 길이만큼만 물러섭니다.
  3. 직진 등반: 중심선을 따라 곧게 오르고, 앞쪽 지면이 평평해지면 층계참이나 위층에 도착한 것으로 봅니다.
  4. 다음 계단: 층계참에서 다음 계단을 같은 방식으로 찾아 오릅니다.

결과 — 도면 없이 2층 목적지까지

임무 성공률

시험

조건

결과

도면 기반 주행

평면도로 계획한 경로 추종, 정답 지면 높이 사용

5회 중 5회 2층 도착 (평균 68초)

무도면 진입

목적지 좌표만 주고 출발, 지도는 로봇이 직접 작성

8회 중 7회 2층 도착 (평균 93초)

무도면 진입에서 열화상은 1층 화점을 출발 후 16–22초에 8회 모두 찾았고, 2층 요구조자는 도착한 7회 모두 65–99초에 찾았습니다. 로봇이 그린 보행면 지도는 1층 평균 143 m², 2층 평균 68 m²입니다(층별 바닥 160 m²). 실패 1회는 층계참 끝을 지나쳐 추락한 경우였으며, 마지막 섹션의 남은 과제에 적었습니다.

계단 등반 중인 Go2. 지도에서 읽은 지면 높이를 입력으로 학습된 정책이 단을 인식한다계단 등반 중인 Go2. 지도에서 읽은 지면 높이를 입력으로 학습된 정책이 단을 인식한다 두 번째 계단을 올라 2층에 진입하는 장면. 노란 선은 계획된 경로두 번째 계단을 올라 2층에 진입하는 장면. 노란 선은 계획된 경로 로봇이 만든 지도(점)와 실제 건물 충돌체(색 상자)를 겹친 모습. 벽 위치가 일치한다로봇이 만든 지도(점)와 실제 건물 충돌체(색 상자)를 겹친 모습. 벽 위치가 일치한다

실패에서 배운 것

무도면 임무는 처음부터 성공하지 않았습니다. 실패할 때마다 원인을 추적해 학습 분포, 지도 판정 규칙, 계단 동작을 보완했습니다. 대부분은 실제 로봇에서도 그대로 나타날 문제이며, 디지털 트윈의 가치는 이런 실패를 실물과 현장을 위험에 빠뜨리지 않고 먼저 드러내는 데 있습니다.

관찰된 현상

원인

조치

평지에서 주저앉아 멈춤

지도의 지면 높이가 3 cm 어긋남

격자 정렬, 학습에 높이 오차 추가

회전하다 넘어짐

학습 명령에 회전이 거의 없음

2차 학습으로 회전 명령 보강

계단을 벽으로 판단

위쪽 단은 수직면만 보임

주변 디딤면 기준 챌판 판정

계단 옆으로 추락

디딤판이 옆 아래 바닥을 가림

계단 위 측면 미확인 영역을 낭떠러지로 간주

계단 입구·층계참에서 전복

좁은 계단에서 목표가 계속 바뀜

계단 모드 (인식 → 정렬 → 직진 등반)

2층에서 다시 계단으로 내려감

1층 바닥을 근거로 2층 바닥 대부분을 가장자리로 오판

낭떠러지 깊이를 1.6 m 이내로 제한

정리와 다음 단계

이번 작업으로 확인한 것

  • 디지털 트윈 하나로 학습부터 임무 검증까지 이어지는 루프를 RTX 3060 한 대에서 구축했습니다.
  • 지면 높이를 보는 학습 정책은 평지 정책이 넘지 못한 계단을 통과했고, 임무에서 드러난 약점을 학습 분포에 되돌려 넣자 회전 문제가 사라졌습니다.
  • 일반 카메라 없이 라이다와 열화상만으로 2층 건물의 지도를 만들고, 화점과 요구조자를 찾으며 목적지까지 도달했습니다.

아직 남은 과제

  • 위치 추정: 시뮬레이터의 정확한 로봇 위치를 사용했습니다. 연기 속 라이다 SLAM의 오차는 반영하지 않았습니다.
  • 센서 물리: 연기에 의한 라이다 감쇠와 열 확산·반사는 모델링하지 않았습니다.
  • 층계참 가장자리: 계단 모드가 층계참 도착을 늦게 판단하면 끝을 지나쳐 떨어지는 경우가 남아 있습니다.
  • 실기 이전: 마찰·질량·모터 특성 무작위화와 실제 로봇 시험이 필요합니다.
  • 열원 인식: 지금은 온도 구간 규칙입니다. 방화복을 입은 대원과 요구조자를 구분하려면 학습 기반 인식이 필요합니다.

다음 단계

  1. 실제 Go2의 기본 보행으로 국내 건물 계단을 실측해 보행 학습이 필요한 범위를 확정합니다.
  2. 국내 계단 치수 분포와 마찰·질량 무작위화로 학습 지형을 넓힙니다.
  3. 연기 환경 라이다 모델과 SLAM을 결합해 위치 오차 아래에서 임무를 검증합니다.
  4. 소방 훈련장에서 라이다·열화상 데이터를 모아 센서 모델을 보정합니다.

레퍼런스

  • Newton 물리 엔진: github.com/newton-physics/newton
  • RSL-RL (PPO 구현): github.com/leggedrobotics/rsl_rl
  • N. Rudin 외, "Learning to Walk in Minutes Using Massively Parallel Deep Reinforcement Learning", CoRL 2021
  • T. Miki 외, "Learning robust perceptive locomotion for quadrupedal robots in the wild", Science Robotics, 2022
  • J. Schulman 외, "Proximal Policy Optimization Algorithms", arXiv:1707.06347, 2017

첨부파일