개요
비행 순서 · 제어 구조- 전부 시뮬레이션 결과 · 질량·추력·흡착력·외란 크기는 가정값(07장)

설명 보기
테슬라는 2026년 10월 15일 로드스터 공개 행사에서 압축공기 노즐로 차를 띄워 공중에서 뒤집었다. 같은 추진 방식을 레일험지 양용로봇에 달아 시뮬레이션했다.
로봇은 비틀린 고리 레일 끝에서 앞뒤·옆으로 돌며 떨어져 나가고, 떨어지는 동안 노즐 10개로 자세를 바로잡아 네 다리로 내린다. 제어기는 0.01초마다 상태 32개(자세, 속도, 높이, 남은 공기, 노즐 힘, 발 접촉)를 읽고 밸브 10개의 열림을 정한다.
원리
300 → 40 bar · 제어 100 Hz압축공기 추진
- 추력 = 공기 유량 × 분사 속도
- 탱크 300 bar → 감압 40 bar
- 분사 속도 약 - m/s
설명 보기
노즐로 공기를 내뿜으면 그 반작용으로 몸이 반대쪽으로 밀린다. 추력은 1초에 내보내는 공기 질량에 분사 속도를 곱한 값이다. 탱크의 300 bar 공기를 40 bar로 낮춰 노즐에 보낸다. 막대로 밸브 열림을 바꾸면 위 네 칸을 다시 계산한다.
고리 레일에서 필요한 흡착력
- 반지름 1.9 m, 반 바퀴, 옆으로 3 m · 끝 15° 비틀림
- 비틀림 → 앞뒤로 도는 회전 + 옆으로 구르는 회전을 함께 받고 이탈
- 꼭대기: 레일 아래에 거꾸로 매달림
- 원심력 < 무게 → 자석 바퀴·옆 롤러가 당김(최대 1,200 N 가정)
설명 보기
고리 레일은 반지름 1.9 m로 반 바퀴 돌며 옆으로 3 m 비켜 간다. 꼭대기에서 로봇은 레일 아래에 거꾸로 매달린다. 원심력이 무게보다 작으면 레일이 로봇을 당겨야 하고, 이 힘은 자석 바퀴와 옆 롤러가 낸다. 원심력은 무게중심(레일에서 0.159 m 안쪽)이 도는 반지름으로 계산한다. 고리 마지막 40 %에서 레일이 진행 방향 축으로 15° 비틀려, 로봇은 앞뒤 회전(약 2.6 rad/s)에 옆 구르기(약 1.2 rad/s)를 더해 떠난다. 그래프는 꼭대기 이탈 속도가 5.0 m/s일 때 고리 위치별로 레일과 로봇 사이에 걸리는 힘이다.
외란 다섯 가지
- 무작위 · 크기는 가정값
- 이 쪽의 성공률·영상 전부에 적용
| 외란 | 크기(표준편차) | 원인 |
|---|---|---|
| 이탈 순간 회전 | 롤 0.9 · 피치 0.4 · 요 0.5 rad/s | 양쪽 롤러가 풀리는 시점 차이 |
| 이탈 순간 옆 속도 | 0.25 m/s | 위와 같음 |
| 돌풍 | 수평 2.5 · 수직 0.8 m/s | 바람(풍압 중심이 무게중심 12 cm 위) |
| 몸 비틀림 | 3.5 N·m | 분사 반동, 배관 장력 |
| 추력 흔들림 | 8 % | 감압기·밸브 |
강화학습 전과 후
PPO · 입력 32 · 은닉 256×2 · 밸브 10- 처음부터 PPO: 300만 스텝 동안 착지 0회
- PD 동작 따라 하기(행동 복제) = 학습 전
- PPO 100만 스텝: 34 % → 87 % (외란 넣기 전 평가)
- 외란 추가 뒤 50만 스텝, 고리 비틀림 추가 뒤 150만 스텝 더 학습
- 학습에 안 쓴 이탈 상태 200개 × 5조건, 착지 성공률(%)
설명 보기
학습 전 영상의 신경망은 레일을 놓을 때 생긴 회전을 바로잡지 못하고 다리 하나로 39° 기울어 내린다.
설명 보기
앞왼쪽 아래 노즐이 추력 40 %만 내는 경우다. PD는 4.7 m/s로 내려앉아 다리 완충 한계를 넘는다. 강화학습은 나머지 노즐로 균형을 맞춰 착지한다.
장애물 넘기
7.8 m/s · 최고 4.1 m · 360° 구르기- 장애물: 쓰러진 소나무 + 탈선 무개화차(높이 2.0 m)
- 학습 없음 · 정해 둔 순서를 PD로
- 외란 속 57/60 착지 · 보조 탱크 1개(6.8 L, 4 kg) 추가
단계 보기
- T+0.00 s7.8 m/s(시속 28 km) 주행, 나무 6 m 앞에서 레일 놓음
- T+0.75 s아래 노즐 4개 최대 → 위로 4.8 m/s, 다리 접음
- T+1.75 s최고점(몸 중심 약 4.1 m)에서 옆으로 한 바퀴 + 뒤로 돌아섬, 화차 위 0.8 m 이상 여유
- T+2.40 s다리 펴고 뒤 노즐로 감속, 건널목 착지
로드스터 시연에서 차는 세워 둔 트럭 위를 한 바퀴 구르며 넘었다. 여기서는 같은 기동을 선로 위로 옮겼다. 탱크 2개로는 착지 전에 공기가 떨어져 이 시연에만 보조 탱크를 더 달았다.
체험 녹화
브라우저 안 MuJoCo · 같은 신경망- 영상과 같은 물리 계산·신경망을 브라우저에서 돌린 화면
- 세 조건 · 같은 이탈 상태 · 같은 외란
- 긴 직선은 건너뛰고 추진 점화 6 m 앞부터 · 공중 구간 0.3배 속도
만든 과정
Python · MuJoCo · Blender · three.js- 물리 레일 구간 1자유도 계산 + 비행·착지 MuJoCo 3.16
- 기준 제어 PD(자세·낙하 속도·기수 방향)
- 학습 행동 복제 → PPO → 외란 50만 스텝 → 고리 비틀림 150만 스텝
- 가상 시연장 Blender 4.5 스크립트 · Poly Haven 텍스처 · Higgsfield 소품 6종
- 영상 Cycles 720p
- 체험 녹화 three.js + MuJoCo WebAssembly 화면 녹화
설명 보기
물리. 레일 구간은 레일을 따라가는 1자유도 계산으로 풀고, 레일이 당겨야 하는 힘이 흡착력을 넘으면 떨어진 것으로 본다. 레일을 놓은 뒤의 비행과 착지는 MuJoCo 3.16으로 푼다. 파이썬과 브라우저(WebAssembly)에서 같은 계산이 소수점 6자리까지 같게 나오는지 시험으로 확인했다.
기준 제어. 기운 만큼 되돌리는 회전력을 내고, 높이에 맞춘 낙하 속도 계획으로 추력을 정해 노즐 10개에 나눈다. 똑바로 선 뒤에는 기수를 수평 속도 반대쪽으로 돌려 뒤 노즐로 제동한다.
학습. PD 동작 3,000판을 신경망이 따라 하게 한 뒤 PPO로 학습했다. PPO 첫 100만 스텝은 가치 함수만 학습해 따라 한 동작이 무너지지 않게 했다. 이후 외란을 넣고 50만 스텝, 고리 끝 비틀림을 넣고 150만 스텝을 더 학습했다.
가상 시연장. KS60 레일 단면, PC 침목과 체결구, 쇄석 도상(돌 12만 개), 고리 레일 거더, 건널목을 스크립트로 만들었다. 소품은 모터카, 화차, 조명탑 등이다.
영상. 시뮬레이션 궤적을 0.01초 간격으로 기록해 렌더했다. 720p 한 장에 2~10초가 걸렸다.
가정값과 한계
sim/params.json- 로봇 질량
- 56 kg (A2 37 + 레일 주행모듈 10 + 추진 키트 9)
- 고압 용기
- 6.8 L × 2, 300 bar, 공기 4.4 kg
- 감압 · 밸브 지연
- 40 bar · 20 ms
- 노즐
- 아래 4 × 300 N, 뒤 4 × 150 N, 앞 옆 2 × 100 N
- 레일 흡착력
- 1,200 N (자석 바퀴 + 옆 롤러)
- 다리
- 스프링 3,000 N/m, 완충 행정 0.25 m
- 다리: 관절 대신 스프링·댐퍼
- 공기: 이상기체 근사, 노즐 효율 0.9
- 레일: 수직 힘만 검사, 미끄럼·진동 없음
- 분사: 공중에서는 노즐 원뿔, 분사가 2.5 m 안에서 지면에 닿을 때만 운무(벽면 제트 법칙으로 퍼짐), 밝기·짙기는 눈으로 맞춤
- 실물 시험 없음