Daftar Isi:

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

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

Video: Web Controlled Rover: 14 Langkah (dengan Gambar)
Video: Begini Detik-detik TV Analog Mulai Dimatikan | Onext Short 2024, November
Anonim
Penjelajah Terkendali Web
Penjelajah Terkendali Web
Penjelajah Terkendali Web
Penjelajah Terkendali Web

Membangun dan bermain dengan robot adalah kesenangan utama saya dalam hidup. Yang lain bermain golf atau ski, tetapi saya membuat robot (karena saya tidak bisa bermain golf atau ski:-). Saya merasa santai dan menyenangkan! Untuk membuat sebagian besar bot saya, saya menggunakan kit sasis. Menggunakan kit membantu saya melakukan lebih banyak hal yang saya sukai, perangkat lunak dan elektronik, dan juga membuat sasis yang lebih baik untuk diri saya sendiri.

Dalam Instruksi ini, kita akan melihat apa yang diperlukan untuk membuat penjelajah yang dikendalikan Wifi/web yang sederhana namun kuat. Sasis yang digunakan adalah Actobotics Gooseneck. Saya memilihnya karena ukuran, kemampuan perluasan, dan biayanya, tetapi Anda dapat menggunakan sasis lain yang Anda pilih sendiri.

Untuk proyek seperti ini, kita akan membutuhkan komputer papan tunggal yang solid dan untuk bot ini saya memilih untuk menggunakan Raspberry Pi (RPI) komputer berbasis Linux. RPI (dan Linux) memberi kita banyak opsi pengkodean dan Python akan digunakan untuk sisi pengkodean. Untuk antarmuka web saya menggunakan Flask, kerangka kerja web ringan untuk Python.

Untuk menggerakkan motor, saya memilih RoboClaw 2x5a. Ini memungkinkan komunikasi serial sederhana untuk memerintahkannya dan bekerja dengan baik dengan RPI dan motor di Gooseneck.

Akhirnya, ia memiliki webcam untuk umpan balik video tipe POV untuk mengemudikannya dari jarak jauh. Saya akan membahas setiap topik secara lebih rinci nanti.

Langkah 1: Perangkat Keras Dibutuhkan

Diperlukan Perangkat Keras
Diperlukan Perangkat Keras
Diperlukan Perangkat Keras
Diperlukan Perangkat Keras
Diperlukan Perangkat Keras
Diperlukan Perangkat Keras
Diperlukan Perangkat Keras
Diperlukan Perangkat Keras
  • Sasis Actobotics Gooesneck atau pengganti yang sesuai pilihan Anda
  • Raspberry Pi pilihan Anda (atau kloning) - Model RPI B digunakan pada bot ini, tetapi yang memiliki setidaknya dua port USB akan berfungsi
  • Plat Servo Standar B x1
  • 90 ° Braket Saluran Sudut Tunggal x1
  • Pengemudi motor RoboClaw 2x5a
  • S3003 atau servo ukuran standar serupa
  • Papan tempat memotong roti kecil atau papan tempat memotong roti Mini
  • Kabel jumper Wanita ke Wanita
  • Kabel jumper Pria ke Wanita
  • Web cam (opsional) - Saya menggunakan Logitech C110, dan berikut adalah daftar kamera yang didukung untuk RPI
  • Sumber daya 5v-6v untuk daya servo
  • Baterai 7.2v-11.1v untuk menggerakkan motor penggerak
  • Bank daya USB 5v 2600mah (atau lebih tinggi) untuk RPI
  • Adaptor Wifi USB

Di bot saya, saya menggunakan roda 4 untuk membuatnya sedikit lebih All-Terrain-Indoor. Untuk opsi ini Anda perlu:

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

Langkah 2: Merakit Sasis

Merakit Sasis
Merakit Sasis
Merakit Sasis
Merakit Sasis
Merakit Sasis
Merakit Sasis

