FRA631 Foundation of Robotics Class project 68340700401 วัฒนชัย ผาคำ

สรุปสิ่งที่ได้เรียนรู้ระหว่างการทำ Class project

ในตอนเริ่มแรกที่จะทำหุ่นยนต์ตัวนี้ยัง ในส่วนตัวผมยังไม่มีความรู้เรื่องระบบเกียร์ที่ใช้ในหุ่นยนต์มากแล้วก็แบบ 3d ในชิ้นส่วน mechanic ต่างๆของหุ่นยนต์ ส่วนใหญ่ที่ผมรู้จะเป็นพวกที่เกี่ยวกับ motor และ วิธีการ Drive

โดยเกียร์ที่ใช้ในหุ่นของเราจะมีอยู่ 4 ชนิด คือ

  1. Planetary Gear
  2. Cycloidal Gear
  3. Belt reduction
  4. Differential Gear

ก็ได้ไปค้นคว้าดูว่ามันต่างกันยังไง ไปเจอเว็บ https://howtomechatronics.com/how-it-works/what-is-the-best-3d-printed-drive-for-your-next-robotic-project/

ที่เขาทำการทดสอบจริงกับ Gear ที่ปริ้นมาจาก 3D print

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

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

1.ส่วนของด้านการเขียนแบบของหุ่น ได้รู้จักไฟล์ URDF ซึ่งเป็นไฟล์ที่บอกทั้งขนาด Joint และ Link โดยผมต้องการที่จะเรียนรู้การใช้โปรแกรมเขียนแบบ 3D โดยที่ผมใช้จะเป็น fusion360 เนื่องจากเป็นที่นิยมในปัจจุบันและใช้ฟรี ก็เลยขอรับผิดชอบในส่วนของ Gripper design เพราะเป็นชิ้นที่ต้องออกแบบ ในตอนแรกที่เริ่มเขียนก็ไม่รู้จะต้องเริ่มยังไงก็เลยไปหาข้อมูล Gripper ที่เขาใช้ในท้องตลาดกันก็จะมีหลากหลายแบบ แต่ที่เหมาะสมกับงานนี้ที่สุดก็จะเป็น gripper ที่เป็นลักษณะหนีบหรือโอบแก้วไว้และวัสดุเป็น softmaterial จริงใช้เป็น TPU ในส่วนของหน้าที่สมผัสกับแก้วส่วนโครงสร้างจะใช้เป็น PETG-CF ในส่วนขั้นตอนการทำก็จะดึงแบบ Gripper มาจาก 

https://www.eng.yale.edu/grablab/openhand/model_t42.html#about

โดยในส่วนดั้งเดิมที่เอามาจะใช้เป็น  DYNAMIXEL Motor ส่วน  Servo(DS3218MG) ที่เราใช้ใน Gripper นั้นจะเป็นของเก่าที่ได้มาจากรุ่นพี่จริงเริ่ม design จากส่วนนั้นและได้เพิ่มในส่วนของตัวยึด Gripper กับหุ่นและตัวยึดกล้องกับ Gripper เพิ่ม โดยมีพี่โดมช่วยแนะนำการใช้โปรแกรม รวมถึง3D printer ผมไม่มีประสบการณ์ในการใช้งานเครื่องมาก่อนก็ได้น้องก้อง ที่เรียนอยู่ ป.ตรี ที่นั่งอยู่ในห้องเดียวกันให้คำแนะนำจนปริ้นออกมาได้สำเร็จโดยใช้โปรแกรม Orcaslicer ได้ลองปริ้นมาทดสอบ 2-3 ครั้ง ปรับแก้จนใช้งานได้ 

2.ส่วนของการทำ Stereo Camera ในส่วนนี้ได้รับแรงบันดาลใจมาจากวิชา HRI พวกกล้องที่ตรวจจับความลึกได้หลักการคือการนำเอาจุดเดียวกันของทั้งสองกล้องมาคำนวณพีทากอรัสกันเพื่อให้ได้ระดับความลึกของภาพ แต่กล้องพวกนั้นจะวางที่ระนาบเดียวกันและใกล้กันทำให้บางทีไม่สามารถมาเห็นมือหรือแขนได้ในบางมุมจึงใช้ความรู้จากวิชา Machine vision เข้ามาช่วยในการแปลงจุดที่อยู่ในระนาบ 2 มิติจากกล้องสองตัวให้ไปอยู่ใน ระนาบ 3 มิติ โดยการใช้ตรีโกณมิติ ในช่วงการทดสอบตอนแรกใช้กล้อง webcam เกี่ยวบนจอ laptop ให้ผลลัพธ์ดีมากจากเจอทุกจุดแยกแยะแกนได้อย่างชัดเจนการ calibrate ในตอนนั้นใช้เป็น ChAruco board ขนาด 7*5 ตารางวัดขนาด Charuco จริงแล้วใส่ในโปรแกรม แต่เมื่อตั้งกล้องให้ระยะห่างกันทำให้กล้องมองไม่เห็น Charuco Board ที่ใช้ ในการ Calibrate จึงทำให้ค่าทุกอย่างผิดเพี้ยน จริงได้ลดจำนวนตารางลงเหลือ 4*3 ค่าที่ได้จริงออกมาได้ค่อนข้างดี แต่โค้ดที่ทำยังมีข้อจำกัดอยู่คือสามารถใช้งานได้แค่ 1 คน เนื่องจากกล้องแต่ละตัวก็จะค้นหา คนโดยแต่ละกล้องก็จะหาคนในกล้องของตัวมันเอง ณ ขณะที่คน 2 คนเข้าไปข้างในเฟรมกล้อง กล้องไม่ได้จำว่าใครคือใครจริงส่งจุดของคนมาคิดสลับกันทำให้การคำนวณจุดในระนาบ 3 มิติผิดเพี้ยน ช่วยแรกๆที่ทำแกมีสับสนพวกทิศทางของแต่ละแกนมีการสลับซ้าย ขวา บนล่าง

รูปการใช้งานโปรแกรมบน Board Jetson nano

รูปตาราง Board Caruco ที่ใช้ Calibrate

3.ส่วนของการส่งวิดีโอและ point skeleton ที่อ่านได้ขึ้นไปแสดงบนหน้าเว็บ ในส่วนของการส่งวิดีโอขึ้นเว็บผมพอจะมีความรู้จากโปรเจค Avatar robot ที่ได้ทำตอนเทอมแรกมาอยู่บ้าง ทำให้สามารถส่งภาพส่งวิดีโอขึ้นไปโชว์ในหน้าเว็บได้ไม่ยากนักโดยส่งผ่าน web socket และ zmq ข้อมูล point skeleton อยู่ในฟอร์มของ JSON

4.ส่วนของการประกอบหุ่น ในตอนแรกในส่วนของ part ไฟฟ้า ทุกอย่างถูกประกอบและจัดเรียงได้ค่อนข้างดีแต่เมื่อเกิดเหตุที่ต้องดัดแปลงระบบจึงต้องทำการเจาะยึดและเดินสายไฟใหม่เป็นจำนวนมากโดยที่เมื่อสายไฟเยอะก็จะไล่เช็คค่อนข้างยากเลยได้มีการมาร์คสายไว้ และเมื่อสายอยู่ใกล้กันทั้งไฟเลี้ยงมอเตอร์และสายสัญญาณทำให้เกิดสัญญาณรบกวนกันจึงใช้สายที่มี shield มาใส่แล้วใช้ Ground ร่วมเพื่อแก้ปัญหานีั

ในส่วนของ Mechanic ก็พบปัญหาที่ gear และ motor drive ไม่ไหวทำให้ไม่สามารถใส่ gripper ได้

5.ส่วนของตารางเก็บข้อมูลการทดลอง

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

ซึ่งจากที่ได้ทดลองในระยะ 1-2 เมตร โปรแกรมอ่านค่าได้ค่อนข้างถูกต้อง ผลการทดสอบจะอยู่ด้านล่างนี้

รูปภาพเส้นที่ใช้วัดระยะ

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

ในสภาพการทำงานดังนี้

  • กล้องซ้ายอยู่ที่ความสูง 1.74 เมตร ทำมุม 290 องศากับระนาบของคนโดยที่คนอยู่หน้ากล้อง 
  • กล้องขวาอยู่ที่ความสูง 1.79 เมตรทำมุม 110 องศากับระนาบของคนโดยที่คนอยู่หน้ากล้อง 
  • ระยะห่างระหว่าง 2 กล้องในแนวระดับ 1.95 เมตร
  • ค่าความสว่างวัดจากพื้นขึ้นมา 0.74 ถึงเครื่องวัด(ในที่นี้วัดด้วยแอปพลิเคชั่น Light Meter ด้วย smart phone ยี่ห้อ Samsung รุ่น S24FE)

หมายเหตุ:หันหน้าเข้าหาหน้ากล้อง

แกน X (ซ้าย+,ขวา-)

ลำดับระยะจริง(Actual – m)ระยะห่างรวมที่วัดได้(Measured – m)Error (%)ΔX (m)ΔY (m)ΔZ (m)
10.25000.2597+3.9%0.25850.02140.0130
20.25000.2583+3.3%0.25680.02310.0147
30.25000.2629+5.2%0.26030.02880.0236
40.50000.5306+6.1%0.52530.05740.0475
50.50000.5240+4.8%0.52020.05000.0380
60.50000.5227+4.5%0.51880.05080.0386

แกน Z (หน้า+,หลัง-)

ลำดับระยะจริง(Actual – m)ระยะห่างรวมที่วัดได้(Measured – m)Error (%)ΔX (m)ΔY (m)ΔZ (m)
10.25000.2907+16.3%0.04430.06590.2796
20.25000.2763+10.5%0.02560.05720.2691
30.25000.2380-4.8%0.02350.03380.2344
40.50000.6018+20.4%0.07430.13340.5821
50.50000.5797+15.9%0.06740.12080.5630
60.50000.6088+21.8%0.07500.13730.5883

แกน Y (บน+,ล่าง-)

ลำดับระยะจริง(Actual – m)ระยะห่างรวมที่วัดได้(Measured – m)Error (%)ΔX (m)ΔY (m)ΔZ (m)
10.61000.6052-0.8%0.00880.59190.1259
20.61000.6197+1.6%0.00650.61690.0578
30.61000.6173+1.2%0.00270.61480.0557
40.44000.4551+3.4%0.03720.45340.0106
50.44000.4504+2.4%0.05010.44700.0226
60.44000.4006-8.9%0.05480.35760.1722

ภาพรวมการวิเคราะห์ (Overview)

ผลการวิเคราะห์แต่ละแกน (Axis Analysis)

1. แกน X (ซ้าย – ขวา)

แกนนี้หุ่นยนต์กะระยะซ้ายขวาได้แม่นยำมากใกล้เคียงกับการใช้ตลับเมตรวัด ค่าที่วัดได้กว้างกว่าความเป็นจริงไป ประมาณ 5%

2. แกน Y (บน – ล่าง)

แกนนี้มีการบอกระยะสูงต่ำมีความคลาดเคลื่อนบ้าง แต่โดยเฉลี่ยแล้วมันจะมองเห็นของอยู่ สูง/ต่ำกว่าความเป็นจริงไปประมาณ 11% 

3. แกน Z (ตื้น – ลึก)

แกนนี้ค่อนข้างผิดเพี้ยนสูง ประมาณ 20% 

***หมายเหตุ***

  • Measured (m): คือ ระยะกระจัดรวมในรูปแบบ 3 มิติ ที่ระบบกล้องคำนวณจากพีทากอรัส ΔX2Y2+ΔZ2
  • ΔX, ΔY, ΔZ (m): คือ ระยะห่างเฉพาะของแกนนั้นๆ (เงาตกกระทบในแต่ละแกน) เทียบกับตำแหน่งกล้อง 
  • Error (%) คำนวณจากระยะกระจัดรว(Measured) เทียบกับค่าที่วัดได้

กราฟแสดงประสิทธิภาพของระบบ Safety Vision

การทดสอบใช้เวลา 1 นาที 22 วินาที จับค่า FPS ใช้ภาพขนาด 1080p เก็บค่าทั้งหมด 702 frame 

ภาพรวมการวิเคราะห์ (Overview)

ค่าเฉลี่ย (Mean FPS): 9.0 FPS ซึ่งต่ำกว่าเส้นเกณฑ์มาตรฐานสีแดง (15 FPS) 

ค่าต่ำสุด (Min FPS): อยู่ที่ 8.3 FPS ระบบหน่วงที่ระดับ 8-9 FPS เกือบตลอดเวลา

ค่าสูงสุด (Max FPS): ทำได้ 44.7 FPS แต่จะเกิดขึ้นแค่สั้นๆ ไม่กี่เฟรม 

โดยภาพรวมระบบยังมีความกระตุกอยู่สามารถใช้งานได้แค่ทั่วไปเท่านั้น

หมายเหตุ: ถ้า FPS ต่ำกว่าเส้นประสีแดงที่ระดับ 15 FPS จะทำให้ภาพกระตุก

สรุปสิ่งที่ได้เรียนรู้

1. ด้านกลไกและการออกแบบ (Mechanics & 3D Design)

  • ระบบเกียร์: ได้เรียนรู้ระบบเกียร์ 4 ชนิด (Planetary, Cycloidal, Belt reduction, Differential) และเข้าใจหลักการเลือกใช้งานจริง โดยพิจารณาจากแรงบิด (Torque) น้ำหนัก และพื้นที่ติดตั้ง เช่น บริเวณฐานหุ่นสามารถใช้เกียร์น้ำหนักมากได้ แต่บริเวณแขนควรใช้เกียร์น้ำหนักเบา
  • การเขียนแบบ 3D: ได้รู้จักไฟล์ URDF (ขนาด Joint และ Link) และฝึกใช้โปรแกรม Fusion360 ในการออกแบบ Gripper แบบนิ่ม (Soft Gripper) โดยใช้วัสดุ TPU สำหรับหน้าสัมผัส และ PETG-CF สำหรับโครงสร้าง
  • การพิมพ์ 3D: ได้ฝึกใช้งานเครื่อง 3D Printer และโปรแกรม Orcaslicer โดยผ่านการทดลองพิมพ์และปรับแก้จนใช้งานได้จริง

2. ด้านระบบวิทัศน์คอมพิวเตอร์ (Computer Vision)

  • การทำ Stereo Camera: นำความรู้จากวิชา Machine Vision และตรีโกณมิติมาแปลงพิกัดจากกล้อง Webcam 2 มิติ 2 ตัว ให้เป็นพิกัด 3 มิติ เพื่อหาระยะความลึก
  • การ Calibrate: เรียนรู้การใช้แผ่น ChAruco board ในการ Calibrate กล้อง และพบปัญหาเมื่อตั้งกล้องห่างกัน จึงต้องแก้ปัญหาด้วยการลดขนาดตารางลง
  • ข้อจำกัดที่พบ: โค้ดยังจำกัดการใช้งานได้แค่ 1 คน หากมี 2 คนในเฟรม กล้องจะสับสนและคำนวณจุดในระนาบ 3 มิติผิดเพี้ยน

3. ด้านระบบสื่อสารและการแสดงผล (Web Communication)

  • สามารถส่งภาพวิดีโอและพิกัดโครงสร้างร่างกาย (Skeleton points) ในรูปแบบไฟล์ JSON ขึ้นไปแสดงผลบนหน้าเว็บไซต์ได้ โดยใช้ Web Socket และ ZMQ

4. ด้านการประกอบหุ่นยนต์และระบบไฟฟ้า (Assembly & Electrical)

  • การจัดการสายไฟ: เมื่อมีการดัดแปลงระบบ ทำให้สายไฟเยอะและเกิดสัญญาณรบกวนกันระหว่างไฟเลี้ยงมอเตอร์และสายสัญญาณ ได้เรียนรู้วิธีแก้ปัญหาโดยการทำเครื่องหมายที่สายไฟ ใช้สายแบบมี Shield และใช้ Ground ร่วมกัน

บทสรุปปัญหาสำคัญที่พบและข้อเสนอแนะ

  1. กำลังมอเตอร์ไม่พอ: มอเตอร์ไม่สามารถรับน้ำหนัก (Payload) ได้ตามที่คำนวณไว้ เนื่องจากสเปกจริงอาจมีความคลาดเคลื่อน (Error) แนะนำว่าหากสร้างใหม่ควรเผื่อกำลังมอเตอร์ไว้ให้มากกว่าปกติ
  2. เกียร์ 3D Print ขบกันไม่สนิท: วัสดุ ABS ที่พิมพ์มาอาจมีความคลาดเคลื่อน ควรตั้งค่าเครื่องพิมพ์ให้แม่นยำขึ้นและใช้จารบีขาวช่วยหล่อลื่น
  3. ปัญหาจากสายไฟจำนวนมาก: ทำให้หุ่นยนต์ต้องแบกน้ำหนักเพิ่มและไล่ระบบยาก แนะนำว่าในอนาคตควรใช้ระบบ CAN bus เพื่อลดจำนวนสายไฟ
  4. ปัญหากลไกรับน้ำหนักไม่ได้: ทำให้ในท้ายที่สุดไม่สามารถนำ Gripper ที่ออกแบบไว้ไปติดตั้งใช้งานจริงได้