ตั้งค่าและควบคุม configuration
UAT 302 การติดตั้งและประกอบรวมระบบอากาศยานไร้คนขับ
บทเรียน
เมื่อเรียนจบโมดูลนี้ ผู้เรียนจะสามารถ
- แปลงข้อกำหนดด้านความปลอดภัยเป็นกฎตรวจพารามิเตอร์ของตัวควบคุมการบิน
- ตรวจไฟล์พารามิเตอร์ด้วยโปรแกรมก่อนบินทุกครั้ง
- สร้างลายนิ้วมือ SHA-256 ของรายการ configuration เพื่อบันทึก baseline และตรวจการเปลี่ยนแปลง
- จัดทำเอกสาร 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_ENABLEfailsafe เมื่อสัญญาณวิทยุบังคับหาย (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 เป็นเมตรจะคิดว่าปลอดภัยมาก ความผิดเรื่องหน่วยแบบนี้เป็นเหตุผลที่ควรให้โปรแกรมตรวจแทนการดูด้วยตา
ลายนิ้วมือของ 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
- ดาวน์โหลดไฟล์พารามิเตอร์จากตัวควบคุมการบินฝึกด้วย Mission Planner หรือ QGroundControl
- เขียนข้อกำหนดความปลอดภัยของทีมแล้วแปลงเป็นกฎแบบตัวอย่างที่ 1 โดยตรวจชื่อและหน่วยกับเอกสารของรุ่นเฟิร์มแวร์ที่ใช้
- แก้ค่าที่ไม่ผ่าน ทดสอบ failsafe แต่ละแบบใน SITL หรือภาคพื้นโดยถอดใบพัด
- สร้างลายนิ้วมือของพารามิเตอร์ ตารางสายไฟ และบัญชี payload ด้วยตัวอย่างที่ 2 บันทึกเป็น baseline
- ส่งมอบแฟ้ม: บัญชีส่วนต่อประสาน ตารางสายไฟ ผลตรวจกฎ baseline และหลักฐานการทดสอบ
ข้อผิดพลาดที่พบบ่อย
ระวัง
- ปิด failsafe ตอนทดสอบบนโต๊ะแล้วลืมเปิด
- สับสนหน่วยของพารามิเตอร์ เช่น เซนติเมตรกับเมตร
- ใช้กฎตรวจของเฟิร์มแวร์รุ่นหนึ่งกับอีกรุ่น
- บอกว่า “ใช้ค่าล่าสุด” แทนการระบุด้วยลายนิ้วมือ
- เปลี่ยนค่าหน้างานโดยไม่บันทึก baseline ใหม่
สรุป
- ข้อกำหนดความปลอดภัยแปลงเป็นกฎตรวจพารามิเตอร์ที่ผูกกับชื่อและหน่วยของรุ่นเฟิร์มแวร์
- ตรวจไฟล์พารามิเตอร์ด้วยโปรแกรมก่อนบินทุกครั้ง
- SHA-256 ตาม FIPS 180-4 ให้ลายนิ้วมือที่เปลี่ยนทันทีเมื่อเนื้อหาเปลี่ยน
- แฟ้มส่งมอบเชื่อม configuration กับหลักฐานการทดสอบ
แบบฝึกตรวจความเข้าใจ
- แบตเตอรี่ 4S เตือนที่ 3.5 V ต่อเซลล์
BATT_LOW_VOLTควรเป็นเท่าใด RTL_ALT = 1500ใน Copter 4.6.3 หมายถึงความสูงกี่เมตรBATT_FS_LOW_ACT = 0มีปัญหาอะไร- ทำไมค่าแฮชจึงเหมาะใช้ตรวจการเปลี่ยนแปลงของไฟล์ยาว
- เมื่อค่าแฮชต่างจาก baseline ควรทำอย่างไร
เฉลย
- V
- 15 m
- เตือนอย่างเดียว ไม่สั่งให้อากาศยานทำอะไรเมื่อแบตเตอรี่ต่ำ
- เปลี่ยนแม้เนื้อหาเปลี่ยนเพียงตัวเดียว เทียบค่าเดียวแทนการอ่านทั้งไฟล์
- หาสาเหตุ แก้ไข และบันทึก baseline ใหม่ผ่านการขอเปลี่ยนแปลง
สรุปสูตรสำคัญ
| แรงดันขั้นต่ำของแพ็ก |
แหล่งอ้างอิงหลัก
- ArduPilot Dev Team. Parameter list (Copter stable V4.6.3). ArduPilot Copter documentation. link
- ArduPilot Dev Team. Battery failsafe. ArduPilot Copter documentation. link
- ArduPilot Dev Team. Radio failsafe. ArduPilot Copter documentation. link
- ArduPilot Dev Team. GCS failsafe. ArduPilot Copter documentation. link
- ArduPilot Dev Team. RTL mode. ArduPilot Copter documentation. link
- National Institute of Standards and Technology. (2015). Secure hash standard (SHS) (FIPS 180-4). link
- International Organization for Standardization. (2017). Quality management — Guidelines for configuration management (ISO 10007:2017). link
อ่านเพิ่มเติม
ศึกษาหน่วยความรู้ที่กำหนดล่วงหน้า ดูสื่อประกอบ และทำ quiz ประจำโมดูล
ในชั้นเรียน / ภาคสนาม
ปฏิบัติการในห้องแล็บหรือภาคสนามตามใบงาน พร้อม checklist ความปลอดภัย
หลักฐานการเรียนรู้: ใบงานที่ผ่านการตรวจและผล quiz