Skip to main content

Crate drone_vrp

Crate drone_vrp 

Source
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

ModelCountryTypePayloadBatteryCruise
FlyCart30CNHeavy-lift30 kg2000 Wh15 m/s
WingUSLight delivery1.2 kg150 Wh30 m/s
R18UAOctocopter5 kg1440 Wh12 m/s
PD-2UAVTOL fixed-wing11 kg29000 Wh*27.8 m/s
VampireUAHexacopter15 kg3200 Wh16.7 m/s
HeavyShotUAQuadcopter30 kg5000 Wh14 m/s
KazhanUAHexacopter20 kg4000 Wh15 m/s
NemesisUAQuadcopter20 kg3800 Wh18 m/s
Matrice350RTKCNMulti-rotor2.7 kg798 Wh15 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;

Modules§

drone