Tele-Operated Mobile Robot

จากการสำรวจพบว่ามีความต้องการบุคคลากร และองค์ความรู้ใหม่ในด้านหุ่นยนต์มากขึ้น รวมถึงผลกระทบของเหตุการณ์โควิด-19 ทำให้สื่อการการศึกษารูปแบบออนไลน์เหมาะสมกับการพัฒนาบุคคลากร และองค์ความรู้ในการศึกษาในวิถีชีวิตใหม่ ซึ่งทำให้เกิดโครงงานสื่อการสอนออนไลน์เกี่ยวกับหุ่นยนต์ในหัวข้อ Tele-Operated Mobile Robot Platform

งานวิจัยนี้นำเสนอเรื่องการควบคุมหุ่นยนต์เคลื่อนที่จากระยะไกลด้วยระบบออนไลน์ โดยมีจุดประสงค์เพื่อออกแบบและพัฒนาแพลทฟอร์มการเรียนรูปแบบใหม่ที่ช่วยทำให้ผู้เรียนสามารถเรียนรู้ทฤษฎีและปฏิบัติผ่านระบบ "Tele-Operated Mobile Robot Platform" โดยสามารถทดลองภาคปฏิบัติด้วยการส่งข้อมูลทางไกลไปยังคอมพิวเตอร์แม่ข่ายและหุ่นยนต์เคลื่อนที่

สมาชิกผู้จัดทำ

นักศึกษาสถาบันวิทยาการหุ่นยนต์ภาคสนาม โครงการ WiL ปีการศึกษา 2564

  1. นางสาวธัญญานินท์ อรุณจิระพัฒน์
  2. นายนภัทร จันทร์บูรณ์

วัตถุประสงค์

  1. เพื่อศึกษาการควบคุมหุ่นยนต์ระยะไกล
  2. เพื่อออกแบบและพัฒนาหุ่นยนต์เคลื่อนที่ สามารถควบคุมได้จากระยะไกล
  3. เพื่อพัฒนาระบบการเรียนรู้สำหรับหุ่นยนต์เคลื่อนที่จากระยะไกล
  4. เพื่อประเมินการทำงานและการใช้งานของระบบการเรียนรู้สำหรับหุ่นยนต์เคลื่อนที่จากระยะไกล

ภาพรวมของการทำงาน

เมื่อผู้ใช้งานเปิดหน้าเว็บไซต์ ผู้ใช้งานที่อยู่อันดับที่ 1 ของระบบคิวก็จะเป็นคนควบคุมหุ่นยนต์ผ่านหน้าต่างควบคุมต่าง ๆ ซึ่งก็จะแบ่งเป็น 3 แบบ คือ Manual mode, Blockly mode และ Easy mode ซึ่ง Mode ต่าง ๆ นี้ก็จะส่งข้อมูลคำสั่งต่าง ๆ ไปยัง Server และจากนั้นหุ่นยนต์ก็จะดึงคำสั่งเหล่านั้นมาประมวลผลและเคลื่อนที่ตามคำสั่ง

แผนการดำเนินงาน

การนำเสนอผลการออกแบบ

System Architecture

งานวัจัยนี้จะแบ่งการทำงานออกเป็น 2 ส่วน คือ

  1. ออกแบบและพัฒนาระบบของหุ่นยนต์เคลื่อนที่ประเภทล้อแบบแมคคานัมจำนวน 4 ล้อ ที่สามารถเคลื่อนที่ไปยังทิศใด ๆ จากการรับคำสั่งผ่านระบบการสอนทางไกลซึ่งผู้ใช้งานเป็นผู้ป้อนคำสั่ง (Mobility)
  2. ออกแบบและพัฒนาระบบสื่อการสอนออนไลน์รวมไปถึงระบบการส่งข้อมูลซึ่งมีหน้าที่ในการรับส่งข้อมูลระหว่างผู้ใช้กับหุ่นยนต์ (Teleoperation)

Teleoperation

Data Flow Diagram

หน้าต่างเว็บไซต์ หน้าเว็บไซต์ที่ผู้ใช้งานระบบควมคุมหุ่นยนต์ จะเป็นหน้าเว็บที่ถูกเขียนขึ้นมาโดยเครื่องมือ HTML , CSS และ Javscript

1.ส่วนของโครงร่างของเว็บไซต์ ที่ประกอบด้วยปุ่มต่าง ๆ จะออกแบบโดยใช้ HTML กับ CSS และกรอบสำหรับใส่ภาพจะใช้โปรแกรม NicePage ในการช่วยออกแบบ เมื่อออกแบบโครงร่างเสร็จแล้วจึงนำองค์ประกอบต่าง ๆ มาใส่แทนกรอบที่วางไว้ เช่น วีดิโอ ภาพของปุ่มต่าง ๆ และหน้าต่างแสดงสถานะ

2.ส่วนของการรับส่งข้อมูลต่าง ๆ จะเขียนโดยใช้ JavaScript โดยระบบควบคุมจะมี 3 แบบด้วยกัน คือ Blockly, Manual Mode, และ Easy Mode ซึ่ง Blockly นั้นจะมีการใช้คำสั่งของทั้ง 2 แบบที่เหลือ โดยแบบแรกคือ Manual Mode จะเป็นแบบกดค้างเพื่อเคลื่อนที่ไปยังทิศต่าง ๆ และหยุดเมื่อทำการปล่อยปุ่มนั้น ๆ และจะมีปุ่มหยุดฉุกเฉินสำหรับสถานการณ์ที่หุ่นยนต์ไม่หยุดเมื่อปล่อยปุ่ม ถัดมาคือ Easy Mode ซึ่งจะสามารถควบคุมหุ่นยนต์โดยมีสถานที่ที่ได้เตรียมไว้แล้ว และเมื่อทำการสั่งการหุ่นยนต์ก็จะไปยังจุดนั้น ๆ ตามที่ได้สั่งการ โดยจะมีหน้าต่างเว็บไซต์ดังนี้

การจัดการผู้ใช้งานนั้น จะทำโดยการสุ่มเลขสำหรับผู้ใช้งานแต่ละคนที่เข้าเว็บไซต์แล้วเก็บเลขนี้ไว้ใน Python และเมื่อผู้ใช้งานนั้น ๆ ออกจากระบบ ก็จะทำการลบรายชื่อนั้น ๆ ออกจากรายการ ซึ่งรายการผู้ใช้งานนี้จะมีไว้เพื่อจัดการสิทธิ์ในการสั่งการของผู้ใช้งาน เนื่องจากระบบจะอนุญาตให้ผู้ใช้งานเพียงหนึ่งคนเท่านั้นที่จะมีสิทธิ์ในการส่งชุดคำสั่งควบคุมหุ่นยนต์ โดยที่เมื่อผู้ใช้งานทำการเข้าใช้งานนั้นก็จะได้รับ UID ที่แตกต่างกันไป ซึ่งระบบก็จะเก็บข้อมูล UID นี้ไว้เพื่อใช้ในการอ้างอิงลำดับผู้ใช้งานในขั้นตอนถัด ๆ ไป

เมื่อผู้ใช้งานส่งคำสั่งมายัง Server นั้นก็จะทำให้ Server นำ UID ที่ส่งมาด้วยไปตรวจสอบกับรายชื่อผู้ใช้งานว่า ผู้ใช้งานนั้น ๆ มีสิทธิ์ที่จะสั่งการหุ่นยนต์หรือไม่ หรือเมื่อผู้ใช้งานออกจากระบบทางหน้าเว็บไซต์ก็จะส่งข้อมูล UID ของผู้ใช้งานไปยัง Server เพื่อให้ Server ทำการนำผู้ใช้งานนั้น ๆ ออกจากรายชื่อผู้ใช้งานและทำให้ผู้ใช้งานคนถัดไปขึ้นมาแทนที่ทันที

การส่งข้อมูลระหว่างผู้ใช้งานกับหุ่นยนต์

การส่งข้อมูลต่าง ๆ จะใช้การส่งข้อมูลผ่าน WebSocket และ MQTT Protocol ซึ่งระบบจะทำงานโดยมี FASTAPI เป็นตัวจัดการหน้าเว็บไซต์ ซึ่ง FASTAPI จะเป็นอุปกรณ์จัดการต่าง ๆ ผ่าน Python และเมื่อผู้ใช้งานส่งคำสั่งผ่านหน้าเว็บไซต์ ก็จะทำให้ Script นั้นถูกเรียกใช้งานเพื่อส่งข้อมูลผ่าน WebSocket ไปยัง FASTAPI และทาง FASTAPI ก็จะจัดการข้อมูลและ Publish ข้อมูลคำสั่งไปยัง MQTT Broker ซึ่งหุ่นยนต์ก็จะมีส่วนที่ทำหน้าที่รับข้อมูลเหล่านี้และประมวลผลคำสั่งต่าง ๆ มาใช้ในการควบคุมหุ่นยนต์

การส่งคำสั่งควบคุมหุ่นยนต์ใน Blockly Mode

  • การส่งคำสั่งใน Blockly Mode นั้นจะคล้ายคลึงกับ Easy Mode และ Manual Mode
  • ต้องวางแผนในการสั่งการควบคุมหุ่นยนต์ไว้ก่อน
  • ต้องกำหนดเวลาที่จะใช้ในการเคลื่อนที่ในแต่ละช่วงลงใน Block ต่าง ๆ เพื่อที่จะทำให้การทำงานของโปรแกรมรู้ว่าต้องส่งข้อมูลต่าง ๆ เป็นเวลาเท่าไหร่
  • ต้องสร้างตัวแปรขึ้นมาเพื่อเพิ่มเวลาสำหรับทุก ๆ Block โดยที่จะนำเวลาของแต่ละ Block บวกกันเข้าไปเรื่อยๆ เพื่อให้คำสั่งถูกเรียกใช้ต่อ ๆ กัน

Mobility

Data Flow Diagram

ตำแหน่งการจัดวางมอเตอร์บนฐานการเคลื่อนที่ (Top View)

ตารางแสดงลักษณะการหมุนมอเตอร์

สมการที่ใช้ในการควบคุมการทำงานของมอเตอร์ให้สอดคล้องกับการทำงานของล้อ

ผลการทดลอง

ระบบการจัดการผู้ใช้งาน

  • การแสดงผลกล่องรายชื่อผู้ใช้งานบนหน้าเว็บไซต์ เมื่อเข้าจาก 3 หน้าต่างที่แตกต่างกัน หน้าต่างแต่ละหน้าต่างก็จะแสดงผลกล่องรายชื่อผู้ใช้งานที่แตกต่างกันไปตาม UID ของผู้ใช้งานนั้น ๆ

ระบบการส่งข้อมูลชุดคำสั่งสำหรับควบคุมหุ่นยนต์

  • การส่งข้อมูลจากหน้าเว็บไซต์ไป MQTT Broker

ระบบเคลื่อนที่ของหุ่นยนต์เคลื่อนที่ประเภทล้อแมคคานัม

  • วิดีโอการทำงานของมอเตอร์
0:00
0:00
  • วิดีโอการทิศทางการเคลื่อนที่ของหุ่นยนต์
0:00
0:00

การควบคุมหุ่นยนต์ผ่านคำสั่งใน Blockly Mode

  • วิดีโอการทำงานของหุ่นยนต์ขณะทำงานเมื่อได้รับคำสั่งจากเว็บไซต์
0:00
0:00

สรุปผลการทดลอง

  1. สรุปผลการทดลองระบบจัดการผู้ใช้งาน คือระบบจัดการผู้ใช้งานนั้นจะสามารถแสดงผลรายชื่อผู้ใช้งานได้อย่างถูกต้อง แต่ในบางครั้งอาจจะเกิดปัญหาเมื่อผู้ใช้งานออกจากระบบ คือ ผู้ใช้งานนั้น ๆ ไม่ถูกลบออกจากรายชื่อ ซึ่งแนวทางการแก้ปัญหาคือตั้งเวลาสำหรับผู้ควบคุมที่ไม่ได้มีการเคลื่อนไหวเป็นเวลานาน แล้วจึงให้ server ตรวจสอบกับเว็บไซต์ว่ามีผู้ใช้งานนี้อยู่หรือไม่
  2. สรุปผลการทดลองระบบการส่งข้อมูลชดคำสั่งสำหรับควบคุมหุ่นยนต์ พบว่า MQTT Broker ได้รับข้อมูลครบถ้วน โดยจะได้รับเฉพาะข้อมูลจากผู้ใช้งานคนที่มีสิทธิ์ในการส่งข้อมูลหรือก้คือผู้ส่งใช้งานลำดับที่ 1 เท่านั้น ซึ่งเป็นเหตุผลที่ถูกต้องตามที่ได้วางแผนไว้
  3. สรุปผลการทดลองไดรฟ์มอเตอร์ด้วยความเร็วที่คำนวนจากสมการ พบว่าหุ่นยนต์สามารถเคลื่อนที่ไปตามทิศทางที่กำหนด และสาภพแวดล้อมส่งผลให้เกิดการลื่นไถลของล้อแมคานัมได้ทำให้การเคลื่อนที่ของหุ่นยนต์คลาดเคลื่อน

ข้อเสนอแนะ

  • ปรับปรุงโครงสร้างหุ่นยนต์ผ่านทาง Mechanics กล่าวคือ เพิ่มโช้คเพื่อทำให้ล้อแต่ละข้างนั้นสามารถเคลื่อนที่ระนาบไปกับพื้นผิวได้โดยกระทบกับระบบการเคลื่อนที่เดิมให้น้อยที่สุด
  • สร้างฟังค์ชันเพื่อปรับทอร์คที่อาจคาดเคลื่อนจากการลื่นไถลของล้อ ให้มีค่าเท่ากับล้อข้างอื่น ๆ ที่ทำงานปกติ
  • ทดสอบการเคลื่อนที่ของหุ่นยนต์บนพื้นผิวต่าง ๆ
  • เพิ่มระบบเลขคิว และ Label กำกับระบบจัดการผู้ใช้งาน เพื่อให้ผู้ใช้งานได้ทราบถึงตำแหน่งในคิวของตนเอง และเข้าใจรายละเอียดต่าง ๆ ได้ง่ายขึ้น