Pertama, rakit sasis dengan mengikuti instruksi yang disertakan dengan sasis atau video. Setelah selesai Anda harus memiliki sesuatu seperti gambar. CATATAN: Saat merakit bagian Leher, biarkan braket pemasangan terlepas.

Pada bot saya, saya memilih untuk mengganti roda yang disertakan dengan sasis untuk roda tugas berat 4 . Ini opsional dan tidak diperlukan kecuali Anda ingin melakukan hal yang sama.

Langkah 3: Memasang Elektronik

Memasang Elektronik
Memasang Elektronik
Memasang Elektronik
Memasang Elektronik
Memasang Elektronik
Memasang Elektronik

Gooseneck memiliki banyak ruang dan opsi untuk memasang perangkat elektronik Anda. Saya memberi Anda gambar-gambar ini sebagai garis panduan, tetapi Anda dapat memilih bagaimana Anda ingin meletakkan semuanya. Anda dapat menggunakan stand-off, double tape, Velcro atau servo-tape untuk memasang papan dan baterai.

Langkah 4: Menambahkan Webcam

Menambahkan Kamera Web
Menambahkan Kamera Web
Menambahkan Kamera Web
Menambahkan Kamera Web
Menambahkan Kamera Web
Menambahkan Kamera Web

Ambil braket 90 derajat, hub servo ringan, dan empat (4) sekrup 0,3125 untuk langkah ini:

  • Ambil hub servo dan letakkan di satu sisi braket dan kencangkan bersama-sama dengan sekrup.2125" seperti yang digambarkan
  • Selanjutnya pasang servo ke braket servo
  • Pasang braket 90 derajat dengan tanduk servo ke tulang belakang servos dan gunakan sekrup tanduk yang disertakan dengan servo untuk menghubungkannya bersama-sama
  • Sekarang pasang Servo di braket ke bagian atas leher angsa dengan sekrup yang tersisa
  • Pasang kamera dengan ikatan ritsleting atau selotip dua sisi ke braket 90 derajat

Gunakan gambar untuk panduan jika diperlukan.

Langkah 5: Menghubungkan Semuanya

Menghubungkan Semuanya
Menghubungkan Semuanya
Menghubungkan Semuanya
Menghubungkan Semuanya
Menghubungkan Semuanya
Menghubungkan Semuanya
Menghubungkan Semuanya
Menghubungkan Semuanya

Kabel cukup lurus ke depan untuk robot ini.

Motor:

Solder mengarah pada kedua motor jika Anda belum melakukannya

Dengan bagian depan robot (ujung berleher angsa) menghadap menjauh dari Anda:

  • Hubungkan kabel motor di motor kiri ke saluran M1A dan M1B
  • Hubungkan kabel motor pada motor kanan ke saluran M2A dan M2B

Koneksi ground (GND):

  • Hubungkan satu pin arde pada RoboClaw ke papan jumper arde. Garis pin ground pada RoboClaw paling dekat dengan pusat (Lihat gambar)
  • Hubungkan PIN 6 pada RPI ke papan jumper. Lihat gambar header RPI untuk penetapan pin.
  • Hubungkan GND dari paket baterai servo ke salah satu pin pada papan jumper.
  • Jalankan kabel jumper dari papan jumper ke kabel GND servos.

RPI ke RoboClaw:

Hubungkan pin RPI GPIO14 TXD ke pin RoboClaw S1

Kekuasaan:

  • Hubungkan kabel POS dari baterai servo ke kabel POS servos
  • Hubungkan kabel POS dari baterai motor ke POS (+) terminal input daya motor RoboClaw. Kami akan membiarkan terminal GND terputus untuk saat ini.

Langkah 6: Menyiapkan RPI

Menyiapkan RPI
Menyiapkan RPI

Saya berasumsi pengguna di sini tahu beberapa tentang Linux dan RPI. Saya tidak membahas cara mengatur atau menghubungkannya. Jika Anda memerlukan bantuan dengan itu, gunakan halaman di bawah ini.

