Standard optical computer vision fails in dynamic thermal environments. When a drone sweeps a landscape, the thermal camera's automatic gain control constantly shifts the visual baseline, rendering traditional brightness-based contour detection useless.
AeroTherm bypasses visual tracking entirely. It extracts the raw radiometric data from a FLIR Lepton 3.5 and evaluates the absolute temperature of every pixel. If a target breaches a developer-defined threshold, the system independently logs the coordinates, draws severity-tiered bounding boxes, and captures the frame to an onboard SD card.
The autonomy of AeroTherm operates on two separate layers: the flight dynamics and the compute payload.
- Flight Autonomy: The PixHawk 6C flight controller handles the actual piloting. By utilizing the Holybro GPS M8N and the TF-Luna LiDAR, the drone can execute pre-programmed GPS waypoint missions, automated grid sweeps, and precision altitude holds without active stick input from the RadioMaster transmitter.
- Payload Autonomy: The thermal pipeline on the Raspberry Pi 3 A+ runs completely headless as a background service. It does not require a human operator to monitor a live video feed or manually press a shutter button. The Python script continuously processes the thermal data at 26Hz and independently makes the decision to log an image to the SD card the moment a defined threshold is breached.
Standard thermal cameras output relative, visually compressed data. They give you an image where the brightest pixels represent the hottest items in that specific frame. If you put a 25°C object in a freezing room, it looks white-hot. If a 100°C object enters the frame, the camera's automatic gain shifts, and the 25°C object suddenly renders as black. You cannot reliably trigger alerts based on relative visual data.
The FLIR Lepton 3.5 is radiometric. It does not just output a visual heat map; it outputs a 16-bit array containing the absolute, factory-calibrated temperature value (in centi-Kelvin) for every single pixel.
Because the sensor provides absolute data, the Python script can calculate the exact Celsius temperature of every object in the frame. A 36°C human signature will always read as exactly 36°C, ensuring your THRESHOLD_CONFIG detection logic remains rock-solid and mathematically accurate regardless of how the background environment changes.
This architecture supports critical field operations:
- Search and Rescue (SAR): Isolating a 36°C human heat signature through dense forest canopy or identifying lingering 100°C+ holdover hotspots during wildland fire mop-up operations.
- Industrial Inspections: Automating routine sweeps of solar farms or power substations to detect failing hardware and electrical arcing before catastrophic failure.
- Developer Playground: Providing a robust, modifiable Python pipeline for any application requiring high-accuracy, airborne thermal anomaly detection.
Because gravity always dictates terms, flying a dedicated Linux compute node alongside a VoSPI thermal sensor requires significant thrust. This system abandons the sub-250g class entirely, coming in at a 1588g All-Up Weight (AUW).
Propulsion & Flight Control:
- Frame: Mark 4 7-inch (295mm wheelbase, 5mm carbon fiber arms).
- Motors: iFlight XING 2806.5 1800KV (Unibell, 24V input).
- Flight Controller: PixHawk 6C paired with a Holybro Tekko32 45A ESC.
- Power: Teranty 5200mAh 60C LiPo, regulated by a Matek 12s BEC to cleanly power the 5V payload.
Thermal Compute Payload:
- Processor: Raspberry Pi 3 A+ (selected for its lower weight profile compared to the 4B while retaining sufficient compute for 26Hz OpenCV operations).
- Sensor: FLIR Lepton 3.5 on a PureThermal VoSPI Breakout Board.
- Peripherals: TF-Luna LiDAR for precision altitude holding and a Holybro GPS M8N for geospatial logging.
The core logic runs as a headless Python daemon (thermal_node.py) on the Pi. The script extracts the 16-bit VoSPI array and applies the standard conversion to derive a precise Celsius matrix:
Instead of hunting for bright pixels in an unpredictably scaled image, AeroTherm builds a binary mask of the environment based strictly on the user's THRESHOLD_CONFIG dictionary.
Python
THRESHOLD_CONFIG = [
{"label": "Elevated", "min_temp": 30.0, "max_temp": 50.0, "color": COLOR_WARM, "min_area": 12},
{"label": "Warning", "min_temp": 50.0, "max_temp": 75.0, "color": COLOR_HOT, "min_area": 8},
{"label": "Critical", "min_temp": 75.0, "max_temp": float("inf"), "color": COLOR_CRITICAL, "min_area": 4},
]When an anomaly is detected, the script maps the coordinates from the 160x120 raw sensor array to a scaled 640x480 output frame, applying the appropriate color-coded bounding box and temperature readout before executing a localized capture.
The Lepton 3.5 is notorious for hanging the SPI bus if a script terminates unexpectedly. AeroTherm implements a strict try/except/finally architecture wrapped around a threaded capture class. This ensures the VoSPI file descriptor is gracefully released even during a crash, eliminating the need to hard-reboot the drone between operations.
Bench testing confirms the pipeline dynamically categorizes multiple independent thermal masses in a single frame. The absolute temperature logic successfully isolates a 36.2°C target (Elevated) while simultaneously monitoring a 61.4°C mass (Warning), completely ignoring ambient background radiation.
Fun assembly pics:










_t9PF3orMPd.png?auto=compress%2Cformat&w=40&h=40&fit=fillmax&bg=fff&dpr=2)







Comments