กลับไปหน้ารวมไฟล์
4-dof-mobile-arm-robot-with-on-board-camera-78fab3.md

หุ่นยนต์แขนกลเคลื่อนที่ (Mobile Arm Robots) นี่มันคือการควบรวมข้อดีของฐานเคลื่อนที่กับแขนกลโรบอทเข้าด้วยกันเลยนะน้อง ฐานเคลื่อนที่ที่เพิ่มองศาอิสระ (Degrees of Freedom) ให้มัน ทำให้เราสามารถใช้งานหุ่นยนต์ในพื้นที่กว้างขึ้นและเข้าถึงจุดต่างๆ ได้ง่ายขึ้น หุ่นยนต์แบบนี้เลยฮิตใช้กันในอุตสาหกรรม งานดูแลสุขภาพ หรือแม้แต่ในบ้านเลยล่ะ

โปรเจคนี้จะพาน้องไปสร้างหุ่นยนต์พื้นฐานที่ควบคุมผ่าน WiFi กัน มันเป็นหุ่นยนต์ 4 ล้อ พร้อมแขนกล 4 แกน (4 axes robotic arm) ติดตั้งอยู่บนตัวรถ และยังมีกล้อง WiFi ติดตั้งอยู่บนแขนกลอีกด้วย หุ่นยนต์ตัวนี้จะถูกควบคุมด้วยมือจากพีซีโฮสต์ผ่าน WiFi ทั้งหมดเลย งานนี้จัดไปวัยรุ่น!

Mobile arm robot in action

เริ่มต้นกันเลย (Getting Started)

ขั้นตอนที่ 1: ประกอบฮาร์ดแวร์ตามที่อธิบายไว้ในส่วน 'การพัฒนาฮาร์ดแวร์ (Hardware Development)'

ขั้นตอนที่ 2: ติดตั้ง CASP เวอร์ชั่นล่าสุด (โปรแกรมสำหรับควบคุม) ผ่านลิงก์ดาวน์โหลดหลักของ CASP และสามารถดูวิดีโอสอนการใช้งาน CASP ได้จากช่องทางการเรียนรู้อีกช่องทางหนึ่ง

ขั้นตอนที่ 3: ดาวน์โหลดโปรเจคตัวอย่าง 'Remote Controlled Mobile Arm Robot with on-board Camera' จากหมวดโปรเจคหุ่นยนต์ (Robotics) ของ CASP และทำตามขั้นตอนที่กล่าวไว้ในส่วน 'การพัฒนาซอฟต์แวร์ (Software Development)'

ขั้นตอนที่ 4: ต้องมีการปรับแต่งบางอย่างตามที่อธิบายในส่วน 'การปรับแต่ง (Adjustments)' เพื่อให้ซอฟต์แวร์ทำงานเข้ากับฮาร์ดแวร์ที่เราสร้างขึ้น น้องยังสามารถปรับปรุงประสิทธิภาพของหุ่นยนต์เพิ่มเติมได้โดยการแก้ไขซอร์สโค้ดจากบล็อกที่กำหนดเอง (custom blocks) อีกด้วย

ขั้นตอนที่ 5: วิธีการควบคุมหุ่นยนต์ด้วยคีย์บอร์ดและเมาส์อธิบายไว้ในส่วน 'วิธีการควบคุม (Control Methodology)'

ขั้นตอนที่ 6: สุดท้ายแล้ว ข้อควรระวังด้านความปลอดภัยที่จะต้องปฏิบัติตาม อธิบายไว้ในส่วน 'ความปลอดภัย (Safety)' ห้ามช็อตนะตัวนี้!

การพัฒนาฮาร์ดแวร์ (Hardware Development)

เริ่มจากติดตั้งมอเตอร์ DC พร้อมล้อทั้ง 4 ตัวเข้ากับฐานโครงสร้างที่เหมาะสม จากนั้นก็ประกอบชุดแขนกล 4 แกนที่ขับเคลื่อนด้วยเซอร์โวมอเตอร์ลงบนฐาน กล้อง ESP32 จะถูกติดตั้งที่ปลายแขนกล (end-effector) สำหรับเซอร์โวที่ใช้หมุนแกนแขนกล เราใช้แบบแรงบิดสูง (High torque) และต้องติดตั้งอย่างระมัดระวังเพื่อให้ได้การเคลื่อนไหวของแขนตามที่ต้องการ โมดูลอิเล็กทรอนิกส์ต่างๆ จะถูกวางและต่อวงจรบนฐานตามไดอะแกรมการต่อสายที่แสดงในส่วน 'แผนภาพวงจร (Schematic)' ภาพด้านบนแสดงการจัดวางโดยทั่วไปให้ดู

ส่วนอิเล็กทรอนิกส์ ใช้ Arduino Nano RP2040 หรือ Raspberry Pi Pico W เป็นตัวควบคุมหลัก (main controller) สำหรับควบคุมฟังก์ชันทั้งหมดของหุ่นยนต์และสื่อสารกับพีซีโฮสต์ผ่านโมดูล WiFi บนบอร์ด มันจะควบคุมเซอร์โวทั้ง 5 ตัวของแขนกลและล้อทั้ง 4 ล้อของหุ่นยนต์

โมดูลกล้อง ESP32 ที่ติดบนแขน ทำหน้าที่ถ่ายวิดีโอสด (live video) และสตรีมไปยังพีซีโฮสต์ ไฟแฟลช (Flashlight) บนโมดูล ESP32-CAM นี้สามารถควบคุมเปิด-ปิดได้ด้วยมือจากพีซีโฮสต์ในสภาพแสงน้อยได้ด้วย สู้งานนะน้อง!

เราใช้แบตเตอรี่ 9V ถึง 12V ที่ติดตั้งไว้ใต้ฐานโครงรถ ในการจ่ายไฟให้กับวงจรทั้งหมดบนหุ่นยนต์ตัวนี้ และใช้ตัวแปลงแรงดัน DC แบบ Step Down จาก 9V/12V ลงมาเป็น 6V เพื่อจ่ายแรงดันที่เหมาะสมให้กับไมโครคอนโทรลเลอร์, เซอร์โว และโมดูลกล้อง ESP32

รายละเอียดเทคนิคแบบจัดเต็ม: สถาปัตยกรรมสมองคู่

การสร้างรถที่วิ่งไปข้างหน้าง่ายมาก แต่การสร้างแขนกลที่หยิบบล็อกได้แบบอยู่กับที่ถือว่ากลางๆ โครงการ 4 DOF Mobile Arm Robot with Camera นี้รวมสองศาสตร์ยักษ์นี้เข้าไว้ในแพลตฟอร์มควบคุมระยะไกลเดียว มันต้องใช้ความชำนาญในการควบคุมมอเตอร์แบบอิสระ, คิเนแมติกส์ของเซอร์โว และการสตรีมวิดีโอแบบ First-Person View (FPV) แบนด์วิธสูง พร้อมกันไปเลย

Arduino Uno ธรรมดาๆ นั้นมีพลังประมวลผลและแรมไม่พอที่จะประมวลวิดีโอสดหรอก มันจะล่มทันที โครงการนี้เลยใช้สถาปัตยกรรมแบบกระจายอำนาจ (Distributed Architecture):

  1. สมองส่วนการมองเห็น (Vision Brain): เราใช้ โมดูล ESP32-CAM
  2. สมองส่วนการเคลื่อนไหว (Kinetic Brain): เราใช้ Arduino Nano RP2040 Connect หรือ Raspberry Pi Pico W ในการจัดการควบคุมส่วนกายภาพ มันจะคำนวณคณิตศาสตร์ PWM ที่ซับซ้อนเพื่อควบคุม DC Motor ทั้ง 4 ตัวในฐานรถ พร้อมกับสั่งการเซอร์โว 4 ตัวที่ประกอบเป็นข้อต่อแขน (Base Pan, Shoulder, Elbow, Claw)

สะพานสื่อสาร Serial Bridge

