תוכן עניינים:
- שלב 1: מבוא
- שלב 2: חומרים ותוכנה נדרשים
- שלב 3: בניית מארז הרובר
- שלב 4: בניית מכלול מד טווח קולי
- שלב 5: סכמטים וחיבורים חשמליים
- שלב 6: התקנת SSH ופתוח קורות חיים
- שלב 7: הפעלת קוד Python עבור רובר
וִידֵאוֹ: Raspberry Pi - רובר מאדים אוטונומי עם מעקב אחר אובייקטים של OpenCV: 7 שלבים (עם תמונות)
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:13
מופעל על ידי Raspberry Pi 3, זיהוי אובייקט CV פתוח, חיישנים אולטראסוניים ומנועי DC מכוונים. רובר זה יכול לעקוב אחר כל אובייקט שאליו הוא מאומן ולנוע בכל שטח.
שלב 1: מבוא
במדריך זה אנו הולכים לבנות מארס רובר אוטונומי שיכול לזהות אובייקטים ולעקוב אחריהם באמצעות תוכנת Open CV הפועלת ב- Raspberry Pi 3 עם אופציה לשימוש במכשיר מצלמת אינטרנט או במצלמת הפטל המקורית של פטל. הוא מצויד גם בחיישן אולטרסאונד המותקן על סרוו כדי לעקוב אחר דרכו בסביבות חשוכות שבהן המצלמה לא תפעל. אותות המתקבלים מפי נשלחים אל נהג המנוע IC (L293D) המניע 4 x 150 סל ד מנועי DC המותקנים על גוף בנוי עם צינורות PVC.
שלב 2: חומרים ותוכנה נדרשים
חומרים דרושים
- פטל פאי (כל אבל אפס)
- מצלמת פטל PI או מצלמת רשת
- נהג מנוע L293D IC
- גלגלי רובוט (7x4 ס"מ) X 4
- מנועי DC ממונעים (150 סל"ד) X 4
- צינורות PVC לשלדה
נדרשת תוכנה
- מרק ל SSH ing the Pi
- פתח קורות חיים לזיהוי אובייקטים
שלב 3: בניית מארז הרובר
כדי לבנות את מארז ה- PVC הזה, תזדקק
- 2 X 8"
- 2 X 4"
- 4 מפרקי T
מסדרים את צינורות ה- PVC במבנה דמוי סולם ומכניסים למפרקי T. אתה יכול להשתמש באיטום PVC כדי להפוך את המפרקים לחזקים עוד יותר.
מנועי ה- DC המיועדים מחוברים לשלדת צינור ה- PVC באמצעות מהדקים ולאחר מכן מחוברים גלגלים למנועים באמצעות ברגים.
שלב 4: בניית מכלול מד טווח קולי
מכלול מאתר הטווח הקולי בנוי באמצעות חיישן אולטרסאונד HC-SR04 המחובר עם מנוע מיקרו סרוו. הכבלים מחוברים מראש לחיישן האולטרסאונד לפני הכנסתם למארז הפלסטיק המחובר למנוע הסרוו באמצעות ברגים.
שלב 5: סכמטים וחיבורים חשמליים
אנא בצע את החיבורים החשמליים לפי תרשים המעגל המצורף.
שלב 6: התקנת SSH ופתוח קורות חיים
כעת, עלינו להיכנס ל- SSH לתוך פטל הפטל שלנו כדי להתקין את התוכנה הנדרשת. נתחיל ב- SSHing ל- Raspberry Pi שלנו. ודא שה- Pi שלך מחובר לאותו נתב כמו המחשב האישי שלך ואתה יודע שזו כתובת ה- IP שהוקצה לו על ידי הנתב שלך. כעת, פתח שורת פקודה או PUTTY אם אתה נמצא ב- Windows והפעל את הפקודה הבאה.
ה- 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 עבור רובר
צור קובץ 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
מזל טוב! הרובר שלך לנהיגה עצמית מוכן! חלק הניווט המבוסס על חיישן אולטרסאונד יושלם בקרוב ואעדכן זאת להוראה.
תודה שקראתם!
מוּמלָץ:
חיישן מיקרו: bit MU Vision - מעקב אחר אובייקטים: 7 שלבים
חיישן מיקרו: bit MU Vision - מעקב אחר אובייקטים: אז במדריך זה אנו מתחילים לתכנת את המכונית החכמה שאנו בונים במדריך זה ושהתקנו עליו חיישן ראיית MU במדריך זה. אנו הולכים לתכנת את המיקרו: קצת עם מעקב אחר אובייקטים פשוטים, כך ש
מעקב אחר אובייקטים של Opencv: 3 שלבים
מעקב אחר אובייקטים Opencv: זיהוי אובייקטים נעים היא טכניקה המשמשת בראייה ממוחשבת ועיבוד תמונות. מספר פריימים עוקבים מסרטון מושווים בשיטות שונות כדי לקבוע אם מזוהה אובייקט נע כלשהו
חיישן מיקרו: bit MU Vision - מעקב אחר אובייקטים: 6 שלבים
חיישן מיקרו: ביט MU Vision - אובייקטים למעקב: זהו המדריך הרביעי שלי לחיישן ראיית MU עבור המיקרו: ביט. כאן אעבור כיצד לעקוב אחר אובייקטים בעזרת המיקרו: ביט ואכתוב את הקואורדינטות למסך OLED. במדריכים האחרים שלי עברתי כיצד לחבר את המיקרו: ביט ל
מעקב אחר אובייקטים מבוססי זיהוי צבעים: 10 שלבים
מעקב אחר אובייקטים מבוססי זיהוי צבעים: סיפור עשיתי את הפרויקט הזה כדי ללמוד עיבוד תמונות באמצעות פטל PI ולפתוח קורות חיים. כדי להפוך את הפרויקט למעניין יותר השתמשתי בשני מנועי סרוו SG90 ועליו מצלמת הר. מנוע אחד נהג לנוע אופקית ומנוע שני נהג לתנועה אנכית
מחוון מצלמות מעקב אחר אובייקטים עם ציר סיבוב. מודפס בתלת מימד ובנוי על בקר מנועי DC RoboClaw & Arduino: 5 שלבים (עם תמונות)
מחוון מצלמות מעקב אחר אובייקטים עם ציר סיבוב. מודפס בתלת-ממד ובנוי על בקר מנועי DC RoboClaw & Arduino: פרויקט זה היה אחד הפרויקטים האהובים עלי מאז שזכיתי לשלב את העניין שלי ביצירת וידאו עם DIY. תמיד הסתכלתי ורציתי לחקות את הצילומים הקולנועיים האלה בסרטים שבהם מצלמה נעה על פני מסך תוך כדי צילום כדי לעקוב אחר