Daftar Isi:

Raspberry Pi - Rover Mars Otonom Dengan Pelacakan Objek OpenCV: 7 Langkah (dengan Gambar)
Raspberry Pi - Rover Mars Otonom Dengan Pelacakan Objek OpenCV: 7 Langkah (dengan Gambar)

Video: Raspberry Pi - Rover Mars Otonom Dengan Pelacakan Objek OpenCV: 7 Langkah (dengan Gambar)

Video: Raspberry Pi - Rover Mars Otonom Dengan Pelacakan Objek OpenCV: 7 Langkah (dengan Gambar)
Video: Как создать робота, управляемого веб-приложением Raspberry Pi (EarthRover № 1) 2024, Juli
Anonim
Raspberry Pi - Rover Mars Otonom Dengan Pelacakan Objek OpenCV
Raspberry Pi - Rover Mars Otonom Dengan Pelacakan Objek OpenCV

Didukung oleh Raspberry Pi 3, pengenalan objek CV Terbuka, sensor ultrasonik, dan motor DC yang diarahkan. Penjelajah ini dapat melacak objek apa pun yang dilatihnya dan bergerak di medan apa pun.

Langkah 1: Pendahuluan

Image
Image
Bahan & Perangkat Lunak Diperlukan
Bahan & Perangkat Lunak Diperlukan

Dalam Instruksi ini, kita akan membangun Autonomous Mars Rover yang dapat mengenali objek dan melacaknya menggunakan perangkat lunak Open CV yang berjalan pada Raspberry Pi 3 dengan opsi untuk menggunakan perangkat webcam atau kamera raspberry pi asli. Ini juga dilengkapi dengan sensor Ultrasonik yang dipasang pada servo untuk melacak jalannya di lingkungan gelap di mana kamera tidak akan berfungsi. Sinyal yang diterima dari Pi dikirim ke IC driver motor (L293D) yang menggerakkan motor DC 4 x 150RPM yang dipasang pada bodi yang dibuat dengan pipa PVC.

Langkah 2: Diperlukan Bahan & Perangkat Lunak

Bahan & Perangkat Lunak Diperlukan
Bahan & Perangkat Lunak Diperlukan
Bahan & Perangkat Lunak Diperlukan
Bahan & Perangkat Lunak Diperlukan

Bahan yang Dibutuhkan

  1. Raspberry Pi (Apa saja kecuali nol)
  2. Kamera Raspberry PI atau webcam
  3. IC driver motor L293D
  4. Roda Robot (7x4cm) X 4
  5. Motor DC Diarahkan (150RPM) X 4
  6. Pipa PVC untuk sasis

Perangkat lunak yang diperlukan

  1. Putty untuk SSH dalam Pi
  2. Buka CV untuk pengenalan objek

Langkah 3: Membangun Rover Chassis

Membangun Rover Chassis
Membangun Rover Chassis
Membangun Rover Chassis
Membangun Rover Chassis
Membangun Rover Chassis
Membangun Rover Chassis

Untuk membangun sasis PVC ini, Anda perlu

  • 2X8"
  • 2X4"
  • 4 T-Sendi

Susun pipa PVC dalam struktur seperti tangga dan masukkan ke dalam T-joint. Anda dapat menggunakan sealant PVC untuk membuat sambungan lebih kuat.

Motor DC yang digerakkan dihubungkan dengan sasis pipa PVC menggunakan klem dan kemudian roda dihubungkan dengan motor menggunakan sekrup.

Langkah 4: Membangun Perakitan Pengintai Ultrasonik

Membangun Perakitan Pengintai Ultrasonik
Membangun Perakitan Pengintai Ultrasonik

Rakitan pencari jangkauan ultrasonik dibuat menggunakan sensor Ultrasonik HC-SR04 yang terhubung dengan motor Servo Mikro. Kabel disambungkan terlebih dahulu dengan sensor ultrasonik sebelum dimasukkan ke dalam wadah plastik yang terhubung ke motor servo melalui sekrup.

Langkah 5: Skema dan Sambungan Listrik

Skema dan Sambungan Listrik
Skema dan Sambungan Listrik
Skema dan Sambungan Listrik
Skema dan Sambungan Listrik

Silakan buat sambungan listrik sesuai diagram sirkuit terlampir.

Langkah 6: SSH dan Buka Instalasi CV

Instalasi SSH dan Buka CV
Instalasi SSH dan Buka CV

Sekarang, kita perlu SSH ke raspberry pi kita untuk menginstal perangkat lunak yang diperlukan. Kami akan mulai dengan SSHing ke Raspberry Pi kami. Pastikan Pi Anda terhubung ke router yang sama dengan PC Anda dan Anda tahu itu alamat IP yang ditetapkan oleh router Anda. Sekarang, buka command prompt atau PUTTY jika Anda menggunakan Windows dan jalankan perintah berikut.

ssh [email protected]

IP Pi Anda mungkin berbeda, milik saya 192.168.1.6.

Sekarang, masukkan kata sandi default Anda - "raspberry"

Sekarang, setelah Anda memiliki SSH ke dalam Pi Anda, Mari kita mulai dengan memperbarui dengan perintah ini.

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

Mari kita instal alat pengembang yang diperlukan sekarang, sudo apt-get install build-essential cmake pkg-config

Selanjutnya, kita perlu menginstal beberapa paket I/O gambar yang akan membantu Pi kita mengambil berbagai format gambar dari disk.

sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev

Sekarang, beberapa paket untuk mengambil video, streaming langsung, dan mengoptimalkan kinerja 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 menginstal file header Python 2.7 dan Python 3 sehingga kita dapat mengkompilasi OpenCV dengan python binding

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

Mengunduh kode sumber OpenCV

cd ~

wget -O opencv.zip

buka zip opencv.zip

Mengunduh repositori opencv_contrib

wget -O opencv_contrib.zip

unzip opencv_contrib.zip

Disarankan juga untuk menggunakan lingkungan virtual untuk menginstal OpenCV.

sudo pip instal virtualenv virtualenvwrapper

sudo rm -rf ~/.cache/pip

Sekarang, virtualenv dan virtualenvwrapper telah diinstal, kita perlu memperbarui ~/.profile kita untuk memasukkan baris berikut di bagian bawah

ekspor WORKON_HOME=$HOME/.virtualenvs ekspor VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 sumber /usr/local/bin/virtualenvwrapper.sh

Buat lingkungan virtual python Anda

mkvirtualenv cv -p python2

beralih ke lingkungan virtual yang dibuat

sumber ~/.profile

kerja cv

Menginstal NumPy

pip install numpy

Kompilasi & Instal OpenCV

cd ~/opencv-3.3.0/

membangun mkdir

pembuatan cd

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/modules / -EXAMPLES=ON.

Akhirnya kompilasi OpenCV

buat -j4

Setelah perintah ini selesai dijalankan. Yang perlu Anda lakukan adalah menginstalnya.

sudo membuat konfigurasi

sudo ldconfig

Langkah 7: Menjalankan Kode Python untuk Rover

Image
Image

Buat file Python bernama tracker.py dan tambahkan kode berikut ke dalamnya.

sudo nano tracker.py

kode:-

#ASAR Program

#Program ini melacak bola merah dan menginstruksikan raspberry pi untuk mengikutinya. import sys sys.path.append('/usr/local/lib/python2.7/site-packages') import cv2 import numpy as 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)#Kiri Motor Maju IO.output(22, 0) IO.output(13, 1)#Motor Kanan Maju IO.output(15, 0) def bac(): IO.output (21, 0)#Motor Kiri mundur IO.output(22, 1) IO.output(13, 0)#Motor Kanan mundur IO.output(15, 1) def ryt(): IO.output(21, 0) #Motor Kiri mundur IO.output(22, 1) IO.output(13, 1)#Motor Kanan maju IO.output(15, 0) def lft(): IO.output(21, 1)#Motor Kiri maju IO.output(22, 0) IO.output(13, 0)#Motor Kanan mundur IO.output(15, 1) def stp(): IO.output(21, 0)#Motor kiri berhenti IO.output(22, 0) IO.output(13, 0)#Right Motor stop IO.output(15, 0) ################################## ############################################################# ##################### def main(): capWebcam = cv2. VideoCapture(0) # mendeklarasikan a VideoCapture objek dan kaitkan ke webcam, 0 => gunakan webcam pertama # tampilkan resolusi asli cetak "resolusi default = " + 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 pemrosesan yang lebih cepat capWebcam.set(cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # tampilkan resolusi yang diperbarui cetak "resolusi yang diperbarui = " + str(capWebcam.get(cv2. CAP_PROP_TH)RAME_PROP_TH)) + "x" + str(capWebcam.get(cv2. CAP_PROP_FRAME_HEIGHT)) if capWebcam.isOpened() == Salah: # periksa apakah objek VideoCapture dikaitkan ke webcam berhasil mencetak "kesalahan: capWebcam tidak berhasil diakses\n\n" # jika tidak, cetak pesan kesalahan ke std out os.system("pause") # jeda sampai pengguna menekan tombol sehingga pengguna dapat melihat pesan kesalahan kembali # dan fungsi keluar (yang keluar dari program) # end if while cv2.waitKey(1) != 27 dan capWebcam.isOpened(): # sampai tombol Esc ditekan atau koneksi webcam terputus blnFrameReadSuccessf ully, imgOriginal = capWebcam.read() # baca frame berikutnya jika tidak blnFrameReadSuccessfully atau imgOriginal is None: # jika frame tidak berhasil dibaca print "error: frame not read from webcam\n" # cetak pesan error ke std out os.system ("jeda") # jeda hingga pengguna menekan tombol sehingga pengguna dapat melihat pesan kesalahan break # exit while loop (yang keluar dari program) # end if imgHSV = cv2.cvtColor(imgOriginal, cv2. COLOR_BGR2HSV) imgThreshLow = cv2.inRange(imgHSV, np.array([0, 135, 135]), np.array([18, 255, 255])) imgThreshTinggi = 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.bentuk lingkaran = cv2. HoughCircles(imgThresh, cv2. HOUGH_GRADIENT, 5, intRows / 4) # isi lingkaran variabel dengan semua lingkaran di gambar yang diproses jika lingkaran is not None: # baris ini diperlukan untuk menjaga program agar tidak crash pada baris berikutnya jika tidak ada lingkaran yang ditemukan IO.output(7, 1) untuk lingkaran dalam lingkaran[0]: # untuk setiap lingkaran x, y, radius = lingkaran # break out x, y, dan radius print "posisi bola x = " + str(x) + ", y = " + str(y) + ", radius = " + str(radius) # cetak posisi bola dan 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) # menggambar lingkaran hijau kecil di tengah objek yang terdeteksi cv2.circle(imgOriginal, (x, y), radius, (0, 0, 255), 3) # menggambar lingkaran merah di sekitar objek yang terdeteksi # end for # end if else: IO.output(7, 0) cv2.namedWindow("imgOriginal", cv2. WINDOW_AUTOSIZE) # create windows, gunakan WINDOW_AUTOSIZE untuk ukuran jendela tetap cv2.namedWindow("imgThresh", cv2. WINDOW_AUTOSIZE) # atau gunakan WINDOW_NORMAL untuk mengizinkan pengubahan ukuran jendela cv2.imshow("imgOriginal", imgOri ginal) # tampilkan windows cv2.imshow("imgThresh", imgThresh) # end while cv2.destroyAllWindows() # hapus windows dari memori kembali #################### ############################################################# ########################### jika _name_ == "_main_": main()

Sekarang tinggal menjalankan programnya

python tracker.py

Selamat! rover self-driving Anda sudah siap! Bagian navigasi berbasis sensor ultrasonik akan segera selesai dan saya akan memperbarui instruksi ini.

Terima kasih sudah membaca!

Direkomendasikan: