جدول المحتويات:

Raspberry Pi - Mars Rover المستقل مع تتبع كائن OpenCV: 7 خطوات (بالصور)
Raspberry Pi - Mars Rover المستقل مع تتبع كائن OpenCV: 7 خطوات (بالصور)

فيديو: Raspberry Pi - Mars Rover المستقل مع تتبع كائن OpenCV: 7 خطوات (بالصور)

فيديو: Raspberry Pi - Mars Rover المستقل مع تتبع كائن OpenCV: 7 خطوات (بالصور)
فيديو: How to build a Raspberry Pi Web Application controlled Robot (EarthRover #1) 2024, شهر نوفمبر
Anonim
Raspberry Pi - Mars Rover المستقل مع تتبع كائن OpenCV
Raspberry Pi - Mars Rover المستقل مع تتبع كائن OpenCV

مدعوم من Raspberry Pi 3 و Open CV التعرف على الأشياء وأجهزة الاستشعار بالموجات فوق الصوتية ومحركات DC الموجهة. يمكن لهذه العربة الجوالة أن تتعقب أي جسم يتم تدريبه عليه وتتحرك على أي منطقة.

الخطوة 1: مقدمة

Image
Image
المواد والبرامج المطلوبة
المواد والبرامج المطلوبة

في Instructables ، سنقوم ببناء Autonomous Mars Rover والتي يمكنها التعرف على الكائنات وتتبعها باستخدام برنامج Open CV الذي يعمل على Raspberry Pi 3 مع خيار استخدام جهاز كاميرا الويب أو كاميرا raspberry pi الأصلية. وهي مجهزة أيضًا بجهاز استشعار بالموجات فوق الصوتية مثبت على أجهزة لتتبع طريقها في البيئات المظلمة حيث لا تعمل الكاميرا. يتم إرسال الإشارات المستلمة من Pi إلى سائق المحرك IC (L293D) الذي يقود محركات 4 x 150RPM DC مثبتة على جسم مصنوع من أنابيب PVC.

الخطوة 2: المواد والبرامج المطلوبة

المواد والبرامج المطلوبة
المواد والبرامج المطلوبة
المواد والبرامج المطلوبة
المواد والبرامج المطلوبة

المواد المطلوبة

  1. Raspberry Pi (أي شيء عدا الصفر)
  2. كاميرا Raspberry PI أو كاميرا ويب
  3. L293D سائق المحرك IC
  4. عجلات الروبوت (7 × 4 سم) × 4
  5. محركات تيار مستمر موجهة (150 دورة في الدقيقة) × 4
  6. أنابيب PVC للشاسيه

البرامج المطلوبة

  1. المعجون لـ SSH ing the Pi
  2. افتح السيرة الذاتية للتعرف على الأشياء

الخطوة الثالثة: بناء هيكل روفر

بناء هيكل روفر
بناء هيكل روفر
بناء هيكل روفر
بناء هيكل روفر
بناء هيكل روفر
بناء هيكل روفر

لبناء هيكل PVC هذا ، سوف تحتاج

  • 2 × 8 بوصة
  • 2 × 4 بوصات
  • 4 مفاصل تي

رتب أنابيب PVC في هيكل يشبه السلم وأدخلها في وصلات T. يمكنك استخدام مانع التسرب PVC لجعل المفاصل أقوى.

يتم توصيل محركات DC المجهزة بهيكل الأنابيب البلاستيكية باستخدام المشابك ثم يتم توصيل العجلات بالمحركات باستخدام البراغي.

الخطوة 4: بناء مجموعة محدد المدى بالموجات فوق الصوتية

بناء الجمعية بالموجات فوق الصوتية Rangefinder
بناء الجمعية بالموجات فوق الصوتية Rangefinder

تم تصميم مجموعة مكتشف المدى بالموجات فوق الصوتية باستخدام مستشعر الموجات فوق الصوتية HC-SR04 المتصل بمحرك Micro Servo. يتم توصيل الكابلات مسبقًا بجهاز استشعار الموجات فوق الصوتية قبل وضعها في العلبة البلاستيكية المتصلة بمحرك المؤازرة عبر البراغي.

الخطوة 5: المخططات والتوصيلات الكهربائية

المخططات والتوصيلات الكهربائية
المخططات والتوصيلات الكهربائية
المخططات والتوصيلات الكهربائية
المخططات والتوصيلات الكهربائية

يرجى عمل التوصيلات الكهربائية حسب مخطط الدائرة المرفق.

الخطوة 6: تثبيت SSH و Open CV

تثبيت SSH و Open CV
تثبيت SSH و Open CV

الآن ، نحتاج إلى SSH في raspberry pi لتثبيت البرنامج المطلوب. سنبدأ بـ SSHing إلى Raspberry Pi الخاص بنا. تأكد من أن Pi الخاص بك متصل بنفس جهاز التوجيه مثل جهاز الكمبيوتر الخاص بك وأنك تعلم أنه عنوان IP المخصص له بواسطة جهاز التوجيه الخاص بك. الآن ، افتح موجه الأوامر أو PUTTY إذا كنت تستخدم Windows وقم بتشغيل الأمر التالي.

ssh [email protected]

قد يكون عنوان IP الخاص بـ Pi مختلفًا ، حيث إن عنوان IP الخاص بي هو 192.168.1.6.

الآن ، أدخل كلمة مرورك الافتراضية - "Raspberry"

الآن ، بعد أن قمت بتثبيت SSH في Pi ، فلنبدأ بالتحديث باستخدام هذا الأمر.

sudo apt-get update && sudo apt-get Upgrade

دعنا نثبت أدوات المطور المطلوبة الآن ،

sudo apt-get install build-أساسي cmake pkg-config

بعد ذلك ، نحتاج إلى تثبيت بعض حزم الإدخال / الإخراج للصور التي ستساعد 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 باستخدام روابط python

sudo apt-get install 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

قم بالتبديل إلى البيئة الافتراضية التي تم إنشاؤها

المصدر ~ /. Profile

workon السيرة الذاتية

تثبيت NumPy

نقطة تثبيت numpy

تجميع وتثبيت OpenCV

مؤتمر نزع السلاح ~ / opencv-3.3.0 /

بناء مكدير

بناء القرص المضغوط

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 / BUILES..

أخيرا تجميع OpenCV

جعل -j4

بعد انتهاء هذا الأمر قيد التشغيل. كل ما عليك فعله هو تثبيته.

sudo جعل التكوين

سودو لدكونفيغ

الخطوة 7: تشغيل Python Code for Rover

Image
Image

قم بإنشاء ملف Python يسمى tracker.py وأضف الكود التالي إليه.

sudo نانو تعقب

الشفرة:-

برنامج #ASAR

# هذا البرنامج يتتبع كرة حمراء ويطلب من توت العليق أن يتبعها. استيراد sys sys.path.append ('/ usr / local / lib / python2.7 / site -pack') استيراد cv2 استيراد numpy كـ np import os import RPi. GPIO as 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) # محرك اليسار للخلف إخراج الإدخال (22 ، 1) إخراج الإدخال (13 ، 0) # محرك اليمين للخلف إخراج الإدخال (15 ، 1) def ryt (): إخراج الإدخال (21 ، 0) # Left Motor للخلف IO الإخراج (22 ، 1) IO Output (13 ، 1) # Right Motor forward IO Output (15، 0) def lft (): IO Output (21، 1) # Left Motor forward IO. Output (22، 0) IO.output (13، 0) # Right Motor backward IO.output (15، 1) def stp (): IO.output (21، 0) # توقف المحرك الأيسر IO الناتج (22 ، 0) IO.output (13، 0) #Right Motor stop IO.output (15، 0) ############################ ################################################## ##################### def main (): capWebcam = cv2. VideoCapture (0) # أعلن كائن VideoCapture والمرتبط بكاميرا الويب ، 0 => استخدم 1st webcam # show original Resolution print "default Resolution =" + 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 لسرعة معالجة أكبر) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)) إذا كان capWebcam.isOpened () == خطأ: # تحقق مما إذا كان كائن VideoCapture مرتبطًا بكاميرا الويب للطباعة بنجاح "خطأ: لم يتم الوصول إلى capWebcam بنجاح / n / n" # إذا لم يكن الأمر كذلك ، فقم بطباعة رسالة الخطأ إلى std out os.system ("pause") # pause حتى يضغط المستخدم على مفتاح حتى يتمكن المستخدم من رؤية رسالة الخطأ تُرجع # ووظيفة الخروج (التي تخرج من البرنامج) # end if while cv2.waitKey (1)! = 27 و capWebcam.isOpened (): # حتى يتم الضغط على مفتاح Esc أو فقد اتصال كاميرا الويب blnFrameReadSuccessf ully، imgOriginal = capWebcam.read () # اقرأ الإطار التالي إذا لم يكن blnFrameRead بنجاح أو imgOriginal لا يوجد: # إذا لم تتم قراءة الإطار بنجاح ، اطبع الخطأ: لم يقرأ الإطار من كاميرا الويب / n "# طباعة رسالة خطأ إلى نظام os.system. ("pause") # pause حتى يضغط المستخدم على مفتاح حتى يتمكن المستخدم من رؤية كسر رسالة الخطأ # 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 circles = cv2. HoughCircles (imgThresh، cv2. HOUGH_GRADIENT، 5، intRows / 4) # ملء الدوائر المتغيرة بكل الدوائر في الصورة المعالجة إذا كانت الدوائر ليس لا شيء: # هذا السطر ضروري لمنع البرنامج من الانهيار في السطر التالي إذا لم يتم العثور على دوائر. إخراج (7 ، 1) للدائرة في الدوائر [0]: # لكل دائرة س ، ص ، نصف القطر = دائرة # كسر x ، y ، وطباعة نصف القطر "موضع الكرة x =" + str (x) + "، y =" + str (y) + "، نصف القطر =" + str (radius) # موضع كرة الطباعة ونصف قطرها 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 for # end إذا كان الأمر آخر: IO.output (7، 0) cv2.amedWindow ("imgOriginal"، cv2. WINDOW_AUTOSIZE) # إنشاء نوافذ ، استخدم WINDOW_AUTOSIZE لحجم نافذة ثابت cv2.amedWindow ("imgThresh"، cv2. WINDOW_AUTOSIZE) # أو استخدم WINDOW_NORMAL للسماح بتغيير حجم النافذة cv2.imshow ("imgOriginal" ، imgOri ginal) # show windows cv2.imshow ("imgThresh"، imgThresh) # end while cv2.destroyAllWindows () # remove windows from memory return ##################### ################################################## ############################ إذا _name_ == "_main_": main ()

الآن ، كل ما تبقى هو تشغيل البرنامج

python tracker.py

تهاني! سيارتك الجوالة ذاتية القيادة جاهزة! سيتم الانتهاء من جزء التنقل المستند إلى مستشعر الموجات فوق الصوتية قريبًا وسأقوم بتحديث هذا التوجيه.

شكرا للقراءة!

موصى به: