فهرست مطالب:

رزبری پای - مریخ نورد خودکار با ردیابی شیء OpenCV: 7 مرحله (همراه با تصاویر)
رزبری پای - مریخ نورد خودکار با ردیابی شیء OpenCV: 7 مرحله (همراه با تصاویر)

تصویری: رزبری پای - مریخ نورد خودکار با ردیابی شیء OpenCV: 7 مرحله (همراه با تصاویر)

تصویری: رزبری پای - مریخ نورد خودکار با ردیابی شیء OpenCV: 7 مرحله (همراه با تصاویر)
تصویری: Mini Mars Rover visits the Raspberry Pi pop-up store 2024, نوامبر
Anonim
رزبری پای - مریخ نورد خودکار با ردیابی شی OpenCV
رزبری پای - مریخ نورد خودکار با ردیابی شی OpenCV

مجهز به Raspberry Pi 3 ، تشخیص شیء CV باز ، سنسورهای اولتراسونیک و موتورهای DC با گیربکس. این مریخ نورد می تواند هر جسمی را که برای آن آموزش دیده است ردیابی کرده و در هر زمینی حرکت کند.

مرحله 1: مقدمه

Image
Image
مواد و نرم افزار مورد نیاز
مواد و نرم افزار مورد نیاز

در این دستورالعمل ، ما قصد داریم یک مریخ نورد مستقل بسازیم که بتواند اشیاء را تشخیص داده و آنها را با استفاده از نرم افزار Open CV که روی Raspberry Pi 3 اجرا می شود ، با گزینه ای برای استفاده از دستگاه وب کم یا دوربین اصلی تمشک pi ، ردیابی کند. همچنین مجهز به سنسور اولتراسونیک است که روی سروو نصب شده است تا مسیر خود را در محیط های تاریک که دوربین کار نمی کند ، دنبال کند. سیگنال های دریافتی از Pi به IC راننده موتور (L293D) ارسال می شود که موتورهای DC 4 150 150 RPM را بر روی بدنه ساخته شده از لوله های PVC هدایت می کند.

مرحله 2: مواد و نرم افزار مورد نیاز

مواد و نرم افزار مورد نیاز
مواد و نرم افزار مورد نیاز
مواد و نرم افزار مورد نیاز
مواد و نرم افزار مورد نیاز

مواد مورد نیاز

  1. رزبری پای (هر چیزی جز صفر)
  2. Raspberry PI Camera یا یک وب کم
  3. IC راننده موتور L293D
  4. چرخ های ربات (7x4cm) X 4
  5. Geared DC Motors (150 دور در دقیقه) X 4
  6. لوله های PVC برای شاسی

نرم افزار مورد نیاز است

  1. بتونه برای SSH ing Pi
  2. CV را برای تشخیص شی باز کنید

مرحله 3: ساخت شاسی Rover

ساخت شاسی روور
ساخت شاسی روور
ساخت شاسی روور
ساخت شاسی روور
ساخت شاسی روور
ساخت شاسی روور

برای ساخت این شاسی PVC ، شما نیاز دارید

  • 2 X 8"
  • 2 X 4"
  • 4 مفصل تی

لوله های PVC را در یک ساختار نردبان مرتب کرده و در اتصالات T قرار دهید. ممکن است از سیلانت PVC برای محکم تر شدن اتصالات استفاده کنید.

موتورهای DC با گیربکس با استفاده از گیره ها به شاسی لوله PVC متصل می شوند و سپس چرخ ها با استفاده از پیچ با موتورها متصل می شوند.

مرحله 4: ساخت مجموعه فاصله سنج فراصوت

ساختمان مجموعه فاصله سنج مافوق صوت
ساختمان مجموعه فاصله سنج مافوق صوت

مجموعه محدوده یاب اولتراسونیک با استفاده از سنسور اولتراسونیک HC-SR04 متصل به موتور میکرو سروو ساخته شده است. قبل از قرار دادن کیس پلاستیکی که از طریق پیچ به سروو موتور متصل می شود ، کابل ها از قبل با سنسور اولتراسونیک وصل می شوند.

