Mechanics
แขนหุ่นยนต์ (Universal Robot) 1 ข้างซึ่งตั้งอยู่ใน LAB 3 ใช้ในการควบคุมเพื่อหยิบชิ้นงานที่วางอยู่บนโต๊ะ โดยชิ้นงานจะถูกวางเรียงลำดับเอาไว้ 2 ชิ้นดังรูปที่ 1 เมื่อระบบเริ่มทำงาน แขนหุ่นยนต์จะขยับอยู่ในท่าเริ่มต้นตามที่ได้กำหนดไว้โดยมีคอมพิวเตอร์ 1 เครื่องที่เชื่อมต่อกับคอมพิวเตอร์อีกเครื่องซึ่งอยู่ใน LAB 2 โดยคอมพิวเตอร์ที่อยู่ใน LAB 3 จะทำหน้าที่รับข้อมูล
My Script เพื่อใช้ในการควบคุมแขนหุ่นยนต์ดังรูปที่ 2 3 และ 4 การเคลื่อนที่ของแขนหุ่นยนต์ในระบบนี้จะใช้หน่วยเป็นมิลลิเมตรแต่เนื่องจากระบบได้ออกแบบการเคลื่อนและตำแหน่งของชิ้นงานอบ่างง่ายทำให้ความละเอียดของการเคลื่อนที่ในแนวแกน x = 2 เซนติเมตร, แกน y = 4 เซนติเมตร, แกน z = 2 เซนติเมตร โดยพื้นที่ทั้งหมดที่สามารถเคลื่อนที่ได้คือ 6 x 4 x 4 ตารางเซนติเมตร
|
รูปที่ 1 แขนหุ่นยนต์ (Universal Robot) และชิ้นงาน 3 ชิ้น |
|
รูปที่ 2 ท่าเริ่มต้นของแขนหุ่นยนต์ |
|
รูปที่ 3 มุมมองด้านข้างของท่าเริ่มต้น |
|
รูปที่ 4 มุมมองด้านหน้าของท่าเริ่มต้น |
Electronics
ใช้อุปกรณ์เกี่ยวกับความจริงเสมือน HTC Vive โดยอุปกรณ์ดังกล่าวจะสามารถแสดงผลภาพ 3 มิติแบบ Immersive ได้เนื่องจากมี Head Mounted Display มี Vive Controller 2 อัน สำหรับให้ผู้ใช้งานถือไว้ใช้มือบังคับด้วยท่าทางธรรมชาติและมี 2 Base Station สำหรับใช้ในการ Track ตำแหน่งของอุปกรณ์ Head Mounted Display และ Vive Controller ได้ โดยผู้ใช้สามารถเคลื่อนที่ไปตำแหน่งต่าง ๆ ภายในพื้นที่ 3 ลูกบาศก์เมตร และยังสามาถเคลื่อนที่ Vive Controller รอบตัวผู้ใช้ได้อีกด้วย มีปุ่มกดหลายปุ่มที่ผู้ใช้สามารถใช้งานได้ตามสถานะการณ์ต่าง ๆ ดังรูปที่ 5 และ 6
|
รูปที่ 5 Head Mounted Display และ Vive Controller |
|
รูปที่ 6 Vive Controller |
Programming
Virtual Reality
ใช้ Unity สร้างโลกเสมือนสำหรับเป็นพื้นที่ให้ผู้ใช้สามารถปฏิสัมพันธ์กับ AI ได้ โดยในโลกเสมือนได้ออกแบบให้มีขนาดเท่ากับ 3 ลูกบาศก์เมตร ที่มือของผู้ใช้ซึ่งจับ Vive Controller อยู่จะถูกแสดงเป็นไม้กายาสิทธิ์ ใช้สำหรับปฏิสัมพันธ์กับวัตถุต่าง ๆ ในโลกเสมือน มีโต๊ะสีดำอยู่กลางห้องซึ่งมีชิ้นงานว่างอยู่ 2 ชิ้นสำหรับให้ผู้ใช้กำหนดตำแหน่งการวางชิ้นงานเพื่อให้ AI ทำการเรียนรู้กระบวนการในการหยิบชิ้นงานไปวางยังตำแหน่งต่าง ๆ ได้ ด้านหน้าของผู้ใช้จะมีป้านสีขาวขนาดใหญ่สำหรับแสดงสถานะการทำงานต่าง ๆ ที่เกิดขึ้นในโลกเสมือน ทางด้านฝั่งซ็ายของโต๊ะจะมีชุดของปุ่มต่าง ๆ ดังรูปที่ 7 ผู้ใชสามารถควบคุมการทำงานต่าง ๆ ผ่านการกดปุ่มในโลกเสมือนได้ดังนี้
- ปุ่ม STOP / RESET : สั่งให้ AI หยุดการเรียนรู้และ RESET สถานะของต่าง ๆ ของ AI ปรับตำแหน่งชิ้นงานและตำแหน่งของแขนหุ่นยนต์ให้อยู่ในตำแหน่งเริ่มต้น เพื่อให้ผู้ใช้สามารถกำหนดตำแหน่งชิ้นงานในการเรียนรู้ใหม่ได้
- ปุ่ม LEARN : สั่งให้ AI ทำการเรียนรู้กระบวนการควบคุมหุ่นยนต์ตามที่ผู้ใช้ได้กำหนดตำแหน่งไว้บนโต๊ะ
- ปุ่ม OPTIMAL POLICY : สั่งให้ AI ทำการแสดงการทำงานที่เหมาะสมที่ใช้ในการควบคุมแขนหุ่นยนต์ซึ่งได้จากการเรียนรู้ (LEARN)
- ปุ่ม LOAD : ทำการอ่านค่าการเรียนรู้ของ AI จากไฟล์ที่บันทึกไว้มาใช้งาน แบ่งตามรูปแบบของชิ้นงานที่ผู้ใช้กำหนด
- SAVE : ทำการบันทึกค่าการเรียนรู้ของ AI ที่เรียนรู้ลงในไฟล์ แบ่งตามรูปแบบของชิ้นงานที่ผู้ใช้กำหนด
- ปุ่ม EXECUTE ROBOT : ทำการแปลงกระบวนการทำงาน OPTIMAL POLICY ออกมาให้อยู๋ในรูปของ My Script แล้วส่งข้อมูลผ่าน Socket ไปให้คอมพิวเตอร์ที่อยู่ใน LAB 3 ซึ่งเชื่อมต่ออยู่กับแขนหุ่นยนต์ (Universal Robot)
|
รูปที่ 7 ภายในโลกเสมือนพื้นที่ 3 ลูกบาศก์เมตร |
Q-Learning
ใช้ภาษา C# ในการเขียนโปรแกรมเพื่อประยกุต์ใช้ Reinforcement Learning การทำงานจะถูกสร้าง Thread แยกขึ้นมาแยกจาก Thread ที่ประมวลกรากราฟิกของ Unity เพื่อให้การทำงานมีความรวดเร็วและเป็นอิสระจาก Thread อื่น ๆ ที่อาจจะทำให้เกิดการ Interrupt ส่งผลให้ความเร็วในการเรียนรู้ของ AI ลดลง โดยตัวอย่างของ Thread สำหรับ Reinforcement Learning แสดงดังรูปที่ 8
|
รูปที่ 8 ตัวอย่าง Code ใน Thread ของ Reinforcement Learning |
My Script
เนื่องจากในระบบนี้ใช้คอมพิวเอตร์ 2 เครื่องในการสื่อสารระหว่างโลกเสมือน (LAB 2) กับ แขนหุ่นยนต์ (LAB 3) เพื่อส่งข้อมูลการควบคุมแขนหุ่นยนต์ที่ได้เรียนรู้มาแล้ว ดังนั้งจึงได้ออกแบบ Protocol สำหรับการควบคุมแขนหุ่นยนต์ที่สามารถส่งผ่าน Socket ซึ่งเขียนด้วย python ทำงานเป็น server รอรับการเชื่อมต่อจาก client เพื่อรับข้อมูล My Script ทีละ 1 client โดยออกแบบคำสั่งพื้ฐานไว้ 2 คำสั่งคือ การเคลื่อนที่แขนหุ่นยนต์ และการหยิชิ้นงาน โดยมีรายละเอียดของ Protocol ดังนี้
- การเคลื่อนย้ายชิ้นงาน : Character ตัวแรกของ Protocol จะเป็นตัว M แล้วตามด้วยตำแหน่งปลายทางที่ต้องการให้แขนหุ่นยนต์ขยับไป โดยมีรูปแบบดังนี้
M <position x> <position y> <position z>\n
ตัวอย่างการเคลื่อนที่แขนหุ่นยนต์ให้อยู่ในตำแหน่งท่าเตรียมจะเขียนได้ดังนี้
M 0 0 40\n
- การหยิบชิ้นงาน : Character ตัวแรกของ Protocol จะเป็นตัว P แล้วตามด้วยตำแหน่งปลายทางที่ต้องการให้แขนหุ่นยนต์ขยับไป แล้วตามด้วยตัว T เมื่อต้องการหยิบชิ้นงาน หรือตัว F เมื่อต้องการปล่อยชิ้นงาน โดยมีรูปแบบดังนี้
P <position x> <position y> <position z> <T|F>\n
ตัวอย่างการหยิบชิ้นงานที่ตำแหน่งท่าเตรียมจะเขียนได้ดังนี้
P 0 0 20 T
เมื่อนำคำสั่งทั้งสองมารวมกันก็จะสามารถควบคุมแขนของหุ่นยนต์เพื่อหยิบชิ้นงานไปยังตำแหน่งต่าง ๆ ได้ ตัวอย่างการหยิบชิ้นงานสีแดงที่ตำแหน่งเริ่นต้นแล้วนำไปวางไว้บนชิ้นงานสีฟ้าในรูปที่ 4 จะเขียนได้ดังนี้
M 0 0 20
P 0 0 20 T
M 0 0 40
M 40 0 40
P 40 0 40 F
เมื่อผู้ใช้งานกดปุ่ม EXECUTE ROBOT ในโลกเสมือน ระบบจะทำการส่งข้อมูล My Script ไปยังคอมพิวเตอร์ที่อยู่ใน LAB 3
Working
คลิป VDO แสดงการทำงานทั้งหมดของระบบ