Mündəricat:

Veb idarə olunan Rover: 14 addım (şəkillərlə birlikdə)
Veb idarə olunan Rover: 14 addım (şəkillərlə birlikdə)

Video: Veb idarə olunan Rover: 14 addım (şəkillərlə birlikdə)

Video: Veb idarə olunan Rover: 14 addım (şəkillərlə birlikdə)
Video: İnternetdən pul qazanmağın 5 yolu - 2022 2024, Noyabr
Anonim
Veb idarə olunan Rover
Veb idarə olunan Rover
Veb idarə olunan Rover
Veb idarə olunan Rover

Robotlar qurmaq və onlarla oynamaq həyatda mənim əsas günahkar zövqümdür. Digərləri golf və ya xizək oynayır, amma mən robotlar qururam (çünki golf və ya xizək oynaya bilmərəm:-). Rahat və əyləncəli hesab edirəm! Botlarımın çoxunu etmək üçün şassi dəstlərindən istifadə edirəm. Kitlərdən istifadə etmək, daha çox sevdiyim işi, proqram təminatı və elektronikanı etməyə kömək edir və eyni zamanda özüm üçün daha yaxşı bir şassi yaradır.

Bu Təlimat kitabında sadə, lakin sağlam bir Wifi/veb idarə olunan rover etmək üçün nə lazım olduğunu araşdıracağıq. İstifadə olunan şassi Actobotics Gooseneck -dir. Ölçüsünə, genişləndirmə qabiliyyətinə və qiymətinə görə seçdim, ancaq özünüz seçdiyiniz başqa bir şassi istifadə edə bilərsiniz.

Belə bir layihə üçün yaxşı bir tək lövhəli kompüterə ehtiyacımız olacaq və bu bot üçün Raspberry Pi (RPI) Linux əsaslı bir kompüterdən istifadə etməyi seçdim. RPI (və Linux) bizə çoxlu kodlaşdırma variantları verir və kodlaşdırma tərəfi üçün Python istifadə ediləcək. Veb interfeysi üçün Python üçün yüngül bir veb çərçivəsi olan Flaskdan istifadə edirəm.

Motorları idarə etmək üçün RoboClaw 2x5a seçdim. Bu əmr vermək üçün sadə serial ünsiyyətinə imkan verir və RPI və Gooseneckdəki motorlarla yaxşı işləyir.

Nəhayət, uzaqdan idarə etmək üçün POV tipli video rəyləri üçün bir veb kamerası var. Hər bir mövzunu daha sonra daha ətraflı izah edəcəyəm.

Addım 1: Avadanlıq tələb olunur

Avadanlıq Lazımdır
Avadanlıq Lazımdır
Avadanlıq Lazımdır
Avadanlıq Lazımdır
Avadanlıq Lazımdır
Avadanlıq Lazımdır
Avadanlıq Lazımdır
Avadanlıq Lazımdır
  • Actobotics Gooesneck şassisi və ya seçdiyiniz uyğun bir əvəz
  • İstədiyiniz Raspberry Pi (və ya klon) - Bu botda bir RPI modeli B istifadə olunur, lakin ən azı iki USB portu olan hər kəs işləyəcək
  • Standart Servo Lövhə B x1
  • 90 ° Tək Açılı Kanal Mötərizəsi x1
  • RoboClaw 2x5a motor sürücü
  • S3003 və ya oxşar standart ölçü servo
  • Kiçik çörək taxtası və ya Mini çörək taxtası
  • Dişi -Dişi tullanan telləri
  • Kişi -Dişi tullanan telləri
  • Veb kamera (isteğe bağlı) - Logitech C110 istifadə edirəm və burada RPI üçün dəstəklənən kameraların siyahısı
  • Servo gücü üçün 5v-6v enerji mənbəyi
  • Sürücü motoru üçün 7.2v-11.1v batareya
  • RPI üçün 5v 2600mah (və ya daha yüksək) USB güc bankı
  • USB Wifi adapteri

Botumda 4 təkərlərdən istifadə edərək bir az daha Araziyə qapalı hala gətirirəm. Bu seçim üçün sizə lazım olacaq:

  • 4 "Ağır Təkər x2
  • 4mm Çuxurlu Vida Hubı (0.770 düym) x2

Addım 2: Şassinin yığılması

Şassinin yığılması
Şassinin yığılması
Şassinin yığılması
Şassinin yığılması
Şassinin yığılması
Şassinin yığılması

Əvvəlcə şassi və ya videoda olan təlimatlara uyğun olaraq şassi yığın. Bitirdikdən sonra şəkil kimi bir şeyə sahib olmalısınız. DİQQƏT: Boyun hissəsini montaj edərkən, montaj braketini qapalı qoyun.

Botumda, şassinin 4 ağır yük təkərləri üçün gəldiyi təkərləri dəyişdirməyi seçdim. Eyni şeyi etmək istəmirsinizsə, bu isteğe bağlıdır və lazım deyil.

Addım 3: Elektronikanın quraşdırılması

Elektronikanın quraşdırılması
Elektronikanın quraşdırılması
Elektronikanın quraşdırılması
Elektronikanın quraşdırılması
Elektronikanın quraşdırılması
Elektronikanın quraşdırılması

Gooseneck -də elektronikanı quraşdırmaq üçün bir çox yer və seçim var. Bu şəkilləri sizə bir bələdçi olaraq verirəm, amma hamısını necə düzəltmək istədiyinizi özünüz seçə bilərsiniz. Lövhəni və batareyaları quraşdırmaq üçün dayaqlar, iki tərəfli lent, Velcro və ya servo-lentdən istifadə edə bilərsiniz.

Addım 4: Veb kameranı əlavə edin

Veb kamera əlavə olunur
Veb kamera əlavə olunur
Veb kamera əlavə olunur
Veb kamera əlavə olunur
Veb kamera əlavə olunur
Veb kamera əlavə olunur

Bu addım üçün 90 dərəcə mötərizəni, yüngül servo hubını və.3125 vidaların dördünü (4) götürün:

  • Servo hubını götürün və mötərizənin bir tərəfinə qoyun və şəkildəki kimi.2125 "vintlər ilə bərkidin.
  • Sonrakı servo servo braketinə quraşdırın
  • Servo buynuzu olan 90 dərəcə mötərizəni servo belinə bağlayın və onları birləşdirmək üçün servo ilə gələn buynuz vidasını istifadə edin.
  • İndi Servanı mötərizədə qalan vintlər ilə qaz boynunun üstünə quraşdırın
  • Fermuarlı və ya iki tərəfli lentli kameranı 90 dərəcə mötərizəyə bağlayın

Gerekirse bələdçilər üçün şəkillərdən istifadə edin.

Addım 5: Hamısını bağlayın

Hamısını Qabaqlamaq
Hamısını Qabaqlamaq
Hamısını Qabaqlamaq
Hamısını Qabaqlamaq
Hamısını Qabaqlamaq
Hamısını Qabaqlamaq
Hamısını Qabaqlamaq
Hamısını Qabaqlamaq

Kablolama bu robot üçün olduqca çətin vəziyyətdədir.

Motorlar:

Lehim, hər iki mühərrikə aparır, əgər bunu hələ etməmisinizsə

Robotlar ön tərəfdə (sonu qaz boynu ilə) üzünüzə baxaraq:

  • Sol motordakı motor tellərini M1A və M1B kanalına bağlayın
  • Sağdakı motor tellərini M2A və M2B kanalına bağlayın

Torpaq (GND) əlaqələri:

  • RoboClaw üzərindəki bir torpaq pinini yerə tullanan lövhəyə bağlayın. RoboClawdakı torpaq pin xətti mərkəzə ən yaxındır (Şəkilə bax)
  • RPI -dəki PIN 6 -nı tullanan lövhəyə qoşun. Pin atamaları üçün RPI başlıq şəklinə baxın.
  • GND -ni servo batareya paketindən tullanan lövhədəki pinlərdən birinə bağlayın.
  • Keçid lövhəsindən servo GND telinə keçid telini çəkin.

RoboClaw -a RPI:

RPI GPIO14 TXD pinini RoboClaw S1 pininə qoşun

Güc:

  • POS telini servo batareyadan servo POS ucuna qoşun
  • Motor akkumulyatorundan POS telini RoboClaw motor güc giriş terminalının POS (+) nöqtəsinə qoşun. GND terminalını hələlik əlaqəsiz olaraq tərk edəcəyik.

Addım 6: RPI qurmaq

RPI qurulması
RPI qurulması

Güman edirəm ki, buradakı istifadəçi Linux və RPI haqqında bir şey bilir. Necə qurulacağını və ya birinə qoşulmağı əhatə etmirəm. Bunun üçün yardıma ehtiyacınız varsa, aşağıdakı səhifələrdən istifadə edin.

RPI quruluşunuzu əldə etmək üçün aşağıdakı səhifələrə baxın:

  • RPI Əsas Quraşdırma
  • RPI Tez başlanğıc təlimatı
  • NOOBS quraşdırma gildiyası

Ümumi keçid səhifələri üçün, RPI ana səhifəsi və eLinux səhifələri başlamaq üçün əla yerlərdir.

Ümumi RPI Wifi qurulması üçün bu linkə baxın.

Botda bir növ kamera və ya veb kameradan istifadə etməyi planlaşdırırsınızsa, lazım olan əsas sənədləri əldə etmək üçün bu səhifələrə baxın.

  • RPI kamera quruluşu
  • eLinix RPI kamera qurğusu

Video axını:

Video axını bir RPI üzərində işləməyin bir neçə yolu var, amma üstünlük verdiyim üsul Motion istifadə etməkdir.

RPI-yə yükləmək üçün bunu işlədin: sudo apt-get install motion

Bu təlimat, onu axın etmək üçün qurmağı da əhatə edir.

Addım 7: RPI Serial Portunu konfiqurasiya edin

Bu portdan RoboClaw motor nəzarətçisi ilə danışmaq istədiyimiz üçün RX və TX istifadə etmək üçün Linux konsol rejimini deaktiv etməliyik. Bunu etmək üçün bu metoddan və ya bu vasitədən istifadə edə bilərsiniz. Hər ikisi də sonunda eyni şeyi etdikləri üçün seçim üsulu sizindir.

Addım 8: Python Modullarının Quraşdırılması

RPI -də python və python paketi yükləyicisi pipinə ehtiyacınız olacaq.

Pip quraşdırmaq üçün aşağıdakıları edin:

  1. sudo apt-get python-setuptools quraşdırın
  2. sudo easy_install pip

Sonra:

  1. sudo pip quraşdırma qabı
  2. sudo pip pyserial quraşdırın
  3. sudo pip RPIO qurun

Bu kodun işləməsi üçün lazım olan bütün modullar olacaq.

Addım 9: RoboClaw qurmaq

RoboClaw ilə Standart Serial Modunda 19200 bodda danışan robot kodum var.

Bunun üçün RoboClaw qurmaq üçün:

  1. RoboClawdakı "MODE" düyməsini basın
  2. LED gecikmələr arasında 5 (beş) dəfə yanıb -sönənə qədər düyməni basın
  3. Saxlamaq üçün "LIPO" düyməsini basın
  4. Gecikmələr arasında LED 3 (üç) dəfə yanıb -sönənə qədər "SET" düyməsini vurun
  5. Saxlamaq üçün LIPO düyməsini vurun

Motor nəzarətçisini qurmaq üçün budur. Lazım gələrsə, daha çox məlumat üçün yuxarıdakı linkə daxil olun.

Addım 10: Rover Proqramının/fayllarının quraşdırılması

Rover.zip faylını yükləyin və pi istifadəçi qovluğunuzdakı RPI -ə kopyalayın.

Linux və ya Mac istifadə edirsinizsə, bunu etmək üçün 'scp' istifadə edə bilərsiniz:

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

Windows üçün, pscp -ni yükləyib istifadə edə və sonra edə bilərsiniz:

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

Zip faylı RPI -ə kopyalandıqdan sonra pi istifadəçisi olaraq daxil olun.

İndi qaç:

açar rover.zip

Bu, faylları 'rover' adlı bir qovluğa açacaq və bu qovluğun altında aşağıdakılar olacaq:

  • restrover.py (Robot üçün python kodu)
  • statik (nəzarət səhifəsindəki düymələr üçün şəkil fayllarını saxlayır)
  • şablonlar (index.htlm faylını, nəzarət veb səhifəsini saxlayır)

Bir veb kameradan istifadə edirsinizsə, şablon qovluğunda index.html faylının altına yaxın olan sətri dəyişdirin. IFRAME xəttindəki URL -ni video axınınızın src URL -si ilə uyğunlaşdırın.

Addım 11: Botu yuxarı qaldırın

Botu Yuxarı Başlatmaq
Botu Yuxarı Başlatmaq

USB gücünü RPI -yə qoşun.

Bot kodunu işə salmaq üçün pi istifadəçisi olaraq daxil olun və işləyin:

  • cd rover
  • sudo python restrover.py

Hər şey qaydasındadırsa, bu addımdakı görüntüyə bənzər bir ekran görməlisiniz

Hər hansı bir səhv və ya problem görürsünüzsə, irəliləməzdən əvvəl onları düzəltməlisiniz.

İndi GND (-) telini RoboClaw motor güc girişindəki NEG (-) terminalına bağlayın.

Addım 12: Bot İdarəetmə səhifəsinə daxil olun

Bot İdarəetmə səhifəsinə daxil olmaq
Bot İdarəetmə səhifəsinə daxil olmaq
Bot İdarəetmə səhifəsinə daxil olmaq
Bot İdarəetmə səhifəsinə daxil olmaq

Robotun python skripti işlədikdən sonra RoboClaw -ı işə salın və sonra RPI -nin ipinə gedin:

sənin_rpi_ip

Şəkillərdəki kimi Web nəzarət səhifəsinin açıldığını görməlisiniz. Əks təqdirdə, RPI çıxış terminalınızı yoxlayın və hər hansı bir səhv tapın və düzəldin.

Səhifəyə daxil olduqdan sonra botu idarə etməyə hazırsınız.

Robot "Med run" rejimində və Orta sürətlə başlayacaq.

Botu səhifədəki düymələr və ya klaviaturadakı düymələr vasitəsilə idarə etmək olar.

Açarlar:

  • w - irəli
  • z - tərs/geri
  • a - uzun sola dönmə
  • s - uzun sağa dönmə
  • q - qısa sola dönmə
  • e - qısa sağa dönmə
  • 1 - sol kamera
  • 2 - kamera sağa
  • 3 - tam sola qoyun
  • 4 - tam sağa qoyun
  • / - ev/ mərkəzi kamera
  • h - robotu dayandır/dayandır

Göndərilən əmrlər arasında yarım saniyəlik gecikmə tamponu var. İstenmeyen təkrarlanan əmrləri aradan qaldırmaq üçün bunu etdim. İstəsəniz bunu əlbəttə koddan silə bilərsiniz (index.html -də)

Nəzarətin qalan hissəsi və onu idarə etmə özünü izah etməlidir.

Addım 13: Python/Şüşə Kodu

Bu bot Python və Flask veb çərçivəsini istifadə edir. İstəsəniz Flask haqqında daha çox məlumat əldə edə bilərsiniz.

Bir Flask tətbiqindən və normal Python skriptindən böyük fərq, URI işləmə üçün istifadə olunan @app.route sinif/metodudur. Bunun xaricində, əksər hallarda normal bir Python var.

#!/usr/bin/env python

# # Wifi/Veb idarə olunan Rover # # Yazan Scott Beasley - 2015 # # RPIO, pyserial və Flask istifadə edir # RPIO idxal PWM -dən balon idxal Flaskdan render_template, sorğu app = Flask (_name_, static_url_path = '')) # Roboclaw motor nəzarətçisi ilə danışmaq üçün əlaqə limanına qoşulun: # 19200 roboclaw = serialdan fərqli olduqda buradakı ötürmə dərəcəsini dəyişdirin. IOError istisna olmaqla Serial ('/dev/ttyAMA0', 19200): print ("Comm port tapıldı ") sys.exit (0) # Sürət və sürücü idarəetmə dəyişənləri last_direction = -1 speed_offset = 84 turn_tm_offset = 0.166 run_time = 0.750 # Servo neytral mövqe (ev) servo_pos = 1250 servo = PWM. Servo () servo.set_servo (18), servo_pos) # Vaxtı təyin etmək üçün bir az dayanaq. yuxu (3) # # URI işləyiciləri - bütün bot səhifəsi hərəkətləri burada edilir # # Botların idarəetmə səhifəsini (ana səhifə) @app.route göndərin ("/") def index (): qayıt render_template ('index.html', ad = Yoxdur) @app.route ("/irəli") def irəli (): qlobal son_yön, run_ti mənə yazdır "İrəli" go_forward () last_direction = 0 # yuxu 100ms + run_time time.sleep (0.100 + run_time) # Əgər davamlı deyilsə, run_time> 0 əgər gecikmədən sonra dayandır: last_direction = -1 halt () "tamam" @ app.route ("/geriyə") def geriyə (): qlobal son_ istiqamət, run_time çap "Geri" go_backward () last_direction = 1 # yuxu 100ms + run_time time.yuxu (0.100 + run_time) # Davamlı deyilsə, gecikmədən sonra dayandırın əgər run_time> 0: last_direction = -1 stop () "tamam" @app.route ("/left") def left (): global last_direction, turn_tm_offset print "Sol" go_left () last_direction = -1 # yuxu @1 /2 saniyəlik yuxu (0.500 - turn_tm_offset) # dur dur () time.sleep (0.100) "tamam" a dön @app.route ("/sağ") sağa doğru (): qlobal son_ istiqamət, turn_tm_offset "sağa" sağa () # 1/2 saniyədə # yuxu. yuxu (0.500 - turn_tm_offset) son_dönüm = -1 # dur dur () vaxt.yuxu (0.100) "tamam" a dön @app.route ("/ltforward") def ltforward (): qlobal son_ istiqamət, dönüş_t m_offset print "Sola irəli dön" go_left () # 1/8 saniyədə # yuxu.route ("/rtforward") def rtforward (): global last_direction, turn_tm_offset print "Sağ irəli dön" go_right () # 1/8 saniyədə # yuxu stop halt () time.sleep (0.100) return "ok" @app.route ("/stop") def stop (): global last_direction print "Stop" dur () last_direction = -1 # 100ms time.sleep (0.100)) qaytar "tamam" @app.route ("/panlt") def panlf (): qlobal servo_pos çap "Panlt" servo_pos -= 100 əgər servo_pos 2500: servo_pos = 2500 servo.set_servo (18, servo_pos) # 150ms vaxt. yuxu (0.150) qayıt "tamam" @app.route ("/home") def home (): qlobal servo_pos çap "Ev" servo_pos = 1250 servo.set_servo (18, servo_pos) # yuxu 150ms vaxt.yuxu (0.150) qayıt "tamam" @app.route ("/panfull_lt") def panfull_lt (): qlobal servo_pos çap "Pan tam l eft "servo_pos = 500 servo.set_servo (18, servo_pos) # yuxu 150ms vaxt.yuxu (0.150)" tamam "a dön @app.route ("/panfull_rt ") def panfull_rt (): qlobal servo_pos çap" Tam sağa çək "servo_pos = 2500 servo.set_servo (18, servo_pos) # yuxu 150ms vaxt.yuxu (0.150) "tamam" @app.route ("/speed_low") def speed_low (): global speed_offset, last_direction, turn_tm_offset speed_offset = 42 turn_tm_offset = 0.001 # Son_dönüş == 0 olarsa yeni sürət əldə etmək üçün cari istiqaməti güncəlləşdirin == 0: go_forward () son_dönüm == 1 olarsa: go_backward () # yuxu 150ms vaxt.yuxu (0.150) "tamam" a dön @app.route ("/speed_mid") def speed_mid (): qlobal speed_offset, last_direction, turn_tm_offset speed_offset = 84 turn_tm_offset = 0.166 # Last_direction == 0 olarsa yeni sürət əldə etmək üçün cari istiqaməti yeniləyin) qaytar "tamam" @app.route ("/speed_hi") def speed_hi (): global speed_offset, last_direction, turn_tm_offset speed_offset = 126 tur n_tm_offset = 0.332 # Yeni istiqamət əldə etmək üçün cari istiqaməti yeniləyin, əgər son_dönüm == 0: go_forward () son_dönüm == 1: go_backward () # yuxu 150ms vaxt.yuxu (0.150) "tamam" @app.route ("/davamlı ") def sürekli (): qlobal iş vaxtı çapı" Davamlı qaçış "run_time = 0 # yuxu 100ms vaxt.yuxu (0.100)" tamam "a dön @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 () # yuxu 100ms vaxt.yuxu (0.100) "tamam" qayıt # # Motor sürücüsünün funksiyaları # def go_forward (): speed_offset əgər qlobal sürət_düzəyi! = 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 +) speed_offset)) başqa: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (255 - speed_offset)) def go_backward (): global_offset of speed_offset! = 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.wri te (chr (255 - speed_offset)) başqa: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 + speed_offset)) def go_left (): speed_offset! qlobal sürət_offset! = 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset)) başqa: 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)) başqa: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset)) def halt (): roboclaw.write (chr (0)) əgər _name_ == "_main_": app.run (host = '0.0.0.0', port = 80, debug = True)

Flaskdan ayıklama məlumatı istəmirsinizsə və ya ehtiyacınız yoxdursa, app.run xəttində debugu 'false' olaraq təyin edin.

əgər _ adı _ == "_ ana_" olarsa:

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

Flask http serverinin burada dinlədiyi portu da dəyişə bilərsiniz.

Addım 14: Digər Avadanlıqlardan istifadə

Başqa bir SBC (Tek Kartlı Kompüter) kimi başqa bir cihazdan istifadə etmək istəyirsinizsə, Python və Flaskın Beagle Sümüyü, PCDuino və s. düzeni və yeni lövhənin servo sürücülük qabiliyyətlərindən istifadə edin.

Başqa bir növ motor sürücüsündən istifadə etmək üçün, dəyişdirmə motor sürücüsünün motoru bu funksiyanı yerinə yetirməsi üçün lazım olanı etmək üçün go_forward, go_backward, go_left, go_right və stop funksiyalarını dəyişdirməlisiniz.

Tövsiyə: