การออกแบบทางกล (Mechanical Design) ของ FIBO ROBOT CAFE

การออกแบบทางกล (Mechanical Design) 

  • โครงสร้างจุดหมุน: ออกแบบให้มีจุดหมุนรวม 8 องศาอิสระ (8 DoF) ประกอบด้วยแขนกล 6 แกน, ฐานสไลด์ 1 แกน และตัวจับ (Gripper) 1 แกน
  • การขยายพื้นที่ทำงาน (Workspace Extension): ติดตั้งหุ่นยนต์บนฐานเลื่อนสไลด์ (Sliding Base) ระยะ 1 เมตร เพื่อช่วยให้ผู้ใช้ที่นั่งวีลแชร์เข้าถึงพื้นที่เคาน์เตอร์บาร์ได้ครอบคลุม
  • อุปกรณ์ปลายแขน: ใช้ตัวจับแบบ Parallel Jaw ที่ออกแบบมาเพื่อหยิบจับแก้วกาแฟและอุปกรณ์ทรงกระบอกได้อย่างมั่นคง
  • น้ำหนัก: โครงสร้างมีน้ำหนักเบาไม่เกิน 15 กิโลกรัม เพื่อให้เคลื่อนย้ายได้สะดวก
  • การออกแบบระบบควบคุม (Control System Design):
    • Hand-Guided Programming: พัฒนาระบบที่ช่วยให้ผู้ใช้สามารถ “จับประคอง” แขนกลเพื่อสอนตำแหน่งงานได้โดยตรง (Simplify) เพื่อลดความซับซ้อนในการเขียนโค้ด
    • Trajectory & Task Planning: ออกแบบอัลกอริทึมการเคลื่อนที่ (Kinematics) และลำดับขั้นตอนการชงกาแฟแบบอัตโนมัติ
  • การออกแบบส่วนต่อประสานผู้ใช้ (UI/Digital Twin):
    • พัฒนาหน้าจอ Touch Screen สำหรับควบคุมและแสดงผล Digital Twin เพื่อจำลองท่าทางของหุ่นยนต์ในรูปแบบเสมือนจริง

  • Gripper

ภาพตัวอย่าง Gripper Model T42 

ได้รับแรงบันดาลใจมาจาก Gripper Model T42 (https://www.eng.yale.edu/grablab/openhand/model_t42.html#about)

โดยเริ่ม Desigh ตามขนาด Servo Motor(DS3218MG 20Kg) พิมด้วยเครื่องพิมพ์ 3 มิติ โดยส่วนที่สัมผัสกับแก้วและข้อต่อใช้เป็นวัสดุ TPU เพื่อความยืดหยุ่น ส่วนกรอบและโครงสร้างใช้เป็นวัสดุ PETG-CF  มี servo motor control แยกซ้ายขวาใช้ไฟ 5Vdc. ควบคุมด้วยสัญญาณ PWM 2 ชุดแยกกัน

และมีการ Design plate gripper กับ Depth Camera plate เพิ่ม


ภาพสามมิติออกแบบในโปรแกรม Fusion 360

ภาพรูปชิ้นงานจริง



แขนกลที่ใช้สำหรับคลาสโปรเจคนี้คือ โมเดลสำเร็จรูปของ Arctos robotics เนื่องจากมีการส่งกำลังหลายรูปแบบจึงเหมาะสมแก่การป็นสื่อการเรียนรู้ ขนาดของระยะแต่ละข้อต่ออ้างอิงจาก Datasheet และ URDF file ของหุ่นยนต์ arctos

Arctos robot dimension

ตัวหุ่นจะสามารถเคลื่อนที่ได้ทั้งแบบ joint space และ task space สามารถกำหนดจุดให้เคลื่อนที่ไปตามจุดๆนั้นและการกำหนดให้เคลื่อนที่ในแกนใดแกนหนึ่ง(jog) และการกำหนดจุดในการเคลื่อนที่แบบ task space

Forward Kinematics

ใช้สำหรับหาพิกัดปลายแขนปัจจุบันโดยการนำ TRansformation matrix ของแต่ละแกนหมุนมาคูณกัน

ขอบคุณภาพจาก https://roboticseabass.com

Inverse kinematics

เมื่อเกิด singularity

ในส่วนของInverse kinematic จะไม่ได้ใช้มากนักเนื่องจากจะมีการใช้เป็นการควบคุมความเร็วและการใช้ jacobian matrix ในการเคลื่อนที่เป็นหลัก


Joint Space move

เป็นการเคลื่อนที่โดยอิงจากตำแหน่งมุมของข้อต่อหรือมอเตอร์เป็นหลัก เช่นข้อต่อที่1 เคลื่อนจาก0ไปที่100 องศา ทำให้เราสามารถสั่งมอเตอร์และใช้ PD controlจะกว่าจะถึงตำแหน่งมุมหรือมอเตอร์ที่ต้องการได้เลย โดยที่ Kpจะขึ้นอยู่กับ %ความเร็วที่ส่งมาจาก web ui


Task Space move

ขอบคุณภาพจาก https://automaticaddison.com



Development/ Progression

Version1 อัพโหลดURDF จากนั้นทดลองทำ forwardและInverse kinematicเบื้องต้นซึ่งยังไม่ตรงกับแกนเนื่องจากยังมีการตั้งแกนไม่ตรงกับ DH table

Version2 มีการปรับให้แขนค่อยๆเคลื่อนไปยังตำแหน่งเป้าหมายแทนการเคลื่อนไปอยู่ตำแหน่งนั้นๆทันที ยังไม่มีการปรับแก้แกนหมุนให้ตรงกับ DH table

Version3 เพิ่มP control ให้กับแกนหมุนทุกแกน เพื่อให้มีการค่อยๆเร่งความเร็วตอนเริ่มต้นและค่อยๆลดความเร็วตอนที่ใกล้ถึงจุดหมาย

Version4 เพิ่มระบบให้รองรับการบันทึกตำแหน่ง และเคลื่อนที่ไปตามsequenceของตำแหน่งเป้าหมายด้วย json format และมีการเพิ่มรางสไลด์เข้ามาในกรณีที่มีการใช้รางสไลด์ร่วมด้วย

Version5 แก้ไขแกนข้อต่อของหุ่นยนต์ให้ตรงกันกับ DH table โดยให้แกน Z เป็นแกนหมุนจากที่เดิมเป็นแกนx และเพิ่มหน้า UIชั่วคราวเพื่อใช้ในการทดสอบการเคลื่อนที่ 

Version6 ทดลองการ Jogผ่านการกดปุ่มค้างแทนการหมุนและบันทึกมุมล่าสุดเอาไว้ในไฟล์สำหรับจดจำตำแหน่งล่าสุดก่อนที่จะปิดโปรแกรม

ทดลองการทำงานร่วมกับ task sequence บน Web ui

ทดลองการ move jog ผ่านweb ui ทั่งแบบ joint space และ task space พบว่าเกิดปัญหาแกนเกิดอาการกระตุกเมื่อสั่งเคลื่อนที่ด้วย task space และตอนที่เกิดการเปลี่ยนแกนฉับพลันตอนที่เข้าใกล้ฐานมากเกินไป

Version6 แก้ปัญหาด้วยการสร้าง Psuedo-inverse jacobian ผ่านการทำ damped least squares เพื่อให้เกิดการหน่วงความเร็วเมื่อเกิด singularity

Version7 สำหรับปัญหาการชนฐาน แก้ด้วยการตรวจสอบว่าตำแหน่งเป้าหมายอยู่ในรัศมีของฐานหรือไม่ ถ้าอยู่ให้ขึ้นเตือนและยกเลิกคำสั่งทันทำ แต่ถ้าไม่ให้ตรวจสอบว่าเส้นทางผ่านพื้นที่ฐานไหม ถ้าผ่านให้สร้างเส้นทางสำหรับการอ้อมรอบฐาน สำหรับการmove jog จะไม่สามารถผ่านพื้นที่ฐานได้เลย


Task Planning

Task planning ที่ใช้ในหุ่นยนต์จะเป็นตัวอย่างการให้หุ่นยนต์เข้าไปหยิบจับแก้วโดยารใช้ state ละ operationดังนี้

ซึ่งจะเริ่มทำงานเมื่อมีการกำหนด Initial state และ Goal state จากนั้นจะมีการใช้ BFS(Breadth first search)ในการค้นหาเส้นทางที่สั้นที่สุดและ list operation ที่ต้องใช้เพื่อให้ไปถึง goal state และตัวหุ่นจะต้องทำการส่งcurrent stateองตัวเองมาเพื่อให้ครบเงื่อนไขในการไป operation ต่อไป

นอกจากนี้ยังมีเงื่อนไข safety state ที่ส่งมาจากกล้องและ machine stateที่คอยบอกว่าหุ่นกำลังทำงานอยู่หรือไม่เป็นเงื่อนไขในการทำงานอื่นๆอีกด้วย