Module 5/5 · Weeks 13–15 · 27 h

Warehouse and industrial applications

UAT 366 Indoor Autonomous and Multi-Unmanned Aircraft Systems

About 90 minDraft, awaiting reviewLast updated 27 September 2026

Lesson

By the end of this module you will be able to

  1. Split aisle-scanning jobs among several drones with the LPT rule and compare with the optimum
  2. Check time overlaps between drone zones and forklift and staff activity
  3. Design the zone layout, charging docks and operating rules for a factory warehouse
  4. Assess safety requirements and aviation rules for indoor flight

Prerequisites: UAT 366 Modules 1–4 · UAT 363 (smart logistics and warehousing)

Why this matters

The factory wants the stock count finished before the morning shift starts. If jobs are split badly, one drone works far longer than the others and everyone waits for the slowest. And if a drone flies into an aisle while a forklift is working there, an accident may follow. This module brings everything in the course together into a real operating system for the factory warehouse.

Splitting jobs with the LPT rule

Splitting jobs of different lengths among identical machines to finish as early as possible (minimum makespan) is a hard problem. The LPT (longest processing time first) rule sorts jobs from longest to shortest and gives each next job to the machine that becomes free first. Graham (1969) proved that this rule is never worse than times the optimum.

Example 1 Splitting 8 aisles among 3 drones

Scan time per aisle, in minutes, is assumed.

from itertools import product

aisles = [14, 12, 11, 9, 8, 7, 6, 5]
M = 3

loads, plan = [0] * M, [[] for _ in range(M)]
for idx, t in sorted(enumerate(aisles, 1), key=lambda x: -x[1]):
    k = loads.index(min(loads))
    loads[k] += t
    plan[k].append(f"A{idx}")
lpt = max(loads)

best = min(max(sum(t for t, a in zip(aisles, asg) if a == k) for k in range(M))
           for asg in product(range(M), repeat=len(aisles)))
lower = max(sum(aisles) / M, max(aisles))
for k in range(M):
    print(f"D{k + 1}: {plan[k]} = {loads[k]} min")
print(f"LPT makespan {lpt} min, optimum {best} min, lower bound {lower:.1f} min")
print(f"LPT / optimum = {lpt / best:.3f} (Graham bound {4 / 3 - 1 / (3 * M):.3f})")
D1: ['A1', 'A6'] = 21 min
D2: ['A2', 'A5', 'A7'] = 26 min
D3: ['A3', 'A4', 'A8'] = 25 min
LPT makespan 26 min, optimum 25 min, lower bound 24.0 min
LPT / optimum = 1.040 (Graham bound 1.222)

LPT is only 1 minute slower than the optimum and well within Graham’s bound. Exhaustive search works here because there are few jobs (3⁸ = 6,561 options), but a real warehouse may have hundreds of aisles, so LPT is a good, explainable choice.

A three-row timeline. D1 does A1 for 14 minutes and A6 for 7 minutes. D2 does A2 for 12 minutes, A5 for 8 and A7 for 6. D3 does A3 for 11 minutes, A4 for 9 and A8 for 5. A vertical dashed line at 26 minutes marks the overall finish time
Figure 1 Three-drone schedule from the LPT rule

Separating drones from forklifts and people

Warehouse layout. Six rows of high-bay racks form the night drone zone; the bottom strip is the forklift lane along the full length; the top-right corner holds the charging docks and the middle right is the staff area
Figure 2 Zone layout of the factory warehouse

The safest approach is separation in time and space: drones fly an aisle only when it is free of forklifts and people. The warehouse management system knows when forklifts will enter which aisle, so it can be used to check the schedule before flight.

Example 2 Checking the drone schedule against forklift jobs

drone_slots = {"A1": (0, 14), "A2": (0, 12), "A3": (0, 11), "A4": (11, 20), "A5": (12, 20)}
forklift = [("A4", 18, 25), ("A2", 30, 40), ("A5", 5, 10)]       # aisle, start, end (min)
BUFFER = 2                                                        # buffer minutes between jobs

for aisle, f0, f1 in forklift:
    d0, d1 = drone_slots.get(aisle, (None, None))
    if d0 is None:
        continue
    clash = d0 < f1 + BUFFER and f0 < d1 + BUFFER
    print(f"{aisle}: drone {d0}-{d1} min, forklift {f0}-{f1} min -> {'CONFLICT' if clash else 'ok'}")
A4: drone 11-20 min, forklift 18-25 min -> CONFLICT
A2: drone 0-12 min, forklift 30-40 min -> ok
A5: drone 12-20 min, forklift 5-10 min -> ok

A4 overlaps with a forklift, so one of the jobs must move. A5 is separated from the forklift job by exactly the buffer.

Safety and requirements

  • Flight-controller systems: enable Collision Prevention (Module 3), set a geofence for the room, and set the behaviour on loss of position, for example landing immediately instead of returning to base, which needs a position.
  • Charging docks: place them in a separate area away from combustible materials, and size their number to the flight cycle (Module 1 of UAT 364).
  • Risk assessment: use a likelihood-severity matrix following the ICAO SMS guidance (UAT 362), considering effects on workers, goods and the fire-suppression system.
  • Indoor flight rules: we found no CAAT announcement that states clearly whether flight inside a closed building falls under its requirements. Teams should ask CAAT through the UAS Portal and always follow the factory’s own safety rules.

The ETH Zurich report (Wawrla et al., 2019) identifies battery safety and integration with existing systems as key challenges for warehouse drones, so a well-designed system must address both from the start.

Module lab

Lab: a multi-drone stock-counting operations plan

  1. Measure scan time per aisle in the lab and use the code from Example 1 to split jobs among two or three drones.
  2. Create a hypothetical forklift schedule, check it with the code from Example 2 and adjust until nothing overlaps.
  3. Draw the zone layout, charging dock locations, fire exits and no-fly areas.
  4. Write the risk assessment and the behaviour on loss of position, low battery and lost communication.
  5. Test the whole system in the lab and record the actual finish time against the plan.

Common mistakes

Watch out

  • Splitting jobs evenly by number of aisles without looking at each aisle’s time.
  • No buffer between drone and forklift jobs.
  • Setting return to base on loss of position, even though returning needs a position.
  • Charging batteries near combustible goods.
  • Assuming indoor flight has no requirements.

Summary

  • The LPT rule splits jobs close to optimally, with Graham’s guaranteed bound.
  • Separate drones from forklifts and people in time and space, and check the schedule with a buffer before flight.
  • The system needs avoidance, a geofence, loss-of-position behaviour and safe charging docks.
  • Ask CAAT about indoor flight and follow the factory’s requirements.

Check your understanding

  1. Jobs of 10, 8, 6 and 4 minutes with 2 drones: what makespan does LPT give?
  2. What is Graham’s bound for 2 drones?
  3. Total work 60 minutes, longest job 15 minutes, 3 drones: what is the lower bound on completion time?
  4. A drone at 10–20 minutes and a forklift at 21–30 minutes with a 2-minute buffer: do they overlap?
  5. Why is automatic return to base unsuitable when position is lost indoors?
Answers
  1. 10 → drone 1, 8 → drone 2, 6 → drone 2 (total 14), 4 → drone 1 (total 14); makespan 14 minutes.
  2. minutes
  3. Yes, because 10 < 30 + 2 and 21 < 20 + 2.
  4. Returning to base requires knowing the position, so on loss of position the drone should land immediately.

Key formulas

Bound of the LPT rule
Lower bound on completion time

Key references

  1. Graham, R. L. (1969). Bounds on multiprocessing timing anomalies. SIAM Journal on Applied Mathematics, 17(2), 416–429. link
  2. Wawrla, L., Maghazei, O., & Netland, T. (2019). Applications of drones in warehouse operations (White paper). ETH Zurich, D-MTEC, Chair of Production and Operations Management. link
  3. Chung, S.-J., Paranjape, A. A., Dames, P., Shen, S., & Kumar, V. (2018). A survey on aerial swarm robotics. IEEE Transactions on Robotics, 34(4), 837–855. link
  4. PX4 Autopilot. Collision prevention. PX4 user guide (main). link
  5. International Civil Aviation Organization. (2018). Safety management manual (Doc 9859, 4th ed.). link
  6. สำนักงานการบินพลเรือนแห่งประเทศไทย. (2569). ประกาศ กพท. เรื่อง หลักเกณฑ์และวิธีการในการอนุญาตให้ผู้บังคับหรือปล่อยอากาศยานซึ่งไม่มีนักบิน ประเภทอากาศยานที่ควบคุมการบินจากภายนอก ที่มีน้ำหนักไม่เกิน 25 กิโลกรัม ปฏิบัติแตกต่างไปจากเงื่อนไขที่กำหนด พ.ศ. 2569 (มีผล 17 พฤษภาคม 2569). link

Further reading

Study the assigned knowledge units in advance, review media and take the module quiz

In class / field

Intensive lab and field practice recorded in a lab notebook

Learning evidence: Lab notebook signed by the instructor

Module quiz

This is a formative self-check, not a graded exam

Knowledge domain: Delivery, indoor operations and warehousing