
สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-23 15:12



ในเรื่องนี้ ผมจะมาเล่าถึงวิธีการสร้างหุ่นยนต์ติดตามลูกบอลที่เป็นหุ่นยนต์ที่จะระบุลูกบอลและติดตามมัน โดยพื้นฐานแล้วเป็นเทคนิคการเฝ้าระวังอัตโนมัติที่สามารถใช้ได้ในโลกสมัยใหม่ งั้นขอแค่ให้เรากระโดดเข้าไปแล้วเริ่มสร้าง…
หมายเหตุ: การมอบหมายชิ้นส่วนนี้ส่งไปยัง Deakin University, School of IT, SIT-210 Embedded Systems Development
เสบียง
www.hackster.io/junejarohan/ball-tracking-robot-7a9865
ขั้นตอนที่ 1: บทนำ

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



ส่วนประกอบฮาร์ดแวร์ที่ใช้:
- ราสเบอร์รี่ Pi (x1)
- โมดูลกล้อง Raspberry Pi (x1)
- อัลตราโซนิกเซนเซอร์ (x3)
- SparkFun Dual H-Bridge ตัวขับมอเตอร์ L298 (x1)
- มอเตอร์กระแสตรง (x1)
- เขียงหั่นขนม (x1)
- สายเชื่อมต่อ
ซอฟต์แวร์ที่ใช้:
OpenCV
เครื่องมือช่าง:
Python
ขั้นตอนที่ 3: จะทำอย่างไร?
ระบบเฝ้าระวังกลางแจ้งใดๆ จะต้องสามารถติดตามวัตถุที่เคลื่อนไหวในขอบเขตการมองเห็น จำแนกวัตถุเหล่านี้ และตรวจจับกิจกรรมบางอย่างของพวกมัน ฉันได้พัฒนาวิธีการติดตามและจำแนกวัตถุเหล่านี้ในสถานการณ์จริง การติดตามวัตถุในกล้องตัวเดียวดำเนินการโดยใช้การลบพื้นหลัง ตามด้วยการติดต่อตามภูมิภาค โดยพิจารณาจากสัญญาณชี้นำหลายอย่าง รวมถึงความเร็ว ขนาด และระยะทางของกรอบกั้นเขต
สิ่งสำคัญขณะตรวจจับภาพทีละเฟรมคือเพื่อหลีกเลี่ยงเฟรมใด ๆ ที่หล่นลงเนื่องจากบอทสามารถเข้าสู่สถานะลิมโบได้หากบอทไม่สังเกตทิศทางการเคลื่อนที่ของลูกบอลเนื่องจากการตกเฟรม หากลูกบอลออกนอกระยะกล้อง มันจะเข้าสู่สิ่งที่เราเรียกว่าลิมโบสเตท ซึ่งในกรณีนี้ บอทจะหมุน 360 องศาเพื่อดูพื้นที่รอบๆ จนกว่าลูกบอลจะกลับมาอยู่ในกรอบของ กล้องแล้วเริ่มเคลื่อนที่ไปในทิศทางนั้น
สำหรับการวิเคราะห์ภาพ ฉันกำลังถ่ายแต่ละเฟรมแล้วปิดบังด้วยสีที่ต้องการ จากนั้นฉันก็หารูปทรงทั้งหมดและหาที่ใหญ่ที่สุดในหมู่พวกเขาแล้วมัดเป็นรูปสี่เหลี่ยมผืนผ้า และแสดงสี่เหลี่ยมบนภาพหลักและค้นหาพิกัดของจุดศูนย์กลางของสี่เหลี่ยม
ในที่สุด บอทจะพยายามนำพิกัดของลูกบอลมาที่ศูนย์กลางของแกนพิกัดของมัน นี่คือการทำงานของหุ่นยนต์ สิ่งนี้สามารถปรับปรุงเพิ่มเติมได้โดยใช้อุปกรณ์ IoT เช่นอนุภาคโฟตอนซึ่งสามารถแจ้งให้คุณทราบเมื่อตรวจพบสิ่งและหุ่นยนต์กำลังติดตามหรือเมื่อหุ่นยนต์หลงทางและตอนนี้กำลังกลับสู่ฐาน.
เพื่อวัตถุประสงค์ในการประมวลผลภาพ คุณต้องติดตั้งซอฟต์แวร์ OpenCV บน raspberry pi ของคุณ ซึ่งค่อนข้างยุ่งยากสำหรับฉัน
คุณสามารถรับข้อมูลที่จำเป็นในการติดตั้ง OpenCV ผ่านลิงค์นี้: คลิกที่นี่
ขั้นตอนที่ 4: แผนผัง




ด้านบน ฉันได้จัดเตรียมแผนผังสำหรับโครงการของฉันและพร้อมกับเป็นแผ่นวงจรพิมพ์ (PCB)
และนี่คือการเชื่อมต่อหลักบางส่วนที่คุณต้องทำ:
• ก่อนอื่นโมดูลกล้อง Raspberry Pi เชื่อมต่อโดยตรงกับ Raspberry Pi
• เซ็นเซอร์อัลตราโซนิก VCC เชื่อมต่อกับเทอร์มินัลทั่วไปเช่นเดียวกับ GND (กราวด์) และพอร์ตที่เหลืออีกสองพอร์ตของเซ็นเซอร์อัลตราโซนิกเชื่อมต่อกับหมุด GPIO บน Raspberry Pi
• มอเตอร์เชื่อมต่อโดยใช้สะพาน H
• จ่ายไฟโดยใช้แบตเตอรี่
ฉันได้เพิ่มวิดีโอที่อาจช่วยให้เข้าใจการทำงานของเซ็นเซอร์อัลตราโซนิกและวิธีการทำงาน
และคุณสามารถไปตามลิงก์นี้หากคุณไม่พบวิดีโอด้านบน
ขั้นตอนที่ 5: ทำอย่างไร
ฉันทำโครงงานนี้โดยวาดภาพหุ่นยนต์พื้นฐานที่สามารถติดตามลูกบอลได้ หุ่นยนต์ใช้กล้องในการประมวลผลภาพโดยการถ่ายเฟรมและติดตามลูกบอล ใช้คุณสมบัติต่าง ๆ ในการติดตามลูกบอล เช่น สี ขนาด รูปทรง
หุ่นยนต์พบสีที่ฮาร์ดโค้ดแล้วค้นหาลูกบอลสีนั้นและติดตามมัน ฉันได้เลือก Raspberry Pi เป็นไมโครคอนโทรลเลอร์ในโครงการนี้เพราะช่วยให้เราใช้โมดูลกล้องและให้ความยืดหยุ่นอย่างมากในโค้ดเนื่องจากใช้ภาษาไพ ธ อนซึ่งเป็นมิตรกับผู้ใช้มากและยังช่วยให้เราใช้ไลบรารี OpenCV เพื่อวิเคราะห์ภาพ
มีการใช้สะพาน H เพื่อเปลี่ยนทิศทางการหมุนของมอเตอร์หรือหยุดมอเตอร์
สำหรับการวิเคราะห์ภาพ ฉันกำลังถ่ายแต่ละเฟรมแล้วปิดบังด้วยสีที่ต้องการ จากนั้นฉันก็หารูปทรงทั้งหมดและหาที่ใหญ่ที่สุดในหมู่พวกเขาแล้วมัดเป็นรูปสี่เหลี่ยมผืนผ้า และแสดงสี่เหลี่ยมบนภาพหลักและค้นหาพิกัดของจุดศูนย์กลางของสี่เหลี่ยม
ในที่สุด บอทจะพยายามนำพิกัดของลูกบอลมาที่ศูนย์กลางของแกนพิกัดของมัน นี่คือการทำงานของหุ่นยนต์ สิ่งนี้สามารถปรับปรุงเพิ่มเติมได้โดยใช้อุปกรณ์ IoT เช่น อนุภาคโฟตอน ซึ่งสามารถแจ้งให้คุณทราบเมื่อมีการตรวจพบสิ่งของและหุ่นยนต์กำลังติดตามหรือเมื่อหุ่นยนต์หลงทางและตอนนี้กำลังกลับสู่ฐาน. และในการทำเช่นนี้ เราจะใช้แพลตฟอร์มซอฟต์แวร์ออนไลน์ที่เชื่อมต่ออุปกรณ์ต่างๆ และช่วยให้พวกเขาดำเนินการบางอย่างกับทริกเกอร์เฉพาะที่เป็นทริกเกอร์ IFTTT
ขั้นตอนที่ 6: รหัสหลอก

นี่คือรหัสหลอกสำหรับส่วนการตรวจจับโดยใช้ OpenCV ที่เราตรวจจับลูกบอล
ขั้นตอนที่ 7: รหัส




ด้านบนคือตัวอย่างโค้ด และด้านล่างคือคำอธิบายโดยละเอียดของโค้ด
#นำเข้าแพ็คเกจที่จำเป็น
เรานำเข้าแพ็คเกจที่จำเป็นทั้งหมด
จาก picamera.array นำเข้า PiRGBArray #เนื่องจากมีปัญหาความละเอียดใน raspberry pi จะไม่สามารถจับภาพเฟรมด้วย VideoCapture
จาก picamera นำเข้า PiCamera นำเข้า RPi. GPIO เป็น GPIO นำเข้าเวลานำเข้า numpy เป็น np
ตอนนี้เราตั้งค่าฮาร์ดแวร์และกำหนด PIN ที่เชื่อมต่อกับ RASPBERRY PI
GPIO.setmode(GPIO.บอร์ด)
GPIO_TRIGGER1 = 29 #ซ้ายเซ็นเซอร์อัลตราโซนิก
GPIO_ECHO1 = 31
GPIO_TRIGGER2 = 36 #เซ็นเซอร์อัลตราโซนิกด้านหน้า
GPIO_ECHO2 = 37
GPIO_TRIGGER3 = 33 #ขวาเซ็นเซอร์อัลตราโซนิก
GPIO_ECHO3 = 35
MOTOR1B=18 #มอเตอร์ซ้าย
MOTOR1E=22
MOTOR2B=21 #มอเตอร์ขวา
MOTOR2E=19
LED_PIN=13 #ถ้าเจอบอลก็จะไฟled
# ตั้งพินเป็นเอาต์พุตและอินพุต
GPIO.setup (GPIO_TRIGGER1, GPIO. OUT) # Trigger GPIO.setup (GPIO_ECHO1, GPIO. IN) # Echo GPIO.setup (GPIO_TRIGGER2, GPIO. OUT) # ทริกเกอร์ GPIO.setup (GPIO_ECHO2, GPIO. IN) GPIO.setup (GPIO_TRIGGER3, GPIO. OUT) # ทริกเกอร์ GPIO.setup (GPIO_ECHO3, GPIO. IN) GPIO.setup (LED_PIN, GPIO. OUT)
# ตั้งค่าทริกเกอร์เป็นเท็จ (ต่ำ)
GPIO.output(GPIO_TRIGGER1, เท็จ) GPIO.output(GPIO_TRIGGER2, เท็จ) GPIO.output(GPIO_TRIGGER3, เท็จ)
ฟังก์ชันนี้ใช้เซ็นเซอร์อัลตราโซนิกทั้งหมดที่รวบรวมระยะทางจากวัตถุรอบ ๆ BOT ของเรา
# อนุญาตให้โมดูลที่จะชำระ
def โซนาร์ (GPIO_TRIGGER, GPIO_ECHO): start=0 stop=0 # ตั้งพินเป็นเอาต์พุตและอินพุต GPIO.setup (GPIO_TRIGGER, GPIO. OUT) # ทริกเกอร์ GPIO.setup (GPIO_ECHO, GPIO. IN) # Echo # ตั้งค่าทริกเกอร์เป็นเท็จ (ต่ำ) GPIO.output (GPIO_TRIGGER, เท็จ) # อนุญาตให้โมดูลชำระ time.sleep (0.01) # ในขณะที่ระยะทาง > 5: # ส่งพัลส์ 10us เพื่อเรียก GPIO.output (GPIO_TRIGGER, True) time.sleep (0.00001) GPIO เอาต์พุต (GPIO_TRIGGER, เท็จ) เริ่มต้น = time.time() ในขณะที่ GPIO.input(GPIO_ECHO)==0 และ time.time()
ทำให้ DC MOTORS ทำงานร่วมกับ RASPBERRY PI
GPIO.setup (MOTOR1B, GPIO.ออก)
GPIO.setup (MOTOR1E, GPIO.ออก)
GPIO.setup (MOTOR2B, GPIO. OUT) GPIO.setup (MOTOR2E, GPIO. OUT)
การกำหนดฟังก์ชันในการใช้งานหุ่นยนต์และทำให้เคลื่อนที่ไปในทิศทางที่แตกต่างกัน
def ไปข้างหน้า ():
GPIO.output(MOTOR1B, GPIO.สูง) GPIO.output(MOTOR1E, GPIO. LOW) GPIO.output(MOTOR2B, GPIO.สูง) GPIO.output(MOTOR2E, GPIO. LOW) def ย้อนกลับ (): GPIO.output (MOTOR1B), GPIO. LOW) GPIO.output(MOTOR1E, GPIO. HIGH) GPIO.output(MOTOR2B, GPIO. LOW) GPIO.output(MOTOR2E, GPIO. HIGH) def rightturn(): GPIO.output(MOTOR1B, GPIO. LOW) GPIO.output(MOTOR1E, GPIO.สูง) GPIO.output(MOTOR2B, GPIO.สูง) GPIO.output(MOTOR2E, GPIO. LOW) def leftturn(): GPIO.output(MOTOR1B, GPIO. HIGH) GPIO.output(MOTOR1E), GPIO. LOW) GPIO.output(MOTOR2B, GPIO. LOW) GPIO.output(MOTOR2E, GPIO.สูง)
def หยุด ():
GPIO.output(MOTOR1E, GPIO. LOW) GPIO.output(MOTOR1B, GPIO. LOW) GPIO.output(MOTOR2E, GPIO. LOW) GPIO.เอาท์พุท(MOTOR2B, GPIO. LOW)
ทำให้โมดูลกล้องทำงานและปรับการตั้งค่า
#กล้องจับภาพ
#initialize กล้องและคว้าการอ้างอิงถึงกล้องจับกล้องดิบ = PiCamera() กล้องความละเอียด = (160, 120) กล้อง. เฟรมเรต = 16 rawCapture = PiRGBArray (กล้อง, ขนาด = (160, 120)) # อนุญาตกล้อง เพื่อวอร์มอัพ time.sleep(0.001)
ตอนนี้ใช้สิ่งสำคัญที่บอทติดตามลูกบอลและหลีกเลี่ยงอุปสรรคใด ๆ
ในขณะที่ (1<10): { #ระยะทางที่มาจากระยะเซ็นเซอร์อัลตราโซนิกด้านหน้าC = โซนาร์ (GPIO_TRIGGER2, GPIO_ECHO2) #ระยะทางที่มาจากระยะเซ็นเซอร์อัลตราโซนิกขวาR = โซนาร์ (GPIO_TRIGGER3, GPIO_ECHO3) #ระยะทางที่มาจากระยะเซ็นเซอร์อัลตราโซนิกซ้าย L = โซนาร์ (GPIO_TRIGGER1, GPIO_ECHO1) if(distanceC=8: rightturn() time.sleep(0.00625) stop() time.sleep(0.0125) forward() time.sleep(0.00625) stop() time.sleep(0.0125) #while found== 0: leftturn() time.sleep(0.00625) elif distanceL>=8: leftturn() time.sleep(0.00625) stop() time.sleep(0.0125) forward() time.sleep(0.00625) stop() time.sleep (0.0125) rightturn() time.sleep(0.00625) stop() time.sleep(0.0125) else: stop() time.sleep(0.01) อื่น: #otherwise มันเคลื่อนไปข้างหน้า () time.sleep(0.00625) if(DistanceC>10): #มันนำพิกัดของลูกบอลมาที่กึ่งกลางแกนจินตภาพของกล้อง if(centre_x=20): if(centre_x0): flag=1 leftturn() time.sleep(0.025) forward() time.sleep(0.00003125) stop() time.sleep(0.00625) อื่น: stop() time.sleep(0.01)
อื่น:
#ถ้าพบลูกบอลและอยู่ใกล้เกินไป ไฟ LED จะสว่างขึ้น GPIO.output(LED_PIN, GPIO. HIGH) time.sleep(0.1) stop() time.sleep(0.1) #cv2.imshow("draw", frame) rawCapture.truncate(0) # clear the stream in prepare for the เฟรมถัดไป }
ทำความสะอาดที่จำเป็น
GPIO.cleanup() #free หมุด GPIO ทั้งหมด
ขั้นตอนที่ 8: ลิงก์ภายนอก

ลิงก์ไปยังวิดีโอสาธิต: คลิกที่นี่ (Youtube)
ลิงก์ไปยังโค้ดบน Git-hub: คลิกที่นี่ (Git-Hub)
แนะนำ:
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: 5 ขั้นตอน

การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: การตวัดเป็นวิธีง่ายๆ ในการสร้างเกม โดยเฉพาะอย่างยิ่งเกมปริศนา นิยายภาพ หรือเกมผจญภัย
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: 3 ขั้นตอน

การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: ในคำแนะนำนี้ เราจะทำการตรวจจับใบหน้าบน Raspberry Pi 4 ด้วย Shunya O/S โดยใช้ Shunyaface Library Shunyaface เป็นห้องสมุดจดจำใบหน้า/ตรวจจับใบหน้า โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อให้เกิดความเร็วในการตรวจจับและจดจำได้เร็วที่สุดด้วย
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: 3 ขั้นตอน

วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: ในบทช่วยสอนนี้ ฉันจะแสดงขั้นตอนสำคัญในการติดตั้งปลั๊กอิน WordPress ให้กับเว็บไซต์ของคุณ โดยทั่วไป คุณสามารถติดตั้งปลั๊กอินได้สองวิธี วิธีแรกคือผ่าน ftp หรือผ่าน cpanel แต่ฉันจะไม่แสดงมันเพราะมันสอดคล้องกับ
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): 8 ขั้นตอน

การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): ตัวแปลงสัญญาณเสียงล้ำเสียง L298N Dc ตัวเมียอะแดปเตอร์จ่ายไฟพร้อมขา DC ตัวผู้ Arduino UNOBreadboardวิธีการทำงาน: ก่อนอื่น คุณอัปโหลดรหัสไปยัง Arduino Uno (เป็นไมโครคอนโทรลเลอร์ที่ติดตั้งดิจิตอล และพอร์ตแอนะล็อกเพื่อแปลงรหัส (C++)
เครื่อง Rube Goldberg 11 ขั้นตอน: 8 ขั้นตอน

เครื่อง 11 Step Rube Goldberg: โครงการนี้เป็นเครื่อง 11 Step Rube Goldberg ซึ่งออกแบบมาเพื่อสร้างงานง่ายๆ ในรูปแบบที่ซับซ้อน งานของโครงการนี้คือการจับสบู่ก้อนหนึ่ง