विषयसूची:

रास्पबेरी पाई - ओपनसीवी ऑब्जेक्ट ट्रैकिंग के साथ स्वायत्त मार्स रोवर: 7 कदम (चित्रों के साथ)
रास्पबेरी पाई - ओपनसीवी ऑब्जेक्ट ट्रैकिंग के साथ स्वायत्त मार्स रोवर: 7 कदम (चित्रों के साथ)

वीडियो: रास्पबेरी पाई - ओपनसीवी ऑब्जेक्ट ट्रैकिंग के साथ स्वायत्त मार्स रोवर: 7 कदम (चित्रों के साथ)

वीडियो: रास्पबेरी पाई - ओपनसीवी ऑब्जेक्ट ट्रैकिंग के साथ स्वायत्त मार्स रोवर: 7 कदम (चित्रों के साथ)
वीडियो: HowTo use Raspberry Pi & OpenCV to track objects & turn servo 2024, जुलाई
Anonim
रास्पबेरी पाई - ओपनसीवी ऑब्जेक्ट ट्रैकिंग के साथ स्वायत्त मंगल रोवर
रास्पबेरी पाई - ओपनसीवी ऑब्जेक्ट ट्रैकिंग के साथ स्वायत्त मंगल रोवर

रास्पबेरी पाई 3, ओपन सीवी ऑब्जेक्ट रिकग्निशन, अल्ट्रासोनिक सेंसर और गियर डीसी मोटर्स द्वारा संचालित। यह रोवर किसी भी ऐसी वस्तु को ट्रैक कर सकता है जिसके लिए उसे प्रशिक्षित किया गया है और किसी भी इलाके में आगे बढ़ सकता है।

चरण 1: परिचय

Image
Image
आवश्यक सामग्री और सॉफ्टवेयर
आवश्यक सामग्री और सॉफ्टवेयर

इस निर्देश में, हम एक ऑटोनॉमस मार्स रोवर बनाने जा रहे हैं, जो एक वेब कैमरा डिवाइस या मूल रास्पबेरी पाई कैमरा का उपयोग करने के विकल्प के साथ रास्पबेरी पाई 3 पर चलने वाले ओपन सीवी सॉफ्टवेयर का उपयोग करके वस्तुओं को पहचान सकता है और उन्हें ट्रैक कर सकता है। यह अंधेरे वातावरण में अपना रास्ता ट्रैक करने के लिए एक सर्वो पर घुड़सवार एक अल्ट्रासोनिक सेंसर से भी लैस है जहां कैमरा काम नहीं करेगा। पाई से प्राप्त सिग्नल मोटर चालक IC (L293D) को भेजे जाते हैं जो 4 x 150RPM DC मोटर्स को पीवीसी पाइप से बनी बॉडी पर माउंट करते हैं।

चरण 2: आवश्यक सामग्री और सॉफ्टवेयर

आवश्यक सामग्री और सॉफ्टवेयर
आवश्यक सामग्री और सॉफ्टवेयर
आवश्यक सामग्री और सॉफ्टवेयर
आवश्यक सामग्री और सॉफ्टवेयर

सामग्री की आवश्यकता

  1. रास्पबेरी पाई (कोई भी लेकिन शून्य)
  2. रास्पबेरी पीआई कैमरा या एक वेब कैमरा
  3. L293D मोटर चालक IC
  4. रोबोट व्हील (7x4cm) X 4
  5. गियर वाली डीसी मोटर्स (150 आरपीएम) एक्स 4
  6. चेसिस के लिए पीवीसी पाइप

सॉफ्टवेयर की आवश्यकता

  1. एसएसएच के लिए पोटीन पी आईएनजी
  2. वस्तु पहचान के लिए सीवी खोलें

चरण 3: रोवर चेसिस का निर्माण

रोवर चेसिस का निर्माण
रोवर चेसिस का निर्माण
रोवर चेसिस का निर्माण
रोवर चेसिस का निर्माण
रोवर चेसिस का निर्माण
रोवर चेसिस का निर्माण

इस पीवीसी चेसिस को बनाने के लिए, आपको आवश्यकता होगी

  • 2 एक्स 8"
  • 2 एक्स 4"
  • 4 टी-जोड़ों

पीवीसी पाइपों को सीढ़ी जैसी संरचना में व्यवस्थित करें और टी-जोड़ों में डालें। जोड़ों को और भी मजबूत बनाने के लिए आप पीवीसी सीलेंट का उपयोग कर सकते हैं।

गियर वाली डीसी मोटरों को क्लैंप का उपयोग करके पीवीसी पाइप चेसिस से जोड़ा जाता है और फिर पहियों को स्क्रू का उपयोग करके मोटर्स से जोड़ा जाता है।

चरण 4: अल्ट्रासोनिक रेंजफाइंडर असेंबली का निर्माण

अल्ट्रासोनिक रेंजफाइंडर असेंबली का निर्माण
अल्ट्रासोनिक रेंजफाइंडर असेंबली का निर्माण

अल्ट्रासोनिक रेंज फाइंडर असेंबली को माइक्रो सर्वो मोटर से जुड़े HC-SR04 अल्ट्रासोनिक सेंसर का उपयोग करके बनाया गया है। प्लास्टिक केस में डालने से पहले केबल्स को अल्ट्रासोनिक सेंसर से जोड़ा जाता है जो कि स्क्रू के माध्यम से सर्वो मोटर से जुड़ा होता है।

चरण 5: योजनाबद्ध और विद्युत कनेक्शन

योजनाबद्ध और विद्युत कनेक्शन
योजनाबद्ध और विद्युत कनेक्शन
योजनाबद्ध और विद्युत कनेक्शन
योजनाबद्ध और विद्युत कनेक्शन

कृपया संलग्न सर्किट डायग्राम के अनुसार विद्युत कनेक्शन करें।

चरण 6: एसएसएच और ओपन सीवी इंस्टॉलेशन

SSH और ओपन CV इंस्टालेशन
SSH और ओपन CV इंस्टालेशन

अब, हमें आवश्यक सॉफ़्टवेयर स्थापित करने के लिए अपने रास्पबेरी पाई में SSH की आवश्यकता है। हम SSHing द्वारा अपने रास्पबेरी पाई से शुरू करेंगे। सुनिश्चित करें कि आपका पाई आपके पीसी के समान राउटर से जुड़ा है और आप जानते हैं कि यह आपके राउटर द्वारा इसे सौंपा गया आईपी पता है। अब, यदि आप विंडोज़ पर हैं तो कमांड प्रॉम्प्ट या पुट्टी खोलें और निम्न कमांड चलाएँ।

एसएसएच पीआई@192.168.1.6

आपके पाई का IP अलग हो सकता है, मेरा 192.168.1.6 है।

अब, अपना डिफ़ॉल्ट पासवर्ड दर्ज करें - "रास्पबेरी"

अब, जब आपने अपने पाई में SSH'd कर लिया है, तो आइए इस कमांड के साथ अपडेट करके शुरू करें।

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

आइए अब आवश्यक डेवलपर टूल इंस्टॉल करें, sudo apt-get install बिल्ड-एसेंशियल सेमेक pkg-config

इसके बाद, हमें कुछ छवि I/O पैकेज स्थापित करने की आवश्यकता है जो हमारे पीआई को डिस्क से विभिन्न छवि प्रारूपों को लाने में मदद करेंगे।

sudo apt-libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev इंस्टॉल करें

अब, वीडियो लाने, लाइव स्ट्रीमिंग और OpenCV प्रदर्शन को अनुकूलित करने के लिए कुछ पैकेज

sudo apt-libavcodec-dev libavformat-dev libswscale-dev libv4l-dev इंस्टॉल करें

sudo apt-libxvidcore-dev libx264-dev स्थापित करें

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

sudo apt-libatlas-base-dev gfortran स्थापित करें

हमें पायथन 2.7 और पायथन 3 हेडर फाइलों को भी स्थापित करने की आवश्यकता है ताकि हम ओपनसीवी को पायथन बाइंडिंग के साथ संकलित कर सकें

sudo apt-get install python2.7-dev python3-dev

ओपनसीवी स्रोत कोड डाउनलोड करना

सीडी ~

wget -O opencv.zip

opencv.zip. को अनज़िप करें

opencv_contrib भंडार डाउनलोड कर रहा है

wget -O opencv_contrib.zip

खोलना opencv_contrib.zip

OpenCV को स्थापित करने के लिए वर्चुअल वातावरण का उपयोग करने की भी सिफारिश की जाती है।

sudo pip virtualenv virtualenvwrapper स्थापित करें

सुडो आरएम-आरएफ ~/.cache/pip

अब, वह virtualenv और virtualenvwrapper संस्थापित हो गया है, हमें नीचे की पंक्तियों को शामिल करने के लिए अपने ~/.profile को अद्यतन करने की आवश्यकता है

निर्यात WORKON_HOME=$HOME/.virtualenvs निर्यात VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 स्रोत /usr/local/bin/virtualenvwrapper.sh

अपना अजगर आभासी वातावरण बनाएं

mkvirtualenv cv -p python2

निर्मित आभासी वातावरण पर स्विच करें

स्रोत ~/.प्रोफ़ाइल

काम सीवी

NumPy स्थापित करना

पाइप स्थापित numpy

OpenCV को संकलित और स्थापित करें

सीडी ~/ओपनसीवी-3.3.0/

एमकेडीआईआर बिल्ड

सीडी बिल्ड

cmake -D CMAKE_BUILD_TYPE=RELEASE / -D CMAKE_INSTALL_PREFIX=/usr/स्थानीय / -D INSTALL_PYTHON_EXAMPLES=ON / -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.3.0/मॉड्यूल / -D BUILD_..

अंत में ओपनसीवी संकलित करें

मेक -जे४

इसके बाद यह कमांड रन करना खत्म कर देती है। आपको बस इसे इंस्टॉल करना है।

सुडो कॉन्फ़िगर करें

sudo ldconfig

चरण 7: रोवर के लिए पायथन कोड चलाना

Image
Image

Tracker.py नामक एक पायथन फ़ाइल बनाएँ और उसमें निम्न कोड जोड़ें।

सूडो नैनो ट्रैकर.py

कोड: -

#आसार कार्यक्रम

# यह प्रोग्राम एक लाल गेंद को ट्रैक करता है और एक रास्पबेरी पाई को उसका पालन करने का निर्देश देता है। आयात sys sys.path.append('/usr/local/lib/python2.7/site-packages') आयात cv2 आयात numpy के रूप में np आयात ओएस 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 (२१, ०) # लेफ्ट मोटर बैकवर्ड आईओ.आउटपुट (२२, १) आईओ.आउटपुट (१३, ०) # लेफ्ट मोटर बैकवर्ड IO.output(22, 1) IO.output(13, 1)#राइट मोटर फॉरवर्ड IO.output(15, 0) def lft(): IO.output(21, 1)#Left Motor Forward IO.output(22, 0) IO.output(13, 0)# राइट मोटर बैकवर्ड IO.output(15, 1) def stp(): IO.output(21, 0)#Left Motor Stop IO.output(22, 0) IO.output(13, 0)# राइट मोटर स्टॉप IO.output(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) # तेजी से संसाधन कैपवेबकैम.सेट (cv2. CAP_PROP_FRAME_HEIGHT, 240.0) के लिए संकल्प को 320x240 में बदलें) + "x" + str(capWebcam.get(cv2. CAP_PROP_FRAME_HEIGHT)) अगर capWebcam.isOpened() == गलत: # जांचें कि क्या VideoCapture ऑब्जेक्ट वेबकैम से जुड़ा था सफलतापूर्वक प्रिंट करें "त्रुटि: कैपवेबकैम सफलतापूर्वक एक्सेस नहीं किया गया\n\n" # यदि नहीं, तो os.system ("रोकें") को बाहर निकालने के लिए त्रुटि संदेश प्रिंट करें) != 27 और capWebcam.isOpened(): # Esc कुंजी दबाए जाने तक या वेबकैम कनेक्शन खो जाने तक blnFrameReadSuccessf ully, imgOriginal = capWebcam.read() # अगला फ़्रेम पढ़ें यदि नहीं blnFrameReadSuccessful या imgOriginal कोई नहीं है: # यदि फ़्रेम सफलतापूर्वक नहीं पढ़ा गया तो प्रिंट करें "त्रुटि: फ़्रेम वेबकैम से नहीं पढ़ा गया\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. array([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.output(7, 1) कोई सर्कल नहीं मिला है [0]: # प्रत्येक सर्कल x, y, त्रिज्या = सर्कल # के लिए # ब्रेक आउट x, y, और त्रिज्या प्रिंट "बॉल पोजीशन x =" + str(x) + ", y =" + str(y) + ", त्रिज्या =" + str (त्रिज्या) # प्रिंट बॉल की स्थिति और त्रिज्या obRadius = int(radius) xAxis = int(x) if obRadius>0 & obRadius100&xAxis180: print("मूविंग राइट") ryt() elif xAxis<100: प्रिंट ("मूविंग लेफ्ट") lft() और: stp() और: 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) # विंडोज़ बनाएं, निश्चित विंडो आकार cv2.namedWindow("imgThresh", cv2. WINDOW_AUTOSIZE) # के लिए WINDOW_AUTOSIZE का उपयोग करें या विंडो के आकार बदलने की अनुमति देने के लिए WINDOW_NORMAL का उपयोग करें cv2.imshow("imgOriginal", imgOri ginal) # विंडोज़ दिखाएं cv2.imshow("imgThresh", imgThresh) # एंड जबकि cv2.destroyAllWindows () # मेमोरी रिटर्न से विंडोज़ हटाएं ################### ############################################# ######################### अगर _name_ == "_main_": main()

अब, जो कुछ करना बाकी है, वह है प्रोग्राम चलाना

अजगर ट्रैकर.py

बधाई! आपका सेल्फ-ड्राइविंग रोवर तैयार है! अल्ट्रासोनिक सेंसर आधारित नेविगेशन भाग जल्द ही पूरा हो जाएगा और मैं इस निर्देश को अपडेट करूंगा।

पढ़ने के लिए धन्यवाद!

सिफारिश की: