myCobot 280 JN + AIKit 3D Vision
บทที่ 5

ระบบซอฟต์แวร์และไลบรารี

แนะนำซอฟต์แวร์หลัก ไลบรารีที่ติดตั้งมาในระบบ และอัลกอริทึมการมองเห็นทั้ง 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 ไลบรารีควบคุมหุ่นยนต์ myCobot
    • OpenCV 4.x ประมวลผลภาพและคอมพิวเตอร์วิทัศน์
    • NumPy คำนวณตัวเลขและเมทริกซ์
    • PyTorch Deep Learning Framework (รองรับ CUDA)
    • Ultralytics YOLOv8 โมเดลตรวจจับวัตถุ
    • PyQt5 สำหรับสร้าง GUI
    • Jetson.GPIO ควบคุม GPIO ของ Jetson Nano
  • CUDA 10.2 + cuDNN 8.0 เร่งการประมวลผลด้วย GPU
💡
คำแนะนำ

หากต้องการอัปเดตไลบรารี สามารถใช้ pip3 install --upgrade ชื่อไลบรารี ได้ แต่ควรระวังว่าบางเวอร์ชันอาจไม่รองรับ Jetson Nano

5.2 โครงสร้างไฟล์โปรแกรม

โปรแกรมหลักของ AIKit ติดตั้งอยู่ในโฟลเดอร์ /home/er/AIKit_280_JN มีโครงสร้างหลักดังนี้:

tree
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

Color Detection demo
ตัวอย่าง Color Detection (ภาพจาก Elephant Robotics)
  • รองรับสีเริ่มต้น: แดง เขียว น้ำเงิน เหลือง
  • สามารถปรับช่วงค่า HSV ในไฟล์ config/settings.yaml ได้
  • ความเร็วในการประมวลผล: 30-60 FPS

5.4.2 Shape Detection

ใช้เทคนิค Contour Detection ใน OpenCV เพื่อหาเส้นขอบของวัตถุ จากนั้นนับจำนวนมุมเพื่อระบุรูปทรง

Shape Detection demo
ตัวอย่าง Shape Detection (ภาพจาก Elephant Robotics)
  • รองรับรูปทรง: สามเหลี่ยม สี่เหลี่ยม วงกลม
  • แนะนำใช้พื้นหลังสีเดียวเพื่อให้แยกขอบวัตถุได้ชัดเจน
  • ความเร็วในการประมวลผล: 20-40 FPS

5.4.3 Unpack & Stack Detection

ใช้การประมวลผลภาพร่วมกับข้อมูลความลึก (Depth Information) จากกล้อง 3D เพื่อตรวจจับวัตถุที่ซ้อนกันเป็นชั้น โดยใช้ Contour Detection ร่วมกับ Depth Map เพื่อแยกแยะวัตถุแต่ละชิ้นและระบุจำนวนชั้นที่ซ้อนกัน

Unpack and Stack demo
ตัวอย่างงาน Unpack & Stack (ภาพจาก Elephant Robotics)
  • ความแม่นยำตำแหน่ง: ± 2-3 มิลลิเมตร
  • ความเร็วในการประมวลผล: 15-25 FPS
  • เหมาะกับงาน: Logistics, Bin Picking, จัดเรียงกล่องในคลังสินค้า
  • ข้อจำกัด: ต้องใช้กับวัตถุที่มีพื้นผิวด้านบนเรียบ และต้องมีความต่างความสูงของแต่ละชั้นชัดเจน

5.4.4 YOLOv8 Object Detection

ใช้โมเดล Deep Learning (YOLOv8n) ที่ Elephant Robotics ฝึกไว้ล่วงหน้าด้วยชุดข้อมูลเฉพาะของ AIKit ครอบคลุมวัตถุ 15 คลาสที่เลือกใช้ (ไม่ใช่ชุด COCO มาตรฐาน 80 คลาส)

YOLOv8 Detection demo
ตัวอย่าง YOLOv8 Detection (ภาพจาก Elephant Robotics)
  • คลาสที่รองรับ (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 ตามทรัพยากร

AlgorithmFPSLatencyCPUGPURAMเหมาะกับ
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 วินาทีเร็วสุดที่ทำได้
💡
เคล็ดลับ Performance
  • เปลี่ยน 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 คืออะไร? อยู่ที่ไหน?

ArUco Marker = ลายกระดาษขาว-ดำเหมือน QR Code ขนาดเล็ก ที่ กล้องอ่านแล้วรู้พิกัด + มุม ของมันในภาพได้แม่นยำ

หน้าตา: สี่เหลี่ยมจัตุรัส มีลายขาว-ดำเป็นช่อง ๆ คล้าย QR Code แต่ลายเรียบง่ายกว่า (ID เฉพาะตัว)

อยู่ที่ไหน: Marker มาในชุด AIKit แล้ว เป็น Black and White Magic Stickers (รายการที่ 14 ใน บทที่ 1.3) แปะลงบน Acrylic Base Plate ตามที่ระบุไว้ในคู่มือกล่อง

เมื่อใช้: ระบบจะให้แขนเคลื่อนผ่าน Marker หลายมุม แล้วคำนวณว่า "จุดในภาพกล้อง" ตรงกับ "จุดในโลกจริง" อย่างไร ทำครั้งเดียวก่อนใช้งาน ใช้ค่าซ้ำได้

  1. วาง ArUco Marker บนตำแหน่งที่กำหนดบนฐาน AIKit
  2. เปิดโปรแกรม calibration.py
  3. ระบบจะให้หุ่นยนต์เคลื่อนที่ไปจุดต่าง ๆ เพื่อบันทึกความสัมพันธ์
  4. ระบบจะบันทึก Calibration Matrix ลงในไฟล์ config/calibration.npz
terminal
cd ~/AIKit_280_JN
python3 utils/calibration.py
⚠️
คำเตือน

หากผลการ Calibrate มีค่า Error เกิน 3 มิลลิเมตร ให้ตรวจสอบตำแหน่ง Marker และทำซ้ำ