Isi kandungan:

Raspberry Pi - Autonomous Mars Rover Dengan Penjejakan Objek OpenCV: 7 Langkah (dengan Gambar)
Raspberry Pi - Autonomous Mars Rover Dengan Penjejakan Objek OpenCV: 7 Langkah (dengan Gambar)

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

Video: Raspberry Pi - Autonomous Mars Rover Dengan Penjejakan Objek OpenCV: 7 Langkah (dengan Gambar)
Video: I Built a Mini Mars Rover 2024, November
Anonim
Raspberry Pi - Autonomous Mars Rover Dengan Penjejakan Objek OpenCV
Raspberry Pi - Autonomous Mars Rover Dengan Penjejakan Objek OpenCV

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

Image
Image
Bahan & Perisian Diperlukan
Bahan & Perisian Diperlukan

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 & Perisian Diperlukan
Bahan & Perisian Diperlukan
Bahan & Perisian Diperlukan
Bahan & Perisian Diperlukan

Bahan yang Diperlukan

  1. Raspberry Pi (Mana-mana kecuali sifar)
  2. Kamera Raspberry PI atau kamera web
  3. IC pemandu motor L293D
  4. Roda Robot (7x4cm) X 4
  5. Geared DC Motors (150RPM) X 4
  6. Paip PVC untuk casis

Perisian diperlukan

  1. Putty untuk SSH menggunakan Pi
  2. Buka CV untuk pengecaman objek

Langkah 3: Membangunkan Rover Chassis

Membina Casis Rover
Membina Casis Rover
Membina Casis Rover
Membina Casis Rover
Membina Casis Rover
Membina Casis Rover

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

Membina Pemasangan Ultrasonik Rangefinder
Membina 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

Skematik dan Sambungan Elektrik
Skematik dan Sambungan Elektrik
Skematik dan Sambungan Elektrik
Skematik dan Sambungan Elektrik

Sila buat sambungan elektrik seperti rajah litar yang dilampirkan.

Langkah 6: Pemasangan SSH dan Buka CV

SSH dan Pemasangan CV Terbuka
SSH dan Pemasangan CV Terbuka

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.

ssh [email protected]

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

Image
Image

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: