Isi kandungan:
- Langkah 1: Pengenalan
- Langkah 2: Bahan & Perisian Diperlukan
- Langkah 3: Membangunkan Rover Chassis
- Langkah 4: Membangunkan Pemasangan Ultrasonik Rangefinder
- Langkah 5: Sambungan Skematik dan Elektrik
- Langkah 6: Pemasangan SSH dan Buka CV
- Langkah 7: Menjalankan Python Code untuk Rover
Video: Raspberry Pi - Autonomous Mars Rover Dengan Penjejakan Objek OpenCV: 7 Langkah (dengan Gambar)
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:08
Dikuasakan oleh Raspberry Pi 3, pengenalan objek Open CV, sensor Ultrasonik dan motor DC yang diarahkan. Rover ini dapat mengesan objek yang dilatihnya dan bergerak di mana-mana kawasan.
Langkah 1: Pengenalan
Dalam Instructables ini, kami akan membina Autonomous Mars Rover yang dapat mengenali objek dan melacaknya menggunakan perisian Open CV yang berjalan pada Raspberry Pi 3 dengan pilihan untuk menggunakan peranti webcam atau kamera raspberry pi yang asli. Ia juga dilengkapi dengan sensor Ultrasonik yang dipasang pada servo untuk melacak jalannya di persekitaran gelap di mana kamera tidak berfungsi. Isyarat yang diterima dari Pi dihantar ke IC pemandu motor (L293D) yang memacu motor DC 4 x 150RPM yang dipasang pada badan yang dibina dengan paip PVC.
Langkah 2: Bahan & Perisian Diperlukan
Bahan yang Diperlukan
- Raspberry Pi (Mana-mana kecuali sifar)
- Kamera Raspberry PI atau kamera web
- IC pemandu motor L293D
- Roda Robot (7x4cm) X 4
- Geared DC Motors (150RPM) X 4
- Paip PVC untuk casis
Perisian diperlukan
- Putty untuk SSH menggunakan Pi
- Buka CV untuk pengecaman objek
Langkah 3: Membangunkan Rover Chassis
Untuk membina casis PVC ini, anda memerlukannya
- 2 X 8"
- 2 X 4"
- 4 T-Sendi
Susunkan paip PVC di tangga seperti struktur dan masukkan ke dalam T-sendi. Anda mungkin menggunakan sealant PVC untuk menjadikan sendi lebih kuat.
Motor DC yang diarahkan disambungkan dengan casis paip PVC menggunakan pengapit dan kemudian roda disambungkan dengan motor menggunakan skru.
Langkah 4: Membangunkan Pemasangan Ultrasonik Rangefinder
Perakitan pencari jarak ultrasonik dibina menggunakan sensor Ultrasonik HC-SR04 yang disambungkan dengan motor Micro Servo. Kabel disambungkan terlebih dahulu dengan sensor ultrasonik sebelum dimasukkan ke dalam kotak plastik yang disambungkan ke motor servo melalui skru.
Langkah 5: Sambungan Skematik dan Elektrik
Sila buat sambungan elektrik seperti rajah litar yang dilampirkan.
Langkah 6: Pemasangan SSH dan Buka CV
Sekarang, kita perlu memasukkan SSH ke dalam raspberry pi untuk memasang perisian yang diperlukan. Kami akan memulakan dengan SSHing ke Raspberry Pi kami. Pastikan Pi anda disambungkan ke penghala yang sama dengan PC anda dan anda tahu itu alamat IP yang diberikan kepadanya oleh penghala anda. Sekarang, buka command prompt atau PUTTY jika anda menggunakan Windows dan jalankan arahan berikut.
IP Pi anda mungkin berbeza, milik saya 192.168.1.6.
Sekarang, masukkan kata laluan lalai anda - "raspberry"
Sekarang, setelah anda memasukkan SSH ke dalam Pi anda, Mari kita mulakan dengan mengemas kini dengan perintah ini.
sudo apt-get update && sudo apt-get upgrade
Mari pasang alat pembangun yang diperlukan sekarang, sudo apt-get install build-essential cmake pkg-config
Seterusnya, kita perlu memasang beberapa pakej I / O gambar yang akan membantu Pi kita mengambil pelbagai format gambar dari cakera.
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
Sekarang, beberapa pakej untuk mengambil video, streaming langsung dan mengoptimumkan prestasi 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
Kita juga perlu memasang fail header Python 2.7 dan Python 3 supaya kita dapat menyusun OpenCV dengan pengikat python
sudo apt-get install python2.7-dev python3-dev
Memuat turun kod sumber OpenCV
cd ~
wget -O opencv.zip
buka zip opencv.zip
Memuat turun repositori opencv_contrib
wget -O opencv_contrib.zip
buka zip opencv_contrib.zip
Dianjurkan juga untuk menggunakan persekitaran maya untuk memasang OpenCV.
sudo pip pasang virtualenv virtualenvwrapper
sudo rm -rf ~ /.cache / pip
Sekarang, virtualenv dan virtualenvwrapper telah dipasang, kita perlu mengemas kini profil ~ /. Untuk memasukkan baris berikut di bahagian bawah
eksport WORKON_HOME = $ HOME /.virtualenvs eksport VIRTUALENVWRAPPER_PYTHON = / usr / bin / python3 sumber /usr/local/bin/virtualenvwrapper.sh
Buat persekitaran maya python anda
mkvirtualenv cv -p python2
beralih ke persekitaran maya yang dibuat
sumber ~ /.profil
workon cv
Memasang NumPy
memasang pip numpy
Susun & Pasang OpenCV
cd ~ / opencv-3.3.0 /
mkdir membina
cd bina
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 / OND-3.3.0 / modul / OND
Akhirnya menyusun OpenCV
buat -j4
Selepas arahan ini selesai dijalankan. Yang perlu anda buat ialah memasangnya.
sudo buat konfigurasi
sudo ldconfig
Langkah 7: Menjalankan Python Code untuk Rover
Buat fail Python yang disebut tracker.py dan tambahkan kod berikut ke dalamnya.
sudo nano tracker.py
kod:-
Program #ASAR
#Program ini mengesan bola merah dan memerintahkan raspberry pi untuk mengikutinya. import sys sys.path.append ('/ usr / local / lib / python2.7 / site-package') import cv2 import numpy sebagai np import os import RPi. GPIO sebagai 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) #Left Motor belakang IO.output (22, 1) IO.output (13, 0) #Right Motor belakang IO.output (15, 1) def ryt (): IO.output (21, 0) #Left Motor belakang IO.output (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 belakang IO.output (15, 1) def stp (): IO.output (21, 0) #Left Motor stop IO.output (22, 0) IO.output (13, 0) #Right Motor stop IO.output (15, 0) ############################ ################################################# ##################### def utama (): capWebcam = cv2. VideoCapture (0) # nyatakan a Objek VideoCapture dan kaitkan dengan kamera web, 0 => gunakan kamera web pertama # tunjukkan cetakan resolusi asal "resolusi lalai =" + 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) # ubah resolusi menjadi 320x240 untuk pemprosesan yang lebih cepat capWebcam.set (cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # tunjukkan cetakan resolusi yang dikemas kini "resolusi yang dikemas kini =" + str (capWebcam.get (cv2. CAP_PROP_PR)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)) jika capWebcam.isOpened () == Salah: # periksa apakah objek VideoCapture dikaitkan dengan kamera web berjaya mencetak "ralat: capWebcam tidak berjaya diakses / n / n" # jika tidak, cetak mesej ralat untuk menghentikan sistem.)! = 27 dan capWebcam.isBuka (): # sehingga kekunci Esc ditekan atau sambungan kamera web terputus blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # baca bingkai seterusnya jika tidak blnFrameReadSaya berjaya atau imgOriginal adalah Tiada: # jika bingkai tidak berjaya dibaca cetak "ralat: bingkai tidak dibaca dari kamera web / n" # mencetak mesej ralat untuk mengelakkan sistem. ("jeda") # jeda sehingga pengguna menekan kekunci sehingga pengguna dapat melihat pesanan ralat putus # keluar semasa gelung (yang keluar dari program) # berakhir jika 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. susunan ([179, 255, 255])) imgThresh = cv2.add (imgThreshLow, imgThreshHigh) imgThresh = cv2. GaussianBlur (imgThresh, (3, 3), 2) imgThresh = cv2.dilate (imgThresh (np. 5, 5), np.uint8)) imgThresh = cv2.erode (imgThresh, np.ones ((5, 5), np.uint8)) intRows, intColumns = imgThresh. circle circle = cv2. HoughCircles (imgThresh, cv2). HOUGH_GRADIENT, 5, intRows / 4) # isi bulatan berubah dengan semua bulatan dalam gambar yang diproses jika bulatan is not None: # baris ini diperlukan untuk mengelakkan program terhempas di baris seterusnya jika tidak ada lingkaran yang dijumpai IO.output (7, 1) untuk lingkaran dalam bulatan [0]: # untuk setiap bulatan x, y, radius = circle # pecahkan x, y, dan jejari cetak "kedudukan bola x =" + str (x) + ", y =" + str (y) + ", radius =" + str (jejari) # kedudukan bola cetak dan jejari 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) # lukis bulatan hijau kecil di tengah objek cv2.circle (imgOriginal, (x, y), radius, (0, 0, 255), 3) # lukis bulatan merah di sekitar objek yang dikesan # akhir untuk # hujung jika lain: IO.output (7, 0) cv2.namedWindow ("imgOriginal", cv2. WINDOW_AUTOSIZE) # buat tingkap, gunakan WINDOW_AUTOSIZE untuk ukuran tetingkap tetap cv2.namedWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # atau gunakan WINDOW_NORMAL untuk membenarkan pengubahan saiz tetingkap cv2.imshow ("imgOriginal", imgOri ginal) # tunjukkan windows cv2.imshow ("imgThresh", imgThresh) # end while cv2.destroyAllWindows () # remove windows from memory return ##################### ################################################# ############################ if _name_ == "_main_": main ()
Sekarang, yang tinggal hanyalah menjalankan program
python tracker.py
Tahniah! rover memandu sendiri anda sudah siap! Bahagian navigasi berdasarkan sensor ultrasonik akan siap tidak lama lagi dan saya akan mengemas kini arahan ini.
Terima kasih untuk membaca!
Disyorkan:
Mikro: bit MU Vision Sensor - Penjejakan Objek: 7 Langkah
Mikro: bit MU Vision Sensor - Penjejakan Objek: Oleh itu, dalam arahan ini kita akan mula memprogramkan Smart Car yang kita buat di instruksional ini dan kita memasang sensor penglihatan MU di instruksional ini. Kita akan memprogram mikro: sedikit dengan beberapa penjejakan objek yang mudah, jadi
Penjejakan Objek Opencv: 3 Langkah
Penjejakan Objek Opencv: Pengesanan objek bergerak adalah teknik yang digunakan dalam penglihatan komputer dan pemprosesan gambar. Pelbagai bingkai berturut-turut dari video dibandingkan dengan pelbagai kaedah untuk menentukan sama ada objek bergerak dikesan. Pengesanan objek bergerak telah digunakan untuk
Mikro: bit MU Vision Sensor - Objek Penjejakan: 6 Langkah
Mikro: bit MU Vision Sensor - Objek Pelacakan: Ini adalah panduan keempat saya untuk sensor penglihatan MU untuk mikro: bit. Di sini saya akan melalui cara mengesan objek dengan mikro: bit dan menulis koordinat ke skrin OLED. Dalam panduan saya yang lain, saya telah melalui cara menyambungkan mikro: bit ke
Penjejakan Objek Berasaskan Pengesanan Warna: 10 Langkah
Penjejakan Objek Berasaskan Pengesanan Warna: Kisah Saya melakukan projek ini untuk belajar memproses gambar menggunakan Raspberry PI dan membuka CV. Untuk menjadikan projek ini lebih menarik, saya menggunakan dua motor SG90 Servo dan memasang kamera di atasnya. Satu motor digunakan untuk bergerak secara mendatar dan motor kedua digunakan untuk menggerakkan verticall
Penjejakan Objek - Kawalan Pemasangan Kamera: 4 Langkah
Penjejakan Objek - Kawalan Pemasangan Kamera: Halo semua, Dalam Instruksional ini, saya akan menunjukkan kepada anda kemajuan yang dibuat untuk Projek Penjejakan Objek saya. Di sini anda boleh menemui Instruksional sebelumnya: https://www.instructables.com/id/Object-Tracking/ dan di sini anda dapat mencari senarai main youtube dengan semua