[Seeing Through Pixel Motion: Learning Obstacle Avoidance from Optical Flow with One Camera]([2411.04413] Seeing Through Pixel Motion: Learning Obstacle Avoidance from Optical Flow with One Camera) (Yu Hu, Yuang Zhang, Yunlong Song, Yang Deng, Feng Yu, Linzuo Zhang, Weiyao Lin, Danping Zou, Wenxian Yu / RAL, 2025)
Monocular vision (→ Optical flow) + Differentiable Simulation
- TASK :
flow-based monocular obstacle avoidance
기존 연구와의 차별점
- 이전 연구는
depth estimation을 주로 활용 → Explicit depth가 없어도 자율 비행 장애물 회피 가능한가? → Optical flow를 활용해볼 수는 없을까?
Optical Flow
- self-motion 과 spatial layout에 대한 정보를 가지고 있음
- Sim2Real gap도 적음
- Simulator가 실시간으로 rendering 가능.

Optical flow 활용이 어려운 이유
- 먼저, optical flow는 transtion에 의한 성분과 rotation에 의한 성분으로 나눌 수 있음.
[pˉ˙xpˉ˙y]=pzb1[−1 0 pˉx0 −1 pˉy]vb+[pˉxpˉy −(1+pˉx2) pˉy1+pˉy2 −pˉxpˉy pˉx]wb p˙trans∝Zv,p˙rot∝w
transition flow : 가까이 있는 장애물은 flow 크고, 멀리 있는 배경은 flow ≈ 0
rotation flow : distance 정보 없음. 그냥 각속도 w만으로 flow 생성

-
Rotation flow 성분은 depth 정보가 없음
-
위 그림 (a), (b)를 비교해보면,
-
(a)에서는 먼 배경은 픽셀이 거의 움직이지 않지만, (b)에서 카메라가 회전하면 먼 배경 픽셀도 이미지 위에서 큭게 움직여버린다는 것을 알 수 있다.
-
rotation flow를 어찌저찌 제거한다 하더라도 아래 문제가 더 큼
-
FoE 부근 flow의 문제
FoE (Focus of Expansion) : 이동 중인 카메라의 시야에서 모든 flow가 밖으로 뻗어나가는 것 처럼 보이는 중심 점 (= 전진 비행한다고 하면 이미지 중앙)
- FoE에서는 transition 운동을 한다고 하더라도 depth 정보를 상실 → 위에 수식에서 pˉx,pˉy=0 익고 v는 z 방향이므로 pzb가 뭐든 pˉ˙=0
- 위 그림 (c), (d)를 보면 6m 거리에서 앞으로 가나, 9m 거리에서 앞으로 가나 flow가 비슷. 구분이 안감
Core Idea
Optical Flow + Differentiable Simulation

- 가속도를 제어 입력으로 받는 point-mass model (즉, 네트워크 출력이 acc)
➡️ acc만으로 state 계산 가능 → 시뮬레이션 진행 빠름
➡️ 미분 계산이 간결해짐 → 강체 모델 쓰면 자세와 회전을 다뤄야해서 비선형성이 추가됨
➡️ low-level control은 내부 FC → 드론 하드웨어 의존성 낮음
-
학습 시에는 Rendering Engine으로 GT optical flow를 생성
-
Deploy 시에는 학습된 NeuFlow 네트워크 활용해서 estimate. NeuFlow(ok,ok−1)
-
Optical flow는 downsampling해서 low-resolution 활용
→ 학습도 효율적이고, 의미 없는 detail에 overfit하지 않도록 해줌
Central Flow Attention with Active Sensing

Central Flow Attention
- Full FOV flow 이미지와 Central Area flow 이미지를 같이 사용.
- Low res optical flow 쓴다고 했는데 가운데 부분은 high res로 자르고 down sample
➡️ 이미지 중앙에 flow가 취약할 수 있으니 더 자세하게 보게 만드는 듯
➡️ 그리고 조금 더 task-relevant한 곳에 집중하도록
Active Sensing
- Central attention의 가정을 만족시키기 위해 image center를 드론의 진행 방향에 맞춤.
→ 즉 yaw 방향을 실제 이동 방향에 맞춰 정렬
Policy Optimization via Differentiable Simulation

- Forward simulation 하는 동안에는 드론의 trajectory를 계속해서 생성
-
state 주어지면 이거로 observation 랜더링 하고
-
observation 주어지면 policy network로 acc 출력하고
-
acc를 기반으로 point mass dynamics 시뮬레이션
-
다음 state를 계산해서 다시 반복
… 정해진 time만큼 수행
- Loss는 위의 trajectory 전체에 대해 구해짐.
- 그 다음 BPTT로 한번에 backpropagation
Note
- RTX 3090 GPU + Intel i9 CPU로 2시간만에 학습 완료
- Real world deploy에서는 offboard setup
- Optical flow를 계산해주는 모델 필요
- 실제 고주파 제어 안정화는 onboard FC가 수행.
- 결국은 Depth image 사용하는게 성능은 더 좋음