Isi kandungan:

Rover Terkawal Web: 14 Langkah (dengan Gambar)
Rover Terkawal Web: 14 Langkah (dengan Gambar)

Video: Rover Terkawal Web: 14 Langkah (dengan Gambar)

Video: Rover Terkawal Web: 14 Langkah (dengan Gambar)
Video: Solusi Kamera Tanpa Flip Screen & Bisa Buat HP | Ulanzi PT-14 2024, November
Anonim
Rover Terkawal Web
Rover Terkawal Web
Rover Terkawal Web
Rover Terkawal Web

Membina dan bermain dengan robot adalah keseronokan utama saya dalam hidup. Yang lain bermain golf atau ski, tetapi saya membina robot (kerana saya tidak dapat bermain golf atau ski:-). Saya merasa santai dan menyeronokkan! Untuk membuat sebahagian besar bot saya, saya menggunakan kit casis. Menggunakan kit membantu saya melakukan perkara yang lebih saya gemari, perisian dan elektronik dan juga membuat casis yang lebih baik untuk diri saya sendiri.

Dalam Instructable ini, kita akan melihat apa yang diperlukan untuk membuat rover terkawal Wifi / web yang ringkas tetapi kuat. Casis yang digunakan adalah Actobotics Gooseneck. Saya memilihnya kerana saiz, kemampuan pengembangan dan kosnya tetapi anda boleh menggunakan casis lain yang anda pilih.

Untuk projek seperti ini, kita memerlukan komputer papan tunggal yang kukuh dan untuk bot ini saya memilih untuk menggunakan komputer berasaskan Linux Raspberry Pi (RPI). RPI (dan Linux) memberi kami banyak pilihan pengekodan dan Python akan digunakan untuk sisi pengekodan. Untuk antara muka web saya menggunakan Flask, kerangka web ringan untuk Python.

Untuk menggerakkan motor, saya memilih RoboClaw 2x5a. Ia membolehkan komunikasi bersiri mudah untuk memerintahkannya dan berfungsi dengan baik dengan RPI dan motor di Gooseneck.

Akhirnya, ia mempunyai kamera web untuk maklum balas video jenis POV untuk mengarahkannya dari jauh. Saya akan membahas setiap topik dengan lebih terperinci kemudian.

Langkah 1: Perkakasan Diperlukan

Perkakasan Diperlukan
Perkakasan Diperlukan
Perkakasan Diperlukan
Perkakasan Diperlukan
Perkakasan Diperlukan
Perkakasan Diperlukan
Perkakasan Diperlukan
Perkakasan Diperlukan
  • Casis Actobotics Gooesneck atau pengganti yang sesuai dengan pilihan anda
  • Raspberry Pi pilihan anda (atau klon) - Model B RPI digunakan pada bot ini, tetapi mana-mana dengan sekurang-kurangnya dua port USB akan berfungsi
  • Plat Servo Piawai B x1
  • Kurungan Saluran Sudut Tunggal 90 ° x1
  • Pemandu motor RoboClaw 2x5a
  • S3003 atau servo saiz standard yang serupa
  • Papan roti kecil atau papan roti Mini
  • Wayar pelompat Perempuan ke Perempuan
  • Wayar pelompat Lelaki hingga Perempuan
  • Kamera web (pilihan) - Saya menggunakan Logitech C110, dan berikut adalah senarai kamera yang disokong untuk RPI
  • Sumber kuasa 5v-6v untuk kuasa servo
  • Bateri 7.2v-11.1v untuk menghidupkan motor pemacu
  • Bank kuasa USB 5v 2600mah (atau lebih tinggi) untuk RPI
  • Penyesuai Wifi USB

Di bot saya, saya menggunakan roda 4 untuk menjadikannya lebih Sedikit-Terrain-Dalaman. Untuk pilihan ini, anda memerlukan:

  • Roda Tugas Berat 4 "x2
  • Hab Skru Set Bore 4mm (0,770 inci) x2

Langkah 2: Memasang Casis

Memasang Casis
Memasang Casis
Memasang Casis
Memasang Casis
Memasang Casis
Memasang Casis

Pasang casis pertama mengikut arahan yang disertakan dengan casis atau video. Selepas selesai anda harus mempunyai sesuatu seperti gambar. CATATAN: Semasa memasang bahagian Leher, lepaskan pendakap pemasangan.

