TemiVR พัฒนาขึ้นมาเพื่อให้ผู้ใช้สามารถควบคุมการเคลื่อนที่หุ่นยนต์บริการ (Temi) ด้วยลู่วิ่งรอบทิศทาง สำหรับเทคโนโลยีภาพเสมือน (KAT VR)
สามารถจับการเคลื่อนไหวของร่างกายได้แบบ Real-Time เพื่อเป็นพื้นฐานสำหรับการเสริมสร้างประสบการณ์ให้กับผู้ใช้งาน Temi ในการควบคุมระยะไกลนอกเหนือจากการใช้ Web Application เพียงอย่างเดียวเท่านั้น
สมาชิกผู้จัดทำ
นักศึกษาสถาบันวิทยาการหุ่นยนต์ภาคสนาม โครงการ Internship ปีการศึกษา 2565
- จารุวรรณ วิจิตร์แสงสี
- ศศิกานต์ เจนพิทักษ์ชัย
- ศุภกร จารุจุณาวงศ์
วัตถุประสงค์
- เพื่อศึกษาการใช้งานและพัฒนาระบบสำหรับควบคุมหุ่นยนต์ Temi
- เพื่อศึกษาการใช้งาน VR Treadmil (KAT Walk Premium)
- เพื่อศึกษาการใช้งาน MQTT ในการรับส่งข้อมูล
แผนการดำเนินงาน
การนำเสนอผลการออกแบบ
แผนผังการทำงานของระบบ TemiVR
- เมื่อระบบเริ่มทำงานระบบจะรับ Data ของค่า Variable ต่าง ๆ ที่ Back sensor และ Foot sensor จาก KAT VR เข้ามา โดยจะดึงค่าเข้ามาใช้งาน 2 ค่าคือ IsMoving : Boolean ที่แสดงให้เห็นว่าผู้ใช้กำลังเดินอยู่หรือไม่ และ BodyYaw : Degree องศาการหมุนปัจจุบัน
- เพื่อไม่ให้ Unity Publish บ่อยเกินไปจน Broker ทำงานหนัก จึงมีการหน่วงเวลาในการ Publish โดยจะมีการ Publish ก็ต่อเมื่อ Δt >= 0.1f
- Publish MQTT Topic โดยใช้ Topic Moving สำหรับค่า IsMoving และ Topic BodyYaw สำหรับค่า BodyYaw
- เมื่อ Temi ได้รับค่า Moving และ BodyYaw จาก Topic ดังกล่าว จะเก็บค่าของ BodyYaw เอาไว้ในตัวแปร NowAngle เพื่อเช็คว่าปัจจุบันผู้ใช้กำลังอยู่ในองศาที่เท่าไหร่
- Temi จะทำการเช็คว่าปัจจุบันผู้ใช้กำลังเดินอยู่หรือไม่ ถ้าเดินอยู่จะทำการเดินไปข้างหน้า ไม่ทำการหมุนใด ๆ
- หากผู้ใช้หยุดเดิน Temi จะนำมุมองศาปัจจุบัน (NowAngle) ไปเทียบกับมุมแรกเริ่ม (FirstAngle) ว่าขณะนี้หมุนจากเดิมไปเท่าไหร่ และจะทำการหมุนตามองศาที่ได้ จากนั้นก็เก็บค่า FirstAngle ให้เท่ากับ NowAngle เพื่อใช้สำหรับเทียบมุมต่อไป
การทำส่วนต่าง ๆ ของระบบ TemiVR
1.ส่วนของ Temi
- พัฒนา Application ผ่าน Android studio ร่วมกับ SDK ของ Temi
- ใช้ Libraly Eclipse Paho ในการพัฒนาการรับค่าผ่าน MQTT จาก HiveMQ Broker
- เมื่อได้รับ Data จาก MQTT แล้ว Temi จะสามารถเดินไปข้างหน้าและหมุนไปในทิศทางที่กำหนดได้ โดยเมื่อกำลังเดินอยู่ Temi จะไม่สามารถหมุนตัวได้ตามข้อจำกัดของตัวหุ่นยนต์
2.ส่วนของ Temi
- ใช้ Unity ร่วมกับ SDK ของ KAT VR และ SteamVR ในการพัฒนาโปรแกรมบน HTC Vive โดย Unity จะเป็นตัวรับค่าจาก Sensor ของ KAT VR
- ใช้ MQTT ในการส่ง Data จาก KAT VR ผ่าน HiveMQ Broker
ผลการออกทดลอง
การหมุนของ Temi ได้ทำการทดลองวัดประสิทธิภาพในการหมุนจากค่าที่ได้รับจาก MQTT ซึ่งวัดจากการที่ Temi สามารถหมุนไปในมุมองศาที่ใกล้เคียงกับการหมุนของผู้ใช้หรือไม่
- จากตารางผลการทดลอง "สีเขียว" แทนการหมุนที่ใกล้เคียงกับการหมุนของผู้ใช้และ "สีแดง" แทนการหมุนที่ไม่ใกล้เคียงกับการหมุนของผู้ใช้ (องศาไม่ตรง,หมุนผิดทาง)
Delay ในการรับคำสั่ง การทดลองหาระยะเวลาที่ใช้ในการส่งค่าจาก KAT VR ไป Temi ผ่าน MQTT เพื่อหาระยะเวลาที่เกิดการ Delay โดยเฉลี่ยและเวลาที่ใช้มากที่สุด
สรุปผลการทดลอง
- สรุปผลการทดลองการหมุน มี Accuracy ของการหมุน 90 องศา, 180 องศา และ 360 องศา อยู่ที่ 75% , 50% และ 25% ตามลำดับ และมี Accuracy เฉลี่ยอยู่ที่ 50%
- สรุปผลการทดลอง Delay ในการรับคำสั่งจาก MQTT โดย Delay จากการรับคำสั่งเดินหน้าจะมีค่าเฉลี่ยอยู่ประมาณ 1.076 วินาที และ Delay จากการรับคำสั่งหมุนรอบตัวจะมีค่าเฉลี่ยอยู่ประมาณ 1.23 วินาที และระยะเวลาที่ใช้มากที่สุดจะอยู่ที่ประมาณ 2-3 วินาที ทั้งการเดินหน้าและหมุนรอบตัวของ Temi
ข้อเสนอแนะ
- ปรับปรุงความแม่นยำในการรับค่าการหมุนตัวของ Temi ให้ตรงกับองศาการหมุนของ KAT VR ให้มากยิ่งขึ้น
- ปรับปรุงระยะเวลาในการส่งค่าผ่าน MQTT ให้เกิดการ Delay ให้น้อยที่สุด เนื่องจากหากผู้ใช้ได้รับภาพจากอุปกรณ์ Head-Mounted Display (HMD) ช้ากว่าการเคลื่อนที่จริง อาจทำให้เกิดภาวะ Motion Sickness
- พัฒนาระบบรับส่งภาพให้เสร็จสมบูรณ์
ข้อมูลเพิ่มเติม
Source Code (Unity)
Source Code (Temi)