Integrated operation of both robots

Integrated operation of both robots

โปรแกรมการทำงาน

โค้ดส่วนนี้ใช้สำหรับเริ่มการสื่อสารกับหุ่นยนต์ 2 ตัวผ่านโปรโตคอล RTDE ซึ่งเป็นส่วนหนึ่งของซอฟต์แวร์ของ Universal Robots (UR). โปรโตคอล RTDE ช่วยให้สามารถสื่อสารและควบคุมหุ่นยนต์ในเวลาจริงได้:

  • import rtde_control: นำเข้าโมดูล rtde_control ที่ให้ฟังก์ชันสำหรับควบคุมหุ่นยนต์ UR ผ่าน RTDE
  • import time: นำเข้าโมดูล time สำหรับการทำงานที่เกี่ยวข้องกับเวลา, เช่น เพิ่มการหน่วงเวลาระหว่างคำสั่ง
  • rtde_c_20 = rtde_control.RTDEControlInterface("192.168.200.20"): เริ่มต้นการสื่อสารกับหุ่นยนต์ที่มี IP 192.168.200.20 โดยสร้างอินสแตนซ์ rtde_c_20 สำหรับการส่งคำสั่งไปยังหุ่นยนต์ตัวนี้
  • rtde_c_10 = rtde_control.RTDEControlInterface("192.168.200.10"): เช่นเดียวกัน, สร้างอินสแตนซ์ rtde_c_10 สำหรับควบคุมหุ่นยนต์อีกตัวที่มี IP 192.168.200.10

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

ฟังก์ชัน move_robot_20() (หุ่นยนต์ตัวซ้าย) และ move_robot_10() (หุ่นยนต์ตัวขวา) ถูกออกแบบมาเพื่อควบคุมการเคลื่อนที่ของหุ่นยนต์ 2 ตัวในลำดับที่แตกต่างกัน โดยแต่ละฟังก์ชันจะมีลำดับการเคลื่อนที่หรือการทำงานที่เฉพาะเจาะจงสำหรับหุ่นยนต์นั้นๆ:

  • move_robot_20(): ควบคุมหุ่นยนต์ตัวแรก (หุ่นยนต์ที่มี IP 192.168.200.20) โดยมีขั้นตอนการเคลื่อนไหวเริ่มต้นจากตำแหน่ง “HOME”, ไปยังตำแหน่ง “buffer”, ตำแหน่ง “Cam” สำหรับการมองหา, กลับไปที่ “buffer”, จากนั้นเตรียมพร้อม “pick up” และสุดท้ายคือการส่งหรือวางสิ่งของในตำแหน่งที่กำหนด
  • move_robot_10(): ควบคุมหุ่นยนต์ตัวที่สอง (หุ่นยนต์ที่มี IP 192.168.200.10) โดยเริ่มจากตำแหน่ง “HOME”, และทำการเคลื่อนไปยังตำแหน่งต่างๆ เพื่อ “GET” สิ่งของ, จากนั้นเคลื่อนไปยัง “Basket_1 Position_1” และกลับมาที่ตำแหน่ง “HOME”

การเรียกใช้ move_robot_20() และ move_robot_10() ต่อจากกันแบบนี้จะทำให้การเคลื่อนไหวของหุ่นยนต์ทั้งสองเกิดขึ้นแบบต่อเนื่องกัน หากต้องการให้หุ่นยนต์ทั้งสองทำงานพร้อมกัน จำเป็นต้องใช้เทคนิคการเขียนโค้ดแบบมัลติเธรดหรือการประมวลผลแบบพร้อมกัน (concurrency) เพื่อจัดการกับการทำงานแบบพร้อมกัน

ขั้นตอนการทำงานของแขนกลทั้ง 2 ตัว
1. ตำแหน่งเริ่มต้นของหุ่นยนต์
   – หุ่นยนต์อยู่ในตำแหน่งเริ่มต้นที่เรียกว่า “HOME”
   – หุ่นยนต์จะรอคำสั่งจาก Unity โดยรับคำสั่ง “unity_start”
2. เคลื่อนที่ไปยังตำแหน่ง “set_camera”
   – เมื่อได้รับคำสั่งจาก Unity หุ่นยนต์จะเคลื่อนที่ไปยังตำแหน่ง “set_camera”
3. ส่งคำสั่งไปหา vision
   – หุ่นยนต์จะส่งคำสั่ง “camera_position” ไปยังระบบ vision
4. การถ่ายภาพและหาตำแหน่งของขวดนม
   – ระบบ vision จะถ่ายภาพและวิเคราะห์หาตำแหน่งของขวดนมทั้งหมด
   – ระบบ vision จะส่งตำแหน่งของขวดนมทีละขวดให้กับหุ่นยนต์
5. การหยิบขวดนม
   – เมื่อหุ่นยนต์เคลื่อนที่ไปถึงตำแหน่งของขวดนม ผู้ใช้จะควบคุมหุ่นยนต์เพื่อให้สามารถหยิบขวดนมได้
6. การยืนยันการหยิบขวดนม
   – เมื่อผู้ใช้ยืนยันการหยิบขวดนม หุ่นยนต์จะเคลื่อนที่ไปส่งขวดนมให้กับแขนกลอีกข้างหนึ่ง
7. การส่งขวดนมให้กับแขนกล
   – เมื่อหุ่นยนต์ไปถึงตำแหน่งส่งขวดนม ผู้ใช้จะควบคุมหุ่นยนต์เพื่อให้สามารถส่งขวดนมได้
8. การทำงานตามลำดับที่บันทึกไว้
   – เมื่อยืนยันการส่งขวดนม หุ่นยนต์ทั้งสองตัวจะทำงานตามลำดับที่บันทึกไว้
   – หุ่นยนต์ทางฝั่งขวาจะเคลื่อนที่กลับไปที่ตำแหน่ง HOME
   – หุ่นยนต์ทางฝั่งซ้ายจะเคลื่อนที่ไปวางขวดนมบนชั้น