Class Project : Control Robodog with HoloLens and Streaming Robodog’s Vision with WebRTC

Class Project : Control Robodog with HoloLens and Streaming Robodog’s Vision with WebRTC

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://learn.microsoft.com/en-us/windows/mixed-reality/mrtk-unity/mrtk2/features/input/hand-tracking?view=mrtkunity-2022-05

https://www.youtube.com/watch?v=BKJ6sjJ9oao

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

https://github.com/nontza/Robodog-with-HoloLen2.git