ระบบซอฟต์แวร์และไลบรารี
แนะนำซอฟต์แวร์หลัก ไลบรารีที่ติดตั้งมาในระบบ และอัลกอริทึมการมองเห็นทั้ง 4 รูปแบบที่ AIKit รองรับ เพื่อให้ผู้ใช้สามารถเลือกใช้งานได้ตามความเหมาะสม
5.1 ซอฟต์แวร์ที่ติดตั้งมาในระบบ
Jetson Nano ของชุด AIKit ได้ติดตั้งซอฟต์แวร์และไลบรารีหลักที่จำเป็นมาให้แล้ว:
- ระบบปฏิบัติการ: Ubuntu Mate 20.04 LTS (focal)
- ภาษาโปรแกรม: Python 3.8.10 (ติดตั้งมาให้แล้ว เช็คด้วย
python3 --version) - pymycobot version: 4.0.4 ขึ้นไป (เช็คด้วย
python3 -c "import pymycobot; print(pymycobot.__version__)") - ไลบรารีหลัก:
pymycobotไลบรารีควบคุมหุ่นยนต์ myCobotOpenCV 4.xประมวลผลภาพและคอมพิวเตอร์วิทัศน์NumPyคำนวณตัวเลขและเมทริกซ์PyTorchDeep Learning Framework (รองรับ CUDA)Ultralytics YOLOv8โมเดลตรวจจับวัตถุPyQt5สำหรับสร้าง GUIJetson.GPIOควบคุม GPIO ของ Jetson Nano
- CUDA 10.2 + cuDNN 8.0 เร่งการประมวลผลด้วย GPU
หากต้องการอัปเดตไลบรารี สามารถใช้ pip3 install --upgrade ชื่อไลบรารี ได้
แต่ควรระวังว่าบางเวอร์ชันอาจไม่รองรับ Jetson Nano
5.2 โครงสร้างไฟล์โปรแกรม
โปรแกรมหลักของ AIKit ติดตั้งอยู่ในโฟลเดอร์ /home/er/AIKit_280_JN มีโครงสร้างหลักดังนี้:
AIKit_280_JN/
├── camera_detect.py # โปรแกรมหลัก Pick & Place
├── obj_detect/ # อัลกอริทึมการตรวจจับ
│ ├── color_detect.py # ตรวจจับด้วยสี
│ ├── shape_detect.py # ตรวจจับด้วยรูปทรง
│ ├── unpack_stack.py # Unpack & Stack Detection
│ └── yolo_detect.py # ตรวจจับด้วย YOLOv8
├── models/ # โมเดล AI
│ └── yolov8n.pt # โมเดล YOLOv8 (น้ำหนักเบา)
├── utils/ # ฟังก์ชันช่วย
│ ├── camera.py # จัดการกล้อง
│ ├── gpio_control.py # ควบคุม GPIO
│ └── calibration.py # Calibration กล้องและหุ่นยนต์
└── config/
└── settings.yaml # ค่าตั้งต่าง ๆ
โค้ดชุดนี้เป็น open source ดู/ดาวน์โหลดได้ที่
github.com/elephantrobotics/aikit_V2
(โฟลเดอร์ AiKit_280JN)
5.3 อัลกอริทึมการตรวจจับวัตถุ 4 รูปแบบ
AIKit รองรับอัลกอริทึม 4 แบบ ซึ่งเหมาะกับสถานการณ์ที่แตกต่างกัน:
| อัลกอริทึม | หลักการ | ข้อดี | ข้อจำกัด | เหมาะกับงาน |
|---|---|---|---|---|
| Color Detection | ตรวจหาช่วงสีใน HSV | เร็วมาก ใช้ทรัพยากรน้อย ตั้งค่าง่าย | ไวต่อแสง สีเข้มอ่อนต่างกันอาจตรวจไม่พบ | วัตถุที่มีสีชัดเจน เช่น ลูกบาศก์สี |
| Shape Detection | ตรวจหาเส้นขอบและรูปทรง (Contour) | ไม่ขึ้นกับสี ใช้เฉพาะรูปร่าง | ต้องมีพื้นหลังเรียบ คอนทราสต์สูง | วัตถุรูปทรงเรียบง่าย เช่น สามเหลี่ยม วงกลม |
| Unpack & Stack | Depth + Contour ตรวจจับชั้น | เหมาะกับกล่องเรียงซ้อน รู้จำนวนชั้น | ต้องการ Depth Camera คุณภาพดี | Logistics, Bin Picking, จัดเรียงกล่อง |
| YOLOv8 (AI) | Deep Learning ผ่านโมเดล YOLOv8 | ตรวจจับวัตถุที่ซับซ้อน รองรับ 15 คลาส | ใช้ทรัพยากรสูง ต้องการ GPU | วัตถุในชีวิตประจำวัน เช่น แก้ว ขวด หนังสือ |
5.4 รายละเอียดของแต่ละอัลกอริทึม
5.4.1 Color Detection
ตรวจจับวัตถุโดยอ้างอิงจากค่าสีในระบบ HSV (Hue, Saturation, Value) ซึ่งทนต่อการเปลี่ยนแปลงแสงได้ดีกว่า RGB
- รองรับสีเริ่มต้น: แดง เขียว น้ำเงิน เหลือง
- สามารถปรับช่วงค่า HSV ในไฟล์
config/settings.yamlได้ - ความเร็วในการประมวลผล: 30-60 FPS
5.4.2 Shape Detection
ใช้เทคนิค Contour Detection ใน OpenCV เพื่อหาเส้นขอบของวัตถุ จากนั้นนับจำนวนมุมเพื่อระบุรูปทรง
- รองรับรูปทรง: สามเหลี่ยม สี่เหลี่ยม วงกลม
- แนะนำใช้พื้นหลังสีเดียวเพื่อให้แยกขอบวัตถุได้ชัดเจน
- ความเร็วในการประมวลผล: 20-40 FPS
5.4.3 Unpack & Stack Detection
ใช้การประมวลผลภาพร่วมกับข้อมูลความลึก (Depth Information) จากกล้อง 3D เพื่อตรวจจับวัตถุที่ซ้อนกันเป็นชั้น โดยใช้ Contour Detection ร่วมกับ Depth Map เพื่อแยกแยะวัตถุแต่ละชิ้นและระบุจำนวนชั้นที่ซ้อนกัน
- ความแม่นยำตำแหน่ง: ± 2-3 มิลลิเมตร
- ความเร็วในการประมวลผล: 15-25 FPS
- เหมาะกับงาน: Logistics, Bin Picking, จัดเรียงกล่องในคลังสินค้า
- ข้อจำกัด: ต้องใช้กับวัตถุที่มีพื้นผิวด้านบนเรียบ และต้องมีความต่างความสูงของแต่ละชั้นชัดเจน
5.4.4 YOLOv8 Object Detection
ใช้โมเดล Deep Learning (YOLOv8n) ที่ Elephant Robotics ฝึกไว้ล่วงหน้าด้วยชุดข้อมูลเฉพาะของ AIKit ครอบคลุมวัตถุ 15 คลาสที่เลือกใช้ (ไม่ใช่ชุด COCO มาตรฐาน 80 คลาส)
- คลาสที่รองรับ (15 ชนิด): jeep, apple, banana1, bed, grape, laptop, microwave, orange, pear, refrigerator1, refrigerator2, sofa, sofa2, tv, washing_machine1
- ความเร็วในการประมวลผล: 10-20 FPS (บน Jetson Nano)
- รองรับการเทรนใหม่ (Fine-tune) ด้วยชุดข้อมูลของผู้ใช้
ซอร์สโค้ด + โมเดล (GitHub): โค้ด AIKit ทั้งหมดของ Elephant Robotics
รวมโมเดล YOLO ที่เทรนไว้ อยู่ที่
github.com/elephantrobotics/aikit_V2
(โฟลเดอร์ AiKit_280JN สำหรับรุ่น Jetson Nano)
ในการใช้งานจริง สามารถผสมผสานอัลกอริทึมได้ เช่น ใช้ Color Detection คัดกรองก่อน แล้วใช้ YOLOv8 ยืนยันชนิดวัตถุอีกครั้ง
5.4.5 Performance Benchmarks บน Jetson Nano
วัดจริงบน Jetson Nano (4GB RAM, MaxN mode) ใช้เลือก algorithm ตามทรัพยากร
| Algorithm | FPS | Latency | CPU | GPU | RAM | เหมาะกับ |
|---|---|---|---|---|---|---|
| Color Detection (HSV) | 40-60 | ~16 ms | ~25% | ~5% | ~250 MB | Real-time tracking |
| Shape Detection | 20-40 | ~30 ms | ~35% | ~5% | ~280 MB | Industrial sorting |
| ArUco Marker | 30-50 | ~22 ms | ~20% | ~3% | ~220 MB | Calibration / Tracking |
| YOLOv8n (nano) | 10-15 | ~70 ms | ~50% | ~75% | ~1.2 GB | Multi-class detection |
| YOLOv8s (small) + TensorRT | 15-20 | ~55 ms | ~45% | ~85% | ~1.5 GB | Higher accuracy |
| Unpack & Stack (Depth) | 15-25 | ~45 ms | ~55% | ~30% | ~600 MB | Bin Picking |
5.4.6 Motion Command Latency
เวลาตอบสนองของหุ่นเมื่อส่งคำสั่ง ใช้ตอนวางแผน real-time control
| คำสั่ง | เวลาตอบกลับ | หมายเหตุ |
|---|---|---|
get_angles() | ~15-25 ms | อ่านจาก servo ผ่าน serial |
send_angle(j, a, speed) | ~5-10 ms (return) | ส่งคำสั่งเสร็จ; servo เคลื่อนต่อ |
send_angles([...], speed) | ~8-15 ms (return) | ส่ง 6 ค่าพร้อมกัน |
is_moving() | ~12-20 ms | เช็คว่าเคลื่อนเสร็จยัง |
| เคลื่อนกลับ Home (speed=30) | ~2-3 วินาที | ขึ้นกับท่าปัจจุบัน |
| เคลื่อนเต็มระยะ (180°, speed=80) | ~1-1.5 วินาที | เร็วสุดที่ทำได้ |
- เปลี่ยน Jetson เป็น MaxN mode ก่อนรัน Vision:
sudo nvpmodel -m 0 - เปิด jetson_clocks (lock max clock):
sudo jetson_clocks - ใช้ TensorRT compile YOLO model แทน PyTorch ตรงๆ เร็วขึ้น 2-3 เท่า
- ตอนทำ benchmark ใช้
sudo tegrastatsดู real-time (ดู Cheatsheet)
5.5 การปรับเทียบระบบ (Calibration)
การ Calibrate ระบบเป็นขั้นตอนสำคัญที่ทำให้กล้องและหุ่นยนต์ทำงานร่วมกันได้อย่างแม่นยำ ระบบจะคำนวณความสัมพันธ์ระหว่าง พิกัดในภาพ (Pixel Coordinates) กับ พิกัดของหุ่นยนต์ (World Coordinates)
5.5.1 เมื่อใดต้อง Calibrate
- ก่อนใช้งานครั้งแรก
- หลังเปลี่ยนตำแหน่งกล้องหรือหุ่นยนต์
- หลังเปลี่ยน End-Effector
- เมื่อพบว่าหุ่นยนต์หยิบวัตถุไม่ตรงตำแหน่งเกิน ± 5 มม.
5.5.2 ขั้นตอนการ Calibrate
ArUco Marker = ลายกระดาษขาว-ดำเหมือน QR Code ขนาดเล็ก
ที่ กล้องอ่านแล้วรู้พิกัด + มุม ของมันในภาพได้แม่นยำ
หน้าตา: สี่เหลี่ยมจัตุรัส มีลายขาว-ดำเป็นช่อง ๆ
คล้าย QR Code แต่ลายเรียบง่ายกว่า (ID เฉพาะตัว)
อยู่ที่ไหน: Marker มาในชุด AIKit แล้ว เป็น Black and White Magic Stickers
(รายการที่ 14 ใน บทที่ 1.3)
แปะลงบน Acrylic Base Plate ตามที่ระบุไว้ในคู่มือกล่อง
เมื่อใช้: ระบบจะให้แขนเคลื่อนผ่าน Marker หลายมุม
แล้วคำนวณว่า "จุดในภาพกล้อง" ตรงกับ "จุดในโลกจริง" อย่างไร
ทำครั้งเดียวก่อนใช้งาน ใช้ค่าซ้ำได้
- วาง ArUco Marker บนตำแหน่งที่กำหนดบนฐาน AIKit
- เปิดโปรแกรม
calibration.py - ระบบจะให้หุ่นยนต์เคลื่อนที่ไปจุดต่าง ๆ เพื่อบันทึกความสัมพันธ์
- ระบบจะบันทึก Calibration Matrix ลงในไฟล์
config/calibration.npz
cd ~/AIKit_280_JN
python3 utils/calibration.py
หากผลการ Calibrate มีค่า Error เกิน 3 มิลลิเมตร ให้ตรวจสอบตำแหน่ง Marker และทำซ้ำ