การวางเส้นทาง
UAT 363 เทคโนโลยีระบบอากาศยานไร้คนขับเพื่อการขนส่งและคลังสินค้าอัจฉริยะ
บทเรียน
เมื่อเรียนจบโมดูลนี้ ผู้เรียนจะสามารถ
- คำนวณระยะทางและพลังงานของเส้นทางส่งของหลายจุด
- หาเส้นทางที่สั้นที่สุดด้วยการค้นทุกทาง และเทียบกับวิธีเลือกจุดใกล้สุด
- ตรวจความเป็นไปได้ด้านพลังงานโดยรวมพลังงานสำรอง และแบ่งงานเป็นหลายเที่ยว
- อธิบายปัญหาการวางเส้นทางแบบโดรนร่วมกับรถจากงานวิจัย
ทำไมต้องรู้
โรงพยาบาลต้องส่งของไป รพ.สต. สี่แห่ง บินทีละแห่งไปกลับก็ได้ แต่สิ้นเปลือง บินรอบเดียวครบทุกแห่งประหยัดกว่า แต่ถ้าแบตเตอรี่ไม่พอ โดรนอาจตกกลางทาง ลำดับการบินที่ดีช่วยลดระยะทางได้มาก และการตรวจพลังงานพร้อมสำรองก่อนออกบินเป็นเรื่องความปลอดภัย ไม่ใช่เพียงความประหยัด
ปัญหาเส้นทาง
การหาลำดับไปทุกจุดแล้วกลับจุดเริ่มให้ระยะรวมสั้นที่สุด คือ ปัญหาการเดินทางของพนักงานขาย (traveling salesman problem, TSP) จำนวนลำดับที่เป็นไปได้เพิ่มเร็วมาก สำหรับ จุดมี ลำดับ (นับสองทิศแยกกัน) สี่จุดมีเพียง 24 ลำดับ จึงค้นทุกทางได้ แต่ 15 จุดมีมากกว่าหนึ่งล้านล้านลำดับ งานจริงจึงใช้ ฮิวริสติก (heuristic) ที่หาคำตอบดีพอในเวลาสั้น เช่น วิธีเลือกจุดใกล้สุด (nearest neighbour) ที่ไปจุดที่ใกล้ที่สุดซึ่งยังไม่ได้ไปทุกครั้ง
ตัวอย่างที่ 1 ค้นทุกทางเทียบวิธีเลือกจุดใกล้สุด
พิกัดสมมติเป็นกิโลเมตร H คือโรงพยาบาล
import math
from itertools import permutations
SITES = {"H": (0, 0), "A": (1.0, 2.5), "B": (1.5, 0.0), "C": (-2.0, 1.0), "D": (4.0, 0.5)}
def length(order):
stops = ["H", *order, "H"]
return sum(math.dist(SITES[a], SITES[b]) for a, b in zip(stops, stops[1:]))
best = min(permutations("ABCD"), key=length)
current, left, greedy = "H", set("ABCD"), []
while left:
nxt = min(sorted(left), key=lambda s: math.dist(SITES[current], SITES[s]))
greedy.append(nxt)
left.remove(nxt)
current = nxt
print(f"exhaustive: H-{'-'.join(best)}-H = {length(best):.2f} km")
print(f"nearest neighbour: H-{'-'.join(greedy)}-H = {length(greedy):.2f} km "
f"(+{length(greedy) / length(best) - 1:.0%})")
exhaustive: H-B-D-A-C-H = 13.25 km
nearest neighbour: H-B-A-C-D-H = 17.46 km (+32%)
วิธีเลือกจุดใกล้สุดเริ่มดีที่ B แต่ไปติดที่ C ทางซ้าย แล้วต้องบินข้ามไป D ทางขวาไกล ทำให้ยาวกว่าคำตอบที่ดีที่สุดราวหนึ่งในสาม ฮิวริสติกจึงต้องตรวจคุณภาพเทียบคำตอบที่ดีกว่าเสมอเมื่อทำได้
พลังงานและสำรอง
พลังงานที่ใช้ได้จริงคือความจุแบตเตอรี่คูณสัดส่วนที่ใช้ได้ แล้วหักพลังงานสำรองสำหรับเหตุไม่คาดคิด เช่น ลมต้าน การรอลงจอด หรือต้องบินกลับจากกลางทาง ทีมต้องกำหนดสำรองเป็นนโยบายและห้ามลดลงเพื่อให้เที่ยวบินผ่าน
ตัวอย่างที่ 2 ตรวจพลังงานและแบ่งเป็นสองเที่ยว
สมมติใช้พลังงาน 33.3 Wh/km เมื่อบรรทุก 2 kg แบตเตอรี่ 500 Wh ใช้ได้ 80% สำรอง 20%
import math
from itertools import combinations, permutations
SITES = {"H": (0, 0), "A": (1.0, 2.5), "B": (1.5, 0.0), "C": (-2.0, 1.0), "D": (4.0, 0.5)}
WH_PER_KM, BATTERY_WH, USABLE, RESERVE = 33.3, 500, 0.8, 0.2
available = BATTERY_WH * USABLE * (1 - RESERVE)
def best_trip(stops):
def km(order):
path = ["H", *order, "H"]
return sum(math.dist(SITES[a], SITES[b]) for a, b in zip(path, path[1:]))
order = min(permutations(stops), key=km)
return order, km(order)
order, km = best_trip("ABCD")
print(f"available {available:.0f} Wh; one trip {km:.2f} km needs {km * WH_PER_KM:.0f} Wh "
f"-> {'OK' if km * WH_PER_KM <= available else 'NOT feasible'}")
plans = []
for pair in combinations("ABCD", 2):
other = "".join(s for s in "ABCD" if s not in pair)
trips = [best_trip(pair), best_trip(other)]
if all(k * WH_PER_KM <= available for _, k in trips):
plans.append((sum(k for _, k in trips), trips))
total, trips = min(plans)
for o, k in trips:
print(f"trip H-{'-'.join(o)}-H: {k:.2f} km, {k * WH_PER_KM:.0f} Wh")
print(f"two trips total {total:.2f} km")
available 320 Wh; one trip 13.25 km needs 441 Wh -> NOT feasible
trip H-A-C-H: 8.28 km, 276 Wh
trip H-B-D-H: 8.08 km, 269 Wh
two trips total 16.36 km
เที่ยวเดียวครบสี่จุดต้องใช้พลังงานเกินที่ใช้ได้ จึงแบ่งเป็นสองเที่ยว คู่ที่ดีที่สุดคือ B กับ D และ A กับ C ระยะรวมมากกว่าเที่ยวเดียวราว 23% แต่ทุกเที่ยวมีสำรองครบ ถ้าลมต้านแรง พลังงานต่อกิโลเมตรเพิ่มขึ้น ต้องคำนวณใหม่ก่อนบินทุกครั้ง
โดรนร่วมกับรถ
Murray และ Chu (2015) เสนอปัญหา flying sidekick TSP ที่รถส่งของวิ่งตามเส้นทาง และโดรนบินออกจากรถไปส่งจุดใกล้ ๆ แล้วกลับมาที่รถ ทำให้โดรนไม่ต้องบินไกลจากคลัง งานทบทวนของ Macrina และคณะ (2020) รวบรวมปัญหาแบบนี้หลายรูปแบบ เช่น หลายโดรน หลายรถ และข้อจำกัดของแบตเตอรี่ สำหรับจังหวัดที่ รพ.สต. อยู่ไกลเกินระยะโดรน แนวคิดนี้อาจใช้รถพยาบาลหรือรถส่งยาเป็นฐานให้โดรน
ปฏิบัติการประจำโมดูล
ปฏิบัติการ: วางแผนเส้นทางส่งเวชภัณฑ์
- หาพิกัดจริงของโรงพยาบาลและ รพ.สต. ใกล้มหาวิทยาลัย (หรือใช้พิกัดสมมติ) แปลงเป็นระยะกิโลเมตร
- ใช้โค้ดตัวอย่างที่ 1 หาเส้นทางที่ดีที่สุดและเทียบกับวิธีเลือกจุดใกล้สุด
- วัดพลังงานต่อกิโลเมตรจริงของโดรนในแล็บจากการบินทดสอบ แล้วใช้โค้ดตัวอย่างที่ 2 วางแผนเที่ยวบิน
- ตรวจเส้นทางกับพื้นที่หวงห้ามและชุมชน ปรับเส้นทางและคำนวณพลังงานใหม่
- จำลองเที่ยวบินใน SITL บันทึกพลังงานที่ใช้จริงเทียบกับแผน
ข้อผิดพลาดที่พบบ่อย
ระวัง
- ใช้เส้นตรงบนแผนที่ โดยไม่คิดพื้นที่หวงห้ามและสิ่งกีดขวาง
- เชื่อฮิวริสติกโดยไม่ตรวจคุณภาพ
- ลดพลังงานสำรองเพื่อให้แผนผ่าน
- ใช้พลังงานต่อกิโลเมตรค่าเดียว ทั้งที่ลมและน้ำหนักเปลี่ยน
- ลืมเวลาขึ้นลงและการรอที่จุดส่ง
สรุป
- การหาลำดับจุดส่งเป็นปัญหา TSP จำนวนลำดับเพิ่มแบบแฟกทอเรียล
- วิธีเลือกจุดใกล้สุดเร็วแต่อาจยาวกว่าคำตอบที่ดีที่สุดมาก
- พลังงานที่ใช้ได้ = ความจุ × สัดส่วนที่ใช้ได้ × (1 − สำรอง) ถ้าไม่พอให้แบ่งเที่ยว
- โดรนร่วมกับรถขยายระยะบริการได้ ตามงานวิจัยของ Murray และ Chu
แบบฝึกตรวจความเข้าใจ
- ห้าจุดส่งมีลำดับที่เป็นไปได้กี่ลำดับ (นับสองทิศแยกกัน)
- แบตเตอรี่ 600 Wh ใช้ได้ 80% สำรอง 25% เหลือพลังงานใช้ได้เท่าใด
- จากข้อ 2 ที่ 30 Wh/km บินได้ไกลสุดกี่กิโลเมตร
- ทำไมวิธีเลือกจุดใกล้สุดจึงอาจได้เส้นทางยาว
- flying sidekick TSP คืออะไร
เฉลย
- Wh
- km
- เลือกทีละก้าวโดยไม่ดูภาพรวม อาจทิ้งจุดไกลไว้ท้ายสุดแล้วต้องบินย้อนไกล
- รถส่งของวิ่งเป็นฐาน โดรนบินออกจากรถไปส่งจุดใกล้แล้วกลับมาที่รถ
สรุปสูตรสำคัญ
| ความยาวเส้นทาง | |
| พลังงานที่ใช้ได้ |
แหล่งอ้างอิงหลัก
- Murray, C. C., & Chu, A. G. (2015). The flying sidekick traveling salesman problem: Optimization of drone-assisted parcel delivery. Transportation Research Part C: Emerging Technologies, 54, 86–109. link
- Macrina, G., Di Puglia Pugliese, L., Guerriero, F., & Laporte, G. (2020). Drone-aided routing: A literature review. Transportation Research Part C: Emerging Technologies, 120, 102762. link
- Otto, A., Agatz, N., Campbell, J., Golden, B., & Pesch, E. (2018). Optimization approaches for civil applications of unmanned aerial vehicles (UAVs) or aerial drones: A survey. Networks, 72(4), 411–458. link
- Stolaroff, J. K., Samaras, C., O'Neill, E. R., Lubers, A., Mitchell, A. S., & Ceperley, D. (2018). Energy use and life cycle greenhouse gas emissions of drones for commercial package delivery. Nature Communications, 9, 409. link
อ่านเพิ่มเติม
ศึกษาหน่วยความรู้ที่กำหนดล่วงหน้า ดูสื่อประกอบ และทำ quiz ประจำโมดูล
ในชั้นเรียน / ภาคสนาม
ปฏิบัติการเข้มข้นในแล็บและภาคสนาม บันทึกผลลงสมุดปฏิบัติการ
หลักฐานการเรียนรู้: สมุดปฏิบัติการที่อาจารย์ลงนาม