- ฮาร์ดแวร์ที่ต้องการ:
- ข้อกำหนดการเขียนโปรแกรม:
- การตั้งค่าการประมวลผล Raspberry Pi:
- แผนภูมิวงจรรวม:
- โปรแกรมติดตาม Raspberry Pi Ball:
- การทำงานของหุ่นยนต์ติดตาม Raspberry Pi Ball:
สาขาวิทยาการหุ่นยนต์ปัญญาประดิษฐ์และการเรียนรู้ของเครื่องมีการพัฒนาอย่างรวดเร็วซึ่งแน่นอนว่าจะเปลี่ยนแปลงวิถีชีวิตของมนุษยชาติในอนาคตอันใกล้นี้ หุ่นยนต์คิดว่าจะเข้าใจและโต้ตอบกับโลกแห่งความจริงผ่านเซ็นเซอร์และการประมวลผลการเรียนรู้ของเครื่อง การจดจำภาพเป็นวิธีหนึ่งที่ได้รับความนิยมซึ่งคิดว่าหุ่นยนต์จะเข้าใจวัตถุโดยการมองโลกแห่งความเป็นจริงผ่านกล้องเหมือนกับที่เราทำ ในโครงการนี้ให้ใช้พลังของRaspberry Pi เพื่อสร้างหุ่นยนต์ที่สามารถติดตามบอลและทำตามได้เหมือนกับหุ่นยนต์ที่เล่นฟุตบอล
OpenCV เป็นเครื่องมือโอเพ่นซอร์สที่มีชื่อเสียงมากซึ่งใช้สำหรับการประมวลผลภาพ แต่ในบทช่วยสอนนี้เพื่อให้ง่ายขึ้นเราใช้การประมวลผล IDE เนื่องจากการประมวลผลสำหรับ ARM ได้เปิดตัวไลบรารี GPIO สำหรับการประมวลผลเราจะไม่ต้องเปลี่ยนระหว่าง python และการประมวลผลอีกต่อไปเพื่อทำงานกับ Raspberry Pi ฟังดูดีใช่มั้ย? มาเริ่มกันเลย
ฮาร์ดแวร์ที่ต้องการ:
- ราสเบอร์รี่ Pi
- โมดูลกล้องพร้อมสายริบบิ้น
- แชสซีหุ่นยนต์
- มอเตอร์เกียร์พร้อมล้อ
- ไดรเวอร์มอเตอร์ L293D
- แบตสำรองหรือแหล่งจ่ายไฟแบบพกพาอื่น ๆ
ข้อกำหนดการเขียนโปรแกรม:
- จอภาพหรือจอแสดงผลอื่น ๆ สำหรับ Raspberry pi
- คีบอร์ดหรือเมาส์สำหรับ Pi
- การประมวลผลซอฟต์แวร์ ARM
หมายเหตุ: จำเป็นต้องมีการเชื่อมต่อจอแสดงผลกับ Pi ผ่านสายระหว่างการเขียนโปรแกรมเพราะจะสามารถดูวิดีโอของกล้องได้เท่านั้น
การตั้งค่าการประมวลผล Raspberry Pi:
อย่างที่บอกไปก่อนหน้านี้เราจะใช้สภาพแวดล้อมการประมวลผลเพื่อตั้งโปรแกรม Raspberry Pi ของเราไม่ใช่วิธีเริ่มต้นในการใช้ python ทำตามขั้นตอนด้านล่าง:
ขั้นตอนที่ 1: - เชื่อมต่อ Raspberry Pi ของคุณเข้ากับจอภาพแป้นพิมพ์และเมาส์แล้วเปิดเครื่อง
ขั้นตอนที่ 2: - ตรวจสอบให้แน่ใจว่า Pi ของคุณเชื่อมต่อกับการเชื่อมต่ออินเทอร์เน็ตที่ใช้งานได้เพราะเรากำลังจะดาวน์โหลดบางสิ่ง
ขั้นตอนที่ 3: -คลิกที่ Processing ARM เพื่อดาวน์โหลด IDE การประมวลผลสำหรับ Raspberry Pi การดาวน์โหลดจะอยู่ในรูปแบบของไฟล์ ZIP
ขั้นตอนที่ 4: -เมื่อดาวน์โหลดแล้วให้แตกไฟล์ในโฟลเดอร์ ZIP ของคุณในไดเร็กทอรีที่คุณต้องการ ฉันเพิ่งแตกไฟล์บนเดสก์ท็อปของฉัน
ขั้นตอนที่ 5: -ตอนนี้เปิดโฟลเดอร์ที่แยกออกมาแล้วคลิกที่ไฟล์ชื่อการประมวลผล ควรเปิดหน้าต่างดังที่แสดงด้านล่าง
![]()
ขั้นตอนที่ 6: -นี่คือสภาพแวดล้อมที่เราจะพิมพ์รหัสของเรา สำหรับคนที่คุ้นเคยกับ Arduino อย่าเพิ่งตกใจใช่ IDE มีลักษณะคล้ายกับ Arduino และโปรแกรมก็เช่นกัน
ขั้นตอนที่ 7: -เราจำเป็นต้องมีสองห้องสมุดสำหรับลูกโปรแกรมของเราในการทำงานต่อไปนี้ในการติดตั้งแล้วเพียงแค่คลิกที่ ภาพร่าง -> ห้องสมุดนำเข้า -> เพิ่มห้องสมุด กล่องโต้ตอบต่อไปนี้จะเปิดขึ้น
![]()
ขั้นตอนที่ 8: -ใช้กล่องข้อความด้านซ้ายบนเพื่อค้นหา Raspberry Pi และกด Enter ผลการค้นหาควรมีลักษณะดังนี้
![]()
ขั้นตอนที่ 9: -ค้นหาไลบรารีชื่อ“ GL Video” และ“ Hardware I / O” แล้วคลิกติดตั้งเพื่อติดตั้ง ตรวจสอบให้แน่ใจว่าคุณติดตั้งทั้งไลบรารี
ขั้นตอนที่ 10: -ตามอินเทอร์เน็ตของคุณการติดตั้งจะใช้เวลาไม่กี่นาที เมื่อเสร็จแล้วเราก็พร้อมสำหรับการประมวลผลซอฟต์แวร์
แผนภูมิวงจรรวม:
แผนภาพวงจรของโครงการติดตาม Raspberry Pi Ballแสดงไว้ด้านล่าง
![]()
อย่างที่คุณเห็นวงจรเกี่ยวข้องกับกล้อง PIโมดูล Motor Driver และมอเตอร์คู่หนึ่งที่เชื่อมต่อกับ Raspberry pi วงจรทั้งหมดใช้พลังงานจาก Mobile Power bank (แสดงโดยแบตเตอรี่ AAA ในวงจรด้านบน)
เนื่องจากรายละเอียดพินไม่ได้ระบุไว้ใน Raspberry Pi เราจึงต้องตรวจสอบพินโดยใช้รูปภาพด้านล่าง
ในการขับเคลื่อนมอเตอร์ เราต้องมีหมุดสี่ตัว (A, B, A, B) สี่พินนี้เชื่อมต่อจาก GPIO14,4,17 และ 18 ตามลำดับ สายสีส้มและสีขาวเข้าด้วยกันเป็นการเชื่อมต่อสำหรับมอเตอร์หนึ่งตัว เราจึงมีสองคู่สำหรับมอเตอร์สองตัว
มอเตอร์จะเชื่อมต่อกับ ไดร์เวอร์ L293D มอเตอร์ โมดูลดังแสดงในภาพและโมดูลขับถูกขับเคลื่อนโดย ธนาคารอำนาจตรวจสอบให้แน่ใจว่าสายดินของธนาคารพลังงานเชื่อมต่อกับกราวด์ Raspberry Pi จากนั้นการเชื่อมต่อของคุณจะทำงานได้
เพียงเท่านี้เราก็เชื่อมต่อฮาร์ดแวร์เสร็จแล้วกลับไปที่สภาพแวดล้อมการประมวลผลของเราและเริ่มการเขียนโปรแกรมเพื่อสอนหุ่นยนต์ของเราเกี่ยวกับวิธีการติดตามลูกบอล
![]()
โปรแกรมติดตาม Raspberry Pi Ball:
โปรแกรมการประมวลผลที่สมบูรณ์แบบของโครงการนี้จะได้รับในตอนท้ายของหน้านี้ซึ่งคุณใช้โดยตรง เพิ่มเติมด้านล่างนี้ฉันได้อธิบายการทำงานของโค้ดเพื่อให้คุณสามารถใช้สำหรับโครงการอื่นที่คล้ายคลึงกันได้
แนวคิดโปรแกรมเป็นเรื่องง่ายมาก แม้ว่าความตั้งใจของโครงการคือการติดตามบอล แต่จริงๆแล้วเราจะไม่ทำ เรากำลังจะระบุลูกบอลโดยใช้สีของมัน อย่างที่เราทราบกันดีว่าวิดีโอไม่ใช่อะไรนอกจากเฟรมภาพต่อเนื่อง เราจึงนำภาพแต่ละภาพมาแยกเป็นพิกเซล จากนั้นเราจะเปรียบเทียบสีพิกเซลแต่ละสีกับสีของลูกบอล หากพบการแข่งขันเราสามารถพูดได้ว่าเราพบลูกบอลแล้ว ด้วยข้อมูลนี้เรายังสามารถระบุตำแหน่งของลูกบอล (สีพิกเซล) บนหน้าจอได้ หากตำแหน่งอยู่ทางซ้ายสุดเราจะเลื่อนหุ่นยนต์ไปทางขวาถ้าตำแหน่งนั้นอยู่ทางขวาสุดเราจะเลื่อนหุ่นยนต์ไปทางซ้ายเพื่อให้ตำแหน่งพิกเซลอยู่ตรงกลางหน้าจอเสมอ คุณสามารถดูวิดีโอ Computer Vision ของ Daniel shiffman เพื่อให้ได้ภาพที่ชัดเจน
เช่นเคยเราเริ่มต้นด้วยการนำเข้าสองไลบรารีที่เราดาวน์โหลด สามารถทำได้โดยสองบรรทัดต่อไปนี้ ไลบรารีฮาร์ดแวร์ I / O ใช้เพื่อเข้าถึงพิน GPIO ของ PI โดยตรงจากสภาพแวดล้อมการประมวลผลไลบรารี glvideo ใช้เพื่อเข้าถึงโมดูลกล้อง Raspberry Pi
นำเข้า processing.io. *; นำเข้า gohai.glvideo. *;
ภายในฟังก์ชั่น การตั้งค่า เราจะเริ่มต้นพินเอาต์พุตเพื่อควบคุมมอเตอร์และรับวิดีโอจากกล้อง piและปรับขนาดในหน้าต่างขนาด 320 * 240
การตั้งค่าเป็นโมฆะ () {ขนาด (320, 240, P2D); วิดีโอ = GLCapture ใหม่ (สิ่งนี้); video.start (); trackColor = สี (255, 0, 0); GPIO.pinMode (4, GPIO.OUTPUT); GPIO.pinMode (14, GPIO.OUTPUT); GPIO.pinMode (17, GPIO.OUTPUT); GPIO.pinMode (18, GPIO.OUTPUT); }
การ วาดโมฆะ เปรียบเสมือนการวนซ้ำที่ไม่มีที่สิ้นสุดรหัสภายในลูปนี้จะถูกดำเนินการตราบเท่าที่โปรแกรมสิ้นสุดลง หากมีแหล่งที่มาของกล้องเราจะอ่านวิดีโอที่ออกมา
วาดโมฆะ () {พื้นหลัง (0); ถ้า (video.available ()) {video.read (); }}
จากนั้นเราก็เริ่มที่จะแยกเฟรมวิดีโอลงในพิกเซลแต่ละพิกเซลมีค่าเป็นสีแดงเขียวและน้ำเงิน ค่าเหล่านี้ถูกเก็บไว้ในตัวแปร r1, g1 และ b1
สำหรับ (int x = 0; x <video.width; x ++) {สำหรับ (int y = 0; y <video.height; y ++) {int loc = x + y * video.width; // สีปัจจุบันคืออะไร currentColor = video.pixels; ลอย r1 = สีแดง (currentColor); ลอย g1 = สีเขียว (currentColor); ลอย b1 = สีน้ำเงิน (currentColor);
ในการตรวจจับสีของลูกบอลในเบื้องต้นเราต้องคลิกที่สี เมื่อคลิกสีของลูกบอลจะถูกเก็บไว้ในตัวแปรที่เรียกว่าtrackColour
เป็นโมฆะ mousePressed () {// บันทึกสีที่เมาส์ถูกคลิกในตัวแปร trackColor int loc = mouseX + mouseY * video.width; trackColor = video.pixels; }
เมื่อเรามีสีของแทร็กและสีปัจจุบันแล้วเราต้องเปรียบเทียบกัน การเปรียบเทียบนี้ใช้ฟังก์ชัน dist ตรวจสอบว่าสีปัจจุบันใกล้เคียงกับสีแทร็กแค่ไหน
ลอย d = dist (r1, g1, b1, r2, g2, b2);
มูลค่าของอ. จะเป็นศูนย์สำหรับการแข่งขันที่แน่นอน ดังนั้นหากค่าของ dist น้อยกว่าค่าที่ระบุ (สถิติโลก) เราจะถือว่าเราพบสีแทร็ก จากนั้นเราจะได้ตำแหน่งของพิกเซลนั้นและเก็บไว้ในตัวแปรที่ใกล้เคียงที่สุด X และ Y ที่ใกล้เคียงที่สุดเพื่อค้นหาตำแหน่งของลูกบอล
ถ้า (d <worldRecord) {worldRecord = d; ใกล้เคียงที่สุด X = x; ใกล้เคียงที่สุดY = y; }
เรายังวาดวงรีรอบ ๆ สีที่พบเพื่อระบุว่าพบสีแล้ว ค่าของตำแหน่งจะถูกพิมพ์ลงบนคอนโซลด้วยซึ่งจะช่วยได้มากในขณะที่ดีบัก
ถ้า (worldRecord <10) {// วาดวงกลมที่การเติมพิกเซลที่ติดตาม (trackColor); จังหวะน้ำหนัก (4.0); โรคหลอดเลือดสมอง (0); วงรี (closestX, ใกล้ที่สุดY, 16, 16); println (closestX, ใกล้เคียงที่สุดY);
ในที่สุดเราก็สามารถเปรียบเทียบตำแหน่งของ X ที่ใกล้ที่สุดและ Y ที่ใกล้ที่สุดและปรับมอเตอร์ในลักษณะที่สีเข้ามาที่กึ่งกลางของหน้าจอ รหัสด้านล่างนี้ใช้เพื่อหมุนหุ่นยนต์ไปทางขวาเนื่องจากพบว่าตำแหน่ง X ของสีอยู่ที่ด้านซ้ายของหน้าจอ (<140)
ถ้า (closestX <140) {GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO สูง); GPIO.digitalWrite (17, GPIO สูง); GPIO.digitalWrite (18, GPIO.LOW); ล่าช้า (10); GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO สูง); GPIO.digitalWrite (17, GPIO สูง); GPIO.digitalWrite (18, GPIO สูง); println ("เลี้ยวขวา"); }
ในทำนองเดียวกันเราสามารถตรวจสอบตำแหน่งของ X และ Y เพื่อควบคุมมอเตอร์ในทิศทางที่ต้องการ เช่นเคยคุณสามารถอ้างอิงด้านล่างของหน้าสำหรับโปรแกรมทั้งหมด
การทำงานของหุ่นยนต์ติดตาม Raspberry Pi Ball:
เมื่อคุณพร้อมกับฮาร์ดแวร์และโปรแกรมแล้วก็ถึงเวลาสนุกกันแล้ว ก่อนที่เราจะทดสอบบอทภาคพื้นดินเราควรตรวจสอบให้แน่ใจว่าทุกอย่างทำงานได้ดี เชื่อมต่อ Pi ของคุณเพื่อตรวจสอบและเปิดใช้รหัสประมวลผล คุณควรเห็นฟีดวิดีโอบนหน้าต่างเล็ก ๆ ตอนนี้ให้นำลูกบอลเข้าไปในเฟรมและคลิกที่ลูกบอลเพื่อสอนหุ่นยนต์ว่าควรติดตามสีนี้โดยเฉพาะ ตอนนี้เลื่อนลูกบอลไปรอบ ๆ หน้าจอและคุณควรสังเกตว่าล้อหมุน
![]()
![]()
หากทุกอย่างเป็นไปตามที่คาดไว้ให้ปล่อยบอทลงที่พื้นแล้วเริ่มเล่นกับมัน ตรวจสอบให้แน่ใจว่าห้องสว่างสม่ำเสมอ เพื่อผลลัพธ์ที่ดีที่สุด การทำงานที่สมบูรณ์แบบของโครงการจะแสดงใน วิดีโอด้านล่างหวังว่าคุณจะเข้าใจโครงการและสนุกกับการสร้างสิ่งที่คล้ายกัน หากคุณมีปัญหาใด ๆ อย่าลังเลที่จะโพสต์ไว้ในส่วนความคิดเห็นด้านล่างหรือความช่วยเหลือ
