Precision confined-area landing-site assessment for drone delivery. Cognis Digital LLC · US-only.
PERCH gets supplies to people who cannot otherwise be reached — a cut-off squad on a rooftop, a unit in a courtyard, survivors in a building with a blown-out roof. It fuses structural/topographic data (a digital surface model) with real-time object detections (a YOLO-class detector) to choose the safest touchdown point on a rooftop, in a courtyard, or down into an opening — never on or beside a person — and plans a clean confined vertical approach with a continuous wave-off check.
Delivery / rescue landing-site selection only. No weapon, targeting, or engagement content. The overriding rule is that the vehicle never lands on a person.
- DSM (
dsm) — read the surface: per-cell slope (Horn's method), footprint roughness, and a rooftop mask (elevated structures) with their unsafe edge cells. - Perception fusion (
detect) — take detections from a real-time detector and stamp them onto the grid as keep-outs with class-specific safety buffers; a detected person is an absolute keep-out (5 m). - Landing-site scoring (
landingsite) — rank every candidate cell by clearance, flatness, and centrality; hard-exclude anything unsafe (person nearby, footprint won't fit, too steep/rough, roof edge, or too little clearance). - Confined approach (
approach) — verify the vertical corridor is open and the opening is wide enough for the rotor circle; re-run a wave-off check each moment (a person stepping onto the pad aborts the landing). - Mission + safety (
mission,safety) — pick the site, plan the approach, and gate the descent on the person rule, clearance, footprint, corridor, and roof edge.
python -m perch assess --scenario scene.jsonscene.json (a DSM grid + real-time detections):
{
"cell_size_m": 1.0,
"grid": [[0,0,0,0],[0,3,3,0],[0,3,3,0],[0,0,0,0]],
"detections": [{"hazard":"person","cx":1,"cy":1,"w":1,"h":1}],
"mode": "rooftop"
}from perch import DSM, HazardMap, Detection, HazardClass, DeliveryMission, LandingMode, preflight
dsm = DSM(elevation_grid, cell_size_m=1.0)
hz = HazardMap(dsm.rows, dsm.cols, dsm.cell_size_m)
hz.add(Detection(HazardClass.PERSON, cx=7, cy=7, w=1, h=1)) # from the detector
m = DeliveryMission("resupply", dsm, hz, LandingMode.ROOFTOP).solve()
print(m.summary(), preflight(m).cleared) # best pad + approach, gated on the person rulepython -m pytest -q # 457 testsThe precision-delivery brain that lets DROPWING (air resupply) put a bundle on a rooftop or into a courtyard; complements MULEWAY (ground), DEEPDRIFT (undersea), TIDERUNNER (surface), tasked by QUARTERMASTER.