Objective
โปรเจคนี้มีวัตถุประสงค์เพื่อออกแบบและพัฒนาระบบ Streaming Vision ของหุ่นยนต์ Robodog และควบคุม Robodog ด้วย Hololens ผ่านแอพพลิเคชั่นที่ถูกสร้างด้วยโปรแกรม Unity ผนวกร่วมกับ WebRTC โดยให้ผลคือสามารถแสดงสิ่งที่ Robodog เห็น และสามารถควบคุมหุ่นยนต์ Robodog ผ่าน Hololens ไปพร้อมๆกันได้
System Scenario
System Data Flow
การเขียนส่งข้อมูลผ่าน UDP
- ทำการสร้าง Client เพื่อทำการส่งคำสั่งไปหา robodog ที่เป็น server ด้วยการส่งแบบ UDP Protocol โดยจะทำการเขียน code ให้ตรงกับเลข IP ของ robodog และทำการเชื่อม Wi-if ของ robodog เพื่อให้สามารถส่งข้อมูลสื่อสารไปหา robodog ได้
การส่ง command ไปหา robodog ด้วยการส่ง Byte ผ่าน Unity C#
- ค่า byte ตัวนี้จะทำการเก็บค่าจะการส่งคำสั่งจากการทดลองรันไฟล์ example_walk.cpp และทำการเก็บค่า byte จากนั้นนำไปเขียนบน Unity C# เพื่อทำการส่งคำสั่งไปควบคุม robodog โดยคำสั่งในตอนนี้จะเป็นเดินข้างหน้า, เลี้ยวซ้าย, เลี้ยวขวา, ยืน และ นั่ง
- ตัวอย่างค่า Byte สำหรับส่งคำสั่งไปควบคุม Robodog (เลี้ยวซ้ายและเลี้ยวขวา)
การออกแบบหน้า UI ที่แสดงผลผ่าน HoloLens
- ออกแบบหน้า UI สำหรับควบคุม robodog ผ่าน HoloLens โดยหน้าต่างการควบคุมจะมีคำสั่งสำหรับนำไปสั่ง robodog ทั้งหมด 5 คำสั่ง เดินหน้า, เลี้ยวซ้าย, เลี้ยวขวา, ยืน, นั่ง โดยหน้า UI จะนำมาจาก MRTK เพื่อนำมาออกแบบปุ่มสำหรับส่งคำสั่ง
- ทำการเพิ่ม Code สำหรับส่งคำสั่งเพื่อนำไปควบคุม Robodog
- ตัวอย่างฟังก์ชั่นสำหรับส่งคำสั่งเพื่อไปควบคุม Robodog
- ใส่ Code ที่มีฟังก์ชั่นสำหรับส่งคำสั่งเพื่อไปควบคุม Robodog โดยฟังก์ชั่นจะทำงานเมื่อมีการกดปุ่มเกิดขึ้น
WebRTC Implementation
- Object ภายใน Unity ของ WebRTC
- หน้าจอ Interface ของส่วน WebRTC
ทำการรวมงานส่วนของ Robodog กับ WebRTC เข้าด้วยกัน แล้วทำการออกแบบหน้า UI ใหม่ เพื่อแสดงผลผ่าน Hololens
- ส่วน WebRTC ส่วนนี้จะถูก Build เป็น Application ลงใน Asus Vivostick โดยจะถูกรันเพื่อเปิดกล้อง Webcam ที่ติดตั้งอยู่บนหลัง Robodog โดยส่วนนี้จะใช้ในการส่งข้อมูลภาพขึ้นสู่ WebRTC และสามารถเข้าถึงได้โดยการเปิด Webserver.exe เพื่อดู IP ของระบบ ณ ขณะนั้น (IP จะเปลี่ยนทุกครั้งที่เปลี่ยนอุปกรณ์ที่เป็น Server หลัก)
- ทำการออกแบบ CAD ด้วยโปรแกรม Solidworks เพื่อใช้ในการสร้างโครงล๊อคกล้อง Webcam กับ Robodog และทำการสร้างชิ้นงานจริงขึ้นมาด้วยเครื่องพิมพ์ 3 มิติ
การติดตั้งบนหลังของ Robodog จะมีอุปกรณ์ทั้งหมด 3 ส่วน 1. กล้อง Webcam 2. Vivostick 3. Powerbank (ที่มีกำลังจ่ายไฟขั้นต่ำ 18 วัตต์) โดยกล้อง Webcam จะถูกเชื่อมต่อกับ Vivostick โดยที่ Vivostick จะรับพลังงานจาก Powerbank (ไม่สามารถต่อตรงกับ Robodog ได้เนื่องจากกำลังไฟของ Robodog ไม่เพียงพอต่อการทำงานของ Vivostick)
Result
- สามารถใช้ HoloLens เพื่อไปควบคุม robodog และการทดลองสั่งคำสั่งเพื่อไปควบคุม robodog ผ่าน HoloLens สามารถทำได้โดยใช้การสั่งคำสั่งผ่านหน้าต่าง UI และสามารถแสดงผลการมองเห็นของ Robodog ด้วยกล้อง Webcam ที่ติดอยู่ด้านหลังของหุ่นยนต์ได้ผ่าน WebRTC
ปัญหาที่พบ
- คำสั่งมือสามารถโดนแทรกแซงและทำให้การทำงานผิดพลาดเมื่อมีมือของผู้อื่นเข้ามาในระยะการมองเห็นของ Hololens
- ระบบ Streaming ยังเป็นแบบ Localhost
Reference
- WebRTC
https://github.com/Unity-Technologies/UnityRenderStreaming
https://docs.unity3d.com/Packages/[email protected]/manual/webapp.html
https://docs.unity3d.com/Packages/[email protected]/manual/index.html
https://github.com/Unity-Technologies/com.unity.webrtc/releases
- Hand Tracking
https://github.com/Ryan-XR/HandJointTracking-HoloLens2
- GitHub ของ Robodog
https://github.com/unitreerobotics/unitree_legged_sdk/blob/v3.8.0/example/example_walk.cpp
https://github.com/sorasitP/RobotDog_GO1_ControlbyHands
- Source Code
Pingback: Progress Update 26/4/24 – Human-Computer Interface Lab