جدول المحتويات:
- الخطوة 1: مقدمة
- الخطوة 2: المواد والبرامج المطلوبة
- الخطوة الثالثة: بناء هيكل روفر
- الخطوة 4: بناء مجموعة محدد المدى بالموجات فوق الصوتية
- الخطوة 5: المخططات والتوصيلات الكهربائية
- الخطوة 6: تثبيت SSH و Open CV
- الخطوة 7: تشغيل Python Code for Rover
فيديو: Raspberry Pi - Mars Rover المستقل مع تتبع كائن OpenCV: 7 خطوات (بالصور)
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:38
مدعوم من Raspberry Pi 3 و Open CV التعرف على الأشياء وأجهزة الاستشعار بالموجات فوق الصوتية ومحركات DC الموجهة. يمكن لهذه العربة الجوالة أن تتعقب أي جسم يتم تدريبه عليه وتتحرك على أي منطقة.
الخطوة 1: مقدمة
في Instructables ، سنقوم ببناء Autonomous Mars Rover والتي يمكنها التعرف على الكائنات وتتبعها باستخدام برنامج Open CV الذي يعمل على Raspberry Pi 3 مع خيار استخدام جهاز كاميرا الويب أو كاميرا raspberry pi الأصلية. وهي مجهزة أيضًا بجهاز استشعار بالموجات فوق الصوتية مثبت على أجهزة لتتبع طريقها في البيئات المظلمة حيث لا تعمل الكاميرا. يتم إرسال الإشارات المستلمة من Pi إلى سائق المحرك IC (L293D) الذي يقود محركات 4 x 150RPM DC مثبتة على جسم مصنوع من أنابيب PVC.
الخطوة 2: المواد والبرامج المطلوبة
المواد المطلوبة
- Raspberry Pi (أي شيء عدا الصفر)
- كاميرا Raspberry PI أو كاميرا ويب
- L293D سائق المحرك IC
- عجلات الروبوت (7 × 4 سم) × 4
- محركات تيار مستمر موجهة (150 دورة في الدقيقة) × 4
- أنابيب PVC للشاسيه
البرامج المطلوبة
- المعجون لـ SSH ing the Pi
- افتح السيرة الذاتية للتعرف على الأشياء
الخطوة الثالثة: بناء هيكل روفر
لبناء هيكل PVC هذا ، سوف تحتاج
- 2 × 8 بوصة
- 2 × 4 بوصات
- 4 مفاصل تي
رتب أنابيب PVC في هيكل يشبه السلم وأدخلها في وصلات T. يمكنك استخدام مانع التسرب PVC لجعل المفاصل أقوى.
يتم توصيل محركات DC المجهزة بهيكل الأنابيب البلاستيكية باستخدام المشابك ثم يتم توصيل العجلات بالمحركات باستخدام البراغي.
الخطوة 4: بناء مجموعة محدد المدى بالموجات فوق الصوتية
تم تصميم مجموعة مكتشف المدى بالموجات فوق الصوتية باستخدام مستشعر الموجات فوق الصوتية HC-SR04 المتصل بمحرك Micro Servo. يتم توصيل الكابلات مسبقًا بجهاز استشعار الموجات فوق الصوتية قبل وضعها في العلبة البلاستيكية المتصلة بمحرك المؤازرة عبر البراغي.
الخطوة 5: المخططات والتوصيلات الكهربائية
يرجى عمل التوصيلات الكهربائية حسب مخطط الدائرة المرفق.
الخطوة 6: تثبيت SSH و Open CV
الآن ، نحتاج إلى SSH في raspberry pi لتثبيت البرنامج المطلوب. سنبدأ بـ SSHing إلى Raspberry Pi الخاص بنا. تأكد من أن Pi الخاص بك متصل بنفس جهاز التوجيه مثل جهاز الكمبيوتر الخاص بك وأنك تعلم أنه عنوان IP المخصص له بواسطة جهاز التوجيه الخاص بك. الآن ، افتح موجه الأوامر أو PUTTY إذا كنت تستخدم Windows وقم بتشغيل الأمر التالي.
قد يكون عنوان 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
قم بإنشاء ملف 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
تهاني! سيارتك الجوالة ذاتية القيادة جاهزة! سيتم الانتهاء من جزء التنقل المستند إلى مستشعر الموجات فوق الصوتية قريبًا وسأقوم بتحديث هذا التوجيه.
شكرا للقراءة!
موصى به:
تتبع كائن Opencv: 3 خطوات
تتبع كائن Opencv: كشف الكائن المتحرك هو تقنية تستخدم في رؤية الكمبيوتر ومعالجة الصور. تتم مقارنة الإطارات المتتالية المتعددة من مقطع فيديو بطرق مختلفة لتحديد ما إذا تم اكتشاف أي جسم متحرك. تم استخدام اكتشاف الكائنات المتحركة مع
DIY الذكية روبوت تتبع مجموعات السيارات تتبع السيارات حساسة للضوء: 7 خطوات
DIY الذكية روبوت تتبع مجموعات السيارات تتبع السيارات حساس للضوء: التصميم بواسطة SINONING ROBOT يمكنك الشراء من تتبع سيارة الروبوت ، تقارن رقاقة TheoryLM393 بين المقاومين ، عندما يكون هناك جانب واحد من المقاوم الضوئي LED على الأبيض سيتوقف جانب المحرك على الفور ، والجانب الآخر من المحرك تدور ، بحيث
"GRECO" - روبوت تجنب كائن الأردوينو للمبتدئين: 6 خطوات (بالصور)
"GRECO" - روبوت تجنب كائن Arduino للمبتدئين: حسنًا ، إذا كنت مبتدئًا ، ستجد هنا أسهل طريقة لبناء كائن خاص بك مع تجنب الروبوت! سنستخدم هيكل روبوت دائري صغير بمحركين للتيار المستمر لبناءه بشكل أسهل . لمرة أخرى ، اخترنا استخدام لوحة Arduino UNO الشهيرة
كائن EBot8 الذي يتبع الروبوت: 5 خطوات (بالصور)
روبوت تتبع كائن EBot8: هل سبق لك أن تساءلت عن صنع روبوت يتبع أينما ذهبت؟ ولكن فقط لا تستطيع؟ حسنا … الآن يمكنك ذلك! نقدم لكم الكائن التالي الروبوت! اذهب إلى هذا البرنامج التعليمي ، مثل والتصويت وربما يمكنك القيام بذلك أيضًا
كائن فضائي متوهج في جرة: 8 خطوات (بالصور)
متوهج أجنبي في جرة: لقد صنعت زوجين من هذه لحفلة ليلة يوري (http://www.yurisnight.net/). الكائن الفضائي يجلس في سائل متوهج ويبدو التأثير رائعًا في غرفة مظلمة. المواد المطلوبة هي 1) جرة بغطاء سميك بما يكفي لإخفاء الخفاش