RR
← All work

2024 · Robotics

Onboard Perception

Real-time obstacle detection on a Jetson-class board for a guide quadrotor, at 30 fps under 8 W.

Role

Perception lead

Timeline

Sep — Dec 2024

Stack

ROS 2, TensorRT, OpenCV, C++

Problem

The drone had to fly indoors ahead of a low-vision user and warn about obstacles early enough to matter, using only what fits on the airframe.

Approach

A monocular detector distilled to a small backbone, exported to TensorRT with INT8 calibration, and fused with a lightweight depth estimate to produce a per-frame "time to contact" map.

perception/ttc.cpp
float timeToContact(const Box& prev, const Box& cur, float dt) {
  const float growth = cur.area() / std::max(prev.area(), 1.0f);
  return growth > 1.0f ? dt / (std::sqrt(growth) - 1.0f) : INFINITY;
}

Architecture

architecture
  camera ──► detector (TRT, INT8) ──► tracker ──► ttc map ──► cue planner ──► haptics
                                        ▲
                                  mono depth (tiny)

Results

  • 30 fps steady on the onboard board at under 8 W total draw.
  • Mean warning lead time of 1.9 s in a 12-obstacle indoor course.

What I'd do next

Swap the monocular depth for a stereo pair and log field runs to build a proper regression set.