Untuk mendapatkan pengaturan RPI Anda, lihat halaman berikut:

  • Pengaturan Dasar RPI
  • Panduan memulai cepat RPI
  • Guilde pengaturan NOOBS

Untuk halaman jump-off umum, halaman utama RPI dan halaman eLinux adalah tempat yang bagus untuk memulai.

Lihat tautan ini untuk pengaturan Wifi umum RPI.

Jika Anda berencana menggunakan semacam kamera atau kamera web di bot, lihat halaman ini untuk mendapatkan file dasar yang dibutuhkan.

  • Pengaturan kamera RPI
  • Pengaturan kamera eLinix RPI

Video streaming:

Ada beberapa cara agar streaming video berfungsi pada RPI, tetapi metode yang saya sukai adalah menggunakan Motion.

Untuk menginstalnya di RPI Anda, jalankan ini: Sudo apt-get install motion

Instruksi ini juga membahas pengaturannya untuk streaming.

Langkah 7: Mengkonfigurasi Port Serial RPI

Kita perlu menonaktifkan mode konsol Linux untuk menggunakan RX dan TX karena kita ingin berbicara dengan pengontrol motor RoboClaw dari port ini. Untuk melakukan ini, Anda dapat menggunakan metode ini atau alat ini. Pilihan ada di tangan Anda pada metode karena mereka berdua melakukan hal yang sama pada akhirnya.

Langkah 8: Memasang Modul Python

Anda perlu menginstal python pada RPI serta pip penginstal paket python.

Untuk menginstal pip lakukan:

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

Kemudian:

  1. sudo pip install labu
  2. sudo pip install pyserial
  3. sudo pip instal RPIO

Ini akan menjadi semua modul yang diperlukan untuk menjalankan kode.

Langkah 9: Menyiapkan RoboClaw

Saya memiliki kode robot yang berbicara dengan RoboClaw dalam Mode Serial Standar pada 19200 baud.

Untuk mengatur RoboClaw untuk ini, lakukan:

  1. Tekan tombol "MODE" pada RoboClaw
  2. Tekan tombol set sampai LED berkedip 5 (lima) kali antara penundaan
  3. Tekan tombol "LIPO" untuk menyimpan
  4. Selanjutnya tekan tombol "SET" sampai LED berkedip 3 (tiga) kali antara penundaan
  5. Tekan tombol LIPO untuk menyimpan

Itu saja untuk mengatur pengontrol motor. Lihat pdf yang ditautkan di atas untuk info lebih lanjut jika diperlukan.

Langkah 10: Menginstal Program/file Rover

Unduh dan salin file rover.zip ke RPI Anda di direktori pengguna pi Anda.

Jika Anda menjalankan Linux atau Mac, Anda dapat menggunakan 'scp' untuk melakukannya:

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

Untuk Windows, Anda dapat mengunduh dan menggunakan pscp dan kemudian melakukan:

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

Setelah file zip disalin ke RPI, masuk ke dalamnya sebagai pengguna pi.

Sekarang jalankan:

unzip rover.zip

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

  • restrover.py (Kode python untuk robot)
  • static (menampung file gambar untuk tombol pada halaman kontrol)
  • templates (menampung file index.html, halaman web kontrol)

Jika Anda menggunakan web cam, ubah baris di dekat bagian bawah file index.html di folder template. Ubah URL di baris IFRAME agar sesuai dengan URL src untuk streaming video Anda.

Langkah 11: Memulai Bot Up

Memulai Bot
Memulai Bot

Hubungkan daya USB ke RPI.

Untuk memulai kode bot, masuk sebagai pengguna pi dan jalankan:

  • penjelajah cd
  • sudo python restrover.py

Jika semuanya baik-baik saja, Anda akan melihat layar yang mirip dengan gambar di langkah ini

Jika Anda melihat kesalahan atau masalah, Anda harus memperbaikinya sebelum melanjutkan.

Sekarang, sambungkan kabel GND (-) ke terminal NEG (-) pada input daya motor RoboClaw.

Langkah 12: Mengakses Halaman Kontrol Bot

Mengakses Halaman Kontrol Bot
Mengakses Halaman Kontrol Bot
Mengakses Halaman Kontrol Bot
Mengakses Halaman Kontrol Bot

Setelah skrip python robot berjalan, nyalakan RoboClaw dan kemudian arahkan ke ip RPI Anda seperti:

your_rpi_ip

Anda akan melihat halaman kontrol Web muncul seperti pada gambar. Jika tidak, periksa terminal keluaran RPI Anda dan cari kesalahan apa pun dan perbaiki.

Setelah di halaman, Anda siap untuk mengontrol bot.

Robot akan mulai dalam pengaturan "Med run" dan pada kecepatan Sedang.

Bot dapat dikontrol melalui tombol di halaman atau dengan tombol di keyboard.

Kuncinya adalah:

  • w - maju
  • z - mundur/mundur
  • a - belok kiri panjang
  • s - belok kanan panjang
  • q - belok kiri pendek
  • e - belok kanan pendek
  • 1 - geser kamera ke kiri
  • 2 - geser kamera ke kanan
  • 3 - panci kiri penuh
  • 4 - geser ke kanan penuh
  • / - kamera rumah/tengah
  • h - menghentikan/menghentikan robot

Ada buffer penundaan setengah detik antara perintah yang dikirim. Saya melakukan ini untuk menghilangkan perintah berulang yang tidak diinginkan. Anda tentu saja dapat menghapus ini dari kode jika Anda mau (di index.html)

Sisa kontrol dan pengendaliannya harus cukup jelas.

Langkah 13: Kode Python/Flask

Bot ini menggunakan Python dan kerangka web Flask. Anda dapat mempelajari lebih lanjut tentang Flask di sini jika Anda tertarik.

Perbedaan besar dari aplikasi Flask dan skrip Python normal adalah @app.route class/method yang digunakan untuk melakukan penanganan URI. Selain itu, sebagian besar Python normal.

#!/usr/bin/env python

# # Wifi/Web driven Rover # # Ditulis oleh Scott Beasley - 2015 # # Menggunakan RPIO, pyserial dan Flask # waktu impor serial impor dari RPIO impor PWM dari labu impor Flask, render_template, request app = Flask (_name_, static_url_path = '') # Hubungkan ke port komunikasi untuk berbicara dengan pengontrol motor Roboclaw coba: # Ubah baud rate di sini jika berbeda dari 19200 roboclaw = serial. Serial ('/dev/ttyAMA0', 19200) kecuali IOError: print ("Comm port not ditemukan") sys.exit (0) # Variabel kontrol kecepatan dan drive last_direction = -1 speed_offset = 84 turn_tm_offset = 0,166 run_time = 0,750 # Posisi netral servo (rumah) servo_pos = 1250 servo = PWM. Servo () servo.set_servo (18, servo_pos) # Sedikit waktu untuk mengatur waktu. tidur (3) # # Penangan URI - semua tindakan halaman bot dilakukan di sini # # Kirim halaman kontrol bot (halaman beranda) @app.route ("/") def index (): return render_template ('index.html', name = None) @app.route ("/forward") def forward (): global last_direction, run_ti saya print "Maju" go_forward () last_direction = 0 # sleep 100ms + run_time time.sleep (0.100 + run_time) # Jika tidak terus menerus, maka hentikan setelah penundaan jika run_time > 0: last_direction = -1 halt () kembalikan "ok" @ app.route ("/backward") def backward(): global last_direction, run_time print "Backward" go_backward() last_direction = 1 # sleep 100ms + run_time time.sleep (0,100 + run_time) # Jika tidak terus menerus, maka hentikan setelah penundaan jika run_time > 0: last_direction = -1 halt() return "ok" @app.route ("/left") def left(): global last_direction, turn_tm_offset print "Left" go_left() last_direction = -1 # sleep @1 /2 second time.sleep (0.500 - turn_tm_offset) # stop halt () time.sleep (0.100) return "ok" @app.route ("/right") def right (): global last_direction, turn_tm_offset print "Right" go_right () # sleep @1/2 detik time.sleep (0.500 - turn_tm_offset) last_direction = -1 # stop halt () time.sleep (0.100) return "ok" @app.route ("/ltforward") def ltforward (): arah_akhir global, belok_t m_offset print "Left forward turn" go_left() # sleep @1/8 detik waktu.sleep (0.250 - (turn_tm_offset / 2)) last_direction = -1 # stop halt () time.sleep (0.100) return "ok" @app.route ("/rtforward") def rtforward (): global last_direction, turn_tm_offset print "Right forward turn" go_right () # sleep @1/8 detik waktu.sleep (0,250 - (turn_tm_offset / 2)) last_direction = -1 # stop halt() time.sleep (0.100) return "ok" @app.route ("/stop") def stop(): global last_direction print "Stop" halt() last_direction = -1 # sleep 100ms time.sleep (0.100) kembalikan "ok" @app.route ("/panlt") def panlf (): global servo_pos print "Panlt" servo_pos -= 100 jika servo_pos 2500: servo_pos = 2500 servo.set_servo (18, servo_pos) # waktu tidur 150ms. sleep (0,150) return "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 (): global servo_pos print "Pan full 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(): global servo_pos print "Pan full right" 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 # Perbarui arah saat ini untuk mendapatkan kecepatan baru jika last_direction == 0: go_forward () jika last_direction == 1: go_backward () # sleep 150ms time.sleep (0,150) return "ok" @app.route ("/speed_mid") def speed_mid (): global speed_offset, last_direction, turn_tm_offset speed_offset = 84 turn_tm_offset = 0,166 # Perbarui arah saat ini untuk mendapatkan kecepatan baru jika last_direction == 0: go_forward () jika last_direction == 1: go_backward () # sleep 150ms time.sleep (0,150) kembalikan "ok" @app.route ("/speed_hi") def speed_hi (): global speed_offset, last_direction, turn_tm_offset speed_offset = 126 tur n_tm_offset = 0,332 # Perbarui arah saat ini untuk mendapatkan kecepatan baru jika last_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0,150) return "ok" @app.route ("/continuous ") def continuous (): global run_time print "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 halt() # sleep 100ms time.sleep (0.100) return "ok" @app.route ("/short_time") def short_time(): global run_time print "Short run" run_time = 0.300 halt() # sleep 100ms time.sleep (0.100) return "ok" # # Fungsi penggerak motor # def go_forward (): global speed_offset if speed_offset != 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 + speed_offset)) else: 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)) else: 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)) else: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (255 - speed_offset)) def go_right (): global speed_offset if speed_offset != 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (255 - speed_offset)) else: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset)) def halt (): roboclaw.write (chr (0)) if _name_ == "_main_": app.run (host = '0.0.0.0', port = 80, debug = True)

Jika Anda tidak ingin atau membutuhkan informasi debug dari Flask, setel debug ke 'false' pada baris app.run.

if _name_ == "_main_":

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

Anda juga dapat mengubah port yang didengarkan oleh server Flask http di sini.

Langkah 14: Menggunakan Perangkat Keras Lain

Jika Anda ingin menggunakan perangkat keras lain, seperti jenis SBC (Single Board Computer) lainnya, Anda akan mengalami sedikit masalah dalam menjalankan Python dan Flask di papan lain seperti Beagle Bone, PCDuino dll… Anda harus mengubah kode agar sesuai dengan GPIO tata letak dan gunakan kemampuan mengemudi servo dari papan baru.

Untuk menggunakan driver motor tipe lain, Anda hanya perlu memodifikasi fungsi go_forward, go_backward, go_left, go_right dan halt untuk melakukan apa pun yang dibutuhkan driver motor pengganti untuk membuat motor melakukan fungsi tertentu.

Direkomendasikan: