[Multi-Task Reinforcement Learning for Quadrotors] ([2412.12442] Multi-Task Reinforcement Learning for Quadrotors) (Jiaxu Xing, Ismail Geles, Yunlong Song, Elie Aljalbout, Davide Scaramuzza / RAL, 2024)
Summary
- 여러 가지 task를 동시에 수행할 수 있는 쿼드롭터 RL 프레임워크 제안
→ High speed stabilization, velocity tracking, autonomous racing
- Shard task encoder + task-specific encoder와 multi-critic 구조를 활용하여 서로 다른 task사이에 정보를 최대로 활용
My Insights / Takeaways
-
state를 입력으로 받고, 출력은 CTBR → 단순 이미지 입력은 아님
- state는 위치, 속도 등과 같은 공유 입력과 게이트 위치 등 task 별 입력이 함께 들어감.
- 작업별 리워드 다르게 설정하여 함께 학습.
-
Hovering / velocity tracking task 학습하는 법 궁금했었음
- desired velocity나 desired hovering altitude는 입력 observation에 포함시키고, reward 계산하여 학습
- 그리고 desired 값들은 random하게 생성하여 넣어줌.
- hovering / velocity tracking 문제 풀때는 curriculum learning을 활용할 수 있음
-
Shared information이 task-specific encoder에서 fusion되지 않을 경우 racing에서 성능이 확 떨어지는 현상도 obvious 하면서도 신기하다.
Problem
- 실제 쿼드로터(드론)는 다양한 제어 기술을 하나의 임무 안에서 수행해야 함 (예: 구조 임무 중 목표 추적 / hovering / path following).
- 그러나 기존 RL 기반 드론 제어는 대부분 단일 작업(single-task) 중심.
→ 새로운 작업 등장 시 정책을 새로 학습해야 함.
→ 결과적으로 현실 응용에 필요한 범용 제어(generalist control)이 불가능.
- 이렇게 다양한 제어 상황에 대처할 수 있는 generalist control policy를 학습하는 것은 매우 어려움 → 각 task마다 서로 다른 objective와 서로 다른 state space를 가지기 때문에
Contribution
공유된 dynamics 정보를 기반으로, 서로 다른 task 간 정보를 통합하여 하나의 정책으로 여러 제어 기술을 수행하는 Multi-Task RL Framework (MTRL)를 제안
- 이 MTRL의 가장 큰 장점은 서로 다른 task에 대한 knowledge를 공유하는 것
→ learning efficiency가 높아짐
→ 핵심은 각 task마다 reward objective가 다르더라도, 기본적인 physical dynamcis가 공유된다는 사실을 이용한 것
핵심 아이디어
- Shared Encoder: 모든 작업에서 공통적으로 사용하는 동역학 정보(위치, 자세, 속도 등)를 추출.
- Task-specific Encoder: 각 작업에 특화된 관찰값(게이트 위치, 목표 속도 등)을 처리.
- Multi-Critic Architecture:
- Actor(정책)는 공유
- Critic(가치 함수)은 task 별로 분리
- 이렇게 공유 정보 + task별 정보를 결합하여 효율적 학습 및 knowledge transfer 가능
Methodology
Quadrotor Dynamics
Quadrotor Dynamcis
- 위 글에서 정의한 quadrotor dynamics와 본질적으로는 같고 아래 두 가지 다름
- motor dynamics 생략
- collective thrust로 (prop + drag) force 대체
Policy learning
- MTRL에서는 N개의 task가 있으며, 각 task는 MDP로 정의 Mi=(Si,Ai,Pi.Ri,γi)
- 모든 task에 대해 expected return J(π)를 최대화 하는 policy를 찾는 것이 목적
J(π)=N1i=1∑NEπ[t=0∑∞γitri(st,at)]
⭐ 여기서 이 논문은 multi-task configuration을 reward setting R으로만 구분
- Transition function (model dynamics) P는 모든 task에 대해 같음.
Autonomous Racing
-
미리 정해진 순서의 gate를 최대한 빠르게 통과하는 task
-
observation o=[p,R,v,w,aprev,δp1,δp2]
- aprev : 이전 action
- δp1 : 현재 quad 위치와 다음 gate의 4개 코너 위치의 차이
- δp2 : 다음 gate의 4개 코너 위치와 그 다음 gate의 4개 코너 위치 차이
-
reward
rtracing=rtprog+rtprec+rtact+rtbr+rtpass+rtcrash
- 이전 포스팅들에서 다룬 drone racing reward와 동일
Stabilization from High Speed
-
Randomized pose & high initial velocity로부터 빠르게 static status로 정지해야하는 task
-
observation o=[p,R,v,w,aprev,p¨WB,zd
- p¨WB : world frame에서 quadrotor의 acc
- zd : stabilize해야할 위치의 높이
-
reward
rtstabilize=rtheight+rtattitude+rtvelocity+rtbr+rtact+rtsuccess
- rtheight=β1∣∣zt−zd∣∣ : constant height를 유지하도록
- rtattitude=β2∣∣Rt∣∣ : constant orientation을 유지하도록
- rtvelocity=β3∣∣vt∣∣ : non-zero velocity를 패널티
- rtbr=β4∣∣wB,t∣∣ : non-zero angular velocity를 패널티
- rtact=β5∣∣ut−ut−1∣∣ : non-smooth action 패널티
- rtsuccess=β6 : robot이 hovering 잘하면 계속해서 discrete reward
-
학습하는 동안은 점진적으로 task 난이도를 높임 → curriculum learning
- initial speed를 100000 데이터 샘플마다 10% 씩 높여줌
Velocity Tracking
-
랜덤하게 생성되는 velocity profile을 track해야하는 task
-
observation o=[p,R,v,w,aprev,vd,p¨WB]
- vd : desired linear velocity
-
reward
rttracking=rtvelocity+rtbr+rtact
- rtvelocity=λ1∣∣vt−vd(t)∣∣ : desired velocity를 잘 따라가도록
- rtbr=β4∣∣wB,t∣∣ : non-zero angular velocity를 패널티
- rtact=β5∣∣ut−ut−1∣∣ : non-smooth action 패널티
-
여기서도 학습하는 동안은 점진적으로 task 난이도를 높임 → curriculum learning
- desired velocity를 100000개 데이터 샘플마다 1m/s씩 높여줌
Multi-task Learning Framework
- 해당 연구에서 핵심이 되는 가정
➡️ Task에 따라서 드론의 physical property는 변하지 않는다
= 모든 task는 같은 transition probability를 갖는다.
☑️ 그 이유는 quadrotor control task가 contact-rich하지 않기 때문이라고 함. (다른 물체와 접촉하게 되면 dynamics가 순간적으로 비선형 + 불연속일수도)
- 이 가정을 바탕으로 정보를 공유하는 구조의 architecture를 제안
➡️ transition dynamics을 학습하는데 있어서, 여러 task의 데이터 샘플을 공유할 수 있게 된다.
✅ 그래서 shared module 과 task-specific module를 따로 구성해서, shared module은 모든 task에서 공통적으로 적용되는 dynamics와 관련된 정보를, task-specific module은 task에 관련된 정보를 배우도록 하자.
→ 이제 이걸 어떻게 구현하려고 했는지 살펴보자.

- Actor는 모든 task에 대해 작동할 수 있는 single policy network로 설계한다.
- 하지만 task마다 observation의 의미도 다르고, 차원도 다름.
⇒ 그대로 actor에 넣으면 학습이 불가
- 그래서 모든 task에서 공통으로 등장하는, dynamics 특성에 관련된 position, orientation, linear & angular velocity, prev action들을
shared encoder에 넣어 shared feature로 추출.
- task-specific한 서로 다른 observation들은 dynamic embedding과 함께
task-specific encoder에 들어가서 task-specific feature로 추출.
✔️ task encoder는 모두 같은 dim의 latent로 변환해준다.
✔️ 그리고 task끼리의 구분은 observation length를 활용한 one-hot encoding을 활용
➡️ 최종적으로 Actor에 들어가는 입력은 shared embedding과 task-specific embedding를 concat한 것
➡️ 출력은 CTBR
- Critic network는 task마다 따로 정의 → 각 task에 대한 value function evaluate
- Critic은 직접적으로 full observation을 input으로 받는다고 한다.
** 근데 figure에는 critic도 latent를 받는거처럼 나와서 좀 헷갈리는 부분..
Experiments
-
PPO 알고리즘 활용
-
Flightmare simulator 활용
-
Shared encoder는 32dim latent 출력
-
Task-specific encoder는 task마다 다른 input dim → 32 dim latent 출력
-
MTRL을 학습할 때에는 매번 task 를 바꿔가면서 학습한다고 보면 된다.
- shared network와 actor는 그대로 두고
- critic network와 task-specific encoder만 바꿔가면서 학습
Baselines
| 방법 | Actor 공유 | Encoder 공유 | Critic 공유 | 핵심 목적 |
|---|
| Single-task RL | x | x | x | MTRL 효과 비교용 |
| MTRL-Actor | o | x | x | Actor만 공유하면 되는가? |
| MTRL-Separate | o | o (구조만) | x | shared–task fusion의 효과 검증 |
| Ours (Full MTRL) | o | o | x | 제안 구조 |
MTRL-Separate에서는 shared observation이 task encoder에 입력으로 들어가지 않음
→ shared encoder와 task encoder가 상호작용하지 않음
MTRL-Actor는 Actor만 모든 task에서 공유하고 모든 encoder와 critic network는 서로 다르게 학습.
Sample efficiency of MTRL
- single-task RL에 비해서 MTRL이 얼마나 sample-efficient한가?

-
제안된 방법론이 모든 single-task RL보다 성능이 좋음. (같은 step 기준)
-
MTRL-Separate의 경우 racing task에서 아예 날지 못함
→ shared information을 task-specific information과 fuse하지 않으면 복잡한 task를 학습하기 어려움.
→ task-specific encoder는 dynamics를 모르는 상태에서 task infomation의 의미를 압축.
→ policy는 더 쉬운 task (e.g. stabilization)만 학습하려고 할 것
- single-task RL에 비해서 MTRL의 성능은 어떠한가?

Real world transfer
- VICON MOCAP 시스템으로 state estimation 정보 활용했음.
- CTBR 출력 내고, BetaFlight FC 활용