แอปพลิเคชันบน PC หลักของคุณจะมีคอนโทรลจากคีย์บอร์ดและเมาส์ซ้อนทับบนวิดีโอสด

  • PC หลักจะส่งคำสั่งผ่าน Wi-Fi ตรงไปยังไมโครคอนโทรลเลอร์หลัก (Nano RP2040/Pico W)
  • ESP32-CAM จะทำหน้าที่เฉพาะการสตรีมวิดีโอเท่านั้น ไมโครคอนโทรลเลอร์หลักจะเป็นตัวแยกวิเคราะห์คำสั่งควบคุมและสั่งการจ่ายไฟไปยังไดรเวอร์มอเตอร์และส่งสัญญาณ PWM ไปยังเซอร์โว

ฮาร์ดแวร์บูรณาการระดับเทพ

  • โมดูล ESP32-CAM และ FTDI Programmer
  • Arduino Nano RP2040 Connect หรือ Raspberry Pi Pico W
  • ชุดฐานรถ 4WD พร้อม DC Motor แรงบิดสูงและไดรเวอร์มอเตอร์
  • ชุดแขนกล 4 องศาอิสระ (4-Degree-of-Freedom (DOF) Robotic Arm Kit)
  • แบตเตอรี่ LiPo ขนาดใหญ่แบบ 18650 (เซอร์โวและการสตรีม Wi-Fi กินไฟแรงมาก อย่าลืม!)

การพัฒนา Software

A) การตั้งค่า ESP32 Camera

ก่อนจะใช้โมดูล ESP32 Camera ในโปรเจกต์ ต้องโปรแกรมให้มันมีที่อยู่ IP ที่ถูกต้องก่อน ให้น้องๆ ศึกษาเพิ่มเติมเกี่ยวกับวิธีการโปรแกรมโมดูลนี้ได้จากเอกสารหรือตัวอย่างต่างๆ ที่มีอยู่ทั่วไปในอินเทอร์เน็ต

B) Software สำหรับไมโครคอนโทรลเลอร์และ PC หลัก

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

นอกจากบล็อกมาตรฐานของ CASP แล้ว ในโมเดลยังใช้บล็อกที่เราสร้างขึ้นเอง (Custom Blocks) 2 บล็อก บล็อกแรกใช้สำหรับควบคุมการนำทาง และบล็อกที่สองใช้สร้างพิกัดเป้าหมายสำหรับแขนกลจากท่าทางการขยับเมาส์ของผู้ใช้ การใช้บล็อกเหล่านี้ยังช่วยลดจำนวนบล็อกทั้งหมดในโมเดลลงด้วย ซอร์สโค้ดของบล็อกที่สร้างขึ้นเองนี้มีให้ผู้ใช้ศึกษาได้

เราได้พัฒนาโมเดลขึ้นมาสองโมเดลเพื่อให้บรรลุวัตถุประสงค์ที่ต้องการ

B.1) โมเดลเป้าหมาย (Target Model) ที่รันบน Arduino Nano RP2040 Connect และ Raspberry Pi Pico W ประกอบด้วย

1) ตรรกะไฟกระพริบ (Blink logic) เพื่อบอกว่าระบบกำลังทำงานอยู่

2) บล็อก WiFi101 สำหรับรับสัญญาณควบคุมจากพีซีโฮสต์

3) บล็อก PWM และเซอร์โว ที่แมปกับขาพอร์ตของไมโครคอนโทรลเลอร์

4) บล็อกหน่วงเวลา (Time delay) เพื่อรีเซ็ตเอาต์พุตของบล็อก PWM กรณีเกิดข้อผิดพลาดในการสื่อสารหรือเมื่อไม่ได้เชื่อมต่อกับโฮสต์

ขั้นตอนการโปรแกรมบอร์ดเป้าหมายให้ถูกต้อง มีดังนี้ จัดไปวัยรุ่น!

1) เชื่อมต่อบอร์ดเป้าหมายกับพีซีโฮสต์ด้วยสาย USB

