- ฮาร์ดแวร์ที่ต้องการ:
- ข้อกำหนดการเขียนโปรแกรม:
- การตั้งค่าการประมวลผล 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 ของคุณเพื่อตรวจสอบและเปิดใช้รหัสประมวลผล คุณควรเห็นฟีดวิดีโอบนหน้าต่างเล็ก ๆ ตอนนี้ให้นำลูกบอลเข้าไปในเฟรมและคลิกที่ลูกบอลเพื่อสอนหุ่นยนต์ว่าควรติดตามสีนี้โดยเฉพาะ ตอนนี้เลื่อนลูกบอลไปรอบ ๆ หน้าจอและคุณควรสังเกตว่าล้อหมุน
หากทุกอย่างเป็นไปตามที่คาดไว้ให้ปล่อยบอทลงที่พื้นแล้วเริ่มเล่นกับมัน ตรวจสอบให้แน่ใจว่าห้องสว่างสม่ำเสมอ เพื่อผลลัพธ์ที่ดีที่สุด การทำงานที่สมบูรณ์แบบของโครงการจะแสดงใน วิดีโอด้านล่างหวังว่าคุณจะเข้าใจโครงการและสนุกกับการสร้างสิ่งที่คล้ายกัน หากคุณมีปัญหาใด ๆ อย่าลังเลที่จะโพสต์ไว้ในส่วนความคิดเห็นด้านล่างหรือความช่วยเหลือ