โดรนในคลังสินค้า
UAT 363 เทคโนโลยีระบบอากาศยานไร้คนขับเพื่อการขนส่งและคลังสินค้าอัจฉริยะ
บทเรียน
เมื่อเรียนจบโมดูลนี้ ผู้เรียนจะสามารถ
- อธิบายการใช้โดรนในคลังสินค้าและความต่างระหว่างการตรวจนับประจำปีกับการตรวจนับแบบหมุนเวียน
- วางแผนการบินสแกนชั้นวางและประมาณเวลาที่ใช้
- เปรียบเทียบวิธีระบุตำแหน่งในอาคารที่ไม่มี GNSS ได้แก่ VIO, motion capture, UWB และ AprilTag
- คำนวณตำแหน่งจากระยะถึงสมอ UWB ด้วยวิธีกำลังสองน้อยที่สุด
ทำไมต้องรู้
คลังเวชภัณฑ์มีสินค้าหลายพันรายการบนชั้นวางสูง การตรวจนับด้วยคนต้องใช้รถยก ใช้เวลานาน และมักต้องหยุดงาน ความคลาดเคลื่อนระหว่างของจริงกับบันทึกทำให้ยาขาดหรือหมดอายุโดยไม่รู้ตัว โดรนที่บินสแกนชั้นวางช่วยนับได้บ่อยขึ้น แต่ในอาคารไม่มีสัญญาณ GNSS โดรนต้องรู้ตำแหน่งตัวเองด้วยวิธีอื่น
โดรนในคลังสินค้า
รายงานของ ETH Zurich (Wawrla และคณะ, 2019) ศึกษาการใช้งานจริง 12 กรณี แบ่งเป็นสามกลุ่ม คือ การจัดการสินค้าคงคลัง การขนย้ายภายในคลัง และการตรวจและเฝ้าระวัง สรุปว่า การจัดการสินค้าคงคลังมีศักยภาพสูงที่สุด ส่วนการขนย้ายภายในคลังยังไม่พร้อมเพราะข้อจำกัดของแบตเตอรี่และน้ำหนักบรรทุก ข้อท้าทายหลักคือพื้นที่บินจำกัด การนำทางในอาคารที่ไม่มี GPS การเชื่อมกับระบบเดิม และความปลอดภัยของแบตเตอรี่
รายงานเดียวกันแยก การตรวจนับประจำปี (stock taking) ที่นับทั้งคลังปีละครั้ง กับ การตรวจนับแบบหมุนเวียน (cycle counting) ที่นับบางส่วนทุกวันหรือทุกสัปดาห์ โดรนเหมาะกับแบบหมุนเวียน เพราะนับซ้ำได้บ่อยโดยไม่หยุดงาน
ตัวอย่างที่ 1 จำนวนตำแหน่งและเวลาสแกน
คลังสมมติ: ทางเดิน 6 ช่อง ชั้นวางยาว 40 m แบ่ง 16 ช่อง (bay) สูง 5 ชั้น โดรนสแกนสองฝั่งทางเดินพร้อมกันทีละชั้นที่ 0.5 m/s
import math
AISLES, RACK_M, BAYS, LEVELS = 6, 40.0, 16, 5
SPEED, LEVEL_CHANGE_S, AISLE_CHANGE_S, BATTERY_MIN = 0.5, 10, 30, 15
locations = AISLES * 2 * BAYS * LEVELS
per_aisle_s = LEVELS * RACK_M / SPEED + LEVELS * LEVEL_CHANGE_S
total_s = AISLES * per_aisle_s + (AISLES - 1) * AISLE_CHANGE_S
flights = math.ceil(total_s / 60 / BATTERY_MIN)
print(f"{locations} locations, {per_aisle_s / 60:.1f} min per aisle, "
f"total {total_s / 60:.1f} min -> {flights} battery flights")
print(f"daily cycle count of one aisle covers {2 * BAYS * LEVELS} locations "
f"= all {locations} in {AISLES} working days")
960 locations, 7.5 min per aisle, total 47.5 min -> 4 battery flights
daily cycle count of one aisle covers 160 locations = all 960 in 6 working days
การนับทั้งคลังในครั้งเดียวต้องเปลี่ยนแบตเตอรี่หลายครั้ง แต่การนับแบบหมุนเวียนวันละหนึ่งทางเดินใช้เวลาไม่ถึง 15 นาที และครบทั้งคลังทุกสัปดาห์
ระบุตำแหน่งในอาคาร
| วิธี | หลักการ | ข้อดี | ข้อจำกัด |
|---|---|---|---|
| VIO (visual-inertial odometry) | กล้องบนโดรนร่วมกับ IMU ประมาณการเคลื่อนที่ | ไม่ต้องติดตั้งอุปกรณ์ในอาคาร | ตำแหน่งคลาดสะสม ผนังเรียบหรือแสงน้อยทำงานยาก |
| Motion capture | กล้องหลายตัวในห้องจับเครื่องหมายบนโดรน | แม่นยำสูงมาก | ติดตั้งแพง ใช้ได้ในพื้นที่จำกัด |
| UWB | วัดระยะด้วยคลื่นวิทยุแถบกว้างมากถึงสมอที่รู้ตำแหน่ง | ครอบคลุมพื้นที่กว้างกว่า ไม่ขึ้นกับแสง | ต้องติดสมอ สิ่งกีดขวางทำให้วัดคลาด |
| AprilTag | ป้ายรหัสภาพ (fiducial marker) ที่รู้ตำแหน่ง | ถูกและระบุตัวได้ชัด | ต้องเห็นป้าย ใช้ช่วยแก้ความคลาดสะสม |
คู่มือ PX4 อธิบายการส่งตำแหน่งจากระบบภายนอก (VIO หรือ motion capture) เข้าตัวประมาณสถานะ EKF2 และแนะนำอัตราส่งข้อมูล 30–50 Hz UWB มีมาตรฐาน IEEE 802.15.4z-2020 สำหรับการวัดระยะ งานทบทวนของ Alarifi และคณะ (2016) สรุปว่า UWB ทำงานได้ดีกว่าเทคโนโลยีอื่นในงานระบุตำแหน่งในอาคาร ส่วนความแม่นจริงขึ้นกับการติดตั้งและสภาพแวดล้อม ต้องวัดในพื้นที่จริง ป้าย AprilTag (Olson, 2011) ใช้ทั้งระบุตำแหน่งและเป็นจุดอ้างอิงบนชั้นวาง
ตัวอย่างที่ 2 หาตำแหน่งจากระยะ UWB ด้วยกำลังสองน้อยที่สุด
ระยะที่วัดได้มีความคลาดเล็กน้อย (ค่าสมมติ) ลบสมการแรกออกจากสมการอื่นจะได้ระบบเชิงเส้น แล้วแก้ด้วยกำลังสองน้อยที่สุด
import math
anchors = [(0, 0), (20, 0), (20, 10), (0, 10)]
true_pos = (7, 4)
noise = [0.05, -0.03, 0.04, -0.02] # m
ranges = [math.dist(a, true_pos) + e for a, e in zip(anchors, noise)]
(x1, y1), r1 = anchors[0], ranges[0]
rows, rhs = [], []
for (xi, yi), ri in zip(anchors[1:], ranges[1:]):
rows.append((2 * (xi - x1), 2 * (yi - y1)))
rhs.append(r1 ** 2 - ri ** 2 + xi ** 2 - x1 ** 2 + yi ** 2 - y1 ** 2)
a11 = sum(r[0] * r[0] for r in rows); a12 = sum(r[0] * r[1] for r in rows)
a22 = sum(r[1] * r[1] for r in rows)
b1 = sum(r[0] * v for r, v in zip(rows, rhs)); b2 = sum(r[1] * v for r, v in zip(rows, rhs))
det = a11 * a22 - a12 * a12
x, y = (a22 * b1 - a12 * b2) / det, (a11 * b2 - a12 * b1) / det
print(f"ranges {[round(r, 2) for r in ranges]}")
print(f"estimate ({x:.2f}, {y:.2f}) m, error {math.dist((x, y), true_pos) * 100:.1f} cm")
ranges [8.11, 13.57, 14.36, 9.2]
estimate (7.01, 4.01) m, error 1.6 cm
การนับด้วยภาพต้องอ่านบาร์โค้ดหรือป้ายบนกล่อง ส่วนงานวิจัย RFly (Ma และคณะ, 2017) ใช้โดรนเป็นตัวถ่ายทอดสัญญาณ RFID เพื่ออ่านและระบุตำแหน่งป้าย RFID ที่ไม่มีแบตเตอรี่ในคลัง ทางเลือกนี้ไม่ต้องเห็นป้ายโดยตรง
ปฏิบัติการประจำโมดูล
ปฏิบัติการ: สแกนชั้นวางจำลอง
- จัดชั้นวางจำลองในแล็บ ติดบาร์โค้ดหรือ AprilTag ที่ทุกช่อง
- ใช้โค้ดตัวอย่างที่ 1 กับขนาดคลังของโรงพยาบาลหรือของแล็บ วางแผนการนับแบบหมุนเวียน
- ติดตั้งระบบระบุตำแหน่งในอาคารที่แล็บมี (UWB หรือ motion capture) ส่งตำแหน่งเข้า PX4 ตามคู่มือ แล้ววัดความคลาดเทียบจุดอ้างอิง
- ใช้โค้ดตัวอย่างที่ 2 กับระยะ UWB จริงจากหลายจุด บันทึกความคลาด
- บินสแกนด้วยมือหรืออัตโนมัติในพื้นที่ปิด บันทึกอัตราการอ่านป้ายสำเร็จ
ข้อผิดพลาดที่พบบ่อย
ระวัง
- เปิดโหมดที่พึ่ง GNSS ในอาคาร
- ไม่ปรับเทียบตำแหน่งสมอ UWB จนตำแหน่งคลาดทั้งระบบ
- บินใกล้คนและรถยก โดยไม่แยกเวลาหรือพื้นที่
- เชื่อ VIO นานเกินไป โดยไม่มีจุดอ้างอิงแก้ความคลาดสะสม
- ไม่ตรวจอัตราการอ่านป้ายสำเร็จ ก่อนสรุปว่าของหาย
สรุป
- การจัดการสินค้าคงคลังเป็นงานที่เหมาะกับโดรนมากที่สุดตามรายงาน ETH และเหมาะกับการนับแบบหมุนเวียน
- ประมาณเวลาสแกนจากจำนวนทางเดิน ชั้น และความเร็ว แล้ววางรอบการนับ
- ในอาคารใช้ VIO, motion capture, UWB หรือ AprilTag ส่งตำแหน่งเข้าตัวควบคุมการบิน
- ระยะถึงสมอหลายตัวแก้ตำแหน่งได้ด้วยกำลังสองน้อยที่สุด
แบบฝึกตรวจความเข้าใจ
- ทางเดิน 4 ช่อง ช่องละสองฝั่ง ฝั่งละ 20 bay 4 ชั้น มีกี่ตำแหน่ง
- ชั้นวางยาว 30 m สแกน 4 ชั้นที่ 0.5 m/s ใช้เวลาบินตามแนวกี่นาที
- stock taking ต่างจาก cycle counting อย่างไร
- ทำไม VIO ต้องมีจุดอ้างอิงเช่น AprilTag
- ระบุตำแหน่งสองมิติด้วย UWB ต้องมีสมออย่างน้อยกี่ตัว
เฉลย
- ตำแหน่ง
- s = 4 นาที
- stock taking นับทั้งคลังปีละครั้ง cycle counting นับบางส่วนทุกวันหรือทุกสัปดาห์
- ความคลาดของ VIO สะสมตามเวลา จุดอ้างอิงช่วยรีเซ็ตให้ตรง
- 3 ตัว (ไม่อยู่บนเส้นตรงเดียวกัน) ตัวที่ 4 ช่วยลดความคลาด
สรุปสูตรสำคัญ
| ระยะจากสมอ | |
| สมการเชิงเส้นหลังลบสมการแรก |
แหล่งอ้างอิงหลัก
- 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
- PX4 Autopilot. Using vision or motion capture systems for position estimation. PX4 guide (main). link
- Olson, E. (2011). AprilTag: A robust and flexible visual fiducial system. In 2011 IEEE International Conference on Robotics and Automation (pp. 3400–3407). IEEE. link
- IEEE. (2020). IEEE standard for low-rate wireless networks — Amendment 1: Enhanced ultra wideband (UWB) physical layers (PHYs) and associated ranging techniques (IEEE Std 802.15.4z-2020). link
- Alarifi, A., Al-Salman, A., Alsaleh, M., Alnafessah, A., Al-Hadhrami, S., Al-Ammar, M. A., & Al-Khalifa, H. S. (2016). Ultra wideband indoor positioning technologies: Analysis and recent advances. Sensors, 16(5), 707. link
- Ma, Y., Selby, N., & Adib, F. (2017). Drone relays for battery-free networks. In Proceedings of ACM SIGCOMM 2017 (pp. 335–347). ACM. link
อ่านเพิ่มเติม
ศึกษาหน่วยความรู้ที่กำหนดล่วงหน้า ดูสื่อประกอบ และทำ quiz ประจำโมดูล
ในชั้นเรียน / ภาคสนาม
ปฏิบัติการเข้มข้นในแล็บและภาคสนาม บันทึกผลลงสมุดปฏิบัติการ
หลักฐานการเรียนรู้: สมุดปฏิบัติการที่อาจารย์ลงนาม