2) จดหมายเลขพอร์ตอนุกรม (Serial Port) ของบอร์ดที่เชื่อมต่ออยู่จากระบบปฏิบัติการของโฮสต์ อย่าลืมเด็ดขาด!

3) เปิดโปรแกรม CASP แล้วโหลดโปรเจกต์ 'rc_arduino' สำหรับเป้าหมาย Arduino RP2040 หรือ 'rc_picow' สำหรับ Raspberry Pi PicoW

4) บล็อก WiFi101 จะถูกตั้งค่าเป็นโหมดสถานี (Station mode) น้องอาจต้องป้อน SSID และรหัสผ่านของเครือข่ายที่อุปกรณ์จะเชื่อมต่อ ส่วนพารามิเตอร์ Local IP address ให้ตั้งค่าเป็นที่ได้รับจาก DHCP ของเครือข่ายนั้น

5) ไปที่เมนู Home->Simulation->Setup Simulation Parameters ใต้แท็บ TargetHW->General ให้ตั้งค่า 'Target Hardware Programmer Port' เป็นหมายเลขพอร์ตอนุกรมที่บอร์ดเชื่อมต่ออยู่

6) บิลด์โมเดลและโปรแกรมลงบอร์ด โดยการคลิกปุ่ม Run ได้เลย สู้งานนะน้อง!

B.2) โมเดลเนทีฟ (Native Model) ที่รันบนพีซีโฮสต์ ประกอบด้วย

1) บล็อกกล้อง (Camera block) สำหรับรับวิดีโอสดจาก ESP32 Camera โดยต้องป้อน IP Address ของกล้องในพารามิเตอร์ของบล็อกนี้

2) บล็อกแสดงภาพ (Image display block) สำหรับแสดงวิดีโอสดจากกล้อง และยังถูกตั้งค่าให้ส่งสัญญาณคีย์บอร์ดและเมาส์ออกมาได้ด้วย

3) บล็อกควบคุม RC (RC control block): เป็นบล็อกกำหนดเองที่รับสัญญาณคีย์บอร์ด/เมาส์จากบล็อกแสดงภาพ และสร้างสัญญาณควบคุมที่เหมาะสมสำหรับการเคลื่อนที่ของหุ่นยนต์

4) บล็อกแกนแขนกลจำนวน 4 แกน ซึ่งแทนแกนทั้ง 4 ของแขนกล รวมถึงเอ็นด์เอฟเฟกเตอร์ พารามิเตอร์ของบล็อกเหล่านี้ต้องปรับค่าให้ตรงกับขนาด/พารามิเตอร์ของแขนกลแต่ละชิ้นอย่างระมัดระวัง บล็อกเหล่านี้จะคำนวณ Forward Kinematics ของแต่ละแกน

5) บล็อก Inverse Kinematics ของแขนกล สำหรับคำนวณ Inverse Kinematics เพื่อหามุมของแต่ละแกน

6) บล็อกควบคุมแขนกล (Robotic Arm control block): เป็นบล็อกกำหนดเองที่สร้างเซตพอยต์ (x, y, z) และสัญญาณควบคุมที่ต้องการให้กับแขนกล ตามการอินพุตจากคีย์บอร์ดและเมาส์ของผู้ใช้

7) บล็อก GPIO ที่แมปกับโมเดลเป้าหมายผ่านช่องทางการสื่อสาร WiFi

ขั้นตอนการรันโมเดลเนทีฟบนพีซีโฮสต์ มีดังนี้

1) ก่อนเริ่ม ต้องแน่ใจว่าพีซีโฮสต์เชื่อมต่อกับเครือข่าย WiFi เดียวกันกับที่อุปกรณ์ (บอร์ดเป้าหมายและกล้อง) เชื่อมต่ออยู่

2) โหลดโปรเจกต์ 'rc_native'

3) คลิกที่เมนู Home->Simulation->Configure Simulation IO

4) หน้าต่าง 'Configure Simulation Hardware' จะเปิดขึ้น ใต้ส่วน Native Nodes และ GPIO Device Nodes ให้เปลี่ยนที่อยู่ IP ที่ทำเครื่องหมายไว้ในรูปด้านล่าง (โดยดับเบิลคลิกที่รายการ) เป็นที่อยู่ IP โลคอลของโฮสต์และ IP ของอุปกรณ์ ตามลำดับ ห้ามช็อตนะตัวนี้!

Setting Target IP Address

5) คลิกปุ่ม 'Connect Device' และติ๊กถูกที่ช่อง 'Online Data' ตอนนี้โปรแกรมควรจะสื่อสารกับบอร์ดเป้าหมายได้แล้ว โดยมีรอบเวลาประมาณ 30 มิลลิวินาที บอร์ดเป้าหมายจะพร้อมใช้งานเป็นเอนด์พอยต์ 'EP0' สำหรับโมเดลเนทีฟ โมเดลเนทีฟสามารถใช้เอนด์พอยต์นี้เพื่อเชื่อมต่อกับ IO ต่างๆ บนบอร์ดเป้าหมายได้เลย

6) กดปุ่ม 'Save' เพื่อเซฟการตั้งค่า แล้วปิดหน้าต่างไปเลยจ้า

7) รันโมเดลด้วยการกดปุ่ม Run หน้าต่าง Simulation Panel จะเด้งขึ้นมาและเริ่มคุยกับบอร์ดแล้ว

8) ภาพหน้าจอตอนที่ Simulation Panel ทำงานบน PC ดูได้ตามรูปข้างล่างนี้เลย

ปรับแต่งกันหน่อย (Adjustments)

1) สายมอเตอร์ล้ออาจจะต้องสลับขั้ว ถ้ากด W กับ S แล้วมันวิ่งไปข้างหลังแทนที่จะไปข้างหน้า (จัดไปวัยรุ่น)

2) เซอร์โวของแขนหุ่นยนต์ต้องปรับค่าให้ตรงกับพารามิเตอร์ในบล็อกแกน (axis block) ของโมเดลด้วยนะ ต้องปรับกันนิดนึงให้แขนมันอยู่ในท่าที่เราต้องการทันทีที่เปิดไฟ และตอนที่รันโปรแกรมอยู่ ห้ามช็อตนะตัวนี้

3) ความเร็วพื้นฐาน, ขีดจำกัดความเร็ว และพารามิเตอร์อื่นๆ เกี่ยวกับการเดินทาง ปรับได้จากบล็อก 'nav_control' เลย

4) ถ้าเครื่องใครการ์ดจอไม่แรงพอ แสดงผล 3D Plot ไม่ได้ แนะนำให้ปิดบล็อก 3D ไปก่อนซะ

วิธีควบคุม (Control Methodology)

1) ใช้คีย์ W – เดินหน้า, S – ถอยหลัง, A – หมุนซ้ายรอบจุดศูนย์กลาง, D – หมุนขวารอบจุดศูนย์กลาง

2) กดคีย์ผสม W/S กับ A/D พร้อมกัน เพื่อเลี้ยวซ้าย-ขวา ขณะที่เดินหน้าหรือถอยหลังได้

3) ปรับความเร็วด้วยปุ่ม Page Up กับ Page Down

4) ขยับเมาส์ (ขณะที่กดปุ่มขวาค้างไว้) เพื่อควบคุมแขนหุ่นยนต์ในระบบพิกัดเชิงขั้ว (polar co-ordinates) ขยับเมาส์ซ้าย-ขวาควบคุมมุมแขน (theta) เทียบกับตำแหน่งด้านหน้าและจุดศูนย์กลางของหุ่นยนต์ ขยับเมาส์ขึ้น-ลงควบคุมรัศมีของแขน จากนั้นระบบจะแปลงค่าเป็นพิกัดสี่เหลี่ยม (rectangular co-ordinates) เพื่อคำนวณค่า x กับ y การหมุนลูกล้อเมาส์ควบคุมการเคลื่อนที่ในแกน z ของแขน กดปุ่ม 'E' เพื่อเปิด/ปิด การควบคุมแขนด้วยเมาส์

5) กดปุ่ม 'P' เพื่อให้แขนหุ่นยนต์กลับไปที่มุมตั้งต้น (โหมดจอด/ parking mode)

6) ปุ่ม 'T' กับ 'Y' ใช้หมุนเซอร์โวที่ข้อมือ (wrist) ของ end-effector

7) ปุ่ม 'J' กับ 'K' ใช้ควบคุมการเปิด-ปิดกรงเล็บ (jaw) ของ end-effector

8) ปุ่ม 'L' ใช้เปิด/ปิดไฟแฟลช LED ของกล้อง ESP32

เรื่องความปลอดภัย (Safety)

บางทีแขนหุ่นยนต์อาจจะควบคุมไม่อยู่ วิธีหนึ่งที่จะทำให้มันช้าลงคือ ไปปรับพารามิเตอร์ในบล็อกเซอร์โว (ใน target model) เพื่อจำกัดอัตราการเปลี่ยนแปลงของมุมแกนต่างๆ

ระวังให้ดี อย่าให้บาดเจ็บล่ะ เก็บให้ห่างจากเด็กๆ อย่างน้อยก็ในช่วงที่ยังทดลองพัฒนาอยู่นี่แหละ สู้งานนะน้อง

วิดีโอที่เกี่ยวข้อง (Related Video)

Our Mobile Arm Robot (2018 Model) having some time off with crackers

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

ข้อมูล Frontmatter ดั้งเดิม

apps:
  - "1x Computer Aided Simulation Program (CASP)"
author: "aadhuniklabs"
category: "Motors & Robotics"
components:
  - "1x Jumper wires (generic)"
  - "1x Jumper Wires"
  - "1x Arduino Nano RP2040 Connect"
  - "1x Robotic Arm Kit"
  - "1x Raspberry Pi Pico"
  - "1x 9V to 12V Battery"
  - "1x 12V to 6V Buck Converter"
  - "1x Robot Base Frame / Chassis"
  - "1x ESP32 Camera Module Development Board"
  - "1x VNH3ASP30 DC Motor Driver"
  - "1x DC Power Jack"
  - "4x Robot Wheels"
  - "4x Geared DC Motor, 12 V"
  - "5x High Torque Servo Motors"
description: "หุ่นยนต์สายช่างตัวนี้ใช้ Arduino Nano RP2040 หรือ Raspberry Pi Pico W เป็นสมอง ควบคุมผ่าน WiFi จาก PC ได้แบบไร้สาย ตึงๆ อยากให้มันไปหยิบอะไรที่ไหน ก็สั่งงานได้แบบเรียลไทม์ วัยรุ่นสายฮาร์ดแวร์ต้องจัดไป!"
difficulty: "Intermediate"
documentationLinks: []
downloadableFiles: []
encryptedPayload: "U2FsdGVkX1+DOwk+dKhTMBN/J31tK0WPx2hZ6ezDFcW5Nx/vIslqCY8tF1GceqXi2mvpxDtiM/2fkKz2ygA75JjCPnmasqI9qUZYMMsOKYcAeNAmy85qvP6CnaTAUPBw"
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/4-dof-mobile-arm-robot-with-on-board-camera-78fab3_cover.jpg"
lang: "en"
likes: 3
passwordHash: "667b7ccb654cf72b2cd2752fa7e8f5b58d98ac5b88ff5bf45cf47c01011cd844"
price: 2450
seoDescription: "Build a 4 DOF Mobile Arm Robot using Arduino Nano RP2040 or Raspberry Pi Pico W with WiFi control and on-board camera."
tags:
  - "robot arm"
  - "casp"
  - "mobility"
  - "robotics"
  - "remote control"
title: "หุ่นยนต์แขนกล 4 ข้อ ติดกล้อง วิ่งได้ งานง่ายแต่หล่อ!"
tools: []
videoLinks:
  - "https://www.youtube.com/embed/iE2HxXjoqeM"
  - "https://www.youtube.com/embed/NAmbrlq_hik"
views: 11696