
สมาชิกในกลุ่ม
68340700401
นาย วัฒนชัย ผาคำ (MachineVision-MediaPipe)

——————————————————————————————————————————————————————————————-
68340700413
นาย อิทธิวัตร รัตตกูล (Web Interface)

——————————————————————————————————————————————————————————————-
วัตถุประสงค์ของโครงงาน
- เพื่อพัฒนา Web-Based Interface ที่เป็นมิตรต่อผู้ใช้งาน (UX/UI) สำหรับควบคุมและตรวจสอบสถานะของหุ่นยนต์ 6 แกนแบบ Real-time
- เพื่อประยุกต์ใช้ Machine Vision ในการตรวจจับและจำแนกวัตถุ (Object Detection) เพื่อเพิ่มความแม่นยำในการหยิบจับ (Pick and Place)
- เพื่อประยุกต์ใช้เทคโนโลยี Pose/Hand Estimation (เช่น MediaPipe) ในการเป็นตัวกลางสั่งการหุ่นยนต์แทนการใช้ Remote หรือ Code
ขอบเขตของโครงงาน
- ส่วนงาน Web Interaction
-พัฒนา UI สำหรับควบคุม Joint/Cartesian ผ่าน Web Browser
-แสดงผล Real-time Video Stream จากกล้องบนหน้าเว็บ Dashboard ผู้ใช้สามารถควบคุมหุ่นได้ผ่านเว็บแอปพลิเคชันและสื่อสารด้วยท่าทาง - ส่วนงาน Vision System
-ใช้ MediaPipe (หรือเทียบเท่า) ในการทำ Hand Tracking เพื่อควบคุมการเคลื่อนที่ของปลายมือหุ่นยนต์ (End-effector)
-ระบบ Vision ตรวจจับพิกัดของวัตถุเพื่อช่วยให้หุ่นยนต์หยิบจับได้แม่นยำขึ้น (Vision-Guided Task)
-ระบบตรวจจับมนุษย์ (Human Detection) เพื่อสั่งการหยุดหุ่นยนต์เมื่อเกิดระยะประชิดที่อันตราย
ประโยชน์ที่คาดว่าจะได้รับ
- ช่วยให้ผู้พิการหรือผู้ใช้ที่ไม่มีทักษะวิศวกรรมสามารถ “สอน” หุ่นยนต์ได้ง่าย
- เพิ่มระดับความปลอดภัยในการทำงานร่วมกันระหว่างมนุษย์และหุ่นยนต์ด้วยระบบ Vision อัจฉริยะ
- ช่วยให้ผู้ที่มีข้อจำกัดทางกายภาพสามารถควบคุมหุ่นยนต์อุตสาหกรรมได้ผ่านท่าทางที่เรียบง่าย
- ช่วยลดภาระงานที่ต้องทำซ้ำ ๆ และลดความเหนื่อยล้าสะสมจากการปฏิบัติงาน
SYSTEM SCENARIO

ขั้นตอนการใช้ Web Interface
1.ทำการเชื่อมต่อ Wifi ของหุ่นยนต์ และเปิด Web Robot control
2.สามารถเลือกควบคุมได้ 3 mode คือ Mode1: Vision control Mode2: Jog control(Manual jog บนหน้าเว็บ) Mode3: Force torque control
3.สามารถดูกล้องได้ทั้ง 3 ตัวคือ 1)กล้องซ้าย 2)กล้องขวา 3)กล้องตรงปลาย Gripper
4.สามารถควบคุมให้กลับ Home หรือ Origin ได้สามารถดูค่าพิกัดจัด Mark และ Task ต่างๆได้แบบ RealTime
ขั้นตอนการใช้ Vision Control
1.เปิด Web Robot control ตั้วค่าWebcam 2ตัว(ตัวฝั่งซ้ายและขวาให้ถูกต้อง)โดย webcam 2 ตัวจะจับภาพมาที่ผู้ควบคุมโดย webcamR จะวางให้เห็นผู้ใช้งานทั้งตัว และwebcamLจะวางให้เห็นผู้ใช้งานทั้งตัวเช่นกัน เพื่อจะได้อ่านจุดพิกัดต่างๆได้อย่างครบถ้วน
2.ทำการ calibrate webcam ทั้ง 2 ตัว (webcam ทั้ง 2 ตัวยึดอยู่กับที่ห้ามขยับ) โดยใช้ ChAruCo ในการ calibrate stereo vision โดยจะได้ไฟล์ calibrate มา1 ไฟล์

3.เปิดโปรแกรม Main โปรแกรมจะทำการหาตำแหน่งของข้อมือ,ข้อนิ้ว,ไหล่,แขน และ อื่นๆ ตามที่ได้ mapping ไว้กับตัวแขนกล

4.คอมพิวเตอร์จะทำการนำจุดที่ตรวจพบพร้อมพิกัด (X,Y,Z,Roll,Pitch,Yaw) ส่งไปใช้คำนวณ Kinemetic และ Inverse Kinemetic รวมถึง task palning และ speed ที่คอมพิวเตอร์ที่ใช้เป็นตัวควบคุมแขนกล ให้เคลื่อนที่ไปยังตำแหน่งที่ต้องการ โดยจะส่งผ่าน websocket(พิกัดจุดต่าง) และ zmq ส่งวิดีโอไปโชว์บนหน้าเว็บ
การทำ Stereo Camera
ในส่วนนี้ได้รับแรงบันดาลใจมาจากกล้องที่ตรวจจับความลึกได้หลักการคือการนำเอาจุดเดียวกันของทั้งสองกล้องมาคำนวณพีทากอรัสกันเพื่อให้ได้ระดับความลึกของภาพ แต่กล้องพวกนั้นจะวางที่ระนาบเดียวกันและใกล้กันทำให้บางทีไม่สามารถมาเห็นมือหรือแขนได้ในบางมุมจึงใช้ความรู้จากวิชา Machine vision เข้ามาช่วยในการแปลงจุดที่อยู่ในระนาบ 2 มิติจากกล้องสองตัวให้ไปอยู่ใน ระนาบ 3 มิติ โดยการใช้ตรีโกณมิติ ในช่วงการทดสอบตอนแรกใช้กล้อง webcam เกี่ยวบนจอ laptop ให้ผลลัพธ์ดีมากจากเจอทุกจุดแยกแยะแกนได้อย่างชัดเจนการ calibrate ในตอนนั้นใช้เป็น ChAruco board ขนาด 7*5 ตารางวัดขนาด Charuco จริงแล้วใส่ในโปรแกรม แต่เมื่อตั้งกล้องให้ระยะห่างกันทำให้กล้องมองไม่เห็น Charuco Board ที่ใช้ ในการ Calibrate จึงทำให้ค่าทุกอย่างผิดเพี้ยน จริงได้ลดจำนวนตารางลงเหลือ 4*3 ค่าที่ได้จริงออกมาได้ค่อนข้างดี แต่โค้ดที่ทำยังมีข้อจำกัดอยู่คือสามารถใช้งานได้แค่ 1 คน เนื่องจากกล้องแต่ละตัวก็จะค้นหา คนโดยแต่ละกล้องก็จะหาคนในกล้องของตัวมันเอง ณ ขณะที่คน 2 คนเข้าไปข้างในเฟรมกล้อง กล้องไม่ได้จำว่าใครคือใครจริงส่งจุดของคนมาคิดสลับกันทำให้การคำนวณจุดในระนาบ 3 มิติผิดเพี้ยน ช่วยแรกๆที่ทำก็มีสับสนพวกทิศทางของแต่ละแกนมีการสลับซ้าย ขวา บนล่าง
ตัวอย่างการใช้งานโปรแกรม
การใช้ Vision ตรวจจับมือและแขนเพื่อส่งพิกัดจุดส่งไปคำนวณเพื่อควบคุม Gripper และ RobotArm
การตรวจจับของโปรแกรม การส่งค่าและหน้าต่างที่แสดงในหน้าเว็บ
การทดสอบประสิทธิภาพ
ในส่วนนี้ทางผู้ทดสอบก็ได้คิดวิธีการทดลองขึ้นมาโดยหลักการคือเราจะจับรูปแรกไว้ก่อนเพื่อเป็นจุดในการเทียบระยะกับรูปที่สองโดยระยะที่เคลื่อนที่รูปจะทำการวัดด้วยตลับเมตรไว้ก่อนแล้ว
ซึ่งจากที่ได้ทดลองในระยะ 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.ในการ calibrate กล้อง CArucho หรือบอร์ดที่ใช้มีตารางที่จำนวนแถวคูณหลักเยอะจำทำให้ช่องแต่ละช่องมีขนาดเล็กจนระบบไม่สามารถตรวจจับได้(แนะนำให้ปริ้นใส่กระดาษที่มีขนาดใหญ่ขึ้นจะทำให้ใช้จำนวนตารางได้มากขึ้น โดยที่ยิ่งจำนวนตารางเยอะกล้องจะทำ stereo ได้แม่นยำขึ้น)
2.ค่า FPS เฉลี่ยที่น้อยมาก(9 FPS.)ในส่วนนี้แนะนำให้ปรับ Resolution ของภาพที่ได้มาจาก Webcam
3.ระบบยังสามารถใช้งานได้เพียงแค่คันเดียวอยู่
SourceCode
Robot Safety Vision
https://github.com/babyshark42/stereo_webcam.git
Robot Web interface
https://github.com/babyshark42/robotARM-ui.git
Link FIBO Robot Cafe Full Project
