การนำทางอัตโนมัติ: เลเยอร์การเชื่อมต่อ Aquabots
วันที่ 3 ของโปรเจกต์ Aquabots Autonomous Vessels ถือเป็นการเปลี่ยนผ่านที่สำคัญจากการประกอบฮาร์ดแวร์ไปสู่การรวมระบบ ในขณะที่ขั้นตอนก่อนหน้ามุ่งเน้นไปที่ "การเพิ่ม GPS" เฟสนี้จะนำ Update Cycle มาใช้ ซึ่งคือความสามารถของเรือในการรายงานพิกัดทั่วโลกไปยังเซิร์ฟเวอร์ Aquabots Client อย่างสม่ำเสมอ เปลี่ยนเรือที่หยุดนิ่งให้กลายเป็นสินทรัพย์ IoT ที่ติดตามได้
สถาปัตยกรรมซอฟต์แวร์แบบโมดูลาร์
เพื่อจัดการกับความซับซ้อนของเรืออัตโนมัติ โปรเจกต์นี้ใช้สถาปัตยกรรม Distributed Module บน Arduino Mega 2560 การแยกส่วนความรับผิดชอบนี้ช่วยป้องกันความล้มเหลวของโค้ดแบบ "Monolithic":
- WebClient Module: ทำหน้าที่เป็นเกตเวย์ จัดการการเชื่อมต่อแบบ HTTP/TCP กับเซิร์ฟเวอร์ Aquabots เพื่อให้มั่นใจว่าข้อมูลปลอดภัยและการส่งข้อมูลมีประสิทธิภาพ
- Registration Module: จัดการข้อมูลประจำตัวที่ไม่ซ้ำกันของเรือ ทำให้มั่นใจว่าพิกัดที่ส่งไปนั้นถูกระบุไปยัง ID ตัวเรือที่ถูกต้องในฐานข้อมูลกองเรือส่วนกลาง
- TinyGPS Module: นี่คือตัวสร้างข้อมูล โดยการใช้ Serial1 ของ Mega จะแยกวิเคราะห์ประโยค NMEA ดิบให้เป็นค่า Latitude และ Longitude แบบ floats ที่อ่านได้
- Vessel Module (หัวใจหลัก): ประสานงานกับโมดูลอื่นๆ ดึงข้อมูลที่แยกวิเคราะห์ล่าสุดจาก TinyGPS และส่งไปยัง WebClient ในช่วงเวลาปกติ
การเอาชนะความล่าช้าของสัญญาณ
การรายงานข้อมูล GPS ในสภาพแวดล้อมทางทะเลนำเสนอความท้าทายที่ไม่เหมือนใคร:
- RF Signal Management: Adafruit GPS Antenna มีความสำคัญอย่างยิ่งต่อการรักษาสัญญาณในที่โล่ง โปรเจกต์นี้ทำให้มั่นใจว่าแม้กระทั่งสำหรับ "Cold Starts" ตรรกะอัตโนมัติจะไม่เริ่มทำงานจนกว่าจะยืนยันการระบุตำแหน่งแบบ 3D-fix ได้
- Coordinate Precision: การรายงานพิกัดเป็นค่า floats ที่มีความแม่นยำสูงช่วยให้สามารถคำนวณการคลาดเคลื่อนได้ถึงระดับเซนติเมตร ซึ่งจำเป็นสำหรับการนำ PID-based steering มาใช้ในอนาคต
- Continuous Polling: ต่างจากเครื่องติดตามรถยนต์ที่อาจอัปเดตนาทีละครั้ง เรืออัตโนมัติต้องการการอัปเดตบ่อยครั้งเพื่อแก้ไขกระแสน้ำและลม ซึ่งจัดการใน
loop()หลักผ่านการจับเวลาแบบ non-blocking ของโมดูลVessel
แผนงานสู่ความเป็นอิสระ
การสร้างลิงก์การส่งข้อมูลทางไกล (telemetry) ที่เชื่อถือได้นี้ เป็นการวางรากฐานสำหรับ Day 4: Revving the Servos เมื่อเรือรู้ว่าตัวเองอยู่ที่ไหนและสามารถแจ้งเซิร์ฟเวอร์ได้ เซิร์ฟเวอร์ก็จะสามารถเริ่มส่ง "Waypoints" กลับมาได้ ซึ่งเป็นการเริ่มต้นการเดินทางอัตโนมัติข้ามผืนน้ำอย่างแท้จริง
เป็นเวลานานพอสมควรแล้วตั้งแต่ Day 2 ของโปรเจกต์ การพัฒนาเรืออัตโนมัติของเรา บางครั้งเรื่องส่วนตัวก็เข้ามาขัดขวางการทำสิ่งที่สนุกจริงๆ แต่ตอนนี้ทุกอย่างเรียบร้อยแล้ว และสัปดาห์ที่ผ่านมาเรายุ่งกับการทดสอบและดำเนินการต่อจากจุดที่เราหยุดไว้ก่อนหน้านี้
เพื่อเตือนความจำเล็กน้อย เราสามารถลงทะเบียนเรือกับ Aquabots Client ได้ และเพิ่งเพิ่ม Grove GPS unit เข้ากับ Arduino ของเรา เพื่อให้เราสามารถระบุตำแหน่งได้ วันนี้เราจะเพิ่มโค้ดเล็กน้อยเพื่อให้ Aquabots Client สามารถรับตำแหน่งที่อัปเดตจาก GPS ได้อย่างต่อเนื่อง ฮาร์ดแวร์ (ดังนั้น) จึงเหมือนกับของ day 2 ทุกประการ
วันนี้เราจะรวมซอร์สโค้ดซอฟต์แวร์ทั้งหมด เพื่อให้เราสามารถเห็นการพึ่งพากันระหว่างซอร์สต่างๆ จุดเริ่มต้นหลักคือโมดูล Vessels ซึ่งประกอบด้วยฟังก์ชัน setup() และ loop() ที่เป็นที่รู้จักกันดีของ Arduino โมดูลนี้สร้างโมดูลอีกสี่โมดูล ซึ่งแต่ละโมดูลมีหน้าที่เฉพาะตัว:
1: WebClient: จัดการการสื่อสารกับ Aquabots Client
2: Registration: ลงทะเบียนเรือกับ Aquabots Client (ดู day 1)
3: TinyGPS: จัดการ GPS Unit ที่เชื่อมต่อกับ Serial1 ของ Arduino Mega (ดู day 2)
4: Vessel. นี่คือส่วนใหม่! ปัจจุบันมันทำหน้าที่เพียงแค่ส่งค่า latitude และ longitude ของเรือไปยัง Aquabots Client อย่างไรก็ตาม ในอีกไม่กี่วันข้างหน้าเราจะเพิ่มชุดควบคุม servo เพื่อให้เรือของเรามีชีวิตชีวาขึ้นมาจริงๆ!
เมื่อเตรียมการทั้งหมดเสร็จสิ้น เราก็ตั้งตารอที่จะได้เห็น propellers หมุนได้ในที่สุด แต่เราจะเก็บสิ่งนั้นไว้สำหรับ day 4.