فهرست مطالب:
- مرحله 1: مقدمه
- مرحله 2: مواد و نرم افزار مورد نیاز
- مرحله 3: ساخت شاسی Rover
- مرحله 4: ساخت مجموعه فاصله سنج فراصوت
- مرحله 5: شماتیک و اتصالات الکتریکی
- مرحله 6: SSH و نصب CV را باز کنید
- مرحله 7: اجرای کد پایتون برای روور
تصویری: رزبری پای - مریخ نورد خودکار با ردیابی شیء OpenCV: 7 مرحله (همراه با تصاویر)
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:53
مجهز به Raspberry Pi 3 ، تشخیص شیء CV باز ، سنسورهای اولتراسونیک و موتورهای DC با گیربکس. این مریخ نورد می تواند هر جسمی را که برای آن آموزش دیده است ردیابی کرده و در هر زمینی حرکت کند.
مرحله 1: مقدمه
در این دستورالعمل ، ما قصد داریم یک مریخ نورد مستقل بسازیم که بتواند اشیاء را تشخیص داده و آنها را با استفاده از نرم افزار Open CV که روی Raspberry Pi 3 اجرا می شود ، با گزینه ای برای استفاده از دستگاه وب کم یا دوربین اصلی تمشک pi ، ردیابی کند. همچنین مجهز به سنسور اولتراسونیک است که روی سروو نصب شده است تا مسیر خود را در محیط های تاریک که دوربین کار نمی کند ، دنبال کند. سیگنال های دریافتی از Pi به IC راننده موتور (L293D) ارسال می شود که موتورهای DC 4 150 150 RPM را بر روی بدنه ساخته شده از لوله های PVC هدایت می کند.
مرحله 2: مواد و نرم افزار مورد نیاز
مواد مورد نیاز
- رزبری پای (هر چیزی جز صفر)
- Raspberry PI Camera یا یک وب کم
- IC راننده موتور L293D
- چرخ های ربات (7x4cm) X 4
- Geared DC Motors (150 دور در دقیقه) X 4
- لوله های PVC برای شاسی
نرم افزار مورد نیاز است
- بتونه برای SSH ing Pi
- CV را برای تشخیص شی باز کنید
مرحله 3: ساخت شاسی Rover
برای ساخت این شاسی PVC ، شما نیاز دارید
- 2 X 8"
- 2 X 4"
- 4 مفصل تی
لوله های PVC را در یک ساختار نردبان مرتب کرده و در اتصالات T قرار دهید. ممکن است از سیلانت PVC برای محکم تر شدن اتصالات استفاده کنید.
موتورهای DC با گیربکس با استفاده از گیره ها به شاسی لوله PVC متصل می شوند و سپس چرخ ها با استفاده از پیچ با موتورها متصل می شوند.
مرحله 4: ساخت مجموعه فاصله سنج فراصوت
مجموعه محدوده یاب اولتراسونیک با استفاده از سنسور اولتراسونیک HC-SR04 متصل به موتور میکرو سروو ساخته شده است. قبل از قرار دادن کیس پلاستیکی که از طریق پیچ به سروو موتور متصل می شود ، کابل ها از قبل با سنسور اولتراسونیک وصل می شوند.
مرحله 5: شماتیک و اتصالات الکتریکی
لطفاً اتصالات الکتریکی را مطابق نمودار مدار پیوست شده انجام دهید.
مرحله 6: SSH و نصب CV را باز کنید
در حال حاضر ، برای نصب نرم افزار مورد نیاز ، باید SSH را به رزبری پای خود وارد کنیم. ما با SSHing به Raspberry Pi خود شروع می کنیم. مطمئن شوید Pi شما به روتر مشابه رایانه شما متصل است و می دانید که آدرس IP آن توسط روتر شما به آن اختصاص داده شده است. حالا ، اگر در ویندوز هستید ، خط فرمان یا PUTTY را باز کنید و دستور زیر را اجرا کنید.
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: اجرای کد پایتون برای روور
یک فایل پایتون به نام 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
تبریک می گویم! مریخ نورد خودران شما آماده است! قسمت ناوبری مبتنی بر حسگر اولتراسونیک به زودی تکمیل می شود و من این دستورالعمل را به روز خواهم کرد.
ممنون که خواندید!
توصیه شده:
سیستم ردیابی خودکار خورشیدی قابل حمل: 9 مرحله (همراه با تصاویر)
سیستم ردیابی خودکار خورشیدی قابل حمل: Medomyself یک شرکت کننده در برنامه Amazon Services LLC Associates Program است ، یک برنامه تبلیغاتی وابسته که به منظور فراهم آوردن وسیله ای برای سایت ها برای به دست آوردن هزینه تبلیغات از طریق تبلیغات و پیوند به amazon.com طراحی شده است به این ترتیب: Dave Weaver
ردیابی شیء Opencv: 3 مرحله
ردیابی شیء Opencv: تشخیص جسم متحرک تکنیکی است که در بینایی رایانه و پردازش تصویر استفاده می شود. فریم های متوالی متعدد از یک ویدیو با روش های مختلف مقایسه می شود تا مشخص شود آیا هر جسم متحرک شناسایی شده است یا خیر. تشخیص اشیاء متحرک برای wi استفاده شده است
ربات هوشمند DIY ردیابی ماشین ردیابی ماشین ردیابی خودرو حساس به نور: 7 مرحله
دستگاه DIY Robot Smart Tracking Car Tracking Car Photosensitive: طراحی شده توسط SINONING ROBOT شما می توانید از ربات ردیابی ماشین خرید کنید بچرخید تا
چشمک زدن LED با تمشک پای - نحوه استفاده از پین های GPIO در رزبری پای: 4 مرحله
چشمک زدن LED با تمشک پای | نحوه استفاده از پین های GPIO در Raspberry Pi: سلام بچه ها در این دستورالعمل نحوه استفاده از GPIO's Raspberry pi را یاد می گیریم. اگر تا به حال از آردوینو استفاده کرده اید ، احتمالاً می دانید که ما می توانیم سوئیچ LED و غیره را به پین های آن وصل کرده و آن را مانند کار کنیم. چشمک بزنید یا ورودی را از سوئیچ دریافت کنید تا
ردیابی تغییرات شتاب با رزبری پای و MMA7455 با استفاده از پایتون: 6 مرحله
ردیابی تغییرات شتاب با رزبری پای و MMA7455 با استفاده از پایتون: من سفر نکردم ، در حال آزمایش گرانش بودم. هنوز کار می کند … نمایشی از شاتل فضایی شتاب دهنده روشن کرد که یک ساعت در بالاترین نقطه شاتل به دلیل انبساط زمان گرانشی سریعتر از یک ساعت در پایه انتخاب می کند. مقداری