สรุปสิ่งที่ได้เรียนรู้ระหว่างการทำ Class project
ในตอนเริ่มแรกที่จะทำหุ่นยนต์ตัวนี้ยัง ในส่วนตัวผมยังไม่มีความรู้เรื่องระบบเกียร์ที่ใช้ในหุ่นยนต์มากแล้วก็แบบ 3d ในชิ้นส่วน mechanic ต่างๆของหุ่นยนต์ ส่วนใหญ่ที่ผมรู้จะเป็นพวกที่เกี่ยวกับ motor และ วิธีการ Drive
โดยเกียร์ที่ใช้ในหุ่นของเราจะมีอยู่ 4 ชนิด คือ
- Planetary Gear
- Cycloidal Gear
- Belt reduction
- 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) |
| 1 | 0.2500 | 0.2597 | +3.9% | 0.2585 | 0.0214 | 0.0130 |
| 2 | 0.2500 | 0.2583 | +3.3% | 0.2568 | 0.0231 | 0.0147 |
| 3 | 0.2500 | 0.2629 | +5.2% | 0.2603 | 0.0288 | 0.0236 |
| 4 | 0.5000 | 0.5306 | +6.1% | 0.5253 | 0.0574 | 0.0475 |
| 5 | 0.5000 | 0.5240 | +4.8% | 0.5202 | 0.0500 | 0.0380 |
| 6 | 0.5000 | 0.5227 | +4.5% | 0.5188 | 0.0508 | 0.0386 |
แกน Z (หน้า+,หลัง-)

| ลำดับ | ระยะจริง(Actual – m) | ระยะห่างรวมที่วัดได้(Measured – m) | Error (%) | ΔX (m) | ΔY (m) | ΔZ (m) |
| 1 | 0.2500 | 0.2907 | +16.3% | 0.0443 | 0.0659 | 0.2796 |
| 2 | 0.2500 | 0.2763 | +10.5% | 0.0256 | 0.0572 | 0.2691 |
| 3 | 0.2500 | 0.2380 | -4.8% | 0.0235 | 0.0338 | 0.2344 |
| 4 | 0.5000 | 0.6018 | +20.4% | 0.0743 | 0.1334 | 0.5821 |
| 5 | 0.5000 | 0.5797 | +15.9% | 0.0674 | 0.1208 | 0.5630 |
| 6 | 0.5000 | 0.6088 | +21.8% | 0.0750 | 0.1373 | 0.5883 |
แกน Y (บน+,ล่าง-)

| ลำดับ | ระยะจริง(Actual – m) | ระยะห่างรวมที่วัดได้(Measured – m) | Error (%) | ΔX (m) | ΔY (m) | ΔZ (m) |
| 1 | 0.6100 | 0.6052 | -0.8% | 0.0088 | 0.5919 | 0.1259 |
| 2 | 0.6100 | 0.6197 | +1.6% | 0.0065 | 0.6169 | 0.0578 |
| 3 | 0.6100 | 0.6173 | +1.2% | 0.0027 | 0.6148 | 0.0557 |
| 4 | 0.4400 | 0.4551 | +3.4% | 0.0372 | 0.4534 | 0.0106 |
| 5 | 0.4400 | 0.4504 | +2.4% | 0.0501 | 0.4470 | 0.0226 |
| 6 | 0.4400 | 0.4006 | -8.9% | 0.0548 | 0.3576 | 0.1722 |
ภาพรวมการวิเคราะห์ (Overview)
ผลการวิเคราะห์แต่ละแกน (Axis Analysis)
1. แกน X (ซ้าย – ขวา)
แกนนี้หุ่นยนต์กะระยะซ้ายขวาได้แม่นยำมากใกล้เคียงกับการใช้ตลับเมตรวัด ค่าที่วัดได้กว้างกว่าความเป็นจริงไป ประมาณ 5%
2. แกน Y (บน – ล่าง)
แกนนี้มีการบอกระยะสูงต่ำมีความคลาดเคลื่อนบ้าง แต่โดยเฉลี่ยแล้วมันจะมองเห็นของอยู่ สูง/ต่ำกว่าความเป็นจริงไปประมาณ 11%
3. แกน Z (ตื้น – ลึก)
แกนนี้ค่อนข้างผิดเพี้ยนสูง ประมาณ 20%
***หมายเหตุ***
- Measured (m): คือ ระยะกระจัดรวมในรูปแบบ 3 มิติ ที่ระบบกล้องคำนวณจากพีทากอรัส ΔX2+ΔY2+Δ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 ร่วมกัน
บทสรุปปัญหาสำคัญที่พบและข้อเสนอแนะ
- กำลังมอเตอร์ไม่พอ: มอเตอร์ไม่สามารถรับน้ำหนัก (Payload) ได้ตามที่คำนวณไว้ เนื่องจากสเปกจริงอาจมีความคลาดเคลื่อน (Error) แนะนำว่าหากสร้างใหม่ควรเผื่อกำลังมอเตอร์ไว้ให้มากกว่าปกติ
- เกียร์ 3D Print ขบกันไม่สนิท: วัสดุ ABS ที่พิมพ์มาอาจมีความคลาดเคลื่อน ควรตั้งค่าเครื่องพิมพ์ให้แม่นยำขึ้นและใช้จารบีขาวช่วยหล่อลื่น
- ปัญหาจากสายไฟจำนวนมาก: ทำให้หุ่นยนต์ต้องแบกน้ำหนักเพิ่มและไล่ระบบยาก แนะนำว่าในอนาคตควรใช้ระบบ CAN bus เพื่อลดจำนวนสายไฟ
- ปัญหากลไกรับน้ำหนักไม่ได้: ทำให้ในท้ายที่สุดไม่สามารถนำ Gripper ที่ออกแบบไว้ไปติดตั้งใช้งานจริงได้
