INHOUDSOPGAWE:
- Stap 1: Versamel u materiaal
- Stap 2: Laai die Roomba Toolboxes vir MATLAB af
- Stap 3: Koppel aan u Roomba
- Stap 4: Kies hoe u u Roomba wil beheer
- Stap 5: ry met u Roomba
Video: Verander jou Roomba in 'n Mars Rover: 5 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:23
Stap 1: Versamel u materiaal
Om hierdie projek te voltooi, moet u die volgende materiaal versamel:
1 Roomba -robot
1 Framboos Pi -kit
1 videokamera
Toegang tot MATLAB
Stap 2: Laai die Roomba Toolboxes vir MATLAB af
Voer die volgende kode uit om die nodige gereedskapskaste te installeer om hierdie projek te voltooi.
funksie roombaInstall
clc;
% lys lêers wat geïnstalleer moet word
lêers = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'};
% plek om van te installeer
opsies = webopsies ('CertificateFilename', ''); % vertel dit om die sertifikaatvereistes te ignoreer
bediener = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/';
dlgTitle = 'Roomba installering/opdatering';
% vertoondoel en kry bevestiging
prompt = {
'Hierdie program sal hierdie EF 230 Roomba -lêers aflaai:'
''
strjoin (lêers, '')
''
'na hierdie vouer:'
''
cd
''
'Wil jy voortgaan? '
};
biep;
yn = questdlg (prompt, …
dlgTitle, …
'Ja', 'Nee', 'Ja');
as ~ strcmp (yn, 'Ja'), gee terug; einde
% kry 'n lys met bestaande lêers
bestaande_ lêers = lêers (cellfun (@exist, lêers)> 0);
as ~ isempty (bestaande_ lêers)
seker dat dit regtig goed is om dit te vervang
prompt = {'U vervang hierdie lêer (s):'
''
strjoin (bestaande_lêers, '')
''
'OK om te vervang?'
};
biep;
yn = questdlg (prompt, …
dlgTitle, …
'Ja', 'Nee', 'Ja');
as ~ strcmp (yn, 'Ja'), gee terug; einde
einde
laai die lêers af
cnt = 0;
vir i = 1: lengte (lêers)
f = lêers {i};
disp (['Aflaai' f]);
probeer
url = [bediener f];
websave (f, url, opsies); % bygevoeg opsies om veiligheidsfoute te vermy
cnt = cnt + 1;
vang
disp (['Fout tydens aflaai' f]);
dummy = [f '.html'];
as daar bestaan (dummy, 'file') == 2
verwyder (dummy)
einde
einde
einde
as cnt == lengte (lêers)
msg = 'Installasie suksesvol';
wag vir (msgbox (msg, dlgTitle));
anders
msg = 'Installasie fout - sien opdrag venster vir meer inligting';
wag vir (errordlg (msg, dlgTitle));
einde
eind %roombaInstall
Stap 3: Koppel aan u Roomba
Dit is nou tyd om via WiFi aan te sluit op u Roomba. Druk met twee vingers gelyktydig op die Dock- en Spot -knoppies om u Roomba aan te skakel of terug te stel. Voer vervolgens die kode r = roomba (# van u Roomba) uit in die opdragvenster van MATLAB om aan te sluit op u robot. Nadat u hierdie opdrag uitgevoer het, behoort u Roomba gereed te wees.
Stap 4: Kies hoe u u Roomba wil beheer
Daar is twee maniere waarop u u Roomba kan beheer: outonoom of deur 'n slimfoon as 'n beheerder te gebruik.
As u kies om die Roomba outonoom te bestuur, moet u die drie ingeboude sensors gebruik: kransensors, stampsensors en ligsensors.
Om 'n slimfoon te gebruik, moet u eers u slimfoon aan u rekenaar koppel deur die onderstaande stappe te volg.
OPMERKING: u rekenaar en slimfoon moet op dieselfde WiFi -netwerk wees om behoorlik aan te sluit!
1. Laai die MATLAB -app af vanaf die app store op u toestel.
2. Tik "connector on" in u opdragvenster en stel 'n wagwoord in wat op beide toestelle ingevoer moet word.
3. Nadat u dit gedoen het, gee MATLAB u IP -adres van u rekenaars. U moet na die instellingsbladsy in die MATLAB -app op u slimfoon gaan en 'n rekenaar byvoeg met die gegewe IP -adres en die wagwoord wat u vroeër ingevoer het.
4. Tik in die opdragvenster op u rekenaar die kode m = mobiledev en dit moet u slimfoon as 'n beheerder vir u Roomba inisialiseer.
5. Jou rekenaar en slimfoon behoort nou gereed te wees.
Stap 5: ry met u Roomba
Noudat u al die nodige gereedskap het om u Mars Rover te skep, is u gereed om u eie kode te skep. Ons het 'n voorbeeldkode hieronder aangeheg vir beide outonome bestuur en bestuur deur slimfone.
Outonome bestuur
funksie Explore_modified (r)
%insetargumente: 1 roomba -voorwerp, r
%uitsetargumente: geen
%beskrywing:
%-funksie gebruik 'n oneindige terwyl -lus om outonoom toe te laat
%verkenning van die bot se omgewing.
%
%funciton verskaf ook instruksies aan die roomba oor wat om te doen
%die volgende situasies: Wiel (e) verloor kontak met die grond, an
%voorwerp word voor of aan weerskante van die bot opgespoor, en a
%skielike daling word voor of aan weerskante van die bot bespeur.
%
%tipiese instruksies bevat bewegingsopdragte wat bedoel is om te maksimeer
%ondersoek of vermy 'n gedetecteerde gevaar en beveel om te kommunikeer
%inligting oor die ontdekkings van die bots (foto's), posisie (grafiek), %en meld (gestrande waarskuwing) met die gebruiker via matlab en/of e -pos. Verskeie
%klankopdragte word bygevoeg vir genot.
%e -pos vermoëns opstel
mail = '[email protected]';
password = 'EF230Roomba';
setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com');
setpref ('Internet', 'E_mail', pos);
setpref ('Internet', 'SMTP_Username', pos);
setpref ('Internet', 'SMTP_Password', wagwoord);
rekwisiete = java.lang. System.getProperties;
props.setProperty ('mail.smtp.starttls.enable', 'true');
props.setProperty ('mail.smtp.auth', 'true');
props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory');
props.setProperty ('mail.smtp.socketFactory.port', '465');
% r = roomba (19)
r.beep ('G2 ^^, G2 ^^, G2 ^^, G2 ^^, A2 ^^, A2 ^^, G1 ^^, E1 ^^, C2 ^^, C2 ^^, C1 ^^, C1 ^^, D1 ^^, C1 ^^, D2 ^^, E4 ^^, G2 ^^, G2 ^^, G2 ^^, G2 ^^, A2 ^^, A2 ^^, G1 ^^, E1 ^^, C2 ^^, C2 ^^, C2 ^^, E1 ^^, E1 ^^, E1 ^^, D1 ^^, C4 ^^ ');
v =.1;
reflect_datum = 2700; %stel kransensors se verwysingswaarde in
lightBumper_datum = 200; %stel lig Bumper sensors se verwysingswaarde
pos = [0, 0]; %veranderlike vir posisionering met datum geïnisialiseer
hoek = 0; %stel verwysingshoek in
netangle = 0; %netto hoek verplasing
ek = 2; %iterator vir die toevoeging van rye om die stoorveranderlike in die posisie te plaas
dist = 0;
r.setDriveVelocity (v, v); %begin roomba vorentoe
terwyl dit waar is
Cliff = r.getCliffSensors;
Bump = r.getBumpers;
Lig = r.getLightBumpers;
RandAngle = randi ([20, 60], 1); %genereer 1 ewekansige hoek tussen 20 en 60 grade. Word gebruik om te voorkom dat bot in 'n lus vasloop
%Wat om te doen as een of meer wiele kontak met die grond verloor:
%stop beweging, stuur 'n waarskuwings -e -pos met 'n prentjie van die omgewing, %en vra die gebruiker of hy wil voortgaan of om hulp te wag
as Bump.rightWheelDrop == 1 || Bump.leftWheelDrop == 1
r.stop
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %kry x koördineer
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %kry y koördineer
i = i+1;
r.beep ('F#1 ^^, C1 ^^, F#1 ^^, C1 ^^, F#1 ^^, C1 ^^, F#1 ^^, C1 ^^, F#1 ^^, C1 ^^, F#1 ^^, C1 ^^, F#1 ^^, C1 ^^, F#1 ^^, C1 ^^ ')
img = r.getImage;
skryf (img, 'stuck.png');
%--------------------------
imfile = 'stuck.png';
posisie = savepos (pos);
%---------------------------
sendmail (pos, 'HELP!', 'Ek is gestrand op 'n krans!', {imfile, position})
list = {'Gaan voort', 'Stop'};
idx = menu ('Wat moet ek doen?', lys);
as idx == 2
breek
einde
%Wat om te doen as 'n voorwerp voor die bot opgespoor word:
%stop, beweeg terug, neem foto, waarsku gebruiker van ontdekking
%per e -pos, draai 90 grade en bly verken
elseif Light.leftCenter> lightBumper_datum || Light.rightCenter> lightBumper_datum || Bump.front == 1
r.stop;
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %kry x koördineer
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %kry y koördineer
i = i+1;
r.moveDistance (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %kry x koördineer
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %kry y koördineer
i = i+1;
r.beep ('A1^, A1^, A4^, A2^, G2^, G2^, G4^, Bb2^, Bb2^, Bb3.5^, G1^, A8^')
img = r.getImage;
skryf (img, 'FrontBump.png')
%--------------------------
imfile = 'FrontBump.png';
posisie = savepos (pos);
%---------------------------
sendmail (pos, 'Alert!', 'Ek het iets gevind!', {imfile, position})
hoek = 90;
netangle = netangle+hoek;
r.turnAngle (hoek);
r.setDriveVelocity (v, v);
%Wat om te doen as 'n voorwerp links van die bot opgespoor word:
%stop, draai na die voorwerp, maak 'n rugsteun, neem 'n foto, waarsku
%gebruiker van ontdekking via e -pos, draai 90 grade en bly verken
elseif Light.leftFront> lightBumper_datum || Lig.links> lightBumper_datum || Bult.links == 1
r.stop;
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %kry x koördineer
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %kry y koördineer
i = i+1;
hoek = 30;
netangle = netangle+hoek;
r.turnAngle (hoek);
r.moveDistance (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %kry x koördineer
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %kry y koördineer
i = i+1;
r.beep ('A4^, A4^, G1^, E1^, C3.5^, C2 ^^, C1^, C1^, C2^, D2^, D2^, E8^')
img = r.getImage;
skryf (img, 'LeftBump.png')
%--------------------------
imfile = 'LeftBump.png';
posisie = savepos (pos);
%---------------------------
sendmail (pos, 'Alert!', 'Ek het iets gevind!', {imfile, position})
hoek = -90;
netangle = netangle+hoek;
r.turnAngle (hoek);
r.setDriveVelocity (v, v);
%Wat om te doen as 'n voorwerp regs van die bot opgespoor word:
%stop, draai na die voorwerp, maak 'n rugsteun, neem 'n foto, waarsku
%gebruiker van ontdekking via e -pos, draai 90 grade en bly verken
elseif Light.rightFront> lightBumper_datum || Light.right> lightBumper_datum || Bump.right == 1
r.stop;
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %kry x koördineer
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %kry y koördineer
i = i+1;
hoek = -30;
netangle = netangle+hoek;
r.turnAngle (hoek);
r.moveDistance (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %kry x koördineer
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %kry y koördineer
i = i+1;
pouse (1.5);
r.beep ('C1^, C1^, C2^, D2^, D2^, C8^')
img = r.getImage;
skryf (img, 'RightBump.png')
%--------------------------
imfile = 'RightBump.png';
posisie = savepos (pos);
%---------------------------
sendmail (pos, 'Alert!', 'I found something!', {imfile, position});
hoek = 90;
netangle = netangle+hoek;
r.turnAngle (hoek);
r.setDriveVelocity (v, v);
%Wat om te doen as 'n krans links van die bot bespeur word:
%stop, beweeg agteruit, draai regs, gaan verken verder
elseif Cliff.left <reflect_datum || Cliff.leftFront <reflect_datum
r.stop;
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %kry x koördineer
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %kry y koördineer
i = i+1;
r.moveDistance (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %kry x koördineer
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %kry y koördineer
i = i+1;
hoek = -RandAngle;
netangle = netangle+hoek;
r.turnAngle (hoek);
r.setDriveVelocity (v, v);
%Wat om te doen as 'n krans regs van die bot bespeur word:
%stop, beweeg agteruit, draai links, gaan verken verder
elseif Cliff.right <reflect_datum || Cliff.rightFront <reflect_datum
r.stop;
dist = r.getDistance;
pos (i, 1) = dist * sin (hoek); %kry x koördineer
pos (i, 2) = dist * cosd (hoek); %kry y koördineer
i = i+1;
r.moveDistance (-. 125);
hoek = RandAngle;
netangle = netangle+hoek;
r.turnAngle (hoek);
r.setDriveVelocity (v, v);
einde
einde
Slimfoonbeheerder
Opsies = {'Outonoom', 'Handmatige beheer'}
Prompt = menu ('Hoe wil u die rover beheer?', Opsies)
m = mobiledev
r = roomba (19)
as Prompt == 1
Verken (r)
anders
terwyl dit waar is
pouse (.5)
PhoneData = m. Orientation;
Azi = PhoneData (1);
Pitch = PhoneData (2);
Kant = PhoneData (3);
as kant> 130 || Sy <130
r.stop
r.biep ('C, C, C, C')
breek
andersif Kant> 25 && Kant <40 %as die telefoon sywaarts draai tussen 25 en 40 grade, draai 5 grade links
r.turnAngle (-5);
andersif Kant> 40 %as die telefoon sywaarts gedraai is, meer as 40 grade draai links na 45 grade
r.turnAngle (-45)
andersif Kant -40 %as die telefoon sywaarts draai tussen -25 en -40 grade, draai 5 grade regs
r.turnAngle (5);
andersif Kant <-40 %as die telefoon sywaarts gedraai word, minder as -40 grade, draai 45 grade links
r.turnAngle (45)
einde
%As die telefoon naby die vertikaal gehou word, neem 'n prentjie en teken dit
as Pitch <-60 && image <= 9
r.biep
img = r.getImage;
subplot (3, 3, beeld)
wys (img)
einde
%beweeg vorentoe en agtertoe, gebaseer op die voor- en agteroriëntasie
as Pitch> 15 && Pitch <35 %as pitch tussen 15 en 35 grade kort afstand vorentoe beweeg
%kry ligte bumperdata voordat u beweeg
litBump = r.getLightBumpers;
as litBump.leftFront> 500 || litBump.leftCenter> 500 || litBump.rightCenter> 500 || litBump.rightFront> 500 %as iets voor die roomba is en dit sal tref as dit vorentoe beweeg, maak geraas en vertoon boodskap
r.beep ('C ^^, F#^, C ^^, F#^')
anders %beweeg
r.moveDistance (.03);
Kry bumperdata nadat u beweeg het
Bump = r.getBumpers;
as Bump.right == 1 || Bult.links == 1 || Bump.front == 1
r.biep ('A, C, E')
r.moveDistance (-. 01)
einde
%kry kransensordata
Cliff = r.getCliffSensors;
as Cliff.links> 1500 || Cliff.leftFront> 1500 || Cliff.rightFront> 1500 || Cliff.right> 1500 %as iets veroorsaak dat die kransensor dit as lawa beskou en 'n rugsteun maak
r.beep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistance (-. 031)
einde
einde
anders as Pitch> 35 %as toonhoogte groter as 35 grade vorentoe beweeg
%kry ligte bumperdata voordat u beweeg
litBump = r.getLightBumpers;
as litBump.leftFront> 15 || litBump.leftCenter> 15 || litBump.rightCenter> 15 || litBump.rightFront> 15 %as iets voor die roomba is en sal tref as dit vorentoe beweeg, maak geraas en vertoon boodskap
r.beep ('C ^^, F#^, C ^^, F#^')
anders %beweeg
r.moveDistance (.3)
Kry bumperdata nadat u beweeg het
Bump = r.getBumpers;
as Bump.right == 1 || Bult.links == 1 || Bump.front == 1 %as u iets tref, maak 'n geraas, vertoon boodskap en maak 'n rugsteun
r.biep ('A, C, E')
r.moveDistance (-. 01)
einde
%kry kranssensordata nadat hulle beweeg het
Cliff = r.getCliffSensors;
as Cliff.links> 1500 || Cliff.leftFront> 1500 || Cliff.rightFront> 1500 || Cliff.right> 1500 %as iets veroorsaak dat die kransensor dit as lawa beskou en 'n rugsteun maak
r.beep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistance (-. 31)
einde
einde
anders as Pitch -35 %as die afstand tussen -15 en -35 grade kort afstand terug beweeg
r.moveDistance (-. 03);
%kry kranssensordata nadat hulle beweeg het
Cliff = r.getCliffSensors;
as Cliff.links> 1500 || Cliff.leftFront> 1500 || Cliff.rightFront> 1500 || Cliff.right> 1500 %as iets veroorsaak dat die kransensor dit as lawa beskou en 'n rugsteun maak
r.beep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistance (.04)
einde
anders as Pitch -60 %as die toonhoogte tussen -35 en -60 grade langer afstand terug beweeg
r.moveDistance (-. 3)
%kry kranssensordata nadat hulle beweeg het
Cliff = r.getCliffSensors;
as Cliff.links> 1500 || Cliff.leftFront> 1500 || Cliff.rightFront> 1500 || Cliff.right> 1500 %as iets veroorsaak dat die kransensor dit as lawa beskou en 'n rugsteun maak
r.beep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistance (.31)
einde
einde
einde
einde
Aanbeveel:
Steam Punk jou UPS om ure se uptime vir jou Wi-Fi-router te kry: 4 stappe (met foto's)
Steam Punk jou UPS om ure se spitstyd vir jou Wi-Fi-router te kry: daar is iets fundamenteel onaangenaams dat jou UPS sy 12V DC-batterykrag in 220V-wisselstroom kan omskakel, sodat die transformators met jou router en vesel ONT dit kan omskakel in 12V DC! U is ook teen die [tipies
Buigsame boekwyser wat verander kan word, kan verander word: 6 stappe
Buigsame boek wat verander kan word: verander u gunsteling papierboekmerk in 'n veranderlike boek met slegs 'n paar maklike stappe. om 'n boek opsy te sit as dinge gaan
Mars Roomba -projek UTK: 4 stappe
Mars Roomba -projek UTK: DISCLAIMER: DIT SAL SLEGS WERK AS DIE ROOMBA OP 'N SPESIFIEKE manier ingerig word, is hierdie instruksie geskep en bedoel om gebruik te word deur die Universiteit van TENNSEE STUDENTE EN FAKULTEIT Hierdie kode word gebruik om plaaslik op te stel geskryf en s
Mystic Crystal Ball (dit vertel jou letterlik jou fortuin!): 3 stappe (met foto's)
Mystic Crystal Ball (Dit vertel jou letterlik jou fortuin!): Leer hoe om 'n waarsêende kristalbal te maak wat jou toekoms onthul wanneer dit aangeraak word! Die projek bestaan uit drie basiese dele en kan binne ongeveer vier uur gebou word. Materiaal: 1. Kapasitiewe aanraaksensor: 1 - Arduino Uno -mikrobeheerder 1
Hoe u die teks wat verskyn wanneer u u muis oor die beginknoppie verander, verander: 4 stappe
Hoe u die teks wat verskyn as u met die muis oor die beginknoppie verander, verander: die titel sê alles