01도입: 연구실과 드론 연구 소개
교수님은 본격적인 강의에 앞서 가벼운 분위기로 시작합니다. 이 수업이 매주 강연마다 문제가 하나씩 나오는 세미나 수업(seminar)이라는 점을 언급하면서, 오늘 다룰 내용의 동기와 필요성을 직접 답을 주기보다는 강하게 느끼도록 전달하겠다고 말합니다.
제목에 담긴 핵심 메시지는, 드론처럼 빠르게 움직이고 환경이 수시로 바뀌는 시스템에서는 미리 학습한 정책만으로는 부족하고, 실시간으로 빠르게 적응(online adaptation)하지 못하면 곧바로 추락(crash)으로 이어진다는 것입니다. 이 "적응하지 못하면 추락한다"는 문제의식이 강의 전체를 관통합니다.
강화학습(Reinforcement Learning, RL)은 에이전트가 시행착오를 통해 보상을 최대화하는 행동 정책을 학습하는 방법입니다. 그런데 학습 환경(시뮬레이션)과 실제 환경 사이에는 항상 차이(sim-to-real gap)가 존재합니다. 드론처럼 동역학이 빠르고 외란(바람·무게중심 변화 등)이 큰 시스템에서는 이 차이를 비행 중에 즉시 메워야 하므로, "빠른 온라인 적응"이 안전과 직결됩니다.
교수님 연구실은 주로 드론(drone)을 다루는 곳이라 드론 관련 영상과 사진이 많다고 소개합니다. 사진들을 가리키며 연구실 이름 AiMS가 새겨진 기계식 키보드, 학생들이 만든 로고, 졸업생들이 자신의 연구 주제를 모티프로 만든 키링 등을 소개합니다. 요즘은 생성형 AI로 그림도 열심히 만든다고 덧붙입니다.
이어 교수님은 연구 성과 못지않게 연구실 분위기와 동료 간의 유대를 강조합니다. 선후배·동료와 친하게 지내며 연구실에 애착을 갖고 좋은 분위기를 만드는 것도 중요하다고 말합니다. 즉 이 슬라이드는 본격적인 기술 내용에 들어가기 전, 연구실이 어떤 곳이고 어떤 문화를 가졌는지 보여주는 도입부입니다.
보통 드론으로 차량을 추적하거나 차량 위에 착륙하는 연구에서는 AprilTag(흑백 마커)를 붙여 6자유도 자세(6-DoF pose)를 정확히 얻습니다. 하지만 실생활에서는 추적 대상 차량에 일일이 태그를 붙일 수 없으므로, 교수님 연구실은 태그 없이(tagless) 차량을 추적하는 연구를 진행 중입니다. 아직 초기 단계라 성능이 아주 좋지는 않지만, 카메라 영상만으로 차량을 인식해 추적합니다.
여기서 비주얼 서보잉(visual servoing)은 크게 두 가지로 나뉩니다. IBVS(Image-Based Visual Servoing)는 이미지 평면상의 차량 위치를 그대로 제어 입력으로 쓰는 방식이고, PBVS(Position-Based Visual Servoing)는 이미지로 인식한 차량을 한 단계 더 나아가 추정기(estimator)로 실제 물리 세계의 3차원 위치를 추정한 뒤 그 좌표로 제어하는 방식입니다. 더 정밀한 제어를 위해서는 PBVS가 필요하며, 이 슬라이드의 EKF(확장 칼만 필터) 기반 위치 추정이 바로 그 추정기에 해당합니다.
오버레이의 EKF Pos는 확장 칼만 필터(Extended Kalman Filter)로 추정한 차량의 상대 위치입니다. FOV Margin은 차량이 카메라 화각(Field of View) 안에 얼마나 여유 있게 들어와 있는지를 나타내는 지표로, 이 값이 0에 가까워지면 차량이 시야를 벗어나 추적을 놓칠 위험이 커집니다. Gimbal은 카메라를 흔들림 없이 차량 쪽으로 향하게 잡아주는 장치입니다.
차량에 자율 착륙하거나 추적하는 문제에서, 차량이 정해진 경로(trajectory)를 따라가면 MPC(Model Predictive Control, 모델 예측 제어)가 잘 작동합니다. 그러나 차량이 무작위로(randomly) 움직이면 예측이 빗나가 MPC 성능이 떨어집니다. 그래서 카메라로 차량의 위치를 인식하되, 차량이 랜덤하게 움직여도 카메라 시야(FOV)를 벗어나지 않도록 제어하는 것이 핵심 목표입니다.
이를 위해 차량의 현재 위치와 속도 정보로 Reachable set(도달 가능 집합)을 계산합니다. 칼만 필터로 약 3단계 미래 궤적까지 전파(propagation)하여, 차량이 갈 수 있는 미래 위치의 가능 범위를 구하고, 이 reachable set이 항상 카메라 시야 안에 들어오도록 드론을 제어합니다. 교수님은 이 알고리즘이 상당히 좋다고 평가하며, 실외에서 빠른 속도로도 잘 작동할 것으로 기대하지만, 아직 완성 단계는 아니라 후속 학생이 이어서 연구해야 할 주제라고 말합니다.
Reachable set은 제어이론에서 "주어진 시스템이 현재 상태에서 일정 시간 안에 도달할 수 있는 모든 상태의 집합"을 뜻합니다. 차량의 한 점 위치만 시야에 두는 대신, "차량이 갈 수 있는 미래의 영역 전체"를 시야 안에 가두면, 차량이 갑자기 방향을 바꿔도 추적을 놓치지 않습니다. 이는 불확실한 움직임에 대비하는 보수적이면서 안전한 추적 전략입니다.
02비주얼 서버잉과 차량 추적
교수님 연구실(AIMS Lab)은 드론을 주로 다루는 곳이라, 도입부에서 연구실 분위기·로고·졸업생 키링 같은 가벼운 이야기로 시작합니다. 이는 동료들과 친하게 지내며 연구실에 애착을 갖는 분위기가 연구만큼이나 중요하다는 취지의 인사말입니다.
이어서 본론으로 들어가, 이 목차대로 적응형 강화학습(adaptation)이 왜 필요한지부터 시작해 사족보행 로봇과 드론 사례로 차례차례 설명하겠다고 예고합니다. 이번 섹션에서는 그중에서도 드론으로 움직이는 차량을 추적·착륙시키는 연구를 중심으로, 카메라 기반 비전 추적(비주얼 서버잉)과 시야 유지 문제를 먼저 다룹니다.
이 절의 핵심 질문은 "왜 그냥 강화학습이 아니라 적응형(adaptive) 강화학습이 필요한가?"입니다. 교수님은 뒤에서 실제 착륙 실패 사례를 들어, 모델 불확실성과 환경 변화(바람·공기밀도·배터리 상태 등)를 미리 다 알 수 없기 때문에 정책이 실시간으로 환경을 추정하고 거기에 맞춰 행동을 바꾸는 능력이 필요하다고 설명합니다.
적응이란, 로봇이 "내가 이런 행동(action)을 했을 때 내 상태(state)가 이렇게 바뀌었다"는 경험으로부터 "지금 환경이 어떤 환경이구나"를 추정해 그에 맞는 제어를 하는 것입니다. 이번 섹션의 차량 추적·착륙 문제도, 차량이 무작위로 움직이고 외란이 변하는 상황을 견뎌야 하므로 적응이 핵심이 됩니다.
이 연구는 카메라로 차량 위치를 인식해 추적하는데, 차량이 정해진 경로가 아니라 무작위로 움직이기 때문에 보통의 MPC(모델예측제어)만으로는 성능이 떨어집니다. 그래서 차량이 어떻게 움직여도 카메라 시야(FOV) 안에서 벗어나지 않도록, 차량의 위치·속도 정보로 Reachable Set(도달가능집합)을 만들었습니다. 약 8m 거리에서 미래 3단계 정도까지 차량 궤적을 전파(propagation)해, 그 차량이 갈 수 있는 미래 위치들의 가능 범위가 항상 시야 안에 들어오도록 드론을 제어하는 방식입니다.
추적을 위해 보통은 AprilTag(2D 바코드 같은 마커)를 차량에 붙입니다. 태그를 쓰면 6-DoF 포즈가 정확히 나와 좋지만, 실생활에서는 차량마다 태그를 붙일 수 없으니 결국 태그를 없애야 합니다. 그래서 태그 없이(태그리스, tagless) 추적하는 연구도 진행 중인데, 아직 초기 단계라 성능은 그리 높지 않습니다.
비주얼 서버잉(visual servoing)은 크게 둘입니다. IBVS(Image-Based Visual Servoing)는 이미지 상에서의 차량 위치를 그대로 제어 입력으로 씁니다. PBVS(Position-Based Visual Servoing)는 한 단계 더 나아가, 이미지에서 인식한 정보로 실제 물리 세계에서 차량이 어디 있는지 추정하는 추정기(estimator)를 두고, 그 추정 좌표로 제어합니다. 더 정밀한 제어를 하려면 PBVS를 써야 하며, 여기에 차량의 헤딩(heading)까지 추적해 정렬하게 됩니다. 교수님은 이 Reachable Set 알고리즘이 빠른 속도에서도 잘 작동할 것으로 보지만, 후속 학생이 이어서 발전시켜야 할 연구라고 덧붙입니다.
Reachable Set은 "현재 상태에서 가능한 입력·외란을 고려할 때 일정 시간 뒤 시스템이 도달할 수 있는 모든 상태의 집합"입니다. 차량의 미래 위치를 한 점이 아니라 집합(불확실성 영역)으로 다루면, 차량이 어디로 튀든 그 집합 전체를 시야에 담도록 드론을 미리 배치할 수 있어 추적 놓침을 줄입니다.
Asymmetric Actor-Critic은 학습 때 Critic에게만 시뮬레이터의 참값(특권 정보)을 주고 Actor는 실제 센서로 얻을 수 있는 정보만 쓰게 하는 기법입니다. 학습은 풍부한 정보로 안정적으로, 실제 배치는 현실적 관측만으로 가능해 Sim-to-Real 전이에 유리합니다. Bifilar pendulum은 두 가닥 실에 매달아 비틀림 주기를 재는 방식으로 드론의 관성 모멘트를 실측하는 장치입니다.
이 그림은 최종 목표인 실제 도로 위 움직이는 차량으로의 자율 착륙 장면을 보여줍니다. 정해진 트랙이 아닌 일반 도로처럼 차량이 자유롭게 움직이는 환경에서 드론이 따라붙어야 하므로, 앞서 설명한 비전 기반 추적과 시야 유지(Reachable Set)가 그대로 필요해집니다.
교수님은 이 연구가 매주 발표 문제를 푸는 세미나 수업과 맞닿아 있으며, 본인이 과거에 절실하게 필요성을 느꼈던 주제라고 강조합니다. 안전한 착륙을 위해 시뮬레이션에서 차량을 무작위로 움직이며 학습시키고, 이후 실제 환경 촬영으로 검증하는 단계를 밟았습니다.
이 영상은 실제 야외 실험 장면입니다. 시뮬레이션에서 차량을 무작위로 움직이며 잘 학습시킨 뒤, 학교 운동장과 시흥 미래모빌리티센터에서 실제 촬영을 했습니다. 학생이 차를 최대한 빠르게(약 7~8 m/s, 영상 기준 시속 25km 정도) 몰면서 그 위로 착륙을 시도했습니다.
한 번은 안전망(net)에 프로펠러가 걸려 그물이 운전석 쪽으로 확 끌려 들어오는 아찔한 일도 있었습니다. 그리고 착륙 목표 속도를 더 높였을 때는 실패했는데, 교수님은 그 원인을 세 가지로 정리합니다. ① 모델 파라미터 부정확(프로펠러 계수·팔 길이·질량·관성을 측정해도 100% 정확할 수 없음), ② 추력(Thrust Force) 변동, ③ 바람·돌풍(gust)의 변화를 인지하지 못함.
특히 추력은 흔히 Thrust ∝ (프로펠러 회전속도)² 공식을 쓰지만 이는 정지 상태(static) 가정이고, 주변 공기 흐름·공기 밀도(여름/겨울 온도차로 10~20% 변동)·배터리 SOC 등에 따라 계속 바뀝니다. 교수님은 이 중 세 번째인 바람 변화 미인지가 가장 큰 실패 원인이라 봤고, 바로 이런 문제를 푸는 것이 오늘의 주제인 Adaptation(적응형 RL)이라고 연결합니다.
여기서 도메인 랜덤화(Domain Randomization)가 왜 슬라이드 7에 함께 등장하는지 이해할 수 있습니다. 항력계수·풍속·풍향을 학습 중 무작위로 흔들어(앞 표의 범위) 다양한 환경을 미리 겪게 하면, 정책이 특정 파라미터에 과적합하지 않고 현실의 모델 오차·바람 변화에도 견디는 강건성을 얻습니다. 적응 모듈은 여기에 더해, 실행 중 관측 히스토리로 "지금의 외란"을 추정해 능동적으로 대응한다는 점에서 한 단계 더 나아간 접근입니다.
03드론 제어 실패 원인과 어댑테이션의 필요성
드론 배송 데모를 학교 운동장에서 시속 25km(7~8m/s)로 시도했더니, 마운트가 흔들리면서 그물에 프로펠러가 걸려 실패했다는 일화로 시작합니다. 왜 실패했을까를 여러 각도로 분석합니다. 먼저 파라미터 불일치 — 프로펠러 계수, 성형 계수, 팔 길이, 질량, 관성 모멘트를 다 측정했지만 100% 정확할 수는 없습니다.
다음은 모델 불확실성입니다. 프로펠러가 돌면 추력(Thrust Force)을 내는데, 보통 추력 = 어떤 계수 × 프로펠러 회전속도² 공식을 씁니다. 하지만 이건 정지 상태(static) 기준이고, 주변 공기 흐름에 따라 추력은 계속 바뀝니다. 유체역학에서 항력·양력을 다룰 때 계수·공기밀도·유속²로 표현하듯, 공기 밀도(온도)에 따라 추력이 여름·겨울 사이 10~20%까지 변합니다. 배터리 잔량(SOC)이 떨어지면 모터 출력도 따라 바뀌죠.
마지막으로 환경 변화 — 바람의 방향·크기·돌풍이 바뀌었는데 그걸 알아채지 못해 실패할 수 있습니다. 교수님은 이 세 번째 원인이 가장 크다고 봅니다. 그래서 오늘의 주제인 어댑테이션(Adaptation)이 이 문제들을 해결할 열쇠라고 짚습니다.
어댑테이션의 핵심 아이디어를 설명합니다. "내가 이런 액션을 했을 때 상태가 어떻게 바뀌었는가"라는 과거 기록을 보면 지금이 어떤 환경인지 추정할 수 있고, 그 환경에 맞는 행동을 하는 것이 바로 어댑테이션입니다. 그래서 입력으로 단순히 현재 관측(t)만이 아니라 과거 100스텝까지의 상태·액션 히스토리를 넣어줍니다.
왜 그냥 히스토리를 무작정 길게 넣지 않느냐는 질문에 답합니다. 시나리오마다 환경이 크게 바뀌는데, 강화학습은 원래 학습이 잘 안 됩니다(초반 샘플 효율이 나쁨). 입력에 긴 히스토리를 넣으면 입력 차원이 폭발하고, 네트워크의 웨이트 수도 급증해 학습이 더 어려워집니다. 그래서 히스토리를 직접 정책에 넣기보다 별도의 어댑테이션 모듈로 압축하는 설계가 필요하다는 맥락입니다.
Domain Randomization(도메인 무작위화)은 시뮬레이션에서 질량·마찰·바람 같은 파라미터를 무작위로 바꿔가며 학습시켜, 어떤 환경에서도 버티는 강건한 정책을 만드는 기법입니다. 다만 학습 때 본 범위를 벗어난 OOD(Out of Distribution) 상황에서는 성능이 보장되지 않습니다. 어댑테이션은 "환경을 무작위로 다 견뎌라"가 아니라 "현재 환경이 무엇인지 추정해 거기에 맞춰라"는 점에서 한 걸음 더 나아간 접근입니다.
어댑테이션 모듈이 가장 잘 작동하는 대표 사례를 둘로 정리합니다. 첫째 드론은 앞서 말한 대로 바람 같은 외란이 크게 변하므로 그 환경을 인지하는 능력이 필요합니다.
둘째 사족보행 로봇은 비전 시스템을 쓰지 않는다고 가정하면, 엔코더 값·다리에 달린 IMU 값·발끝 접촉 센서(contact sensor)만으로 다양한 지형을 걸어야 합니다. 이때 지형은 로봇 입장에서 일종의 외란(Disturbance)으로 나타납니다. 즉 강한 외란이 들어오는 시스템일수록 어댑테이션이 더 절실하다는 것이 이 슬라이드의 메시지입니다.
이제 첫 번째 사례 연구로 RMA(Rapid Motor Adaptation) 논문에 들어갑니다. 사족보행 로봇의 액션은 12개 조인트의 각도이고, 상태(state)로는 조인트 각도·각속도와 바디 오리엔테이션을 씁니다(센서로 측정 가능한 값들). 여기에 Privileged 정보(특권 정보)로 지형 마찰·모터 강도·배터리 전압에 따른 모터 출력 변화·페이로드 등 시뮬레이터만 아는 환경 변수들이 들어갑니다.
학습은 Phase 1, Phase 2로 나뉩니다. Phase 1에서는 이 특권 환경 변수들을 인코더에 넣어 잠재 벡터(latent vector)로 만들고, 그 벡터를 상태와 함께 정책에 넣어 액션을 만듭니다. 이때 인코더와 정책 두 네트워크가 동시에 학습됩니다. Phase 2(실제 배포 단계)에서는 특권 정보를 알 수 없으므로, 대신 상태·액션 히스토리를 어댑테이션 모듈에 넣어 잠재 벡터를 추정합니다. 이 추정값이 Phase 1의 환경 인코더가 낸 잠재 벡터와 같아지도록 학습시키는 것이 핵심입니다.
어댑테이션 모듈을 학습하는 데이터에는 두 가지 방식이 있습니다. ① Phase 1에서 잘 걷는 정책으로 만든 깨끗한 상태·액션 데이터를 쓰는 방식, ② 아직 weight가 엉망인 어댑테이션 모듈을 직접 시뮬레이션에 돌려, 거기서 나오는 (엉망일 수도 있는) 상태·액션으로 다시 학습시키는 방식입니다. 두 번째 방식이 더 좋은데, 자전거 비유로 설명합니다 — 균형이 무너지는 상황에서 핸들을 좌우로 크게 흔들어 잡는 법을 배워둬야, 나중에 자갈길 같은 이상한 환경에서도 대응할 수 있다는 것입니다. 그래서 배포 시 상태·액션이 엉망으로 들어와도 어댑테이션 모듈이 제대로 된 잠재 벡터를 복원할 수 있습니다. 마지막으로 리워드는 첫 항만 잘했을 때 주는 보상이고 나머지는 모두 페널티이며, 결과의 OOD(Out of Distribution)는 학습 범위(Training Range)를 벗어난 구간을 가리킵니다.
04RMA: 2단계 학습 구조
입력 개수가 늘면 강화학습(RL) 네트워크의 웨이트도 폭증해 학습이 어렵습니다. 그래서 어댑테이션 모듈이 빛을 발하는 대표적 경우가 둘인데, 바람이 수시로 바뀌는 드론과 비전 없이 걷는 4족보행 로봇입니다. 4족보행 로봇은 비전을 안 쓰면 엔코더 값, 몸체의 IMU 값, 접촉 센서만으로 다양한 지형을 걸어야 하는데, 이때 지형 자체가 외란(Disturbance)으로 표출됩니다. 이런 외란이 큰 시스템일수록 어댑테이션 모듈이 더 필요하다는 것이죠.
액션 공간은 다리당 3개씩 총 12개 조인트의 각도를 사용하고, 상태에는 조인트 각도·각속도, 바디 오리엔테이션 등 직접 측정 가능한 센서값이 들어갑니다. 반면 특권 정보(privileged)에는 센서로 못 재는 값들 — 모터 강도(Motor strength, 모터마다 다르고 배터리 전압이 떨어지면 변함), 무게중심, 마찰 등 — 이 포함됩니다.
학습은 두 단계로 진행됩니다. Phase 1에서 환경 변수를 인코딩해 latent vector를 만들고, 이를 상태와 함께 베이스 정책에 넣어 액션을 만들도록 인코더와 정책을 함께 학습합니다. 그런데 실제 배포 때는 이 특권 정보를 모르므로, Phase 2에서는 대신 상태·액션의 이력(History)을 어댑테이션 모듈에 통과시켜 latent vector를 복원합니다. 이때 나온 ẑ_t가 Phase 1 인코더가 만든 z_t와 같은 값을 내야 베이스 정책이 제대로 된 액션을 냅니다.
이 논문은 어느 쪽을 쓸까요? 옵션 1은 검은색 모듈(Phase 1에서 학습된 베이스 정책)이 잘 걷는 데이터만 만들어 주니, 어댑테이션 모듈도 정상적인 상태·액션만 보고 배웁니다. 반대로 옵션 2는 학습 도중 어댑테이션 모듈의 웨이트가 엉망이라 거기서 나온 latent vector도 엉망이고, 그러면 베이스 정책이 아무리 좋아도 시뮬레이션에서 로봇이 넘어지는 등 안 좋은(이상한) 행동이 섞여 나옵니다.
비유하면 자전거 배우기입니다. 처음엔 천천히 핸들을 좌우로 흔들며 균형 잡는 법을 배우고, 잘 타게 되면 핸들을 안 흔들고 쭉 갑니다. 그런데 나중에 자갈길을 만나거나 천천히 가야 할 때는 다시 좌우로 급격히 움직이며 균형을 잡아야 합니다. 만약 '잘 가는(정상) 데이터'로만 배웠다면 이런 위기 상황에 대처를 못 하겠죠.
그래서 이상한 행동까지 포함하는 옵션 2를 씁니다. 이렇게 학습해 두면 실제 배포 시 환경이 이상해서 액션·상태가 엉망으로 들어와도, 어댑테이션 모듈이 그로부터 제대로 된 latent vector를 복원할 수 있습니다.
Behavior Cloning은 전문가가 보여준 상태-액션 쌍을 그대로 흉내 내는 방식이라, 학습 중 본 적 없는 새로운 상태가 들어오면 엉뚱한 액션을 냅니다. 이게 OOD와 환경변화에 약한 근본 이유입니다. DAgger는 이 약점을 보완해, 정책이 직접 굴러가며 만나는 상태들에 전문가 정답을 계속 덧붙여 학습 분포를 넓힙니다.
이 개념이 앞 슬라이드의 옵션 2와 직결됩니다. 옵션 2는 어댑테이션 모듈이 스스로 만든 (때로 엉망인) 행동으로 시뮬레이션을 돌려, 정책이 실제로 마주칠 다양한 상태를 데이터로 모으는 on-policy 방식이기 때문입니다.
Phase 2는 강화학습이 아니라 지도학습이기 때문에, Phase 1보다 훨씬 적은 반복으로 빠르게 학습시킬 수 있습니다(슬라이드의 15,000 vs 1,000 iterations 차이). 어댑테이션 모듈은 시간축 이력을 다뤄야 하므로 CNN을 거쳐 시계열 패턴을 뽑은 뒤 선형 투영으로 latent를 만듭니다.
실행 단계에서는 어댑테이션 모듈(latent 추정)과 베이스 정책이 비동기로 돕니다. latent는 환경이 천천히 바뀌니 10 Hz로 충분하고, 액션은 빠른 제어가 필요하니 100 Hz로 돌립니다. 정책이 출력한 목표 각도와 현재 각도의 차이(Angle error)를 PD 제어로 토크로 바꿔 모터를 구동합니다.
리워드 튜닝을 보면 1번 항만 마이너스 부호가 없습니다. 즉 첫 번째 항은 잘 했을 때 주는 보상(전진 속도)이고, 나머지 9개는 전부 패널티입니다 — 옆으로 새거나, 일을 많이 하거나, 충격·진동이 크거나, 발이 미끄러지는 등의 바람직하지 않은 행동을 깎는 것이죠.
커리큘럼 러닝은 패널티를 처음엔 작게 줬다가 점점 키우고, 환경 파라미터(질량·마찰·모터 강도)의 난이도도 점진적으로 올립니다. 처음부터 어렵게 하면 학습이 안 되기 때문입니다.
결과에서 OOD(Out-Of-Distribution), 즉 학습 때 본 Training Range를 벗어난 Testing Range에서도 잘 된다고 주장합니다. 다만 솔직히 그 Range 차이가 그렇게 크지는 않아 보여서, OOD 일반화라는 주장은 다소 과한 면이 있다고 봅니다.
05사족보행 로봇 사례와 커리큘럼 러닝
이 연구는 지도교수인 Hutter 교수 그룹에서 나온 것으로, 공저자인 황제민 교수가 ETH에서 박사 후 한국(중앙대)으로 부임하면서도 ETH에 남아 있던 연구를 마무리해 함께 발표한 작업입니다.
핵심은 앞에서 본 Study 1(적응 모듈을 쓰는 2단계 학습)과 거의 같은 골격을 따른다는 점입니다. 즉 시뮬레이션에서 특권 정보(privileged information)로 교사 정책을 먼저 학습하고, 그다음 실제 로봇이 얻을 수 있는 관측만으로 학생 정책을 학습합니다. 다만 몇 가지 차이가 있는데, 이번 절에서는 그 차이점(특히 지형 난이도를 수치화한 커리큘럼 러닝)을 중심으로 살펴봅니다.
앞 연구와 똑같이 2단계 학습을 쓰지만, 가장 눈에 띄는 차이는 관측 공간이 훨씬 크다는 점입니다. 변수가 매우 많은데, 앞 연구에 없던 발 접촉 3D 힘(foot contact 3D force, 3×4)이 추가됐고, 지형 정보도 그냥 표시만 하던 것에서 지형 타입(terrain type)을 36개로 늘렸습니다. 이는 각 발 주위 9개 지점 × 발 4개 = 36의 높이 샘플을 떠서 발 밑 지형 형태를 풍부하게 보겠다는 뜻입니다.
이렇게 풍부한 관측·특권정보는 교사 정책이 시뮬레이션에서 "정답에 가까운" 행동을 배우게 해 주고, 실제 로봇에서는 이 정보들을 직접 못 보는 대신 이력을 TCN으로 인코딩해 비슷한 latent을 복원하는 구조입니다.
여기서 검은색으로 표시된 latent(중간 벡터)은 1단계에서 교사가 "잘 걷는 데이터"로 학습한 결과입니다. 만약 학생이 행동만 흉내(Naïve IL) 내도록 학습하면, 가중치가 엉망인 초기에 나오는 latent도 엉망이 되고, 그러면 base policy가 아무리 좋아도 시뮬레이션에서 로봇이 제대로 못 움직입니다. 그래서 이 논문은 행동뿐 아니라 latent 자체도 교사 것과 일치하도록 함께 학습합니다.
직관은 자전거 배우기 비유입니다. 처음엔 천천히 핸들을 좌우로 흔들며 균형 잡는 법을 배우고, 익숙해지면 흔들지 않고 쭉 갑니다. 그런데 나중에 갑자기 자갈길을 만나거나 천천히 가야 하면, 다시 그 "흔들며 균형 잡는" 회복 동작이 필요합니다. latent을 제대로 복원하도록 학습해 두면, 실제 배치(deploy) 시 환경이 이상해서 들어오는 관측이 엉망이어도 어댑테이션 모듈이 올바른 latent을 만들어 회복 동작까지 끌어낼 수 있다는 것입니다.
커리큘럼 러닝은 "난이도를 어떻게 정하느냐"가 어렵습니다. 이 연구는 지형을 거칠기·계단 높이 등 수치로 파라미터화하고(c_T), 거기에 더해 Traversability를 정의합니다. 핵심은 난이도를 지형 자체가 아니라 에이전트 입장에서 정한다는 점입니다. 에이전트가 잘 가면 쉬운 지형, 못 가면 어려운 지형으로, Tr=1은 100% 통과, Tr=0은 성공 확률 0을 의미합니다.
학습 효과가 가장 큰 건 너무 쉽지도 너무 어렵지도 않은(0.5~0.9) 지형입니다. 그런데 초기에는 정책이 덜 학습돼 모든 지형이 어렵고, 학습이 진행되면 대부분이 쉬워지므로 난이도를 계속 올려줘야 합니다. 이를 수치적으로 처리하려고 Particle Filter를 씁니다. 보통 파티클 필터는 상태 추정에서 여러 상태를 파티클로 놓고 좋은 상태에 더 큰 가중치를 주며 갱신하는데, 여기서는 지형 하나하나를 파티클로 세워 놓고, 에이전트를 돌려 보아 Traversability가 적당히 0.5~0.9로 나오는 지형에 높은 가중치를 주며 지형 집합을 계속 업데이트해 커리큘럼을 만듭니다.
여기서 RL이 직접 발 위치를 다 만드는 게 아니라, 규칙으로 만든 기본 발 궤적에 RL이 보정값(residual)을 더하는 구조입니다. 즉 정책은 "실제로 내야 할 행동과 기본 궤적의 차이"를 학습하고, 동시에 다리가 얼마나 빨리 움직일지(leg frequency)도 출력합니다. 이 둘을 합쳐 발끝의 최종 위치가 정해지면, 그 위치에 Inverse Kinematics를 풀어 목표 관절 각도를 얻습니다.
주파수 차이에 주목하세요. 정책은 50Hz로 돌지만, 몸이 계속 움직이기 때문에 발끝 위치를 관절 각도로 바꾸는 IK는 400Hz로 빠르게 계속 다시 풀어야 합니다. 그래야 실시간으로 정확한 관절 명령이 나옵니다. 보상 설계도 보면 첫 항(선속도)만 잘했을 때 주는 양(+)의 보상이고, 나머지 항들은 모두 과한 행동을 억제하는 패널티입니다.
결과의 핵심은 강건성(robustness)입니다. 적응형 커리큘럼으로 다양한 난이도를 거치며 학습한 정책이, 높은 턱이나 10kg 같은 무게가 추가된 학습 때 못 본 조건에서도 잘 동작한다는 것을 보입니다.
논문은 OOD(Out-Of-Distribution, 학습 범위를 벗어난 영역)에서도 잘 된다고 주장합니다. 다만 강의자는 "사실 그 범위가 그렇게 크지는 않았다"며 주장에 비해 외삽 폭은 제한적이라는 점을 짚었습니다. 그래도 페이로드/계단 같은 실사용 변형에 대한 강건성은 분명히 확인된다는 평가입니다.
06드론 역학과 제어 기초
여기서부터 주제가 드론으로 바뀝니다. 직전까지는 사족보행로봇에서 지형 하나하나를 파티클(Particle)로 두고 잘 걷는 지형에 높은 웨이트를 주며 업데이트하는 Particle Filter 기반 커리큘럼 학습, 정책 출력과 실제 액션의 차이를 레지듀얼(residual)로 정의하는 이야기, 그리고 발끝 위치에서 역기구학(Inverse Kinematics)을 풀어 관절 각을 구할 때 몸이 움직이므로 400Hz로 빠르게 풀어줘야 한다는 내용을 설명했습니다.
이제 같은 강화학습·제어 관점을 드론에 적용합니다. 다음 슬라이드들에서 "드론은 왜 사족보행로봇보다 제어가 어려운가", "어떤 계층 구조로 제어하는가"를 차례로 풀어갑니다.
드론이 앞으로 가려면 그냥 앞으로 밀 수 없습니다. 앞으로 기울여야 프로펠러 추력의 수평 성분과 중력이 합쳐져 전진 가속도가 생깁니다. 옆으로 갈 때도 마찬가지죠. 그래서 인과 관계가 거꾸로 흐릅니다. 위치(Position)를 바꾸려면 → 자세(밸런스)를 바꿔야 하고 → 그러려면 가속도를 바꿔야 하고 → 그러려면 드론의 각도(angle)를 바꿔야 하고 → 각속도(angular velocity)를 바꿔야 하고 → 몸체에 작용하는 모멘트(moment)를 바꿔야 하고 → 결국 각 프로펠러의 추력(thrust)을 바꿔야 합니다.
즉 4개 프로펠러 추력으로 세 방향 모멘트를 만들어내고, 그 모멘트로 자세를 잡아 위치를 제어하는 3계층 구조입니다. XY 모션은 피치로 앞뒤·롤로 좌우, 상하 모션은 Collective Thrust(전체 추력)로 직접 올리고 내립니다. 위로 갈수록(Position 쪽) 제어 주기가 느리고(50Hz), 아래로 갈수록(Angular Rate) 빠릅니다(250Hz~1kHz). 사슬의 위 단계일수록 키네매틱스(kinematics)에 가깝고, 아래로 갈수록 추력·모멘트 같은 다이나믹스(dynamics)에 가까워집니다.
Inertial Frame / Body Frame 구분이 핵심입니다. 위치·속도는 땅에 고정된 관성 좌표계(Inertial)에서 다루고, 각속도·모멘트는 기체에 붙은 몸체 좌표계(Body)에서 다룹니다. 또 화살표 옆 시간 단위(~μs ~ ~10ms)는 왜 PID가 계층적으로 쌓이는지를 설명합니다 — 빠른 안쪽 루프(자세)가 느린 바깥 루프(위치)를 받쳐주는, 전형적인 cascaded control 패턴입니다.
제어는 사슬을 거꾸로 내려갑니다. 하이레벨에서 "이만큼의 총 추력(T_t)과 세 방향 모멘트(τ_p, τ_r, τ_y)가 필요하다"가 먼저 정해지면, 그것을 만들어낼 4개 프로펠러 추력을 계산해야 합니다. 4개 추력으로부터 추력·모멘트를 얻는 행렬이 Allocation matrix(A)이고, 반대로 원하는 추력·모멘트로부터 각 프로펠러 추력을 역으로 구하는 행렬이 Mixer matrix(M)입니다. (대본에서 "리서브/인버스 매트릭스"라고 부른 것이 바로 이 Mixer 행렬입니다.)
그래서 실제 흐름은 이렇습니다. 자세 각으로 동역학을 풀면 총 추력과 XYZ 모멘트가 나오고, 거기에 Mixer 행렬을 곱하면 각 프로펠러가 내야 할 추력(Thrust Force)이 나옵니다. 이 값을 다음 슬라이드의 추력-회전수 관계로 변환하면 최종 명령인 프로펠러 RPM이 됩니다.
앞 슬라이드에서 구한 각 프로펠러 추력을 실제 명령으로 바꾸는 단계입니다. 추력은 어떤 상수 × RPM의 제곱(F = k_f·ω²)이므로, 거꾸로 모터 RPM = √(추력 / 상수)로 풀면 됩니다. 이렇게 하면 하이레벨이 원했던 각속도·모멘트와 총 추력으로부터, 각 모터에 줄 회전수까지 끝까지 계산해낼 수 있습니다.
여기서 강조점은 드론 제어가 본질적으로 모델의 불완전성과 싸운다는 것입니다. 추력은 제곱 관계라 비선형이고, 전진 양력·지면 효과·여러 종류의 항력(~V², ~ω²V, ~ω⁴/V²)·블레이드 플래핑까지 얽혀 있어 정확히 모델링하기 어렵습니다. 시스템에 대한 이런 "소프트한 이해"가 있어야 학습이 잘 되는 모델을 설계할 수 있다는 것이 핵심 메시지입니다.
드론이 사족보행로봇보다 어려운 이유를 정리합니다. 드론은 작고 관성이 작아 더 빨리 반응할 수 있지만 그만큼 외란에 취약하고, 무엇보다 추락하면 끝입니다(로봇은 넘어져도 다시 일어나면 됨). 또 사족보행은 관절 각도를 명령하지만 드론은 프로펠러 RPM을 명령하고, 그 RPM→추력 변환이 기체(프로펠러·모터)에 따라 달라지는 데다 공기역학까지 얽혀 모델이 불완전합니다.
그래서 학습 방식이 달라집니다. 프로펠러를 바로 직접 제어하면 명령이 조금만 어긋나도 추락해 시뮬레이션 학습이 잘 안 됩니다. 그래서 학습 초반에는 전문가 제어기(Expert/Sport Controller)를 두고 모방학습(imitation learning) 비중을 크게, 후반으로 갈수록 강화학습(RL) 비중을 크게 가져갑니다. 또 기체가 무거워지거나 모터가 바뀔 때마다 다시 학습하지 않도록, 로우레벨 컨트롤러를 어댑테이션(adaptation)으로 처리해 기체가 바뀌어도 사람이 만든 트레젝터리·하이레벨 제어는 그대로 쓰자는 것이 설계 철학입니다.
대본에서 자세히 설명한 상태(state) 설계 원칙도 이 비교의 연장선입니다. 하이레벨 출력에는 기체 무게에 영향받지 않는 키네매틱스 변수(각속도·각도)를 써야 기체가 바뀌어도 그대로 쓸 수 있습니다. 또 강화학습이 잘 되려면 액션이 즉시 상태를 바꿔야 하는데, 액션인 프로펠러 속도가 가장 빨리 바꾸는 것은 추력(다이나믹스)이고, 그에 가장 가까운 키네매틱 상태가 각속도(angular velocity)라 이를 상태로 넣습니다.
덧붙여 강의 뒷부분에서는 이 방법의 일반화 성능을 보여줍니다(가로축=테스트 범위, 세로축=성공률). 학습 범위는 0.5 기준이지만, 테스트 범위를 학습의 16배까지 넓혀도 성공률이 충분히 높아 외삽(extrapolation)이 잘 됨을 보였고, 비교군 중 동역학을 모두 아는 오라클(privileged) 모델 바로 아래에 제안 기법이 위치합니다. 마지막으로는 착륙(landing)까지 End-to-End로 학습하되, 피치·롤 40° 이하, 수직속도 1m/s 이하 같은 안전 영역(safe region)을 정해 벗어나면 전문가 제어기가 개입하도록 안전장치를 둡니다.
07저수준 제어 어댑테이션과 End-to-End 착륙
핵심 아이디어는, 컨트롤러를 학습시키되 기체 종류가 바뀌어도(무게·관성이 달라져도) 컨트롤러 안에서 알아서 적응(adaptation)해 버린다는 것입니다. 사람이 정하는 궤적(trajectory)이나 상위 제어기(high-level controller)는 기체가 바뀌어도 다시 튜닝하지 않아도 되도록 만들고, 변하는 부분은 저수준 제어기(low-level controller)가 적응을 통해 흡수하게 합니다.
여기서 중요한 설계 원칙이 나옵니다. 기체가 무거워지거나 관성 모멘트가 바뀌는 것은 저수준 제어기가 신경 쓸 부분이고, 상위 제어기가 내보내는 명령에는 다이나믹스(dynamics)가 섞인 변수가 들어가면 안 됩니다. 즉 기체가 무겁든 가볍든 상관없는 키네매틱스(kinematics) 변수가 들어가야 한다는 거죠.
그래서 모멘트(moment)는 힘·관성과 직접 엮인 다이나믹스 양이라 상위 명령으로 부적절하고, 대신 각속도(angular velocity)나 각도(angle) 같은 키네매틱스 양을 명령으로 씁니다. 추력도 그냥 추력이 아니라 질량으로 정규화한 추력(thrust/mass = 가속도 차원)을 써서 기체 질량에 무관하게 만듭니다. 이렇게 명령 자체를 다이나믹스에 둔감하게 만들어 두었기 때문에, 기체가 바뀌어도 상위 PID는 그대로 두고("No tuning needed") 저수준만 적응하면 되는 구조가 성립합니다.
관측 상태를 무엇으로 고르느냐가 학습의 성패를 가릅니다. 강화학습이 잘 되려면 지금 한 행동의 결과가 곧바로 상태(=보상)에 드러나야 합니다. 과거 행동이 한참 뒤에야 상태를 바꾸면 학습이 잘 안 되죠. 그런데 행동은 프로펠러 속도입니다. 프로펠러 속도가 바뀌면 즉시 바뀌는 건 추력(thrust)인데, 이건 키네매틱스가 아니라 다이나믹스 양입니다.
그래서 "행동에 즉각 반응하면서도 키네매틱스에 가까운" 양을 찾는데, 그게 바로 각속도(angular velocity)입니다(프로펠러 속도 변화 → 모멘트 → 각가속도/각속도로 가장 빠르게 전달). z축 방향도 마찬가지로 가장 가까운 키네매틱스 양인 z축 가속도를 상태로 넣습니다. 시스템에 대한 이런 물리적 직관(soft한 이해)이 있어야 학습이 잘 되는 모델을 설계할 수 있다는 점을 강조하셨습니다.
적응 구조의 핵심: Phase 1에서는 시뮬레이터가 환경 파라미터 e_t(질량·관성 등 34차원, 실제로는 측정 불가)를 알고 있으므로 이를 인코더로 압축한 z_t를 "정답"으로 쓰고, 저수준 제어기를 학습합니다. Phase 2에서는 실제 비행 때 e_t를 알 수 없으니, 최근 2초간의 상태·행동 이력만으로 z_t를 역추정하는 Adaptation Module을 학습합니다. 즉 "기체가 어떻게 반응했는지"를 보고 기체 특성을 온라인으로 알아맞히는 것 — 발표 마지막에 강조한 "어댑테이션 모듈은 지도학습으로 따로 학습한다"가 바로 이 부분입니다.
보상은 앞서 고른 상태들과 짝을 이룹니다. 상위 제어기가 준 각속도 명령과 질량정규화 추력 명령을 잘 따르도록 추력·토크 추종 오차에 페널티를 주고, 모터를 갑자기 흔들지 않도록 출력 부드러움 페널티를, 추락하지 않고 계속 떠 있으면 생존 보상을 줍니다.
목표 토크 τ_des는 강체 회전 방정식 τ = J·ω̇ + ω × (Jω)(오일러 방정식)에서 나옵니다. 즉 "원하는 각속도에 도달하려면 어떤 토크가 필요한가"를 물리식으로 계산하고, 학습된 제어기의 실제 토크가 이 목표를 따라가도록 보상을 설계한 것입니다. 행동의 결과(토크·추력)가 보상에 곧바로 반영되므로 학습이 잘 진행됩니다.
드론은 프로펠러를 직접 제어하면 명령이 조금만 잘못돼도 곧장 추락합니다. 그래서 시뮬레이션에서 처음부터 순수 RL로만 학습하면 거의 안 됩니다. 학습 초기에는 추락을 막아 줄 전문가 제어기(Expert Controller)를 두고, 그 행동을 따라 하게(모방) 합니다.
전문가 제어기는 PID가 원한 각가속도·총추력으로부터 다이나믹스를 풀어 총추력과 XYZ 모멘트를 구하고, 믹서 행렬(mixer matrix)로 4개 프로펠러가 내야 할 추력을, 다시 F = 계수 × RPM² 관계를 역으로 풀어 각 모터의 RPM(행동)을 만들어 냅니다. 학습 초기에는 이 전문가를 모방하는 손실(L_IL)을 크게 반영하고, 에폭이 쌓일수록 α = e^(−0.001·t_epoch)가 작아지며 점차 스스로의 강화학습 보상(R_RL)으로 무게중심을 옮깁니다.
이 모방학습+전문가 아이디어는 강의 후반에 소개된 End-to-End 착륙 연구로 확장됩니다. 거기서는 착륙 궤적을 사람이 미리 정하지 않고 "언제·어떤 경로로 착륙할지"까지 RL에 맡깁니다. 그런데 정답 궤적이 없으니, 추락을 막기 위해 Safe Region(안전 영역)을 정의합니다: 피치 40° 이하, 롤 40° 이하, 수직 하강 속도 1m/s 이하 등 넘어서는 안 되는 운용 범위입니다. RL이 낸 4개 프로펠러 RPM이 현재 상태에서 이 안전 영역을 벗어나려 하면 그 순간 전문가가 개입해 영역을 넘지 않는 행동으로 바꿔 줍니다. 이 착륙 연구는 아직 야외 실험은 못 했고 바람·풍속을 넣은 시뮬레이션까지만 검증된 단계입니다.
또한 일반화 평가에서는, 가로축이 테스트 파라미터 범위(학습 범위 0.5 ± 0.5, 즉 0~2가 기준)이고 세로축이 성공률입니다. 가로축 값이 2면 학습 범위의 5배, 8이면 16배 넓은 범위인데, 제안 기법은 모든 파라미터를 다 아는 오라클(하늘색 점선) 바로 아래 성능을 내며, 학습 범위보다 16배 넓은 영역에서도 높은 성공률을 유지함을 보였습니다.
08드론 공기역학 효과
원래는 PID 컨트롤러로 착륙(landing)을 시키려면 궤적(trajectory)을 미리 정해주는 방법도 있지만, "언제·어떤 궤적으로 착륙해야 성능이 좋을지"까지 전부 RL(강화학습)에게 맡겨보고 싶었다고 합니다. 그래서 처음부터 끝까지 End-to-End로 학습했습니다. 다만 초기에는 학습이 잘 안 돼서 모방학습(imitation learning)에 Expert Controller를 썼는데, 앞에서처럼 정답 궤적과 그를 추종하는 가속도·각속도가 정해진 상황이 아니라, 정답 궤적조차 없는 상태에서 모방학습을 해야 하는 점이 달랐습니다.
그래서 드론이 갑자기 추락하지 않도록 안전 운용 범위(safe operation range)를 정의합니다 — pitch 40° 이하, roll 40° 이하, 수직 착륙 속도 1m/s 이하. RL이 4개 프로펠러의 RPM을 action으로 출력했을 때 그 결과가 이 safe region을 벗어나면, 바로 그 순간 Expert가 개입해서 영역을 벗어나지 않는 action으로 교정해 줍니다. 이런 방식으로 학습을 진행했습니다.
이 실험은 야외 실기 실험까지는 못 가고 시뮬레이션까지만 했으며, 바람·풍속 조건에서 검증했습니다. 실기 실험은 다른 학생이 이어받았는데 인수인계에 따른 transition 기간이 필요해 기다리는 중이라고 합니다.
마무리라 앞에서 다룬 내용의 요약입니다. 한 가지만 강조하자면, Adaptation 모듈은 행동 복제(모방) 방식으로 별도 학습해야 한다는 점입니다. 즉 Base Policy는 environment factor encoder의 출력을 직접 받는 게 아니라, Adaptation 모듈이 만들어내는 출력을 받아 동작하도록 학습해야 합니다.
이렇게 두 단계로 나눠 학습하면(Two-phase training) 시스템 식별(System ID)이나 복잡한 물리 모델 없이도 배치가 가능하고, RL의 수렴성이 좋아지며, 학습 분포를 벗어난 환경(OOD)에서도 강건하다는 것이 핵심 장점입니다.
발표 마무리 후 질의응답에서 드론 공기역학 효과를 짚었습니다. 먼저 Induced Flow(유도류, 하강기류)에 의한 추력 감소입니다. 프로펠러가 돌면 위에서 아래로 내려가는 하강기류가 생기는데, 이 흐름이 형성되면 추력이 떨어집니다. 추력은 공기를 위→아래로 끌어내리는 반작용으로 나오는데, 이미 공기가 계속 아래로 흐르고 있으면 같은 회전으로 추가로 끌어내릴 수 있는 양이 줄어 그만큼 추력이 감소하기 때문입니다. 그래서 호버링 시에는 induced flow로 출력이 줄어든 상태라, 같은 호버링을 유지하려면 그만큼 더 큰 throttle(RPM)을 줘야 합니다.
그러다 전진하려고 기체를 기울이면, 앞으로 나아가면서 하강기류가 없는 신선한 공기를 만나게 됩니다. 그러면 갑자기 슬립스트림(추력)이 강해져서 기체가 살짝 떠오릅니다. 그래서 좋은 컨트롤러 없이 전진하면 피치를 줄 때 살짝 뜨는 현상이 생깁니다. 다음으로 Rotor Drag입니다. 유체역학에서 보통 배우는 항력은 "항력계수 × 속도²" 한 가지뿐인데, 회전하는 프로펠러가 전진하면 또 다른 드래그가 생깁니다. 전진할 때 전진하는 쪽 블레이드(advancing blade)는 회전속도 + 비행속도만큼 더 센 맞바람을 받아 양력이 커지고, 후퇴하는 쪽(retreating blade)은 양력이 작아집니다. 이 양력 비대칭이 추가적인 힘(rotor drag)을 만듭니다.
마지막은 블레이드 플래핑(blade flapping)과 고유진동입니다(진동의 FRF, Frequency Response Function 개념). 프로펠러의 고유진동수는 회전 자체에서 생깁니다 — 원심력으로 블레이드가 쫙 펴지면서(centrifugal stiffening) 회전수가 곧 고유진동수가 됩니다. 그런데 프로펠러가 느끼는 힘(앞서의 비대칭 양력)의 주기도 정확히 회전 주기와 같습니다. 가진 주파수 = 고유 주파수가 되면 공진이 일어나고, 이때 응답은 가진력 대비 위상이 90° 지연됩니다. 그래서 블레이드가 옆으로 휘는 게 아니라 앞으로 들립니다. 앞으로 들리면 추력 벡터가 기울어 일부는 양력으로, 일부는 저항력으로 작용해 결국 Rotor Drag가 되며, 그래서 더 많은 Adaptation이 필요하다고 보고 있습니다.
왜 이런 효과들이 RL Adaptation의 근거가 되나 — induced flow에 의한 추력 감소, rotor drag, blade flapping은 모두 모델로 정확히 쓰기 어렵고 기체·환경마다 달라지는 비선형 공기역학 효과입니다. 이런 항을 일일이 물리식으로 모델링하는 대신, Adaptation 모듈이 "현재 환경에서 실제로 어떤 외란이 작용하는지"를 데이터로부터 추정해 보정하게 만든 것이 이 연구의 핵심 동기입니다.
공진과 90° 위상 지연 직관 — 1자유도 진동계에 주기적 외력을 가하면, 외력 주파수가 고유진동수와 같아지는 순간 응답 진폭이 최대가 되고 변위는 힘보다 정확히 90° 늦게 따라옵니다(헬리콥터 로터에서 잘 알려진 효과). 프로펠러는 회전 자체가 가진원이자 고유진동수의 원천이라 항상 이 공진 조건 근처에 놓이고, 그 결과 가해진 방향이 아니라 90° 돌아간 방향(앞쪽)으로 블레이드가 들리는 플래핑이 나타납니다.
용어표 · English ↔ 한글
스스로 점검
- 드론 제어가 실패하는 주요 원인 세 가지를 들고, 그중 어떤 것이 어댑테이션으로 해결되는지 설명할 수 있는가?
- RMA의 Phase 1과 Phase 2가 각각 무엇을 학습하며, 두 단계의 잠재 벡터가 왜 같은 값을 내야 하는지 말할 수 있는가?
- IBVS와 PBVS의 차이는 무엇이고, 정밀 제어에 어느 쪽이 유리한가?
- 사족보행 로봇에서 Traversability와 Particle Filter가 커리큘럼 러닝에 어떻게 쓰이는가?
- 드론 저수준 제어에 상태로 다이나믹스 변수가 아닌 키네매틱스 변수(예: 각속도)를 넣는 이유는 무엇인가?
- Allocation 행렬과 Mixer(역) 행렬은 각각 어떤 변환을 담당하는가?
- Induced Flow, Rotor Drag, 블레이드 플래핑은 각각 어떤 상황에서 발생하며 왜 어댑테이션이 더 필요해지는가?