GimbalCam UR5

ที่มาและความสำคัญ

ที่มาของโปรเจ็ค “GimbalCam UR5” เป็นผลมาจากความต้องการในการพัฒนาเทคโนโลยีที่มีประสิทธิภาพสูงในการควบคุมการเคลื่อนไหวของกล้องอย่างแม่นยำและมีประสิทธิภาพ โดยใช้หุ่นยนต์ UR5 และ Gimbal ในการรองรับการเคลื่อนไหว โปรเจ็คนี้มีความสำคัญอย่างมากในหลากหลายวงการ เช่น

  1. ภาคการศึกษาและวิจัย: การใช้ GimbalCam UR5 สามารถช่วยในการศึกษาและวิจัยในหลายด้าน เช่น การศึกษาด้านการเคลื่อนไหวของหุ่นยนต์ การควบคุมระบบต่าง ๆ และการประยุกต์ใช้เทคโนโลยีที่มีอุปกรณ์พร้อมใช้งานในสถานการณ์ทางการศึกษาและวิจัย
  2. การใช้งานในงานอุตสาหกรรมและการเกษตร: GimbalCam UR5 สามารถนำมาใช้ในงานอุตสาหกรรมและการเกษตร เช่น การตรวจสอบและควบคุมกระบวนการผลิต การตรวจสอบคุณภาพสินค้า หรือการสำรวจแปลงนา
  3. การนำมาใช้ในงานที่มีความเสี่ยง: สำหรับงานที่อาจมีความเสี่ยงต่อชีวิตและสุขภาพของมนุษย์ เช่น การตรวจสอบสภาพแวดล้อมในที่ที่อาจเป็นอันตราย การใช้ GimbalCam UR5 สามารถช่วยลดความเสี่ยงและเพิ่มความปลอดภัยในการดำเนินงาน

ด้วยความสามารถที่มีของ GimbalCam UR5 ในการควบคุมกล้องและการเคลื่อนไหวของหุ่นยนต์อย่างแม่นยำ จึงเป็นเครื่องมือที่มีความสำคัญในหลากหลายอุตสาหกรรมและเป็นเครื่องมือที่มีศักยภาพในการเพิ่มประสิทธิภาพและความสามารถในงานต่าง ๆ ที่ต้องการความแม่นยำและความเร็วในการดำเนินงาน

System Overview

โดยผู้ใช้งานจะสวมใส่แว่น VR และ บังคับแขนหุ่นยนต์ หัวหุ่นยนต์ ผ่านระบบ MQTT ด้วยจอยบังคับของ VR โดยโปรเจคนี้จอยของ VR จะเลือกว่าจะเลือกฟังก์ชั่นคำสั่งเพื่อควบคุมหัวหุ่นยนต์ด้วยโปรแกรม Unity และจะส่งคำสั่งที่เลือกไปบังคับบอร์ดที่ชื่อ U2D2 ที่สามารถบังคับมอเตอร์ Dynamixel แต่ละตัวได้

Flowchart

จากตาราง Flowchart จะสรุปได้ว่าการทำงานจะเริ่มจากสั่งค่าผ่าน MQTT โดยคำสั่งจะมี 3 คำสั่งคือ Tray , Between , Shelf เมื่อกรอกค่าคำสั่งไป โปรแกรม Python จะประมวลผลถึงตำแหน่งของแต่ละมอเตอร์ทั้ง 3 ตัว ด้วยการคำนวณแบบ Protocol 2 และสั่งให้มอเตอร์ Dynamixel Mx 28 ทำงานตามคำสั่งที่ส่งมา

Gantt Chart

ตารางการดำเนินงานของโปรเจคหัวหุ่นยนต์

Hardware

วัสดุที่ใช้

1. มอเตอร์ Dynamixel Mx-28

2. กล้อง ZED Mini Stereo Camera

3. เส้นพลาสติก 3d printer (Filament PLA)

4. บอร์ด U2D2

5. SWITCHING POWER SUPPLY 12V 15A HYPERLINK

ภาพรวมของด้าน Hardware

เมื่อสร้างส่วน Hardware ของหัวหุ่นยนต์เสร็จเรียบร้อย ผู้ใช้สามารถเลือกตำแหน่งที่จะติดตั้งหัวหุ่นยนต์ได้ ไม่จำเป็นต้องติดตั้งเฉพาะจุดที่เป็นหัวเหมือนร่างกายมนุษย์ แต่สามารถเลือกจุดที่ผู้ใช้ต้องการจะเห็นได้เช่นกัน

Programing

โปรแกรมที่โปรเจคนี้นำมาใช้ในการทดสอบมีทั้งหมด 2 โปรแกรมคือ

1. Dynamixel Wizard 2.0

ได้มีการทดสอบมอเตอร์ Dynamixel รุ่น MX-28 ด้วยโปรแกรม Dynamixel Wizard 2.0 เพื่อ Set up แล้วกำหนด IP 0,1,2 (ชื่อมอเตอร์แต่ละตัว) และจะใช้เป็นโปรโตคอล 1 (ในการทดสอบ) และจะใช้เป็นโปรโตคอล 2 (ในการใช้งานจริง) ที่ใช้ในการสื่อสาร
โดยโปรแกรมนี้จะสามารถปรับค่าต่างๆที่ต้องการของมอเตอร์ Dynamixel รุ่น MX-28 ได้ก่อนที่จะนำไปเขียนโปรแกรม Python ต่อ เพราะจะสามารถกำหนดแรง องศา ในการเซ็ตท่าทางได้ด้วยเช่นกัน

1.1) Protocol 1

หน้าจอของโปรแกรม Dynamixel Wizard 2.0 ด้วยการใช้แบบ Protocal 1

1.2) Protocol 2

หน้าจอของโปรแกรม Dynamixel Wizard 2.0 ด้วยการใช้แบบ Protocal 2

2. Python

2.1) Protocol 1

การทดสอบด้วยโปรแกรม Python ด้วย Protocal 1

โดยโปรแกรม Pyton ที่ได้เขียนมานั้นจะเป็นการสั่งให้มอเตอร์ตัวที่ 2 และ 3 ล็อคตำแหน่งที่ได้เซ็ตค่าไว้ แต่มอเตอร์ตัวที่ 1 จะสามารถเพิ่มค่าองศาเข้าไปได้ เพื่อให้หัวของหุ่นยนต์สามารถหันหน้า ซ้าย ขวา ตรงได้ตามที่ผู้ใช้อยากให้ไป และจะนำค่าที่ส่งออกมาจากนี้ไปยังส่วนของ Unity ต่อเพื่อให้ผู้ควบคุมจอยของ VR สามารถขับเคลื่อนหัวหุ่นยนต์หรือกล้องตามที่อยากเห็นภาพใน VR ได้ โดยใน Protocol 1 นี้จะทำถึงขั้นที่มอเตอร์สามารถหันได้ตามที่กล่าวไปข้างต้น

2.2) Protocol 2

การทดสอบด้วยโปรแกรม Python ด้วย Protocal 2

โค้ด Pyton สำหรับ Dynamixel Protocol 2 นั้นจะมีเงื่อนไขในการใช้ที่มากกว่า Protocol 1 โดยจะใช้งานยากกว่า แต่มีฟังก์ชันให้ใช้มากกว่า และการขับเคลื่อนจะดูลื่นไหลมากกว่า Protocol 1
คลิปทดสอบชุดหัวกล้องของหุ่นยนต์ UR5e โดยหุ่นยนต์จะสามารถใช้งานมอเตอร์ Dynamixel ได้ทั้ง 3 DOF แต่จะเป็นการเซ็ตค่าตำแหน่งของ ตรงกลาง หันซ้าย และหันขวา วนไปตามลูปที่กำหนดไว้ และผู้ใช้แว่น VR จะสามารถเห็นได้ในมุมมองที่หัวหุ่นยนต์นั้นเห็นเช่นเดียวกันทั้งสเตชั่นการทำงานของหุ่นยนต์
จากในคลิปจะเห็นได้ว่าการทำงานของ Protocol 2 นั้นดีกว่า Protocol 1 อย่างเห็นได้ชัด เพราะมีการเคลื่อนที่ที่ลื่นไหลมากกว่า ถ้าหากเป็น Protocol 1 จะมีความกระชากของมอเตอร์ในการเคลื่อนที่ และยังสามารถทำงานได้ทั้ง 3 DOF และมีการเคลื่อนที่แบบ trajectory อีกด้วย โดยหลังจากที่ได้ส่งคำสั่งจาก Python ไปนั้นก็จะเป็นกระบวนการของ Unity เพื่อใช้ใน VR ต่อไป

Final Project

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

Trajectory

การคำนวณ Trajectory จะมีการเซ็ตตำแหน่งแต่ละจุด โดยมี

ตำแหน่งที่ 1 คือ ตำแหน่งที่หัวหุ่นยนต์จะมองไปที่ถาดวางขวดนม (Tray)

ตำแหน่งที่ 2 คือ ตำแหน่งที่หัวหุ่นยนต์จะมองไปที่มือสองข้างประสานหยิบขวดนมพร้อมกัน (Between)

ตำแหน่งที่ 3 คือ ตำแหน่งที่หัวหุ่นยนต์จะมองไปที่ชั้นวางขวดนม (Shelf)

เซ็ตค่า Velocity เท่ากับ 4.58 rev/min

เซ็ตค่า Acceleration เท่ากับ 2,145.77 rev/min^2

Velocity of Trajectory

จากคลิปด้านบนจะเป็นการทดสอบความเร็วของหัวหุ่นยนต์ โดยความเร็วที่ทดสอบจะมีทั้งหมด 3 ค่า คือ

1.) V = 6 rev/min จะเป็นค่าที่เร็วกว่าปกติ

2.) V = 3.21 rev/min จะเป็นค่าเฉลี่ยของบุคคลที่มีข้อจำกัดร่างกายหรือความสามารถในการเคลื่อนไหว ซึ่งอาจจะเป็นผู้พิการทางร่างกายหรือผู้สูงอายุที่มีการเคลื่อนไหวลำบาก

3.) V = 4.58 rev/min จะเป็นค่าที่ทดลองและสบายตาผู้ใส่แว่น VR

ในโปรเจคครั้งนี้จะใช้ค่าความเร็วของหัวหุ่นยนต์อยู่ที่ 4.58 rev/min

Position of Trajectory

โดยจากรูปด้านล่างต่อไปนี้จะเป็นการเซ็ตตำแหน่งของหัวในแต่ละ Position ซึ่งจะมีทั้งหมด 3 ตำแหน่ง ดังรูปด้านล่างต่อไปนี้

Position จาก Dynamixel Wizard 2.0

เมื่อเลือก Position ของแต่ละตำแหน่งได้แล้ว จะเข้าไปที่โปรแกรม Dynamixel Wizard 2.0 เพื่อหาตำแหน่งที่มอเตอร์นั้นทำงานอยู่ ดังรูปด้านล่างต่อไปนี้

Position จาก Dynamixel Wizard 2.0 ไป Python

เมื่อรู้ค่าตำแหน่งของแต่ละมอเตอร์มาแล้วจะนำมาใส่ในโปรแกรม Python เพื่อให้สามารถระบุการเคลื่อนที่ของหัวหุ่นยนต์ได้ในแต่ละตำแหน่งที่ต้องการจะเคลื่อนที่ไป

Position จากกล้อง ZED

รูปด้านล่างจะเป็นมุมมองจากกล้องของหัวหุ่นยนต์ที่ได้เคลื่อนที่ไปยังตำแหน่งที่ต้องการ

Graph of Trajectory

จากกระบวนการทั้งหมดที่ได้กล่าวไป การคำนวณเส้นทางตำแหน่งการเคลื่อนที่ของแต่ละมอเตอร์นั้น จะคำนวณโดยใช้กราฟที่หามาจากโปรแกรม Dynamixel Wizard 2.0 โดยได้มีการเซ็ต Position และ Velocity เป็นที่เรียบร้อย และจะสามารถหา Time มาได้จากการหากราฟ Trajectory ครั้งนี้ออกมา

สรุปจากตาราง คือ ได้มีการกำหนด Position 1,2,3 และ Velocity = 4.58 rev/min ในแต่ละจุดที่หัวหุ่นยนต์จะมีการหันไปมองเรียบร้อยแล้ว เมื่อเริ่มทำงานหัวหุ่นยนต์จะเคลื่อนด้วยหลักการของ Trajectory จะมีการเคลื่อนที่ที่มีความลื่นไหล โดยเวลาที่ได้ออกมาในแต่ละ Position คือ

1.) เวลาจากตำแหน่ง 1 ไป 2 เวลาการเคลื่อนที่รวมประมาณ 1.54 วินาที

2.) เวลาจากตำแหน่ง 2 ไป 3 เวลาการเคลื่อนที่รวมประมาณ 2.369 วินาที

3.) เวลาจากตำแหน่ง 3 ไป 1 เวลาการเคลื่อนที่รวมประมาณ 3.358 วินาที

Thank you for your interest in this project. You can see the pyton code here.

https://github.com/Wachiramate30/Gimbal_UR5e

One comment

  1. Pingback: FRA631 : Foundations of Robotics – Human-Computer Interface Lab

Comments are closed.