مرحله 5: شماتیک و اتصالات الکتریکی

شماتیک و اتصالات برق
شماتیک و اتصالات برق
شماتیک و اتصالات برق
شماتیک و اتصالات برق

لطفاً اتصالات الکتریکی را مطابق نمودار مدار پیوست شده انجام دهید.

مرحله 6: SSH و نصب CV را باز کنید

SSH و نصب CV باز
SSH و نصب CV باز

در حال حاضر ، برای نصب نرم افزار مورد نیاز ، باید SSH را به رزبری پای خود وارد کنیم. ما با SSHing به Raspberry Pi خود شروع می کنیم. مطمئن شوید Pi شما به روتر مشابه رایانه شما متصل است و می دانید که آدرس IP آن توسط روتر شما به آن اختصاص داده شده است. حالا ، اگر در ویندوز هستید ، خط فرمان یا PUTTY را باز کنید و دستور زیر را اجرا کنید.

ssh [email protected]

IP Pi شما ممکن است متفاوت باشد ، IP من 192.168.1.6 است.

اکنون ، رمز پیش فرض خود را وارد کنید - "تمشک"

اکنون که SSH را در Pi خود وارد کرده اید ، بیایید با به روز رسانی این دستور شروع کنیم.

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

بیایید ابزارهای توسعه دهنده مورد نیاز را اکنون نصب کنیم ،

sudo apt-get install build-essential cmake pkg-config

در مرحله بعد ، ما باید برخی از بسته های ورودی/خروجی تصویر را نصب کنیم که به Pi ما کمک می کند تا فرمت های مختلف تصویر را از دیسک دریافت کند.

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

در حال حاضر ، برخی از بسته ها برای دریافت ویدئو ، پخش مستقیم و بهینه سازی عملکرد OpenCV

sudo apt-get نصب libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

sudo apt-get libxvidcore-dev libx264-dev را نصب کنید

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

sudo apt-get 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 نصب شده است ، ما باید پروفایل ~/. خود را به روز کنیم تا خطوط زیر را در پایین شامل شود

صادرات WORKON_HOME = $ HOME/.virtualenvs صادرات VIRTUALENVWRAPPER_PYTHON =/usr/bin/python3 source /usr/local/bin/virtualenvwrapper.sh

محیط مجازی پایتون خود را ایجاد کنید

mkvirtualenv cv -p python2

رفتن به محیط مجازی ایجاد شده

منبع ~/. پروفایل

workon cv

نصب NumPy

pip install numpy

کامپایل و نصب OpenCV

cd ~/opencv-3.3.0/

ساخت mkdir

ساخت سی دی

cmake -D CMAKE_BUILD_TYPE = RELEASE / -D CMAKE_INSTALL_PREFIX =/usr/local / -D INSTALL_PYTHON_EXAMPLES = ON / -D OPENCV_EXTRA_MODULES_PATH = ~/opencv_Contil -3

در نهایت OpenCV را کامپایل کنید

make -j4

پس از اتمام اجرای این دستور. تنها کاری که باید انجام دهید نصب آن است.

sudo make config

sudo ldconfig

مرحله 7: اجرای کد پایتون برای روور

Image
Image

یک فایل پایتون به نام tracker.py ایجاد کرده و کد زیر را به آن اضافه کنید.

sudo nano tracker.py

کد:-

برنامه #ASAR

#این برنامه یک توپ قرمز را ردیابی می کند و به پی تمشک دستور می دهد که آن را دنبال کند. import sys sys.path.append ('/usr/local/lib/python2.7/site-packages') cv2 import numpy به عنوان np import os import 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) #Right Motor Forward IO.output (15، 0) def bac (): IO.output (21 ، 0)#موتور چپ IO عقب. خروجی (22 ، 1) IO.output (13 ، 0)#موتور راست عقب IO.output (15 ، 1) def ryt (): IO.output (21 ، 0) #موتور چپ IO عقب. خروجی (22 ، 1) IO.output (13 ، 1)#موتور راست جلو IO. خروجی (15 ، 0) def lft (): IO.output (21 ، 1)#موتور چپ جلو IO.output (22، 0) IO.output (13، 0) #Right Motor backward IO.output (15، 1) def stp (): IO.output (21، 0)#سمت چپ موتور IO.output (22، 0) IO.output (13 ، 0)#راست موتور IO.output (15 ، 0) ############################## ################################################### #################### def اصلی (): capWebcam = cv2. VideoCapture (0)#اعلام یک VideoCapture object and related to webcam، 0 => استفاده از اولین وب کم # نمایش وضوح اصلی چاپ "وضوح پیش فرض =" + str (capWebcam.get (cv2. CAP_PROP_FRAME_WIDTH)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT) cap)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)) اگر capWebcam.isOpened () == نادرست: # بررسی کنید آیا شیء VideoCapture با موفقیت در چاپ وب کم مرتبط شده است "خطا: capWebcam با موفقیت / n / n" # اگر نه ، پیام خطا را به std out os.system ("مکث") # مکث کنید تا کاربر کلیدی را فشار دهد تا کاربر بتواند پیام خطای بازگشت # و خروج از عملکرد (که از برنامه خارج می شود) را مشاهده کند # در صورت در حالی که cv2.waitKey (1)! = 27 و capWebcam.isOpened (): # تا زمانی که کلید Esc فشار داده نشود یا اتصال به وب کم قطع نشود blnFrameReadSuccessf ully، imgOriginal = capWebcam.read () # فریم بعدی را بخوانید اگر blnFrameReadSuccessfully یا imgOriginal وجود ندارد: # اگر قاب با موفقیت خوانده نشد چاپ کنید "خطا: قاب از وب کم خوانده نمی شود / n" # پیام خطا برای std out os.system ("مکث") # مکث تا کاربر یک کلید را فشار دهد تا کاربر بتواند پیام خطا break # exit while loop (که برنامه را خارج می کند) # end if 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.dilate (imgThresh، np.ones (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) # حلقه های متغیر را با همه حلقه های موجود در تصویر پردازش شده در صورت حلقه ها پر کنید هیچ نیست: # این خط برای جلوگیری از خراب شدن برنامه در خط بعدی ضروری است اگر IO حلقه ای پیدا نشد. خروجی (7 ، 1) برای دایره در حلقه ها [0]: # برای هر دایره x ، y ، شعاع = دایره # شکستن x ، y و شعاع چاپ "موقعیت توپ x =" + str (x) + "، y =" + str (y) + "، radius =" + str (شعاع) # موقعیت توپ و شعاع چاپ obRadius = int (radius) xAxis = int (x) if obRadius> 0 & obRadius100 & xAxis180: print ("Moving right") ryt () elif xAxis <100: print ("Moving Left") lft () else: stp () else: stp () cv2.circle (imgOriginal، (x، y)، 3، (0، 255، 0)، -1) # دایره سبز کوچکی را در مرکز شیء تشخیص داده شده cv2.circle (imgOriginal، (x، y)، radius ، (0، 0، 255)، 3) # دایره قرمز بکشید در اطراف شیء شناسایی شده # end برای # end در غیر این صورت: 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)#نمایش پنجره های cv2.imshow ("imgThresh"، imgThresh)#پایان در حالی که cv2.destroyAllWindows ()#حذف ویندوز از حافظه بازگشت ###################### ################################################### ############################# اگر _name_ == "_main_": اصلی ()

اکنون تنها کاری که باید انجام دهید این است که برنامه را اجرا کنید

python tracker.py

تبریک می گویم! مریخ نورد خودران شما آماده است! قسمت ناوبری مبتنی بر حسگر اولتراسونیک به زودی تکمیل می شود و من این دستورالعمل را به روز خواهم کرد.

ممنون که خواندید!

توصیه شده: