โมดูล 5/5 · สัปดาห์ 13–15 · 27 ชม.

ตั้งค่าและควบคุม configuration

UAT 302 การติดตั้งและประกอบรวมระบบอากาศยานไร้คนขับ

เวลาเรียนประมาณ 85 นาทีร่าง รอตรวจปรับปรุงล่าสุด 28 กันยายน 2569

บทเรียน

เมื่อเรียนจบโมดูลนี้ ผู้เรียนจะสามารถ

  1. แปลงข้อกำหนดด้านความปลอดภัยเป็นกฎตรวจพารามิเตอร์ของตัวควบคุมการบิน
  2. ตรวจไฟล์พารามิเตอร์ด้วยโปรแกรมก่อนบินทุกครั้ง
  3. สร้างลายนิ้วมือ SHA-256 ของรายการ configuration เพื่อบันทึก baseline และตรวจการเปลี่ยนแปลง
  4. จัดทำเอกสาร configuration ที่เชื่อมกับหลักฐานการทดสอบ

ความรู้พื้นฐานที่ควรมี: UAT 302 โมดูล 1–4 · UAT 494 โมดูล 2 (การควบคุม configuration)

ทำไมต้องรู้

โดรนที่ประกอบถูกต้องทุกเส้นยังอันตรายได้ ถ้าพารามิเตอร์ของตัวควบคุมการบินตั้งผิด เช่น ปิด failsafe ไว้ระหว่างทดสอบบนโต๊ะแล้วลืมเปิด หรือความสูงกลับจุดขึ้นบินต่ำกว่าต้นไม้รอบสนาม UAT 206 และ UAT 494 สอนเทียบไฟล์พารามิเตอร์สองชุดและการควบคุมการเปลี่ยนแปลงแล้ว โมดูลนี้ต่อยอดด้วยการ ตรวจพารามิเตอร์เทียบกับข้อกำหนด และการ ระบุ configuration ด้วยลายนิ้วมือ หน่วยความรู้เรื่องการควบคุมรุ่นและ configuration ของคลังความรู้โดรนย้ำว่า configuration คือสิ่งที่ทำให้ผลทดลองตีความได้ และหน่วยความรู้เรื่องการเชื่อมระบบกับหลักฐานแนะนำให้จับคู่ข้อกำหนดที่วัดได้กับวิธีตรวจและหลักฐาน

จากข้อกำหนดสู่กฎตรวจพารามิเตอร์

ข้อกำหนดด้านความปลอดภัยของทีมเขียนเป็นกฎที่โปรแกรมตรวจได้ ชื่อและหน่วยของพารามิเตอร์ต้องตรงกับเอกสารของเฟิร์มแวร์รุ่นที่ใช้ ตัวอย่างนี้อ้างรายการพารามิเตอร์ของ ArduPilot Copter 4.6.3:

  • BATT_LOW_VOLT และ BATT_CRT_VOLT แรงดันเตือนต่ำและวิกฤต หน่วยโวลต์ (0 = ปิด) และ BATT_FS_LOW_ACT, BATT_FS_CRT_ACT การกระทำเมื่อถึงค่า (0 เตือนอย่างเดียว 1 ลงจอด 2 RTL)
  • FS_THR_ENABLE failsafe เมื่อสัญญาณวิทยุบังคับหาย (0 = ปิด) และ FS_GCS_ENABLE เมื่อลิงก์ GCS หายเกิน 5 วินาที
  • FENCE_ENABLE และ FENCE_ALT_MAX รั้วเสมือนและเพดานความสูง หน่วยเมตร
  • RTL_ALT ความสูงขณะกลับจุดขึ้นบิน ใน Copter 4.6.3 มีหน่วย เซนติเมตร ส่วนรุ่นพัฒนาถัดไปเปลี่ยนเป็น RTL_ALT_M หน่วยเมตร นี่คือเหตุผลที่กฎตรวจต้องผูกกับรุ่นเฟิร์มแวร์

ตัวอย่างที่ 1 ตรวจไฟล์พารามิเตอร์ตามข้อกำหนด

ข้อกำหนดของทีม: แบตเตอรี่ 6S ระดับต่ำที่ 3.5 V ต่อเซลล์ ระดับวิกฤตที่ 3.3 V ต่อเซลล์ และทั้งสองระดับต้องสั่งการมากกว่าเตือนอย่างเดียว failsafe วิทยุและ GCS ต้องเปิด รั้วต้องเปิดโดยเพดานไม่เกิน 90 m และความสูง RTL ต้องสูงกว่าต้นไม้สูงสุดรอบสนาม 25 m อย่างน้อย 5 m

params = {   # อ่านจากไฟล์ .param ของตัวควบคุมการบิน (ค่าสมมติ)
    "BATT_LOW_VOLT": 21.0, "BATT_CRT_VOLT": 19.8, "BATT_FS_LOW_ACT": 2, "BATT_FS_CRT_ACT": 1,
    "FS_THR_ENABLE": 1, "FS_GCS_ENABLE": 0, "FENCE_ENABLE": 1, "FENCE_ALT_MAX": 100,
    "RTL_ALT": 2500,
}
CELLS, TREE_M = 6, 25
rules = [   # ข้อกำหนด, ฟังก์ชันตรวจ
    ("low voltage >= 3.5 V/cell", lambda p: p["BATT_LOW_VOLT"] >= 3.5 * CELLS),
    ("critical voltage >= 3.3 V/cell", lambda p: p["BATT_CRT_VOLT"] >= 3.3 * CELLS),
    ("battery actions not 'warn only'", lambda p: p["BATT_FS_LOW_ACT"] > 0 and p["BATT_FS_CRT_ACT"] > 0),
    ("RC failsafe enabled", lambda p: p["FS_THR_ENABLE"] != 0),
    ("GCS failsafe enabled", lambda p: p["FS_GCS_ENABLE"] != 0),
    ("fence on, ceiling <= 90 m", lambda p: p["FENCE_ENABLE"] == 1 and p["FENCE_ALT_MAX"] <= 90),
    ("RTL altitude >= trees + 5 m (RTL_ALT in cm)", lambda p: p["RTL_ALT"] / 100 >= TREE_M + 5),
]
failed = 0
for text, check in rules:
    ok = check(params)
    failed += not ok
    print(f"{'PASS' if ok else 'FAIL'}  {text}")
print(f"{failed} rule(s) failed -> {'do not fly' if failed else 'cleared for pre-flight checks'}")
PASS  low voltage >= 3.5 V/cell
PASS  critical voltage >= 3.3 V/cell
PASS  battery actions not 'warn only'
PASS  RC failsafe enabled
FAIL  GCS failsafe enabled
FAIL  fence on, ceiling <= 90 m
FAIL  RTL altitude >= trees + 5 m (RTL_ALT in cm)
3 rule(s) failed -> do not fly

การตรวจพบว่า failsafe ของ GCS ปิดอยู่ เพดานรั้วสูงกว่าเกณฑ์ และความสูง RTL 2500 cm หรือ 25 m เท่ากับยอดไม้พอดี ถ้าใครอ่านค่า 2500 เป็นเมตรจะคิดว่าปลอดภัยมาก ความผิดเรื่องหน่วยแบบนี้เป็นเหตุผลที่ควรให้โปรแกรมตรวจแทนการดูด้วยตา

ลำดับงานสี่กล่องจากซ้ายไปขวา ข้อกำหนดความปลอดภัย กฎตรวจตามรุ่นเฟิร์มแวร์ ตรวจไฟล์ .param และผลผ่านหรือไม่ผ่าน กล่องไม่ผ่านมีลูกศรกลับไปแก้ค่า
ภาพที่ 1 ตรวจพารามิเตอร์ตามข้อกำหนดก่อนบิน

ลายนิ้วมือของ configuration

การเขียนว่า “ใช้พารามิเตอร์ชุดล่าสุด” ตรวจสอบไม่ได้ ISO 10007 ให้ระบุรายการ configuration ให้ชัดเจน วิธีที่ง่ายและแม่นยำคือคำนวณ ค่าแฮช SHA-256 (มาตรฐาน FIPS 180-4) ของแต่ละไฟล์ ถ้าเนื้อหาเปลี่ยนแม้หนึ่งตัวอักษร ค่าแฮชจะเปลี่ยนทั้งหมด บันทึกค่าแฮชไว้ใน baseline แล้วเทียบก่อนบินทุกครั้ง

ตัวอย่างที่ 2 บันทึก baseline และตรวจการเปลี่ยนแปลง

import hashlib

def fingerprint(text):
    return hashlib.sha256(text.encode("utf-8")).hexdigest()[:16]   # แสดง 16 ตัวแรกให้อ่านง่าย

baseline = {
    "params": "BATT_LOW_VOLT,21.0\nFS_GCS_ENABLE,1\nRTL_ALT,3000\n",
    "harness": "W02 BEC A -> companion 5V 22 AWG\n",
    "payload": "thermal camera, 4 soft dampers\n",
}
today = dict(baseline, params="BATT_LOW_VOLT,21.0\nFS_GCS_ENABLE,1\nRTL_ALT,300\n")
record = {k: fingerprint(v) for k, v in baseline.items()}
for item, text in today.items():
    now = fingerprint(text)
    status = "unchanged" if now == record[item] else "CHANGED since baseline"
    print(f"{item:<8} {now}  {status}")
params   4d64c9c54070644e  CHANGED since baseline
harness  58b531d879b843c2  unchanged
payload  f7aa99efe1967fc3  unchanged

การพิมพ์ RTL_ALT ขาดเลขศูนย์หนึ่งตัวทำให้ค่าแฮชของไฟล์พารามิเตอร์ต่างจาก baseline ทันที แม้คนดูรายการยาวหลายร้อยบรรทัดจะมองไม่เห็น ทีมต้องหาสาเหตุ แก้ แล้วบันทึก baseline ใหม่ผ่านการขอเปลี่ยนแปลงตาม UAT 494

สามกล่องรายการ configuration ได้แก่ พารามิเตอร์ ชุดสายไฟ และ payload แต่ละกล่องมีลูกศรไปกล่องค่าแฮช แล้วรวมเป็นกล่อง baseline ที่บันทึกพร้อมผลทดสอบ
ภาพที่ 2 รายการ configuration และลายนิ้วมือใน baseline

ปฏิบัติการประจำโมดูล

ปฏิบัติการ: ส่งมอบโดรนพร้อม configuration

  1. ดาวน์โหลดไฟล์พารามิเตอร์จากตัวควบคุมการบินฝึกด้วย Mission Planner หรือ QGroundControl
  2. เขียนข้อกำหนดความปลอดภัยของทีมแล้วแปลงเป็นกฎแบบตัวอย่างที่ 1 โดยตรวจชื่อและหน่วยกับเอกสารของรุ่นเฟิร์มแวร์ที่ใช้
  3. แก้ค่าที่ไม่ผ่าน ทดสอบ failsafe แต่ละแบบใน SITL หรือภาคพื้นโดยถอดใบพัด
  4. สร้างลายนิ้วมือของพารามิเตอร์ ตารางสายไฟ และบัญชี payload ด้วยตัวอย่างที่ 2 บันทึกเป็น baseline
  5. ส่งมอบแฟ้ม: บัญชีส่วนต่อประสาน ตารางสายไฟ ผลตรวจกฎ baseline และหลักฐานการทดสอบ

ข้อผิดพลาดที่พบบ่อย

ระวัง

  • ปิด failsafe ตอนทดสอบบนโต๊ะแล้วลืมเปิด
  • สับสนหน่วยของพารามิเตอร์ เช่น เซนติเมตรกับเมตร
  • ใช้กฎตรวจของเฟิร์มแวร์รุ่นหนึ่งกับอีกรุ่น
  • บอกว่า “ใช้ค่าล่าสุด” แทนการระบุด้วยลายนิ้วมือ
  • เปลี่ยนค่าหน้างานโดยไม่บันทึก baseline ใหม่

สรุป

  • ข้อกำหนดความปลอดภัยแปลงเป็นกฎตรวจพารามิเตอร์ที่ผูกกับชื่อและหน่วยของรุ่นเฟิร์มแวร์
  • ตรวจไฟล์พารามิเตอร์ด้วยโปรแกรมก่อนบินทุกครั้ง
  • SHA-256 ตาม FIPS 180-4 ให้ลายนิ้วมือที่เปลี่ยนทันทีเมื่อเนื้อหาเปลี่ยน
  • แฟ้มส่งมอบเชื่อม configuration กับหลักฐานการทดสอบ

แบบฝึกตรวจความเข้าใจ

  1. แบตเตอรี่ 4S เตือนที่ 3.5 V ต่อเซลล์ BATT_LOW_VOLT ควรเป็นเท่าใด
  2. RTL_ALT = 1500 ใน Copter 4.6.3 หมายถึงความสูงกี่เมตร
  3. BATT_FS_LOW_ACT = 0 มีปัญหาอะไร
  4. ทำไมค่าแฮชจึงเหมาะใช้ตรวจการเปลี่ยนแปลงของไฟล์ยาว
  5. เมื่อค่าแฮชต่างจาก baseline ควรทำอย่างไร
เฉลย
  1. V
  2. 15 m
  3. เตือนอย่างเดียว ไม่สั่งให้อากาศยานทำอะไรเมื่อแบตเตอรี่ต่ำ
  4. เปลี่ยนแม้เนื้อหาเปลี่ยนเพียงตัวเดียว เทียบค่าเดียวแทนการอ่านทั้งไฟล์
  5. หาสาเหตุ แก้ไข และบันทึก baseline ใหม่ผ่านการขอเปลี่ยนแปลง

สรุปสูตรสำคัญ

แรงดันขั้นต่ำของแพ็ก

แหล่งอ้างอิงหลัก

  1. ArduPilot Dev Team. Parameter list (Copter stable V4.6.3). ArduPilot Copter documentation. link
  2. ArduPilot Dev Team. Battery failsafe. ArduPilot Copter documentation. link
  3. ArduPilot Dev Team. Radio failsafe. ArduPilot Copter documentation. link
  4. ArduPilot Dev Team. GCS failsafe. ArduPilot Copter documentation. link
  5. ArduPilot Dev Team. RTL mode. ArduPilot Copter documentation. link
  6. National Institute of Standards and Technology. (2015). Secure hash standard (SHS) (FIPS 180-4). link
  7. International Organization for Standardization. (2017). Quality management — Guidelines for configuration management (ISO 10007:2017). link

อ่านเพิ่มเติม

ศึกษาหน่วยความรู้ที่กำหนดล่วงหน้า ดูสื่อประกอบ และทำ quiz ประจำโมดูล

ในชั้นเรียน / ภาคสนาม

ปฏิบัติการในห้องแล็บหรือภาคสนามตามใบงาน พร้อม checklist ความปลอดภัย

หลักฐานการเรียนรู้: ใบงานที่ผ่านการตรวจและผล quiz

แบบทดสอบประจำโมดูล

แบบทดสอบนี้ใช้ตรวจความเข้าใจ (formative) ไม่ใช่การสอบเก็บคะแนน

โดเมนความรู้: การติดตั้ง บำรุงรักษา และการทดสอบ · การจัดการ นวัตกรรม และวิชาชีพ · ปัญญาประดิษฐ์และคอมพิวเตอร์วิทัศน์ · กฎหมาย ความปลอดภัย และความเสี่ยง