บูรณาการระบบ
UAT 494 โครงงานเทคโนโลยีระบบอากาศยานไร้คนขับและระบบอัตโนมัติ 2
บทเรียน
เมื่อเรียนจบโมดูลนี้ ผู้เรียนจะสามารถ
- วางลำดับการบูรณาการจากล่างขึ้นบนและทดสอบทีละส่วนต่อ
- ควบคุม configuration ของซอฟต์แวร์ พารามิเตอร์ และฮาร์ดแวร์ ด้วย baseline และการขอเปลี่ยนแปลง
- เปรียบเทียบ configuration ระหว่างการทดลองเพื่อหาสาเหตุที่ผลเปลี่ยน
- ติดตามผลทดสอบส่วนต่อประสาน (interface) และการทดสอบซ้ำ
ทำไมต้องรู้
ชิ้นส่วนที่ทำงานได้ดีทีละชิ้นอาจทำงานร่วมกันไม่ได้ เช่น กล้องสั่งถ่ายภาพได้เมื่อต่อกับคอมพิวเตอร์โดยตรง แต่พลาดภาพเมื่อสั่งผ่านตัวควบคุมการบิน ปัญหาเหล่านี้อยู่ที่ ส่วนต่อประสาน (interface) การบูรณาการที่ดีต่อทีละส่วนและทดสอบทุกครั้ง พร้อมจดว่าใช้รุ่นใด เพื่อให้ตามหาสาเหตุได้
ลำดับการบูรณาการ
คู่มือวิศวกรรมระบบของ NASA และมาตรฐาน ISO/IEC/IEEE 15288 อธิบายกระบวนการบูรณาการที่นำชิ้นส่วนมารวมเป็นระบบย่อยและระบบทีละระดับ โครงงานนี้ใช้การบูรณาการ จากล่างขึ้นบน: ทดสอบชิ้นส่วน รวมเป็นระบบบินกับระบบถ่ายภาพและตรวจจับ แล้วจึงรวมเป็นระบบครบพร้อม GCS และการรายงาน ส่วนต่อประสานทุกจุดควรบันทึกไว้ใน เอกสารควบคุมส่วนต่อประสาน (ICD) ซึ่ง NASA ให้ดูแลผ่านกระบวนการจัดการ configuration
ควบคุม configuration
Configuration คือชุดของรุ่นเฟิร์มแวร์ ซอฟต์แวร์ พารามิเตอร์ ฮาร์ดแวร์ และวิธีเชื่อมต่อ ที่ทำให้ผลทดลองหนึ่งตีความได้ บทฝึกเรื่องการควบคุมรุ่นและ configuration ของคลังความรู้โดรนเตือนว่าถ้าเปลี่ยนหลายอย่างพร้อมกัน จะบอกไม่ได้ว่าอะไรทำให้ผลเปลี่ยน ISO 10007 ให้แนวทางการจัดการ configuration ได้แก่ ระบุรายการที่ควบคุม กำหนด baseline ควบคุมการเปลี่ยนแปลงผ่านคำขอและการทบทวน และบันทึกสถานะ
ตัวอย่างที่ 1 ทำไมภาพหายเพิ่มขึ้นหลังอัปเดต
การทดลองสองครั้ง ครั้งแรกภาพหาย 1 จาก 210 ภาพ ครั้งที่สองหาย 14 ภาพ เทียบ configuration ที่บันทึกไว้
run_a = {"firmware": "4.5.7", "companion image": "v1.2", "CAM_TRIGG_DIST": 15.0,
"SERIAL2_BAUD": 921, "camera fw": "1.08", "SD card": "A32"}
run_b = {"firmware": "4.5.7", "companion image": "v1.3", "CAM_TRIGG_DIST": 15.0,
"SERIAL2_BAUD": 57, "camera fw": "1.08", "SD card": "B64"}
missed = {"run_a": 1, "run_b": 14}
changes = {k: (run_a.get(k), run_b.get(k)) for k in run_a.keys() | run_b.keys() if run_a.get(k) != run_b.get(k)}
print(f"missed images {missed['run_a']} -> {missed['run_b']}")
for k, (a, b) in sorted(changes.items()):
print(f"changed: {k:<16} {a} -> {b}")
print(f"{len(changes)} changes at once: cannot tell which caused it; revert and change one at a time")
missed images 1 -> 14
changed: SD card A32 -> B64
changed: SERIAL2_BAUD 921 -> 57
changed: companion image v1.2 -> v1.3
3 changes at once: cannot tell which caused it; revert and change one at a time
การเปลี่ยนสามอย่างพร้อมกันทำให้ต้องทดลองย้อนทีละตัว ถ้าอัปเดตผ่านคำขอเปลี่ยนแปลงทีละรายการและทดสอบซ้ำทุกครั้ง จะรู้ทันทีว่าการลดความเร็วพอร์ตอนุกรมจาก 921,600 เหลือ 57,600 bps อาจทำให้คำสั่งถ่ายภาพไปไม่ทัน
ทดสอบส่วนต่อประสาน
ตัวอย่างที่ 2 ตารางทดสอบส่วนต่อประสาน
ผลทดสอบแต่ละส่วนต่อประสานในรอบบูรณาการ (ค่าสมมติ) ส่วนที่ไม่ผ่านต้องแก้และทดสอบซ้ำ รวมถึงส่วนที่อาจได้รับผลกระทบ
tests = [ # (ส่วนต่อประสาน, ผลรอบแรก, ผลรอบแก้ไข)
("GCS <-> FC (MAVLink)", "pass", None),
("FC -> Companion (trigger)", "fail", "pass"),
("Companion -> Camera (USB)", "pass", None),
("FC -> Gimbal (PWM)", "pass", None),
("GNSS -> FC (UART)", "pass", None),
("Companion -> GCS (report)", "fail", "fail"),
("GCS -> Cloud (upload)", "pass", None),
]
first = sum(r == "pass" for _, r, _ in tests)
final = sum((r2 or r1) == "pass" for _, r1, r2 in tests)
print(f"first round {first}/{len(tests)} = {first / len(tests):.0%}, after fixes {final}/{len(tests)} = {final / len(tests):.0%}")
for name, r1, r2 in tests:
if (r2 or r1) != "pass":
print(f"open issue: {name} (still failing after fix)")
first round 5/7 = 71%, after fixes 6/7 = 86%
open issue: Companion -> GCS (report) (still failing after fix)
ส่วนต่อประสานที่ยังไม่ผ่านต้องเปิดเป็นประเด็นค้างในบันทึก พร้อมผู้รับผิดชอบและกำหนดแก้ ห้ามซ่อนเพื่อให้รายงานดูสมบูรณ์
ปฏิบัติการประจำโมดูล
ปฏิบัติการ: บูรณาการทีละส่วน
- เขียน ICD สั้น ๆ ของทุกส่วนต่อประสาน (สัญญาณ รูปแบบข้อมูล อัตรา แรงดัน ขั้วต่อ)
- ตั้ง baseline v1.0 ของเฟิร์มแวร์ ซอฟต์แวร์ และพารามิเตอร์ เก็บในระบบควบคุมรุ่น
- บูรณาการตามลำดับในภาพที่ 1 ทดสอบทุกส่วนต่อประสานด้วยตารางแบบตัวอย่างที่ 2
- ทุกการเปลี่ยนแปลงผ่านคำขอ ทบทวน และทดสอบซ้ำ ใช้ตัวอย่างที่ 1 เทียบ configuration ทุกครั้งที่ผลเปลี่ยน
- บันทึกประเด็นค้างพร้อมผู้รับผิดชอบ
ข้อผิดพลาดที่พบบ่อย
ระวัง
- ต่อทุกอย่างพร้อมกันแล้วลองบิน
- อัปเดตหลายรายการพร้อมกัน
- ไม่จดรุ่นเฟิร์มแวร์และพารามิเตอร์ ของการทดลอง
- ไม่ทดสอบซ้ำส่วนที่ได้รับผลกระทบ หลังแก้
- ซ่อนประเด็นค้าง
สรุป
- บูรณาการจากล่างขึ้นบนและทดสอบทุกส่วนต่อประสาน บันทึกใน ICD
- configuration ต้องมี baseline และเปลี่ยนผ่านคำขอกับการทบทวน ตาม ISO 10007
- เทียบ configuration เพื่อหาสาเหตุเมื่อผลเปลี่ยน และเปลี่ยนทีละอย่าง
- ประเด็นค้างต้องเปิดเผยพร้อมผู้รับผิดชอบ
แบบฝึกตรวจความเข้าใจ
- baseline คืออะไร
- เจ็ดส่วนต่อประสานผ่านห้าในรอบแรก อัตราผ่านเท่าใด
- ทำไมจึงไม่ควรอัปเดตหลายรายการพร้อมกัน
- ICD ควรมีข้อมูลอะไรบ้าง
- หลังแก้ส่วนต่อประสานหนึ่ง ต้องทดสอบซ้ำอะไรบ้าง
เฉลย
- ชุด configuration ที่ทบทวนและอนุมัติแล้ว ใช้เป็นจุดอ้างอิงของการเปลี่ยนแปลงถัดไป
- ถ้าผลเปลี่ยน จะบอกไม่ได้ว่ารายการใดเป็นสาเหตุ
- สัญญาณ รูปแบบข้อมูล อัตรา แรงดัน ขั้วต่อ และผู้รับผิดชอบแต่ละฝั่ง
- ส่วนต่อประสานนั้นและส่วนอื่นที่อาจได้รับผลกระทบจากการแก้
สรุปสูตรสำคัญ
| อัตราผ่านของการทดสอบส่วนต่อประสาน |
แหล่งอ้างอิงหลัก
- National Aeronautics and Space Administration. (2016). NASA systems engineering handbook (NASA/SP-2016-6105 Rev 2). link
- International Organization for Standardization. (2017). Quality management — Guidelines for configuration management (ISO 10007:2017). link
- International Organization for Standardization. (2023). Systems and software engineering — System life cycle processes (ISO/IEC/IEEE 15288:2023). link
- INCOSE. (2023). INCOSE systems engineering handbook: A guide for system life cycle processes and activities (5th ed.). Wiley. link
อ่านเพิ่มเติม
ศึกษาหน่วยความรู้ที่กำหนดล่วงหน้า ดูสื่อประกอบ และทำ quiz ประจำโมดูล
ในชั้นเรียน / ภาคสนาม
พัฒนาโครงงานเป็นทีม ประชุมที่ปรึกษา และนำเสนอความก้าวหน้า
หลักฐานการเรียนรู้: ผลงานตามจุดตรวจของโครงงาน