ที่มาของ Project นี้เริ่มมาจากแนวคิดที่ว่าจะพัฒนา ระบบหุ่นยนต์ที่ช่วยเหลือผู้ป่วยติดเตียงเวลาที่ผู้ป่วยนั้นต้องการความช่วยเหลือและเป็นการแบ่งเบาภาระของพยาบาล โดยระบบหุ่นยนต์จะเป็น Chatbot ที่สามารถโต้ตอบกับผู้ใช้งานและสามารถสั่งงานแขนกลให้ทำหน้าที่ช่วยเหลือในเรื่องของกิจวัตรประจำวันของผู้ป่วยได้ เช่น การหยิบจับวัตถุที่อยู่ใกล้เคียง การพยุงผู้ป่วย การช่วยเหลือผู้ป่วยในการเดิน เป็นต้น
โดยใน Class Project นี่ทางผู้พัฒนาจะ Implement Concept เบื้องต้นจากที่กล่าวมา โดยในส่วนของ Chatbot จะเป็นระบบโต้ตอบเบื้องต้นเมื่อมีผู้ใช้งานสั่งงานระบบและในส่วนของการหยิบจับวัตถุวัตถุที่อยู่ใกล้เคียง จะออกแบบระบบที่สามารถทำการหยิบวัตถุภายในระยะที่แขนกลสามารถหยิบได้และอยู่ใน Frame ของกล้องตามที่เราสั่งไปได้ได้
System Scenario
System Dataflow
Design
System Device และ Object ที่ใช้งานทดลอง
- แขนกล UR3e
2. กล้อง Zed mini
3. แก้วและขวดน้ำที่จะใช้วัตถุในการทดสอบ
4. คอมพิวเตอร์
Software Implement
- Dialogflow API เป็น Web API ที่นิยมในการสร้าง Chatbot เนื่องจากมีระบบ Intent ที่สามารถสร้างตัวโต้ตอบได้ง่ายและสามารถกำหนดกลุ่ม Entities ของคำ ให้เราสามารถแยกออกมาได้เลยว่า กลุ่มคำเหล่านี้จะเป็น Entities ประเภทไหนเพื่อให้ง่ายต่อการจัดการใน Backend ต่อไป เช่น กลุ่มคำของวัตถุ (แก้วน้ำ,ขวดน้ำ) กลุ่มคำของการกระทำ (หยิบ, วาง) กลุ่มคำของสี
- Dialogflow.py เป็น Node ที่ทำหน้าที่รับข้อมูล Speech Data มาจาก Web API Dialogflow เพื่อนำข้อมูล Speech ส่วนนั้นส่งต่อให้กับ Node อื่นๆ และทำหน้าที่ในการสร้าง Speech Response ในการโต้ตอบกับ User ด้วย
- Object_detect.py เป็น Node ที่จะรับคำสั่งในการหยิบวัตถุมาจาก Dialogflow.py โดยใน Node นี้จะมีหน้าที่ทำ Object Detection เพื่อระบุตำแหน่งของวัตถุเป้าหมายและตรวจสอบสีของวัตถุ ถ้ามีวัตถุเป็นหมายอยู่ในระยะของกล้องก็จะส่งตำแหน่งของวัตถุไปยัง Manipulation.py
- Manipulation.py เป็น Node ที่จะรับตำแหน่งจาก Object_detect.py โดยจะเริ่มตั้งแต่การแปลง Frame ของกล้องเป็น Frame ของแขนกลและการสั่งการให้แขนกล ur3e ไปยังตำแหน่งตามที่ต้องการ รวมถึงการตรวจสอบว่าตำแหน่งของวัตถุเป้าหมายที่ให้มานั้นเกิน limit workspace หรือไม่
Video of Implementation
User Testing
ในส่วนของการทำ User test จะทำการอธิบายก่อนว่าระบบนั้นควรจะสั่งการด้วยคำพูดแบบไหน จากนั้นก็จะให้ User ทำการทดสอบตาม task ทั้ง 6 ข้อเพื่อวัด performance ของระบบ และสอบถามถึงความพึงพอใจต่อระบบเมื่อทำ task เสร็จ
ผลการทดสอบ
User1 | User2 | User3 | User4 | |
คะแนนของ Task Performance (เต็ม 12 คะแนน) | 9 | 11 | 9 | 11 |
ความง่ายในการใช้งาน (1-5) | 4 | 4 | 3 | 4 |
ประโยชน์ของระบบ (1-5) | 5 | 5 | 4 | 5 |
ความน่าสนใจของระบบ (1-5) | 5 | 5 | 4 | 5 |
ความคิดเห็น
- ระบบมีจุดประสงค์ที่ชัดเจนสามารถนำไปต่อยอดพัฒนาและใช้ประโยชน์ได้อีก
- มีความน่าสนใจตรงที่ระบบนั้นมี function การทำงานที่เยอะและหลากหลาย
- Speech to text มีความยากในสั่งงานประโยคที่เราต้องการให้หยิบวัตถุแบบต่อเนื่อง และมีปัญหา speech to text ที่ตกหล่นคำพูดบางคำไปทำให้สั่งงานระบบไม่ได้
- ยังมีข้อจำกัดต่างๆภายในระบบอยู่ทำให้ใช้งานยากในบางครั้ง
- อยากให้ระบบสามารถสั่งคำสั่งเกี่ยวกับแขนกลให้ได้มากกว่านี้
- เสนอให้แบบ function เอาวัตถุกลับไปวางที่เดิมด้วย
Summary
ในตอนนี้ระบบหุ่นยนต์สามารถสั่งการด้วยเสียงเพื่อไปหยิบวัตถุตามที่ต้องการได้ แต่ก็ยังมีบางจุดอาจจะต้องแก้ไขหรือเพิ่มเติมในอนาคต โดยส่วนใหญ่ผู้ใช้งานจะติดปัญหาในเรื่องของ Speech to text ที่อาจจะมีคำที่ตกหล่นไปทำให้ไม่สามารถสั่งงานระบบได้ อีกทั้งระบบนี้ยังไม่ยืดหยุ่นมากพอจำเป็นต้องกำหนดสภาพแวดล้อมบางอย่างเอาไว้ เช่น วัตถุเป็นหมายตอนนี้มีแค่ขวดน้ำกับแก้วน้ำ, วัตถุจำเป็นต้องวางตั้งเท่านั้นและห้ามวางบังกัน, เวลาสั่งงานระบบจะต้องพูด keyword ให้ครบ ไม่งั้นระบบก็อาจจะไม่ทำตามที่เราต้องการได้
โดยในอนาคตทางผู้จัดทำคาดว่าระบบสามารถพัฒนาต่อให้ระบบนั้นมีความยืดหยุ่นมากขึ้นได้ เนื่องจากว่าตอนนี้สามารถรวม function เพื่อใช้งานได้แก่ Speech to text, Text to speech, Object detection, Manipulation ในการหยิบสิ่งของตามที่สั่งได้ในเบื้องต้นแล้ว
Reference
- Ur_rtde: https://sdurobotics.gitlab.io/ur_rtde/
- Yolov5: https://pytorch.org/hub/ultralytics_yolov5/
- Zedsdk: https://www.stereolabs.com/docs/
ผู้จัดทำ
นายศุภราช อินทรโสภา 63340500063