Di bot saya, saya memilih untuk mengganti roda yang disertakan dengan casis untuk roda tugas berat 4 . Ini adalah pilihan dan tidak diperlukan melainkan anda mahu melakukan perkara yang sama.

Langkah 3: Memasang Elektronik

Pemasangan Elektronik
Pemasangan Elektronik
Pemasangan Elektronik
Pemasangan Elektronik
Pemasangan Elektronik
Pemasangan Elektronik

Gooseneck mempunyai banyak ruang dan pilihan untuk memasang elektronik anda. Saya memberikan gambar-gambar ini sebagai garis panduan, tetapi anda boleh memilih bagaimana anda ingin meletakkan semuanya. Anda boleh menggunakan pita dua sisi, pita dua sisi, Velcro atau servo-tape untuk memasang papan dan bateri.

Langkah 4: Menambah Kamera Web

Menambah Kamera Web
Menambah Kamera Web
Menambah Kamera Web
Menambah Kamera Web
Menambah Kamera Web
Menambah Kamera Web

Ambil pendakap 90 darjah, hub servo ringan dan empat (4) skru.3125 untuk langkah ini:

  • Ambil hub servo dan letakkan di satu sisi pendakap dan pasangkannya dengan skru.2125 "seperti gambar
  • Seterusnya pasang servo ke dalam braket servo
  • Pasang pendakap 90 darjah dengan servo tanduk ke tulang belakang servos dan gunakan skru tanduk yang disertakan dengan servo untuk menghubungkannya bersama
  • Sekarang pasangkan Servo dalam kurungan ke bahagian atas leher angsa dengan skru yang tinggal
  • Pasang kamera dengan ikatan zip atau pita dua sisi pada pendakap 90 darjah

Gunakan gambar untuk panduan sekiranya diperlukan.

Langkah 5: Pendawaian Semuanya

Pendawaian Semuanya
Pendawaian Semuanya
Pendawaian Semuanya
Pendawaian Semuanya
Pendawaian Semuanya
Pendawaian Semuanya
Pendawaian Semuanya
Pendawaian Semuanya

Pendawaian agak terhad untuk robot ini.

The Motors:

Solder mengarah pada kedua-dua motor jika anda belum melakukannya

Dengan bahagian depan robot (hujung dengan leher angsa) menghadap ke arah anda:

  • Sambungkan wayar motor pada motor kiri ke saluran M1A dan M1B
  • Sambungkan wayar motor di motor kanan ke saluran M2A dan M2B

Sambungan darat (GND):

  • Sambungkan satu pin tanah pada RoboClaw ke papan pelompat tanah. Garis pin tanah di RoboClaw paling dekat dengan pusat (Lihat gambar)
  • Sambungkan PIN 6 pada RPI ke papan pelompat. Lihat gambar tajuk RPI untuk penugasan pin.
  • Sambungkan GND dari pek bateri servo ke salah satu pin pada papan pelompat.
  • Jalankan wayar pelompat dari papan pelompat ke wayar servos GND.

RPI ke RoboClaw:

Sambungkan pin RPI GPIO14 TXD ke pin RoboClaw S1

Kuasa:

  • Sambungkan wayar POS dari bateri servo ke plumbum servos
  • Sambungkan wayar POS dari bateri motor ke POS (+) terminal input kuasa motor RoboClaw. Kami akan membiarkan terminal GND terputus buat masa ini.

Langkah 6: Menyiapkan RPI

Menyiapkan RPI
Menyiapkan RPI

Saya menganggap pengguna di sini mengetahui beberapa perkara mengenai Linux dan RPI. Saya tidak merangkumi cara menyediakan atau menyambungkannya. Sekiranya anda memerlukan pertolongan, gunakan halaman di bawah.

Untuk mendapatkan persediaan RPI anda, lihat halaman berikut:

  • Persediaan Asas RPI
  • Panduan permulaan pantas RPI
  • Guilde persediaan NOOBS

Untuk halaman lompatan umum, halaman utama RPI dan halaman eLinux adalah tempat yang baik untuk bermula.

Lihat pautan ini untuk penyediaan Wifi umum RPI.

Sekiranya anda ingin menggunakan kamera atau kamera web di bot, lihat halaman ini untuk mendapatkan fail asas yang diperlukan.

  • Penyediaan cam RPI
  • Penyediaan cam eLinix RPI

