PULP-Dronet
Based on published sources · Not tested by us ·
License: Apache-2.0, CC BY-NC-SA 4.0 (noncommercial) · Details by part
Overview
Deep-learning visual navigation engine for the Crazyflie 2.1 nano-drone: PyTorch CNNs, quantization and deployment flow for the AI-deck GAP8 processor, onboard flight application and a collected dataset; code Apache-2.0, v3 dataset CC BY-NC-SA 4.0. [S001] [S003] [S004]
PULP-Dronet, from the PULP Platform group at ETH Zurich and the University of Bologna, is a set of convolutional neural networks with the code to train them, compress them and run them aboard a nano-drone. The README describes it as a visual navigation engine that lets a pocket-size quadrotor avoid collisions, including with moving obstacles, without a remote laptop. Its software builds on the DroNet network from the University of Zurich. This is a model and toolchain project rather than a drone design. The aircraft is a Bitcraze Crazyflie with a camera-and-processor expansion board. [S001]
Specifications
| Detail | Description |
|---|---|
| Intended users | Embedded-AI and nano-drone researchers able to train PyTorch models and flash Crazyflie and GAP8 firmware Editorial assessment [S004] · Checked 2026-10-05 |
| Required software | Conda environment (conda_deps.yml) with PyTorch; NEMO quantization tool; DORY deployment tool (dory_dronet); GreenWaves gap-sdk 3.9.1; crazyflie-firmware tag 2022.01; crazyflie-clients-python 2022.01 and crazyflie-lib-python 0.1.17.1 Reported by source [S004] · Checked 2026-10-05 |
| Installation | Recursive git clone, conda environment, gap-sdk 3.9.1, Crazyflie firmware 2022.01; flash STM32 app with make cload and GAP8 app over JTAG. Reported by source [S004] · Checked 2026-10-05 |
| Uses | Dataset collection; Training; Testing; Quantization (NEMO); Deployment (DORY); Onboard autonomous flight Reported by source [S004] [S005] · Checked 2026-10-05 |
| File formats | PyTorch .pth weights; ONNX export from NEMO; JPEG images with CSV labels Reported by source [S004] · Checked 2026-10-05 |
| Development status | prototype Research release accompanying publications; not our reproduction. Editorial assessment [S001] · Checked 2026-10-05 |
3D preview
A robot-part preview is not applicable to this software project profile.
Installation and use
Which version runs on which hardware
Version 1 ran on the group's own PULP-Shield board on a Crazyflie 2.0. Versions 2 and 3 target the Bitcraze AI-deck on a Crazyflie 2.1, which carries a GAP8 processor and a Himax camera. This profile pins the pulp-dronet-v3 release. It ships two pre-trained PyTorch models: PULP-Dronet v3, reported at 19 frames per second and 320 kB, and Tiny-PULP-Dronet v3, reported at 139 frames per second and 2.9 kB on the GAP8. The testing script reports collision accuracy and yaw-rate error. Those figures are upstream reports, not results reproduced here. [S001] [S004] [S006]
What a builder must match
Deployment is tied to specific versions. The v3 instructions require gap-sdk 3.9.1, crazyflie-firmware tag 2022.01, the Crazyflie client at 2022.01 and the Python library at 0.1.17.1. They warn that newer Crazyflie firmware is not compatible because it changed substantially. A newly bought AI-deck may also need specific NINA firmware, and flashing the GAP8 uses a JTAG cable. The STM32 flight application then reads the network's outputs over UART and starts flying when the fly parameter is set in the client. Anyone using the catalog's Crazyflie profile should compare its firmware revision against these pins before assuming the two work together. [S004]
The archive does not contain the submodules for the NEMO and DORY tools, the viewer or the modified firmware. Those folders are empty, so a recursive clone is required, and several submodule URLs use SSH addresses. Training uses a conda environment and GPU-flagged scripts. [S004] [S006]
Dataset and licenses
The v3 dataset was collected with a human pilot flying a Crazyflie 2.1. Images were labelled for collision whenever an obstacle in view was closer than 2 m, and also carry the pilot's yaw-rate commands. The collection framework uses the AI-deck and a Flow deck v2, with an optional Multi-ranger deck. The image counts differ between documents: the main README says 66k labelled images, while the v3 README describes 77k images and tabulates 77,418. [S001] [S004] [S005]
Repository code, documentation and the bundled weights are released under Apache-2.0. The v3 dataset is hosted on Zenodo under CC BY-NC-SA 4.0, which does not grant commercial-use rights. External Crazyflie firmware and viewer modules are GPL-3.0, and the v1 Udacity and Zurich datasets are MIT. Whether noncommercial dataset terms affect use of weights trained on that data was not resolved here. The Zenodo page itself was not preserved. No training, flashing or flight was performed for this profile. [S001] [S003] [S007]
Source files and licenses
Code and weights are Apache-2.0; the v3 dataset is noncommercial and external, and deployment depends on pinned external firmware and SDK versions.
| Layer | Availability / license |
|---|---|
| software | available · Apache-2.0 Repository files Apache-2.0 per LICENSE and LICENSE_README.md. External crazyflie-firmware and viewer submodules are GPL-3.0 and not included in the archive. [S003] [S007] |
| model weights | available · Apache-2.0 Pre-trained .pth files are in the repository and fall under its Apache-2.0 statement; training-data terms for the v3 dataset (CC BY-NC-SA 4.0) are separate and not resolved here. [S003] [S004] [S006] |
| datasets | available · CC BY-NC-SA 4.0 v3 dataset hosted on Zenodo under CC BY-NC-SA 4.0 per upstream README; the Zenodo record was not preserved (HTTP 403). v1 Udacity/Zurich subsets are MIT and live in submodules. [S001] [S003] [S004] |
| documentation | available · Apache-2.0 READMEs in the repository under its Apache-2.0 statement. [S001] [S003] |
References
Links identify the documentation and revisions used in this profile. Access dates record when each source was retrieved.
- S001 · PULP Platform (ETH Zurich and University of Bologna)
PULP-Dronet README
Accessed 2026-10-05 · README.md at b68ad38670ba150f7b502e5a848c30d0991beb42 (tag pulp-dronet-v3)Source notes
Project purpose, hardware basis, version history and license summary.
- S002 · PULP Platform (ETH Zurich and University of Bologna)
Repository revision and release metadata
Accessed 2026-10-05 · Tag pulp-dronet-v3 -> b68ad38670ba150f7b502e5a848c30d0991beb42; GitHub release API fieldsSource notes
Selected release, dates, popularity signals, Apache-2.0 license hint.
- S003 · PULP Platform (ETH Zurich and University of Bologna)
LICENSE_README.md (per-folder and external-module licenses)
Accessed 2026-10-05 · LICENSE_README.mdSource notes
Apache-2.0 for repository files; MIT for v1 Udacity/Zurich datasets; GPL-3.0 for external Crazyflie firmware and viewer; CC BY-NC-SA 4.0 for the v3 dataset.
- S004 · PULP Platform (ETH Zurich and University of Bologna)
Tiny-PULP-Dronet v3 README
Accessed 2026-10-05 · tiny-pulp-dronet-v3/README.mdSource notes
Structure, requirements, dataset description, training/testing/quantization/deployment commands, version pins and compatibility warnings.
- S005 · PULP Platform (ETH Zurich and University of Bologna)
Dataset collection framework README
Accessed 2026-10-05 · dataset_collection_framework/README.md openingSource notes
Hardware used for dataset collection: Crazyflie 2.1, AI-deck, Flow deck v2, optional Multi-ranger deck.
- S006 · PULP Platform (ETH Zurich and University of Bologna)
Submodule declarations and v3 file inventory
Accessed 2026-10-05 · .gitmodules and tiny-pulp-dronet-v3 archive members at b68ad38670ba150f7b502e5a848c30d0991beb42Source notes
Submodule paths are empty in the archive; pre-trained .pth weights are present.
- S007 · PULP Platform (ETH Zurich and University of Bologna)
Repository LICENSE
Accessed 2026-10-05 · LICENSESource notes
Apache License, Version 2.0 text.
Correction guidance · Discussion is not enabled · Profile format 0.7.0-draft.5
Change history
2026-10-05 — Initial intake from tag pulp-dronet-v3 (Growbotics comparison lead verified against upstream).