Expand description
§drone-vrp
Drone Vehicle Routing Problem solver with physics-based energy models.
Supports 9 drone platforms including 6 Ukrainian-made drones used for logistics and supply delivery, plus the DJI FlyCart 30 and Wing.
§Energy Model
Uses the Dorling et al. (2017) linear power model:
Power = P_p + (P_l - P_p) × (payload / max_payload)
Energy = Power × (Distance / GroundSpeed) / 3600
GroundSpeed = max(CruiseSpeed - WindSpeed, 1.0)§Supported Drones
| Model | Country | Type | Payload | Battery | Cruise |
|---|---|---|---|---|---|
| FlyCart30 | CN | Heavy-lift | 30 kg | 2000 Wh | 15 m/s |
| Wing | US | Light delivery | 1.2 kg | 150 Wh | 30 m/s |
| R18 | UA | Octocopter | 5 kg | 1440 Wh | 12 m/s |
| PD-2 | UA | VTOL fixed-wing | 11 kg | 29000 Wh* | 27.8 m/s |
| Vampire | UA | Hexacopter | 15 kg | 3200 Wh | 16.7 m/s |
| HeavyShot | UA | Quadcopter | 30 kg | 5000 Wh | 14 m/s |
| Kazhan | UA | Hexacopter | 20 kg | 4000 Wh | 15 m/s |
| Nemesis | UA | Quadcopter | 20 kg | 3800 Wh | 18 m/s |
| Matrice350RTK | CN | Multi-rotor | 2.7 kg | 798 Wh | 15 m/s |
*PD-2 uses gasoline propulsion; effective energy converted at ~30% efficiency.
§Quick Start
use drone_vrp::{DroneSpec, DroneModel, Propulsion};
let r18 = DroneSpec::r18();
assert_eq!(r18.model, DroneModel::R18);
assert_eq!(r18.country, "UA");
// Calculate energy for a 5 km flight with 3 kg payload and 2 m/s headwind
let energy = r18.calculate_energy_wh(5000.0, 3.0, 2.0);
// Estimate maximum range at full payload
let range = r18.estimate_max_range_m(5.0, 0.0);
println!("R18 range at full payload: {:.1} km", range / 1000.0);
// Parse by name (with aliases)
let vampire = DroneSpec::from_name("baba_yaga").unwrap();
assert_eq!(vampire.model, DroneModel::Vampire);Re-exports§
pub use drone::DroneModel;pub use drone::DroneSpec;pub use drone::DroneVrpInstance;pub use drone::DroneVrpResult;pub use drone::NoFlyZone;pub use drone::Propulsion;pub use drone::solver::DroneSolver;