Menstrim video:

Terdapat beberapa cara untuk membuat streaming video berfungsi pada RPI, tetapi kaedah yang saya sukai adalah menggunakan Motion.

Untuk memasangnya pada RPI anda jalankan ini: sudo apt-get install motion

Ini dapat diatur untuk mengaturnya untuk streaming juga.

Langkah 7: Mengkonfigurasi Port Serial RPI

Kita perlu mematikan mod konsol Linux untuk menggunakan RX dan TX kerana kita ingin bercakap dengan pengawal motor RoboClaw dari port ini. Untuk melakukan ini, anda boleh menggunakan kaedah ini atau alat ini. Pilihannya adalah pilihan anda kerana kedua-duanya melakukan perkara yang sama pada akhirnya.

Langkah 8: Memasang Modul Python

Anda memerlukan python yang dipasang di RPI dan juga pip pemasang python.

Untuk memasang pip lakukan:

  1. sudo apt-get install python-setuptools
  2. sudo easy_install pip

Kemudian:

  1. sudo pip pasang kelalang
  2. sudo pip pasang pyserial
  3. sudo pip pasang RPIO

Ini akan menjadi semua modul yang diperlukan agar kod dapat dijalankan.

Langkah 9: Menyiapkan RoboClaw

Saya mempunyai kod robot yang bercakap dengan RoboClaw dalam Mod Serial Standard pada 19200 baud.

Untuk menetapkan RoboClaw, lakukan:

  1. Tekan butang "MODE" pada RoboClaw
  2. Tekan butang set sehingga LED berkelip 5 (lima) kali antara kelewatan
  3. Tekan butang "LIPO" untuk menyimpan
  4. Seterusnya tekan butang "SET" sehingga LED berkelip 3 (tiga) kali antara kelewatan
  5. Tekan butang LIPO untuk menyimpan

Itu sahaja untuk menyiapkan pengawal motor. Lihat pdf yang dipautkan di atas untuk maklumat lebih lanjut sekiranya diperlukan.

Langkah 10: Memasang Rover Program / fail

Muat turun dan salin fail rover.zip ke RPI anda di direktori pengguna pi anda.

Sekiranya anda menjalankan Linux atau Mac, anda boleh menggunakan 'scp' untuk melakukannya:

scp ~ / location / of / the / file / rover.zip pi @ your_rpi_ip: / ~

Untuk Windows, anda boleh memuat turun dan menggunakan pscp dan kemudian lakukan:

pscp /lokasi/of/the/file/rover.zip pi @ your_rpi_ip: / ~

Setelah zipfile disalin ke RPI, log masuk ke dalamnya sebagai pengguna pi.

Sekarang jalankan:

unzip rover.zip

Ini akan membuka zip fail ke folder bernama 'rover' dan mempunyai yang berikut di bawah folder itu:

  • restrover.py (Kod python untuk robot)
  • statik (menyimpan fail gambar untuk butang di halaman kawalan)
  • templat (memegang fail index.htlm, halaman web kawalan)

Sekiranya anda menggunakan kamera web, ubah baris di bahagian bawah fail index.html dalam folder templat. Tukar URL di baris IFRAME agar sesuai dengan URL src untuk aliran video anda.

Langkah 11: Memulakan Bot Naik

Memulakan Bot Naik
Memulakan Bot Naik

Sambungkan kuasa USB ke RPI.

Untuk memulakan kod bot, log masuk sebagai pengguna pi dan jalankan:

  • cd rover
  • sudo python restrover.py

Sekiranya semuanya baik-baik saja, anda akan melihat skrin yang serupa dengan gambar dalam langkah ini

Sekiranya anda melihat kesilapan atau masalah, anda harus memperbaikinya sebelum meneruskannya.

Sekarang, sambungkan wayar GND (-) ke terminal NEG (-) pada input kuasa motor RoboClaw.

Langkah 12: Mengakses Halaman Kawalan Bot

Mengakses Halaman Kawalan Bot
Mengakses Halaman Kawalan Bot
Mengakses Halaman Kawalan Bot
Mengakses Halaman Kawalan Bot

Setelah skrip python robot berjalan, hidupkan RoboClaw dan kemudian arahkan ke ip RPI anda seperti:

your_rpi_ip

Anda mesti melihat halaman kawalan Web muncul seperti dalam gambar. Sekiranya tidak, periksa terminal output RPI anda dan cari kesilapan dan betulkan.

Setelah sampai di halaman, anda sudah bersedia untuk mengawal bot.

Robot akan bermula dalam tetapan "Med run" dan pada kelajuan Medium.

Bot dapat dikendalikan melalui butang di halaman atau dengan kekunci pada papan kekunci.

Kuncinya adalah:

  • w - ke hadapan
  • z - terbalik / belakang
  • a - pusing kiri panjang
  • s - pusing kanan panjang
  • q - pusing kiri pendek
  • e - pusing kanan pendek
  • 1 - kamera pan kiri
  • 2 - kamera pan sebelah kanan
  • 3 - kuali kiri penuh
  • 4 - kuali penuh ke kanan
  • / - kamera rumah / tengah
  • h - robot berhenti / berhenti

Terdapat penampan penundaan setengah saat antara arahan yang dihantar. Saya melakukan ini untuk menghilangkan perintah berulang yang tidak diingini. Anda tentu saja boleh mengeluarkannya dari kod jika anda mahu (dalam index.html)

Selebihnya kawalan dan pengawalannya harus jelas.

Langkah 13: Kod Python / Flask

Bot ini menggunakan rangka web Python dan Flask. Anda boleh mengetahui lebih lanjut mengenai Flask di sini jika anda berminat.

Perbezaan besar dari aplikasi Flask dan skrip Python biasa adalah @ app.route class / kaedah yang digunakan untuk melakukan pengendalian URI. Selain itu, Python hampir biasa.

#! / usr / bin / env python

# # Wifi / Web didorong Rover # # Ditulis oleh Scott Beasley - 2015 # # Menggunakan RPIO, pyserial dan Flask # import time import dari RPIO import PWM dari termos import Flask, render_template, request app = Flask (_name_, static_url_path = ") # Sambungkan ke port comm untuk bercakap dengan pengawal motor Roboclaw cuba: # Tukar kadar baud di sini jika berbeza dari 19200 roboclaw = serial. Serial ('/ dev / ttyAMA0', 19200) kecuali IOError: print ("Port Comm not found ") sys.exit (0) # Pemboleh ubah kawalan kelajuan dan pemacu last_direction = -1 speed_offset = 84 turn_tm_offset = 0.166 run_time = 0.750 # Posisi neutral servo (rumah) servo_pos = 1250 servo = PWM. Servo () servo.set_servo (18 # servo_pos def index (): return render_template ('index.html', name = None) @ app.route ("/ forward") def forward (): global_direction terakhir, run_ti saya mencetak "Teruskan" go_forward () last_direction = 0 # sleep 100ms + run_time time.sleep (0.100 + run_time) # Jika tidak berterusan, hentikan selepas kelewatan jika run_time> 0: last_direction = -1 berhenti () kembali "ok" @ app.route ("/ undur") def mundur (): global_akhir arah, print_time print "Backward" go_backward () last_direction = 1 # sleep 100ms + run_time time.sleep (0.100 + run_time) # Sekiranya tidak berterusan, hentikan selepas kelewatan if run_time> 0: last_direction = -1 stop () return "ok" @ app.route ("/ left") def left (): global_ lastrection, turn_tm_offset print "Left" go_left () last_direction = -1 # tidur @ 1 / 2 kali kedua.sleep (0.500 - turn_tm_offset) # stop stop () time.sleep (0.100) return "ok" @ app.route ("/ right") def right (): global last_direction, turn_tm_offset print "Right" go_right () # tidur @ 1/2 kali kedua.sleep (0.500 - turn_tm_offset) last_direction = -1 # stop stop () time.sleep (0.100) return "ok" @ app.route ("/ ltforward") def ltforward (): arah terakhir global, turn_t cetakan m_offset "Belok kiri ke depan" go_left () # tidur @ 1/8 kali kedua.sleep (0.250 - (turn_tm_offset / 2)) last_direction = -1 # stop stop () time.sleep (0.100) return "ok" @app.route ("/ rtforward") def rtforward (): arahan terakhir global, cetak_tm_offset cetak "Belok kanan ke depan" go_right () # tidur @ 1/8 kali kedua.sleep (0.250 - (turn_tm_offset / 2)) last_direction = -1 # berhenti berhenti () time.sleep (0.100) kembali "ok" @ app.route ("/ stop") def berhenti (): cetakan terakhir_direction global "Berhenti" berhenti () last_direction = -1 # tidur 100ms time.sleep (0.100) kembali "ok" @ app.route ("/ panlt") def panlf (): cetakan servo_pos global "Panlt" servo_pos - = 100 jika servo_pos 2500: servo_pos = 2500 servo.set_servo (18, servo_pos) # tidur 150ms masa. tidur (0.150) kembali "ok" @ app.route ("/ home") def home (): global servo_pos print "Home" servo_pos = 1250 servo.set_servo (18, servo_pos) # sleep 150ms time.sleep (0.150) return "ok" @ app.route ("/ panfull_lt") def panfull_lt (): cetakan servo_pos global "Pan penuh l eft "servo_pos = 500 servo.set_servo (18, servo_pos) # sleep 150ms time.sleep (0.150) return" ok "@ app.route (" / panfull_rt ") def panfull_rt (): cetakan servo_pos global" Pan penuh kanan "servo_pos = 2500 servo.set_servo (18, servo_pos) # sleep 150ms time.sleep (0.150) return "ok" @ app.route ("/ speed_low") def speed_low (): global speed_offset, last_direction, turn_tm_offset speed_offset = 42 turn_tm_offset = 0.001 # Kemas kini arah semasa untuk mendapatkan kelajuan baru jika last_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) return "ok" @ app.route ("/ speed_mid") def speed_mid (): speed_offset global, last_direction, turn_tm_offset speed_offset = 84 turn_tm_offset = 0.166 # Kemas kini arah semasa untuk mendapatkan kelajuan baru jika last_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) kembali "ok" @ app.route ("/ speed_hi") def speed_hi (): speed_offset global, last_direction, turn_tm_offset speed_offset = 126 tur n_tm_offset = 0.332 # Kemas kini arah semasa untuk mendapatkan kelajuan baru jika last_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) return "ok" @ app.route ("/ berterusan "def def Continuous (): print run_time global" Continuous run "run_time = 0 # sleep 100ms time.sleep (0.100) return" ok "@ app.route (" / mid_run ") def mid_run (): global run_time print" Mid run "run_time = 0.750 stop () # sleep 100ms time.sleep (0.100) return" ok "@ app.route (" / short_time ") def short_time (): cetakan run_time global" jangka pendek "run_time = 0.300 berhenti () # tidur 100ms time.sleep (0.100) return "ok" # # Fungsi pemacu motor # def go_forward (): speed_offset global jika speed_offset! = 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 + speed_offset)) other: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (255 - speed_offset)) def go_backward (): global speed_offset if speed_offset! = 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.wri te (chr (255 - speed_offset)) other: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 + speed_offset)) def go_left (): global speed_offset if speed_offset! = 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset)) other: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (255 - speed_offset)) def go_right (): global speed_offset jika speed_offset! = 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (255 - speed_offset)) other: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset) def def (): roboclaw.write (chr (0)) if _name_ == "_main_": app.run (host = '0.0.0.0', port = 80, debug = True)

Sekiranya anda tidak mahu atau memerlukan maklumat debug dari Flask, tetapkan debug ke 'false' pada baris app.run.

jika _nama_ == "_main_":

app.run (host = '0.0.0.0', port = 80, debug = Salah)

Anda juga boleh menukar port yang didengarkan oleh pelayan Flask http di sini.

Langkah 14: Menggunakan Perkakasan Lain

Sekiranya anda ingin menggunakan perkakasan lain, seperti jenis SBC (Single Board Computer) yang lain, anda pasti mempunyai masalah kecil apabila Python dan Flask berjalan di papan lain seperti Beagle Bone, PCDuino dll … Anda perlu menukar kod agar sesuai dengan GPIO susun atur dan gunakan kemampuan pemanduan servo papan baru.

Untuk menggunakan pemacu motor jenis lain, anda hanya perlu mengubah fungsi go_forward, go_backward, go_left, go_right dan stop untuk melakukan apa sahaja yang diperlukan oleh pemandu motor pengganti untuk membuat motor melakukan fungsi tertentu.

Disyorkan: