Satura rādītājs:

Pārlūkprogrammas kontrolēts Roomba robots ar Raspberry Pi modeli 3 A+: 6 soļi (ar attēliem)
Pārlūkprogrammas kontrolēts Roomba robots ar Raspberry Pi modeli 3 A+: 6 soļi (ar attēliem)

Video: Pārlūkprogrammas kontrolēts Roomba robots ar Raspberry Pi modeli 3 A+: 6 soļi (ar attēliem)

Video: Pārlūkprogrammas kontrolēts Roomba robots ar Raspberry Pi modeli 3 A+: 6 soļi (ar attēliem)
Video: CS50 2015 - Week 10 2024, Novembris
Anonim
Pārlūkprogrammas kontrolēts Roomba robots ar Raspberry Pi modeli 3 A+
Pārlūkprogrammas kontrolēts Roomba robots ar Raspberry Pi modeli 3 A+
Pārlūkprogrammas kontrolēts Roomba robots ar Raspberry Pi modeli 3 A+
Pārlūkprogrammas kontrolēts Roomba robots ar Raspberry Pi modeli 3 A+

Pārskats

Šajā pamācībā galvenā uzmanība tiks pievērsta tam, kā mirušajam Roomba piešķirt jaunas smadzenes (Raspberry Pi), acis (tīmekļa kamera) un veids, kā visu kontrolēt no tīmekļa pārlūkprogrammas.

Ir daudz Roomba hakeru, kas ļauj kontrolēt, izmantojot seriālo interfeisu. Man nav paveicies sastapt Roomba ar pašreizējo programmaparatūru vai strādājošu mātesplati. Vai nu Roomba ir pārāk veca, vai Roomba ir mirusi. Es atradu Roomba, ko izmantoju šim projektam, vietējā lietoto preču veikalā par izdevīgām cenām. Tam joprojām bija pienācīgs akumulators, bet mātesplate bija mirusi. (Es arī atradu tīmekļa kameru tajā pašā lietoto preču veikalā par aptuveni 5 USD). Viss, ko es izmantoju no sākotnējās Roomba, ir motori, šasija un akumulators. Šim projektam jums nav jāizmanto Roomba. Ja vēlaties, varat izmantot dažādus motorus, riteņus un šasiju. Man vienkārši patīk pārvērst kādu atkritumu par kaut ko lietojamu.

Šai būvei es izmantoju Raspberry Pi Model 3 A+ un Riorand motora kontrolieri. Es izmantoju kodu no Dexter Industries pārlūkprogrammas kontrolētā robota, kuru es mainīju. Dexter Industries versijā Pi tiek iestatīts kā tīmekļa ligzdas serveris, kas ļauj vadīt savu robotu (ķieģeļu pi platformu) no klienta html faila, kurā darbojas cits dators.

Esmu mainījis kodu, izmantojot GPIO tapas un pievienojis veidu, kā Pi var izslēgt, noklikšķinot uz pogas / kad pārlūkprogrammā tiek nospiests evakuācijas taustiņš. Es arī veicu dažas izmaiņas vadības tīmekļa lapā, lai ļautu skatīt kustības straumi, izmantojot iframe, vienlaikus kontrolējot robotu vienā lapā. Es iestatīju Pi ar statisku IP, lai mitinātu klienta failu, lai es varētu izveidot savienojumu, izmantojot jebkuru datoru vai ierīci savā tīklā.

Es šeit dokumentēju procesu, cerot parādīt, kā izveidot vienkāršu, lētu bāzes robotu.

Izmantotās detaļas

Raspberry Pi 3 A+ (Adafruit Link) 30 ASV dolāri

Riorand Dual Motor Driver Controller H-Bridge (Amazon Link) 22 ASV dolāri

12 V akumulators motoriem (Amazon Link) 19 ASV dolāri

5V akumulators Raspberry Pi (Amazon Link) 10 ASV dolāri

8 GB Micro SD karte (Amazon Link) 5 USD

Jumper vadi (Amazon Link) 7 ASV dolāri

Roomba 500 sērija

. Viss kopā nedaudz zem 100 USD.

1. darbība: instalējiet Raspbian un iestatiet statisku IP adresi

Instalējiet Raspbian un iestatiet statisku IP adresi
Instalējiet Raspbian un iestatiet statisku IP adresi

Es izmantoju Raspbian Stretch Lite. Es neredzēju vajadzību pēc darbvirsmas, taču, ja vēlaties, varat instalēt darbvirsmas versiju.

Es pieņemu, ka jūs jau zināt, kā instalēt Raspbian. Ja jums nepieciešama palīdzība, Raspberry Pi Foundation rokasgrāmatu varat atrast šeit.

Kad esat palaidis Raspbian, piesakieties un palaidiet raspi-config programmu.

pi@raspberrypi: ~ $ sudo raspi-config

Iestatiet savu WiFi savienojumu raspi-config

Izvēlieties

2 Tīkla opcijas

Izvēlieties

N2 Wi-Fi

Izvēlieties valsti, ievadiet savu SSID un ievadiet savu ieejas frāzi

Iestatiet SSH raspi-config

Pēc sākotnējās konfigurēšanas es izmantoju SSH, lai visu iestatītu bez galvas. (Jūs varētu to izlaist, ja izmantojat monitoru. Man bija vieglāk veikt izmaiņas kodā, neapturot robotu un pievienojot to monitoram.)

Atgriezieties raspi-config galvenajā izvēlnē

Izvēlieties

5 Saskarnes iespējas

Izvēlieties

P2 SSH

Izvēlieties

Atgriezieties raspi-config galvenajā izvēlnē

Pārbaudiet, vai esat izveidojis savienojumu ar tīklu

pi@raspberrypi: ~ $ ifconfig

Jums vajadzētu saņemt līdzīgu izvadi. (Ievērojiet IP adresi; tā var būt nepieciešama vēlāk. Piem., 192.168.1.18)

wlan0: karogi = 4163 mtu 1500

inet 192.168.1.18 tīkla maska 255.255.255.0 apraide 192.168.1.255 inet6 fe80:: c74f: 42ec: 8cd3: 2fda prefikss 64 scaleid 0x20 ēteris b8: 27: eb: 6a: a4: 95 txqueuelen 1000 (Ethernet) RX paketes 44396 baiti 5847726 (5,5 MiB) RX kļūdas 0 samazinājās 0 pārsniegumi 0 kadri 0 TX paketes 30530 baiti 39740576 (37,8 MiB) TX kļūdas 0 nokrituši 0 pārsniegumi 0 nesējs 0 sadursmes 0

Pārbaudiet, vai varat piekļūt internetam.

pi@raspberrypi: ~ $ ping google.com

Jums vajadzētu saņemt līdzīgu izvadi.

PING google.com (216.58.194.110) 56 (84) datu baiti.

64 baiti no dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 1 ttl = 54 laiks = 18,2 ms 64 baiti no dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 2 ttl = 54 laiks = 19,4 ms 64 baiti no dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 3 ttl = 54 laiks = 23,6 ms 64 baiti no dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 4 ttl = 54 laiks = 30,2 ms ^C --- google.com ping statistika --- 4 nosūtītas paketes, 4 saņemtas, 0% pakešu zuduma, laiks 3004 ms rtt min/avg/max/mdev = 18,209/ 22.901/30.267/4.715 ms

Iestatiet statisku IP

Lai varētu pastāvīgi izveidot savienojumu ar savu robotu, izmantojot to pašu adresi tīklā, jums būs jāiestata statisks IP.

Iegūstiet savu pašreizējo tīkla adresi, piemēram, 192.168.1.18

Es izmantoju adresi, kuru automātiski piešķīra DHCP, kad Pi izveidoja savienojumu ar manu tīklu. Varat to mainīt uz jebkuru, kas jums patīk, ja vien tas atbilst jūsu tīklam un nav pretrunā ar citām piešķirtajām adresēm.

Atveriet dhcp.conf teksta redaktorā. (Es izmantoju nano)

pi@raspberrypi: ~ $ sudo nano /etc/dhcpcd.conf

Ritiniet uz leju līdz #Piemērs statiska IP konfigurācija un mainiet šādas rindas.

#interfeiss eth0

#static ip_address = 192.168.11.13 #static maršrutētāji = 192.168.11.1 #static domain_name_servers = 192.168.11.1 8.8.8.8

Mainiet, lai tas atbilstu jūsu tīklam, un katras rindas sākumā noņemiet #.

Piemērs:

interfeiss wlan0

static ip_address = 192.168.1.18 statiskie maršrutētāji = 192.168.1.1 statiskais domēna_vārda_serveris = 192.168.1.1 8.8.8.8

Saglabāt un iziet.

Pārstartējiet un izveidojiet savienojumu ar Pi, izmantojot SSH

pi@raspberrypi: ~ $ sudo reboot

Izveidojiet savienojumu no cita datora, izmantojot SSH. Windows lietotāji var izmantot PuTTY vai Windows apakšsistēmu operētājsistēmai Linux (Windows10).

ian@dators: ~ $ ssh [email protected]

Ievadiet savu paroli (noklusējums ir aveņu).

[email protected] parole:

Tagad jums vajadzētu atrasties Pi komandrindā.

pi@aveņu: ~ $

2. darbība: instalējiet un konfigurējiet kustību

Instalējiet un konfigurējiet kustību
Instalējiet un konfigurējiet kustību

Kustība ir programma, ko izmanto daudzos drošības kameru / tīmekļa kameru projektos. Kustībai ir daudz funkciju. Tomēr mēs to iestatām, lai vienkārši straumētu video no tīmekļa kameras uz portu 8081.

Pārbaudiet savu tīmekļa kameru

Pievienojiet savu tīmekļa kameru un norādiet pievienoto USB ierīču sarakstu (iespējams, ka pēc savienojuma izveidošanas jums būs jāpārstartē).

pi@aveņu: ~ $ lsusb

Jums vajadzētu iegūt līdzīgu izvadi. Ņemiet vērā Logitech C210.

Autobuss 001 Ierīce 002: ID 046d: 0819 Logitech, Inc. Webcam C210

Autobuss 001 Ierīce 001: ID 1d6b: 0002 Linux Foundation 2.0 saknes centrmezgls

Ja jūsu kamera netiek rādīta, tā var nebūt saderīga, vai arī jums būs jāinstalē papildu draiveri.

Instalējiet Motion

Atjauniniet paketes.

pi@raspberrypi: ~ $ sudo apt-get update

Instalējiet Motion.

pi@raspberrypi: ~ $ sudo apt -get install motion -y

Kad Motion ir instalēts, rediģējiet konfigurācijas failu.

pi@raspberrypi: ~ $ sudo nano /etc/motion/motion.conf

Mainiet šādas rindas, lai tās atbilstu tālāk.

ieslēgts dēmons

platums 640 augstums 480 kadru nomaiņas ātrums 100 izejas attēli izslēgti ffmpeg_output_movies off text_right stream_port 8081 stream_quality 100 stream_localhost off webcontrol_localhost off

Sāciet Motion Daemon ar Boot

Atveriet failu/etc/default/motion.

pi@raspberrypi: ~ $ sudo nano/etc/default/motion

Mainīt uz

start_motion_daemon = jā

Saglabājiet failu un izejiet

Pārstartēt

pi@raspberrypi: ~ $ sudo reboot

Pēc tam, kad Pi ir restartēts, atveriet pārlūkprogrammu un pārbaudiet, vai 8081 porta pārlūkprogrammā ir video straumēšana

Piemērs:

192.168.1.18:8081

Kustības dēmona problēmu novēršana

Man radās problēmas ar kustības dēmona palaišanu sāknēšanas laikā, kamēr izmēģināju dažādas iespējas failā motion.conf.

Ja sāksit kustību pirms kustības dēmona Raspian Stretch, iespējams, radīsies problēmas, lai vēlāk to sāktu sāknēšanas laikā. Palaižot "sudo motion", nekonfigurējot dēmonu, tas vispirms izveido direktoriju/var/log/motion, nepiešķirot lietotājam rakstīšanas atļauju.

3. darbība: instalējiet Apache un iestatiet tīmekļa vadības lapu

Instalējiet Apache un iestatiet tīmekļa vadības lapu
Instalējiet Apache un iestatiet tīmekļa vadības lapu

