Demonstrating Agile Flight from Pixels without State Estimation 논문 리뷰

신희준·2025년 12월 9일

[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로부터 곧바로 드론 제어값을 출력해낼 수 있다면 아래와 같은 장점이 있음

    1. Computation을 ground-station PC로 옮길 수 있기 때문에 complex algorithm이나 large NN을 실시간으로 돌릴 수 있음.
    2. 비싼 하드웨어를 사용하지 않아도 되기 때문에 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에선 더 어려움

문제 해결 방식

  1. 이미지 자체는 너무 정보가 많으므로, task-relevant하고 effcient한 gate edge mask를 policy input으로 활용

    • swin-transformer 기반 robust gate detector 활용
      → 실제 세상과 시뮬레이션 데이터를 동시에 학습했기 때문에 gap이 거의 없음.
  2. Asymmetric actor-critic framework를 활용하여 학습 효율을 늘림. (critic은 full state 정보를 확인)

  3. Offboard computer를 활용하였고, onboard 카메라로부터 33ms latency (60Hz, 1280x720) 이미지를 받음.

  4. 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
  • 이 action command는 드론 내부에 있는 low-level controller에 의해 각 모터 speed로 변환되어 실행됨
    → 인간 조종사가 스틱으로 조종하는 것과 같은 원리
    → state estimation이 필요없기 때문에 매우 빠른 조종이 가능

    ⚠️ 그러니까 실제로는 IMU 센서 자체는 필요한 것 같음

    • onboard low-level controller (beta-FC)가 body rate & thrust command setpoint와 현재 IMU에서 측정되는 값을 바탕으로 motor speed 계산 → 즉 rate pid control을 수행한다는 것.

Observation space

  • policy의 input으로는 pixel-level gate segmentation mask가 들어간다.
    → 이때 mask는 continuous하며, mask value는 confidence를 의미

    ⭐ 이 observation input을 설정한데는 두 개의 큰 이유가 있음

    1. gate의 edge는 task 자체와 매우 연관이 크고, 현재 드론의 위치에 대해 많은 정보를 주기 때문
    2. 학습 중에는 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+rtpassrtcmdrtcrashr_t=r_t^{prog}+r_t^{perc}+r_t^{pass}-r_t^{cmd}-r_t^{crash}
    • where
      rtprog=λ1(dt1dt)rtperc=λ2exp(δcam4)rtcmd=λ3at+λ4atat12rtpass={1.0dt,  if passed gate at current timestep0,  otherwisertcrash={4.0,  if  pz<0  or in collision with gate0,  otherwiser_t^{prog} = \lambda_1(d_{t-1}-d_t) \\ r_t^{perc} = \lambda_2 exp(-\delta^4_{cam}) \\ r_t^{cmd}=\lambda_3||a_t|| + \lambda_4||a_t - a_{t-1}||^2 \\ r_t^{pass} = \begin{cases} 1.0-d_t, \; \text{if passed gate at current timestep} \\ 0, \; \text{otherwise} \end{cases} \\ r_t^{crash} = \begin{cases} -4.0, \; \text{if} \; p_z < 0 \; \text{or in collision with gate} \\ 0, \; \text{otherwise} \end{cases}
    • 순서대로
      • progress reward : track을 따라 빠르게 비행하도록
      • perception reward : 다음 gate로 camera가 향하도록 → δ\delta는 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

  • PPO 알고리즘 활용

  • 모두 시뮬레이션에서만 학습, 4억번의 environment interaction으로 학

  • zero-shot sim2real transfer를 위해서 아래 방법을 활용

    1. Initial State Buffer
      • RL agent의 catastrophic forgetting 문제 : RL이 잘 학습되면 매번 동일한 비슷한 경로로 이상적으로 비행 → 잘하기 때문에 실수하거나 벗어난 상태를 더 이상 보지 못함 → 비정상적인 상태에서 회복하는 방법을 까먹음
      • 그래서 매번 에피소드가 시작할 때마다 초기 상태를 다르게 설정해줌. (buffer에 초기상태 저장)
    2. Domain Randomization
      • sim2real에서 발생하는 drone간의 차이나 동역학적인 복잡성 때문에 수행
      • 학습 하는 동안 thrust, body drag, inertia 등 드론 dynamics, drone의 시작 포즈, 게이트의 위치 등을 랜덤으로 바꿔줌.

Experiments

  • 아래의 세 가지 metric에 대해 성능 측정

    1. Success rate : Three lap race를 몇번이나 성공적으로 마무리하는지
    2. Mean-gate-passing error : gate를 지날 때 drone과 gate center의 거리 평균
    3. Lap-time : 얼마나 빠르게 비행하는지
  • 위 metric을 기반으로 아래의 질문에 대해 답하기 위해 실험 진행

    1. pixel-based agent가 state-based agent와 비교했을 때 서로다른 track layout에 대해 어떤 성능을 보이는지
    2. Track layout에 agent가 얼마나 민감한지
    3. Real world의 비행에서 얼마나 robust한지
  • Proposed agent와 아래 두 baseline 비교

    1. state-based policy : full state를 critic 과 actor에게 다 줌
    2. 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 와 비슷한 성능을 냄
profile
공부하고 싶은 사람

0개의 댓글