ชื่อโปรเจกต์: การติดตามการเคลื่อนไหวศีรษะสำหรับระบบ 3D First Person Vision ไร้สาย
เกี่ยวกับอะไร?
ในการควบคุมยานพาหนะระยะไกล วิดีโอฟีดแบ็กช่วยให้ผู้ควบคุมได้รับข้อมูลเชิงพื้นที่และสิ่งแวดล้อมแบบเรียลไทม์ การใช้ Stereoscopic video feedback สามารถปรับปรุงระบบกล้องเดี่ยวแบบมาตรฐานได้ โดยให้รายละเอียดเกี่ยวกับมาตราส่วน ความลึก และการเคลื่อนไหวในรูปแบบที่รวดเร็วและเข้าใจง่ายแก่ผู้ควบคุม ข้อมูลเสริมนี้มีความสำคัญอย่างยิ่งเมื่อปฏิบัติงานในสภาพแวดล้อมที่ไม่คุ้นเคยหรืออันตราย
ทำไมถึงทำโปรเจกต์นี้?
โปรเจกต์นี้จัดทำขึ้นสำหรับงานวิศวกรรมเมคคาทรอนิกส์ของมหาวิทยาลัย
ขอบเขตของการออกแบบคือการทดสอบผลกระทบต่อการควบคุมยานพาหนะเมื่อใช้ระบบ 3D visual telepresence เพื่อนำทางในสภาพแวดล้อม การออกแบบที่มีประสิทธิภาพจะช่วยเพิ่มการโต้ตอบ การควบคุม การนำทาง และการรับรู้เชิงพื้นที่ให้กับผู้ขับขี่ พร้อมทั้งลดผลกระทบเชิงลบจากอาการ motion sickness ให้เหลือน้อยที่สุด
มันทำงานอย่างไร?
ระบบ 3D first person vision ได้รับการพัฒนาขึ้น โดยจะจับภาพมุมมองแบบ stereoscopic ด้วยกล้องขนาดเล็กคู่หนึ่ง และแสดงภาพเหล่านั้นไปยังดวงตาที่เกี่ยวข้องของผู้ใช้ผ่าน head mounted display ตัว head mounted display จะจับค่าตำแหน่งและการหมุนของศีรษะของผู้ใช้พร้อมกัน โดยใช้ข้อมูลนี้เพื่อควบคุม pan-tilt unit ที่ติดตั้งกล้องไว้ ผลลัพธ์ที่ได้คือมุมมอง 3D ของสภาพแวดล้อมของยานพาหนะที่ควบคุมระยะไกลที่มี latency ต่ำที่สุด โดยที่ field of view สามารถปรับได้ด้วยกลไกโดยการหมุนศีรษะไปยังทิศทางที่ต้องการ (ดูวิดีโอแรกที่แนบมา)
โปรเจกต์นี้ประกอบด้วยโมดูลหลักสามส่วน:
- การจับภาพวิดีโอและการสื่อสาร (สีน้ำเงิน)
- การสื่อสารข้อมูล Headtracker (สีเขียว)
- Pan-Tilt unit (PTU) พร้อม Controller (สีเหลือง)
Arduino Uno ทำหน้าที่เป็นแพลตฟอร์มระยะไกล (ติดตั้งบนยานพาหนะ) สำหรับควบคุม PTU ผ่าน Servo ดิจิทัลสองตัวที่ฝังอยู่ในเคสที่พิมพ์ด้วย 3D อย่างน้อยที่สุด การออกแบบนี้ต้องมีเอาต์พุตสัญญาณ Pulse Width Modulated อย่างน้อยสองช่อง, RS232 UART/USART Serial Controller และขา I/O เพิ่มเติมสำหรับเซ็นเซอร์/แอคทูเอเตอร์เพิ่มเติม (เช่น dynamic stability) เลือก Arduino เหนือ microcontroller ทั่วไปบนพื้นฐานของ:
- ภาษา High level พร้อม pre-compiled libraries
- On-board power regulator, bootloader, เป็นต้น
- ความง่ายในการเชื่อมต่อกับอุปกรณ์ภายนอก เช่น อุปกรณ์ XBee wireless serial
- ความเร็วในการประมวลผลและการควบคุมหน่วยความจำไม่สำคัญต่อการลด latency ให้เหลือน้อยที่สุด เมื่อรวมกับ video latency ที่มีอยู่มากแล้ว
ผลลัพธ์
มีการทดสอบสมมติฐานที่แตกต่างกันหลายประการที่เกี่ยวข้องกับ motion sickness, การควบคุม, การจดจำความทรงจำเชิง Cognitive และ depth perception จากการออกแบบต้นแบบ แต่เมื่อเน้นที่ประสิทธิภาพของฮาร์ดแวร์แล้ว Arduino Uno เป็นแพลตฟอร์มที่เรียบง่ายและเชื่อถือได้
เกณฑ์เป้าหมายหลักสำหรับการออกแบบที่ประสบความสำเร็จคาดการณ์ไว้ดังนี้;
- Field of view ที่กว้างพอ (มากกว่า 100 องศา)
- Video resolution ที่เพียงพอ
- การติดตามที่แม่นยำและตอบสนองได้ดี
- High refresh rate
- Low Latency
จากทั้งหมดนี้ ปัญหาหลักที่พบคือการลด video latency นั่นคือเวลาตั้งแต่การเคลื่อนไหวศีรษะไปจนถึงการได้รับภาพที่สอดคล้องกันที่ดวงตา กล้อง, การสื่อสารวิดีโอไร้สาย และวิธีการแสดงผลสร้าง latency ได้สูงสุดถึง 133 มิลลิวินาทีเมื่ออยู่นิ่ง โดยมีเวลาเพิ่มเติม 26 ms ที่เกิดจากการตอบสนองทางกลไกของการ head-tracking, serial comm's และการปรับ PTU ด้วยกลไก การประมวลผลข้อมูล/การสร้างสัญญาณ 26 ms นี้ไม่มีนัยสำคัญเมื่อเทียบกับ video latency
ในการจำลองโปรเจกต์นี้ มีปัญหาหลายประการเกี่ยวกับอุปกรณ์วิดีโอที่ฉันจะพิจารณาใหม่เพื่อเพิ่มคุณภาพของภาพในขณะที่ลด latency อย่างไรก็ตาม ในส่วนที่เกี่ยวข้องกับ Arduino ฉันจะพิจารณาใช้บอร์ดที่มีขนาดเล็กลง (เช่น Arduino Pro Mini) และ Servo motor ที่ทำงานได้เร็วกว่า เนื่องจากข้อจำกัดเพียงอย่างเดียวที่พบคืออัตราการปรับ PTU ไม่ใช่ความเร็วในการประมวลผลและความจุ I/O
ขอบคุณ, Arduino, ที่ตอบสนองความต้องการของฉันในโปรเจกต์ที่ถ้าไม่มีคุณแล้วคงเป็นเรื่องยาก
รายละเอียดทางเทคนิคเพิ่มเติม
การวางแนวเชิงพื้นที่ (Spatial Orientation)
โปรเจกต์ขั้นสูงนี้ช่วยให้สามารถมองเห็นภาพในมุมมองบุคคลที่หนึ่ง (First Person View - FPV) ได้อย่างสมจริง โดยการแปลงการเคลื่อนไหวศีรษะของนักบินไปยัง Camera gimbal บนยานพาหนะระยะไกล
- IMU Interface: เซ็นเซอร์ MPU6050 หรือ BNO055 ถูกติดตั้งอยู่บนชุดหูฟังของนักบิน Arduino จะประมวลผลข้อมูล Yaw, Pitch และ Roll โดยใช้ Kalman หรือ Complementary filter เพื่อให้ได้การวางแนวที่เสถียรและปราศจากการเลื่อน (drift-free)
- Wireless Link: ข้อมูลจะถูกส่งผ่าน NRF24L01 หรือ Bluetooth ไปยังหุ่นยนต์ที่รับสัญญาณ
การควบคุม Gimbal
Arduino ฝั่งรับจะตีความข้อมูลการวางแนวและขับเคลื่อน Servo Motor สองตัว (แกน X และ Y) ซึ่งช่วยให้กล้องสามารถติดตามการจ้องมองของนักบินได้แบบเรียลไทม์ ทำให้เกิดประสบการณ์ "เสมือนจริง" Low latency เป็นสิ่งสำคัญ ดังนั้นโค้ดจึงปรับโครงสร้าง serial packet ให้เหมาะสมเพื่อรักษา update frequency ให้สูง (เช่น 50Hz)