Apache ir robota vadības tīmekļa lapas tīmekļa serveris. Mēs aizstāsim noklusējuma Apache index.html failu ar failu, kas lejupielādēts no github. Jūs arī mainīsit dažas koda rindiņas, lai parādītu kustības video straumi, un piešķirsiet, kur nosūtīt komandas, lai vadītu robotu.

Instalējiet Apache un Git

pi@raspberrypi: ~ $ sudo apt -get install apache2 git -y

Kad apache un git ir instalēti, lejupielādējiet failus.

pi@raspberrypi: ~ $ git klons

Atveriet roombarobot direktoriju.

pi@raspberrypi: ~ $ cd roombarobot

Aizstājiet failu index.html mapē/var/www/html ar failu index.html mapē/home/pi/roombarobot

pi@raspberrypi: ~/roombarobot $ sudo cp index.html/var/www/html

Rediģējiet failu index.html

Atveriet failu index.html ar teksta redaktoru.

pi@raspberrypi: ~/roombarobot $ sudo nano /var/www/html/index.html

Atrodiet šīs divas līnijas

var host = "ws: // JŪSU ADRESE: 9093/ws";

Mainiet “YOURIPADDRESS” uz statisko IP adresi, kuru iestatījāt 1. darbībā, un saglabājiet failu.

Piemērs:

var saimnieks = "ws: //192.168.1.18: 9093/ws";

Citā datorā atveriet pārlūkprogrammu un ievadiet sava Pi IP adresi. Jums vajadzētu redzēt vadības tīmekļa lapu ar lodziņu kreisajā pusē, video straumēšanu no tīmekļa kameras un tīmekļa vadības pogas labajā pusē.

4. darbība: iestatiet un pārbaudiet kodu

Iestatiet un pārbaudiet kodu
Iestatiet un pārbaudiet kodu

Šis kods ir rakstīts python, un tam ir nepieciešama tornado bibliotēka. Kods izmanto bibliotēku, lai iestatītu serveri, lai noklausītos komandas no kontroles tīmekļa lapas, izmantojot tīmekļa ligzdas 9093. portā.

Instalējiet PIP un Tornado bibliotēku

Uzstādiet pip

pi@raspberrypi: ~ $ sudo apt-get install python-pip

Instalējiet viesuļvētras bibliotēku

pi@raspberrypi: ~ $ sudo pip install tornado

Palaidiet Roombabot programmu un pārbaudiet savienojumu

Sāciet programmu roombabot.py

pi@raspberrypi: ~ $ sudo python /home/pi/roombarobot/roombabot.py

Pēc palaišanas terminālī vajadzētu redzēt "Gatavs". Pārlūkprogrammā atveriet vadības tīmekļa lapu un noklikšķiniet uz Savienot. Pēc tam noklikšķiniet uz jebkuras lapas virziena pogas. Varat arī izmantot tastatūras bulttaustiņus.

Terminālī vajadzētu redzēt līdzīgu izvadi.

Gatavs

savienojums atvērts… savienojums atvērts… saņemts: u 8 Skriešana Uz priekšu izveidots savienojums atvērts… saņemts: l 6 Griešanās pa kreisi savienojums atvērts… saņemts: d 2 Darbojas Atpakaļgaitas savienojums atvērts… saņemts: r 4 Pagrieziens pa labi

Lai apturētu programmu, nospiediet taustiņu kombināciju ctrl+c.

Kad esat pabeidzis, pārbaudiet Pi strāvu.

pi@raspberrypi: ~ $ sudo izslēgšana

Bugs

Esmu pamanījis problēmu ar izslēgšanas pogu vadības tīmekļa lapā. Dažreiz izslēgšanas poga neko nedara, noklikšķinot vai pieskaroties. Es nevarēju saprast, kas to izraisa, bet ir risinājums. Ja vēlaties izslēgt robotu un izslēgšanas poga nedarbojas, atkārtoti ielādējiet lapu, noklikšķiniet / pieskarieties savienojuma pogai un pēc tam noklikšķiniet / pieskarieties izslēgšanas pogai. Tam vajadzētu izslēgties.

5. solis: montāža

Montāža
Montāža
Montāža
Montāža
Montāža
Montāža
Montāža
Montāža

Kā minēts iepriekš, šim projektam jums nav jāizmanto Roomba. Derētu viss ar diviem motoriem, diviem riteņiem un rāmi. Es izjaucu Roomba un izņēmu visu, izņemot riteņu moduļus un akumulatoru.

Riteņu moduļi

Roomba riteņi un motori ir novietoti kopā noņemamā modulī. Katram modulim ir zils ārējais korpuss, kurā atrodas motors, pārnesumkārba, ritenis, piekares atspere un saskarnes plāksne.

Saskarnes dēlis

Katrā saskarnes panelī ir seši vadi. Ir divi vadi (sarkans [+], melns [-]), kas rotē motoru, viens datu vads zāles efekta sensoram, viens vads riteņu kritiena slēdzim, viens 5 V vads un viens GND vads sensora barošanai. Lai piekļūtu interfeisa panelim, jums būs jāizjauc modulis. Es visu noņēmu atpakaļ motorā un pielodēju pie motora jaunus [+] un [-] vadus (skat. Fotoattēlus). Tas ir atkarīgs no jums, vai vēlaties saglabāt sensorus vai nē.

Piekares atsperes

Kad noņemat vakuuma daļu, Roomba svars tiek nomests. Ja nenoņemsiet atsperes, Roomba sēdēs slīpi. Sākotnēji es tos noņēmu, bet pēc tam pievienoju atpakaļ, kad atklāju, ka ir grūti apgāzties paklāju. Atsperes uzlikšana atpakaļ novērsa problēmu.

Motoru pievienošana motora kontrolierim

Motori ir vērsti viens pret otru. Tas nozīmē, ka, lai virzītu Roomba uz priekšu, vienam motoram būs jāgriežas uz priekšu, bet otram - atpakaļ. Es par to daudz nedomāju, līdz visu sakārtoju. Es galu galā vienkārši uzrakstīju kodu, kā es sākotnēji pieslēdzu motorus. Tas bija laimīgs negadījums, jo ikreiz, kad Raspberry Pi ieslēdzas/izslēdzas, GPIO tapām ir spriegums. Kā es sakārtoju lietas, Roomba griežas, līdz Raspberry Pi ir sākusies (apmēram trīsdesmit sekundes), un griežas, kad tiek izslēgta, līdz tiek izslēgta barošana. Ja vadi būtu savādāk, tie varētu ripot uz priekšu / atpakaļ, kas būtu kairinoši. Es galu galā plānoju to labot ar vienkāršu motora kontrollera slēdzi.

Motoru un akumulatora pieslēgšana motora kontrolierim

Jauda - - - - - - - - - - - - - - - - 12V [+] - - - - - - - - - - - - - Roomba akumulators [+]

Motors 2- - - - - - - - - - - - - - - - Melns - - - - - - - - - - - - - - Kreisais motors [-] Motors 2- - - - - - - - - - - - - - - sarkans - - - - - - - - - - - - - - - Kreisais motors [+] Motors 1- - - - - - - - - - - - - - - Melns - - - - - - - - - - - - - -pareizais motors [-] 1. motors - - - - - - - - - - - - - - - - sarkans - - - - - - - - - - - - - - Labais motors [+] GND- - - - - - - - - - - - - - - - - 12V [-] - - - - - - - - - - - - -Roomba akumulators [-]

Motora kontrollera savienošana ar Raspberry Pi

Motora kontrollera tapas stieples krāsa (skatiet fotoattēlus) Raspberry Pi tapas

GND- - - - - - - - - - - - - - - - - - Melns - - - - - - - - - - - - - - - GND PWM 2- - - - - - - - - - - - - - - - - - zils - - - - - - - - - - - - - - GPIO 18 DIR 2- - - - - - - - - - - - - - - - - zaļš - - - - - - - - - - - - - - -GPIO 23 PWM 1- - - - - - - - - - - - - - - Dzeltens - - - - - - - - - - - - -GPIO 24 DIR 1- - - - - - - - - - - - - - - - oranža - - - - - - - - - - - - -GPIO 25 5V - - - - - - - - - - - - - - - - - Sarkana - - - - - - - - - - - - - - -5V

Elektronikas montāža

Nav daudz kas, lai visu saliktu kopā. Es izģērbu roomba šasiju. Noņemot vāku, jūs varat viegli noķert esošos plastmasas aizsargus un urbt caurumus, lai uzstādītu elektroniku. Ir esošas pieslēgvietas kabeļu vadīšanai no motoriem. Ja izmantojat rezerves Roomba akumulatoru, piekļuvei akumulatora spailēm jau ir izgriezums.

Baterijas

Raspberry Pi un motora kontrolierim es izmantoju atsevišķas baterijas. Pi akumulators ir tikai 5 V akumulators, ko izmanto mobilo tālruņu uzlabošanai. Motora kontrolierim es izmantoju komplektā iekļauto oriģinālo Roomba akumulatoru. Akumulatora spailes nav marķētas, tāpēc vislabāk ir pārbaudīt spriegumu ar voltmetru, pirms pievienojat to motora regulatoram. Lai pievienotu vadus Roomba akumulatoram, es izmantoju četrus neodīma magnētus (skat. Fotoattēlus). Divus magnētus pielodēju pie vadiem, bet pārējos divus pielipu pie akumulatora spailēm. Lodēšana demagnetizē magnētus. Tomēr pārklājums ārpusē joprojām var piestiprināties pie spailēm esošajiem magnētiem un vadīt elektrību. Tas padara akumulatora pievienošanu un atvienošanu par kūkas gabalu.

Testēšana

Kad viss ir salikts kopā, pārbaudiet, vai viss ir pareizi pieslēgts, atbalstiet robotu uz kaut kā (lai tas nenokristu) un ieslēdziet to.

Piesakieties un palaidiet programmu roombabot.py

pi@raspberrypi: ~ $ sudo python /home/pi/roombarobot/roombabot.py

Dodieties uz tīmekļa kontroles lapu un pārbaudiet to. Ja viss ir pareizi savienots, riteņiem vajadzētu griezties attiecīgajā virzienā, kad tiek noklikšķinātas uz pogām / nospiesti bulttaustiņi (neaizmirstiet noklikšķināt uz savienojuma).

6. darbība: Python koda palaišana sāknēšanas / pabeigšanas laikā

Python koda palaišana sāknēšanas / pabeigšanas laikā
Python koda palaišana sāknēšanas / pabeigšanas laikā
Python koda palaišana sāknēšanas / pabeigšanas laikā
Python koda palaišana sāknēšanas / pabeigšanas laikā

Pēdējā lieta, kas mums jādara, ir pateikt Raspbian, lai sāknējot python programmu sāknētu. Lai to izdarītu, mēs izveidosim skriptu un ieplānosim tā palaišanu pārstartēšanas laikā, izmantojot crontab.

Izveidojiet skriptu

Pi lietotāju direktorijā izveidojiet jaunu skripta failu ar nosaukumu startrobot.sh

pi@raspberrypi: ~ $ sudo nano startrobot.sh

Kopējiet failā šādas rindas

#!/bin/sh

#startrobot.sh cd /cd /home /pi /roombarobot sudo python roombabot.py cd /

Saglabājiet failu un izejiet

Padariet startrobot.sh failu izpildāmu

pi@raspberrypi: ~ $ sudo chmod 755 startrobot.sh

Pārbaudiet to (nospiediet taustiņu kombināciju ctrl + c, lai apturētu)

pi@raspberrypi: ~ $ sh startrobot.sh

Rediģējiet crontab failu

pi@raspberrypi: ~ $ sudo crontab -e

Pievienojiet šādu rindu faila apakšā

# m h dom mon dow komanda

@pārstartējiet sh /home/pi/startrobot.sh

Saglabāt un iziet

Programmai roombabot.py tagad vajadzētu sākt, kad Pi tiek restartēts vai ieslēgts.

Pabeigšana uz augšu

Šajā brīdī jums vajadzētu būt funkcionālam robotam, kuru varat vadīt, izmantojot pārlūkprogrammu no jebkuras tīkla ierīces. Kopš sākotnējās VPN izveides un iestatīšanas esmu to darījis nedaudz tālāk, lai varētu piekļūt robotam, kad esmu prom no mājām. Nākotnē es plānoju veikt dažas papildu izmaiņas. Es plānoju padarīt to autonomu un, iespējams, sekot kustībai, vienlaikus spējot pārņemt kontroli, kad vēlos.

Ieteicams: