תוכן עניינים:

Raspberry Pi - רובר מאדים אוטונומי עם מעקב אחר אובייקטים של OpenCV: 7 שלבים (עם תמונות)
Raspberry Pi - רובר מאדים אוטונומי עם מעקב אחר אובייקטים של OpenCV: 7 שלבים (עם תמונות)

וִידֵאוֹ: Raspberry Pi - רובר מאדים אוטונומי עם מעקב אחר אובייקטים של OpenCV: 7 שלבים (עם תמונות)

וִידֵאוֹ: Raspberry Pi - רובר מאדים אוטונומי עם מעקב אחר אובייקטים של OpenCV: 7 שלבים (עם תמונות)
וִידֵאוֹ: НЛО В АВСТРАЛИИ (Плюс сообщения об НЛО, преследующих машины) Бен Хёрл 2024, נוֹבֶמבֶּר
Anonim
Raspberry Pi - רובר מאדים אוטונומי עם מעקב אחר אובייקטים של OpenCV
Raspberry Pi - רובר מאדים אוטונומי עם מעקב אחר אובייקטים של OpenCV

מופעל על ידי Raspberry Pi 3, זיהוי אובייקט CV פתוח, חיישנים אולטראסוניים ומנועי DC מכוונים. רובר זה יכול לעקוב אחר כל אובייקט שאליו הוא מאומן ולנוע בכל שטח.

שלב 1: מבוא

Image
Image
חומרים ותוכנה נדרשים
חומרים ותוכנה נדרשים

במדריך זה אנו הולכים לבנות מארס רובר אוטונומי שיכול לזהות אובייקטים ולעקוב אחריהם באמצעות תוכנת Open CV הפועלת ב- Raspberry Pi 3 עם אופציה לשימוש במכשיר מצלמת אינטרנט או במצלמת הפטל המקורית של פטל. הוא מצויד גם בחיישן אולטרסאונד המותקן על סרוו כדי לעקוב אחר דרכו בסביבות חשוכות שבהן המצלמה לא תפעל. אותות המתקבלים מפי נשלחים אל נהג המנוע IC (L293D) המניע 4 x 150 סל ד מנועי DC המותקנים על גוף בנוי עם צינורות PVC.

שלב 2: חומרים ותוכנה נדרשים

חומרים ותוכנה נדרשים
חומרים ותוכנה נדרשים
חומרים ותוכנה נדרשים
חומרים ותוכנה נדרשים

חומרים דרושים

  1. פטל פאי (כל אבל אפס)
  2. מצלמת פטל PI או מצלמת רשת
  3. נהג מנוע L293D IC
  4. גלגלי רובוט (7x4 ס"מ) X 4
  5. מנועי DC ממונעים (150 סל"ד) X 4
  6. צינורות PVC לשלדה

נדרשת תוכנה

  1. מרק ל SSH ing the Pi
  2. פתח קורות חיים לזיהוי אובייקטים

שלב 3: בניית מארז הרובר

בניית מארז רובר
בניית מארז רובר
בניית מארז רובר
בניית מארז רובר
בניית מארז רובר
בניית מארז רובר

כדי לבנות את מארז ה- PVC הזה, תזדקק

  • 2 X 8"
  • 2 X 4"
  • 4 מפרקי T

מסדרים את צינורות ה- PVC במבנה דמוי סולם ומכניסים למפרקי T. אתה יכול להשתמש באיטום PVC כדי להפוך את המפרקים לחזקים עוד יותר.

מנועי ה- DC המיועדים מחוברים לשלדת צינור ה- PVC באמצעות מהדקים ולאחר מכן מחוברים גלגלים למנועים באמצעות ברגים.

שלב 4: בניית מכלול מד טווח קולי

בניית מכלול מד טווח קולי
בניית מכלול מד טווח קולי

מכלול מאתר הטווח הקולי בנוי באמצעות חיישן אולטרסאונד HC-SR04 המחובר עם מנוע מיקרו סרוו. הכבלים מחוברים מראש לחיישן האולטרסאונד לפני הכנסתם למארז הפלסטיק המחובר למנוע הסרוו באמצעות ברגים.

שלב 5: סכמטים וחיבורים חשמליים

סכמטים וחיבורי חשמל
סכמטים וחיבורי חשמל
סכמטים וחיבורי חשמל
סכמטים וחיבורי חשמל

אנא בצע את החיבורים החשמליים לפי תרשים המעגל המצורף.

שלב 6: התקנת SSH ופתוח קורות חיים

SSH והתקנת קורות חיים פתוחים
SSH והתקנת קורות חיים פתוחים

כעת, עלינו להיכנס ל- SSH לתוך פטל הפטל שלנו כדי להתקין את התוכנה הנדרשת. נתחיל ב- SSHing ל- Raspberry Pi שלנו. ודא שה- Pi שלך מחובר לאותו נתב כמו המחשב האישי שלך ואתה יודע שזו כתובת ה- IP שהוקצה לו על ידי הנתב שלך. כעת, פתח שורת פקודה או PUTTY אם אתה נמצא ב- Windows והפעל את הפקודה הבאה.

ssh [email protected]

ה- IP של ה- Pi שלך עשוי להיות שונה, שלי הוא 192.168.1.6.

כעת, הזן את סיסמת ברירת המחדל שלך - "פטל"

כעת, לאחר שיש לך SSH ל- Pi שלך, נתחיל בעדכון באמצעות פקודה זו.

sudo apt-get update && sudo apt-get upgrade

בואו להתקין את כלי הפיתוח הנדרשים כעת, sudo apt-get install build-essential cmake pkg-config

לאחר מכן, עלינו להתקין כמה חבילות I/O תמונה שיעזרו ל- Pi שלנו להביא פורמטים שונים של תמונות מהדיסק.

sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev

כעת, כמה חבילות לאחזור וידאו, סטרימינג חי ואופטימיזציה של ביצועי OpenCV

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

sudo apt-get install libxvidcore-dev libx264-dev

sudo apt-get install libgtk2.0-dev libgtk-3-dev

sudo apt-get install libatlas-base-dev gfortran

עלינו גם להתקין קבצי כותרות של Python 2.7 ו- Python 3 כדי שנוכל לאסוף OpenCV עם איגודי פיתון

sudo apt-get להתקין python2.7-dev python3-dev

הורדת קוד המקור של OpenCV

תקליטור ~

wget -O opencv.zip

לפתוח opencv.zip

מוריד את מאגר opencv_contrib

wget -O opencv_contrib.zip

לפתוח opencv_contrib.zip

כמו כן, מומלץ להשתמש בסביבה וירטואלית להתקנת OpenCV.

sudo pip התקן virtualenv virtualenvwrapper

sudo rm -rf ~/.cache/pip

כעת, לאחר שהותקנו virtualenv ו- virtualenvwrapper, עלינו לעדכן את ~/.profile שלנו כך שיכלול את השורות הבאות בתחתית

ייצוא WORKON_HOME = $ HOME/.virtualenvs ייצוא VIRTUALENVWRAPPER_PYTHON =/usr/bin/python3 source /usr/local/bin/virtualenvwrapper.sh

צור את הסביבה הווירטואלית של פייתון

mkvirtualenv cv -p python2

לעבור לסביבה הווירטואלית שנוצרה

מקור ~/.profile

workon cv

התקנת NumPy

pip להתקין numpy

הידור והתקן את OpenCV

cd ~/opencv-3.3.0/

mkdir build

בניית תקליטורים

cmake -D CMAKE_BUILD_TYPE = RELEASE / -D CMAKE_INSTALL_PREFIX =/usr/local / -D INSTALL_PYTHON_EXAMPLES = ON / -D OPENCV_EXTRA_MODULES_PATH = ~/opencv_contrib -3.3.0/modules_ -DPLES..

לבסוף הידור OpenCV

לעשות -j4

לאחר פקודה זו מסיימת לפעול. כל שעליך לעשות הוא להתקין אותו.

sudo לעשות תצורה

sudo ldconfig

שלב 7: הפעלת קוד Python עבור רובר

Image
Image

צור קובץ Python בשם tracker.py והוסף אליו את הקוד הבא.

sudo nano tracker.py

קוד:-

תוכנית #ASAR

תוכנית זו עוקבת אחר כדור אדום ומורה לפאי פטל לעקוב אחריו. יבוא sys sys.path.append ('/usr/local/lib/python2.7/site-packages') ייבוא cv2 יבוא numpy כ- np יבוא מערכת os יבוא RPi. GPIO כ- IO IO.setmode (IO. BOARD) IO.setup (7, IO. OUT) IO.setup (15, IO. OUT) IO.setup (13, IO. OUT) IO.setup (21, IO. OUT) IO.setup (22, IO. OUT) def fwd (): IO.output (21, 1) #Left Motor Forward IO.output (22, 0) IO.output (13, 1) #Rout Motor Forward IO.output (15, 0) def bac (): IO.output (21, 0) פלט IO אחורי#שמאל לאחור (22, 1) פלט IO. Out (13, 0) פלט IO מנוע אחורי (22, 1) פלט IO (13, 1).פלט (22, 0) פלט IO.out (13, 0)#ימני ימני לאחור פלט פלט (15, 1) def stp (): IO.output (21, 0)#שמאל עצור מנועי IO.פלט (22, 0) יציאת IO (13, 0)#ימני עצירת מנוע פלט IO (15, 0) ############################# ################################################## ####################### def main (): capWebcam = cv2. VideoCapture (0)#להכריז על אובייקט VideoCapture ושותף למצלמת רשת, 0 => השתמש במצלמת רשת ראשונה # הצג רזולוציה מקורית הדפס "רזולוציית ברירת מחדל =" + str (capWebcam.get (cv2. CAP_PROP_FRAME_WIDTH)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)) capWebcam.set (cv2. CAP_PROP_FRAME_WIDTH, 320.0) # שינוי רזולוציה ל 320x240 לעיבוד capWebcam.set (cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # הצג רזולוציה מעודכנת הדפסה "עדכון רזולוציה =" + str (capWebcam.get (cv2. CAP_PRO_PRO_PRO_PRO_PRO_PRO_PRO_PRO_PRO) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)) אם capWebcam.isOpened () == שקר: # בדוק אם אובייקט VideoCapture היה קשור להדפסה של מצלמת רשת בהצלחה "שגיאה: capWebcam לא ניגש בהצלחה / n / n" # אם לא, הודעת שגיאת הדפסה כדי להוציא את מערכת ההפעלה os.system ("השהה") # השהה עד שהמשתמש ילחץ על מקש כך שהמשתמש יוכל לראות את הודעת השגיאה חזרה # ויציאה מהפונקציה (היציאה מהתוכנית) # סוף אם בעוד cv2.waitKey (1)! = 27 ו- capWebcam.isOpened (): # עד לחיצה על מקש Esc או חיבור מצלמת אינטרנט לאיבוד blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # קרא את המסגרת הבאה אם לא blnFrameReadSuccessfully או imgOriginal is None: # אם המסגרת לא נקראה בהצלחה הדפס "שגיאה: מסגרת לא נקראה ממצלמת הרשת / n" # הודעת שגיאת הדפסה כדי לבטל את מערכת ההפעלה OS.system ("השהה") # השהה עד שהמשתמש ילחץ על מקש כדי שהמשתמש יוכל לראות הודעת שגיאה נשברת # יציאה בזמן הלולאה (היוצאת מהתוכנית) # סוף אם imgHSV = cv2.cvtColor (imgOriginal, cv2. COLOR_BGR2HSV) imgThreshLow = cv2.inRange (imgHSV, np.array ([0, 135, 135]), np.array ([18, 255, 255])) imgThreshHigh = cv2.inRange (imgHSV, np.array ([165, 135, 135]), np. מערך ([179, 255, 255])) imgThresh = cv2.add (imgThreshLow, imgThreshHigh) imgThresh = cv2. GaussianBlur (imgThresh, (3, 3), 2) imgThresh = cv2.dilh (ng.hres (5, 5), np.uint8)) imgThresh = cv2.erode (imgThresh, np.ones ((5, 5), np.uint8)) intRows, intColumns = imgThresh.shape עיגולים = cv2. HoughCircles (imgThresh, cv2. HOUGH_GRADIENT, 5, intRows / 4) # מלא מעגלים משתנים בכל המעגלים בתמונה המעובדת אם מעגלים is None: # שורה זו הכרחית כדי שהתוכנית לא תקרוס בשורה הבאה אם לא נמצאו עיגולים פלט (7, 1) עבור מעגל במעגלים [0]: # עבור כל מעגל x, y, רדיוס = מעגל # פרץ x, y ורדיוס הדפס "מיקום הכדור x =" + str (x) + ", y =" + str (y) + ", רדיוס =" + str (רדיוס) # מיקום כדור הדפסה ורדיוס obRadius = int (רדיוס) xAxis = int (x) אם obRadius> 0 & obRadius100 & xAxis180: הדפס ("זז ימינה") ryt () elif xAxis <100: print ("זז שמאלה") lft () else: stp () else: stp () cv2.circle (imgOriginal, (x, y), 3, (0, 255, 0), -1) # צייר עיגול ירוק קטן במרכז האובייקט שזוהה cv2.circle (imgOriginal, (x, y), רדיוס, (0, 0, 255), 3) # צייר עיגול אדום סביב האובייקט שזוהה # קצה עבור # קצה אם אחרת: IO.output (7, 0) cv2.namedWindow ("imgOriginal", cv2. WINDOW_AUTOSIZE) # צור חלונות, השתמש ב- WINDOW_AUTOSIZE עבור גודל חלון קבוע cv2.namedWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # או השתמש ב- WINDOW_NORMAL כדי לאפשר שינוי גודל חלון cv2.imshow ("imgOriginal", imgOri ginal)#show windows cv2.imshow ("imgThresh", imgThresh)#end while cv2.destroyAllWindows ()#הסר חלונות מחזרת הזיכרון ##################### ################################################### ############################# אם _name_ == "_ main_": main ()

כעת, כל שנותר לעשות הוא להפעיל את התוכנית

tracker python.py

מזל טוב! הרובר שלך לנהיגה עצמית מוכן! חלק הניווט המבוסס על חיישן אולטרסאונד יושלם בקרוב ואעדכן זאת להוראה.

תודה שקראתם!

מוּמלָץ: