[Demonstrating Agile Flight from Pixels without State Estimation] (Demonstrating Agile Flight from Pixels without State Estimation) (Ismail Geles, Leonard Bauersfeld, Angel Romero, Jiaxu Xing, Davide Scaramuzza / RSS, 2024)
Summary:
- Explicit State Estimation 없이 오직 온보드 카메라의 이미지만으로 사람 조종사처럼 빠르게 비행하는 자율주행 쿼드로터 시스템 제안
My Thoughts & Takeaways
-
실제로 트릭없이 vision-based로만 작동하는 자율비행 연구
-
gate segmentation을 활용해서 효율적인 RL 학습을 수행한 부분
→ 이게 확실히 sim2real에도 유리할 것 같음
-
Asymmetric AC 구조가 중요한 키라서 이후에도 주로 사용되는 것 같음.
-
gate 위치가 조금 변했을 때 성능 꽤나 떨어지는 부분이 아쉽다.
→ 사람도 게이트 위치가 바뀌면 대응 못하나?
-
생각해보면 drone racing task의 특성상 gate를 index 순서대로 따라가야하는데, observation이 단순 segmentation mask인 상태에서 여러 gate 중 다음 gate를 구분해내는 것 자체가 뭔가 underactuated 된 느낌이긴 하다.
-
앞으로 조금 더 general한 task에서 이러한 연구들이 이루어지면 더 재미있겠다.
Problem
문제 정의
-
대부분의 Agile autonomous vision-based quadrotor는 여전히 explicit state estimation (VIO, SLAM 등)에 의존한다.
-
이러한 방법들은 Visual 정보와 Inertial 정보를 아주 낮은 latency로 실시간으로 처리해야해서, 강력한 onboard computation 및 sensing 장비가 필요
→ 반면에 인간 조종사를 생각해보면, 그들은 단순히 FPV 카메라 영상만 보고도 충분히 잘 조종한다.
- 조종기의 Collective thrust와 body rate와 같은 low-level 명령을 통해 매우 빠르고 정확하게 조작할 수 있음.
✅ 즉, 지금까지의 비전 기반 자율 드론들은 인간 파일럿의 조작 방식과 확실한 차이가 있으며, 인간 파일럿이 훨씬 더 효율적으로 비행한다.
➡️ 그렇다면 state estimation없이 인간처럼 영상 기반 end-to-end control로 agile flight을 할 수 있을까?
이 문제를 풀기 위해 고려할 사항
-
Image pixel로부터 곧바로 드론 제어값을 출력해낼 수 있다면 아래와 같은 장점이 있음
- Computation을 ground-station PC로 옮길 수 있기 때문에 complex algorithm이나 large NN을 실시간으로 돌릴 수 있음.
- 비싼 하드웨어를 사용하지 않아도 되기 때문에 human pilot과 1to1 replacement가 가능해짐
-
이전에도 vision input을 받는 learning-based 연구들이 있었지만, 대부분의 연구들은 모두 state estimation을 필요로 했다.
-
state estimation을 policy input으로 같이 넣어주거나
-
image pixel만 넣어주지만 high-level command를 출력한 다음 onboard FC가 stabilization을 대신해주거나 → 여전히 state estimation이 존재.
☑️ FC stabilization은 high-level command를 받아 cascade PID를 수행할 때 FC 자체에서 급격한 움직임을 제한하여 안정적으로 제어해주는 것으로, 이 자체가 agile flight를 불가능하게 함.
- 그래서 state estimation을 건너뛰고 image로만 제어를 해보려고 하는데, 이게 매우 어려운 작업임.
- Observation input (이미지)의 차원이 너무 높아서 학습할 때 sample efficiency가 떨어짐.
- 시뮬레이션 자체도 이미지를 계속 랜더링 해줘야함 (computation..)
- 드론의 움직임때문에 너무 다양한 viewpoint에서 이미지가 생성됨 → 실제 세상과 차이가 클 수밖에 없음.
- motion blur 나 shutter effect가 높은 속도에서는 심해짐
- Sim2Real이 aerodynamics에선 더 어려움
문제 해결 방식
-
이미지 자체는 너무 정보가 많으므로, task-relevant하고 effcient한 gate edge mask를 policy input으로 활용
- swin-transformer 기반 robust gate detector 활용
→ 실제 세상과 시뮬레이션 데이터를 동시에 학습했기 때문에 gap이 거의 없음.
-
Asymmetric actor-critic framework를 활용하여 학습 효율을 늘림. (critic은 full state 정보를 확인)
-
Offboard computer를 활용하였고, onboard 카메라로부터 33ms latency (60Hz, 1280x720) 이미지를 받음.
-
Offboard computer에서 돌아가는 AI는 gate detction 수행 → gate masking binary image를 통해 control command 생성하고 온보드 컴퓨터의 RF receiver로 송신.
→ beta FC와 연결되어 바로 제어 수행
Methodology
Task 정의
- Image pixel로부터 직접 quadrotor를 agile하게 제어하는것
- Drone racing task를 수행하며, 정해진 순서로 gate들을 최대한 빠르게 통과하는것
→ 이때 오직 onboard 내 카메라만 활용
Neural Controller
Action Space
- 각 timestep마다 policy는 action을 추출 → collective thrust와 bodyrate setpoint
Observation space
-
policy의 input으로는 pixel-level gate segmentation mask가 들어간다.
→ 이때 mask는 continuous하며, mask value는 confidence를 의미
⭐ 이 observation input을 설정한데는 두 개의 큰 이유가 있음
- gate의 edge는 task 자체와 매우 연관이 크고, 현재 드론의 위치에 대해 많은 정보를 주기 때문
- 학습 중에는 gate edge를 단순 perspective projection으로 얻어낼 수 있기 때문에 image rendering을 하지 않아도 되서 학습 속도를 매우 빠르게 늘릴 수 있다.
→ 이 부분이 헷갈릴 수 있는데, 학습 중에는 드론의 3d pose와 gate의 3d 위치를 모두 알고 있기 때문에 매 순간 mask를 바로 계산해낼 수 있음.
→ 그리고 mask를 84x84로 down sample해서 continuous하게 표현
→ 대신에 실제 test를 할때는 gate detector로 실제 이미지에서 mask 출력해서 넣어줌
Observation Space of the Critic
- asymmetric PPO를 활용함 → critic에게 더 많은 정보를 부여
- 이때 critic은 사실상 모든 simulation state를 input으로 받음
- position, attitude, velocity, angular velocity, 현재 드론 위치에 상대적인 다음 gate의 center 위치, gate index
- 이때 gate index도 거리에 따라 continuous하게 부여
Rewards
- policy를 학습하기 위한 reward는 아래와 같이 설계
rt=rtprog+rtperc+rtpass−rtcmd−rtcrash
- where
rtprog=λ1(dt−1−dt)rtperc=λ2exp(−δcam4)rtcmd=λ3∣∣at∣∣+λ4∣∣at−at−1∣∣2rtpass={1.0−dt,if passed gate at current timestep0,otherwisertcrash={−4.0,ifpz<0or in collision with gate0,otherwise
- 순서대로
progress reward : track을 따라 빠르게 비행하도록
perception reward : 다음 gate로 camera가 향하도록 → δ는 camera의 optical axis와 현재 드론에서 다음 gate center까지의 벡터의 각도
command smoothness penalty : 너무 크거나 위험한 action에 패널티
sparse gate reward & collision reward : safe flight를 위해
Network Architecture

- CNN은 gate segmentation pixel에서 feature 추출하고, 마지막 3개의 action vector와 함께 네트워크에 입력
→ 마지막 3개 action을 같이 넣어주면 더 smooth한 control command를생성할 수 있음.
- critic은 이에 추가로 simulation state를 받음.
Simulation
- 시뮬레이션 내부에서만 학습 진행
- 그리고 위에서도 언급했지만 vision-based RL은 state-based RL에 비해서 이미지 rendering simulation이 동반되기 때문에 아주 학습이 느림
→ 이 연구는 mask segmentation을 활용해서 이 문제 해결함.
⚠️ gate observation과 quadrotor dynamics는 별로 중요한 부분이 아니라고 생각되서 생략.
- gate observation은 camera intrinsic 잘 활용해서 만들어서 학습에 활용했다는 내용
- quadrotor dynamics는 시뮬레이터 구현에 사용된 dynamics 식 관련 내용 → 나중에 자세히 다루어보려고 함.
Gate Detector
⚠️ 이 부분도 딱히 관심 없어서 생략
- SwinTransformerV2 활용해서 gate detector학습했다는 내용 (segmentation network)
Policy Training
Experiments
-
아래의 세 가지 metric에 대해 성능 측정
Success rate : Three lap race를 몇번이나 성공적으로 마무리하는지
Mean-gate-passing error : gate를 지날 때 drone과 gate center의 거리 평균
Lap-time : 얼마나 빠르게 비행하는지
-
위 metric을 기반으로 아래의 질문에 대해 답하기 위해 실험 진행
- pixel-based agent가 state-based agent와 비교했을 때 서로다른 track layout에 대해 어떤 성능을 보이는지
- Track layout에 agent가 얼마나 민감한지
- Real world의 비행에서 얼마나 robust한지
-
Proposed agent와 아래 두 baseline 비교
- state-based policy : full state를 critic 과 actor에게 다 줌
- symmetric pixel-based policy : pixel-based인데, critic에게 더 정보를 주지 않음

- 일단 symmetric pixel-based agent는 아예 비행 불가 → critic에게 full information 제공하는 것이 매우 중요.
- state based는 학습이 훨씬 빠르긴 하지만, 충분히 학습을 시켜주면 pixel-based agent와 성능은 비슷해짐

- BEM은 가장 정확한 물리 기반 시뮬레이터
- Augmented는 실제 학습한 시뮬레이터
- HIL은 실제 드론 하드웨어가 시뮬레이터와 연결된 것 → 실제 드론이 비행을 하는데, MOCAP으로 pose를 구하고 이를 기반으로 시뮬레이션 상에서 segmentation mask를 계산해서 policy에 넣어줌. → segmentation 성능과 policy 자체 성능 분리를 위함.

- gate 위치를 임의로 최대 50cm까지 바꿨을 때 성공률
- state-based는 상대적인 위치를 애초에 input에 넣어주니까 잘할 수 밖에없긴 한데
- 생각보다 pixel-based 에서 성능이 많이 떨어져보임.

- Real world 실험도 state-based 와 비슷한 성능을 냄