ที่มาและความสำคัญ
ที่มาของโปรเจ็ค “GimbalCam UR5” เป็นผลมาจากความต้องการในการพัฒนาเทคโนโลยีที่มีประสิทธิภาพสูงในการควบคุมการเคลื่อนไหวของกล้องอย่างแม่นยำและมีประสิทธิภาพ โดยใช้หุ่นยนต์ UR5 และ Gimbal ในการรองรับการเคลื่อนไหว โปรเจ็คนี้มีความสำคัญอย่างมากในหลากหลายวงการ เช่น
- ภาคการศึกษาและวิจัย: การใช้ GimbalCam UR5 สามารถช่วยในการศึกษาและวิจัยในหลายด้าน เช่น การศึกษาด้านการเคลื่อนไหวของหุ่นยนต์ การควบคุมระบบต่าง ๆ และการประยุกต์ใช้เทคโนโลยีที่มีอุปกรณ์พร้อมใช้งานในสถานการณ์ทางการศึกษาและวิจัย
- การใช้งานในงานอุตสาหกรรมและการเกษตร: GimbalCam UR5 สามารถนำมาใช้ในงานอุตสาหกรรมและการเกษตร เช่น การตรวจสอบและควบคุมกระบวนการผลิต การตรวจสอบคุณภาพสินค้า หรือการสำรวจแปลงนา
- การนำมาใช้ในงานที่มีความเสี่ยง: สำหรับงานที่อาจมีความเสี่ยงต่อชีวิตและสุขภาพของมนุษย์ เช่น การตรวจสอบสภาพแวดล้อมในที่ที่อาจเป็นอันตราย การใช้ 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
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 วินาที
Pingback: FRA631 : Foundations of Robotics – Human-Computer Interface Lab