Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
Genom att använda MATLAB och iRobots Create2 Robot kommer detta projekt att utforska olika områden på en okänd plats. Vi använde sensorerna på roboten för att manövrera en farlig terräng. Genom att få fotografier och videoflöde från en Raspberry Pi som är bifogad kunde vi fastställa de hinder som roboten kommer att möta, och de kommer att klassificeras.
Delar och material
För detta projekt behöver du
-en dator
-nyaste versionen av MATLAB (MATLAB R2018b användes för detta projekt)
- roombaInstallera verktygslåda
-iRobots Create2 -robot
-Raspberry Pi med kamera
Steg 1: Initiering och sensorer
Innan vi påbörjade någon programmering laddade vi ner verktygslådan roombaInstall, som gav åtkomst till olika komponenter i roboten.
Inledningsvis skapade vi ett GUI för att initiera alla robotar. För att göra detta måste du skriva in robotens nummer som en ingång. Detta gör det möjligt att köra vårt program till roboten Vi arbetade med att få roboten att manövrera genom de många terrängen den skulle stöta på. Vi implementerade Cliff Sensors, Light Bump Sensors och Physical Bump Sensors genom att använda deras utgångar för att utlösa roboten för att ändra dess hastighet och eller riktning. När någon av de sex ljusstötssensorerna detekterar ett objekt minskar värdet som de matar ut, vilket gör att robotens hastighet minskar för att undvika en kollision med full hastighet. När roboten äntligen krockar med ett hinder kommer Physical Bump -sensorerna att rapportera ett värde som är större än noll; på grund av detta kommer roboten att stanna, så det blir inga fler kollisioner och fler funktioner kan tas i bruk. För Cliff Sensors kommer de att läsa ljusstyrkan i området runt dem. Om värdet är större än 2800 bestämde vi att roboten skulle vara på en stabil mark och säker. Men om värdet är mindre än 800 kommer Cliff Sensors att upptäcka en klippa och stanna omedelbart för att inte falla av. Varje värde däremellan bestämdes för att representera vatten och kommer att få roboten att stoppa sin handling. Genom att använda sensorerna ovan ändras robotens hastighet så att vi bättre kan avgöra om det finns någon fara.
Nedan är koden (från MATLAB R2018b)
%% Initialisering
dlgPrompts = {'Roomba -nummer'};
dlgTitle = 'Välj din Roomba';
dlgDefaults = {''};
opts. Resize = 'on';
dlgout = inputdlg (dlgPrompts, dlgTitle, 1, dlgDefaults, opts) % Skapa fönster som uppmanar användaren att ange sitt roomba -nummer
n = str2double (dlgout {1});
r = roomba (n); % Initierar användarspecificerad Roomba %% Hastighetsbestämning från Light Bump Sensors medan true s = r.getLightBumpers; % får ljusstötssensorer
lbumpout_1 = extraktfält (er, 'vänster'); % tar sensornas numeriska värden och gör dem mer användbara lbumpout_2 = extractfield (s, 'leftFront');
lbumpout_3 = extractfield (s, 'leftCenter');
lbumpout_4 = extractfield (s, 'rightCenter');
lbumpout_5 = extractfield (s, 'rightFront');
lbumpout_6 = extractfield (s, 'right');
lbout = [lbumpout_1, lbumpout_2, lbumpout_3, lbumpout_4, lbumpout_5, lbumpout_6] % konverterar värden till matris
sLbump = sort (lbout); %sorterar matris till lägsta värde kan extraheras
lowLbump = sLbump (1); hastighet =.05+(lowLbump)*. 005 %med lägsta värde, som representerar nära hinder, för att bestämma hastighet, högre hastighet när ingenting upptäcks
r.setDriveVelocity (hastighet, hastighet)
slutet
% Fysiska stötfångare
b = r.getBumpers; %Output sant, falskt
bsen_1 = extraktfält (b, 'vänster')
bsen_2 = extraktfält (b, 'höger')
bsen_3 = extraktfält (b, 'front')
bsen_4 = extraktfält (b, 'leftWheelDrop')
bsen_5 = extraktfält (b, 'rightWheelDrop')
gupp = [bsen_1, bsen_2, bsen_3, bsen_4, bsen_5] tbump = summa (bums)
om tbump> 0 r.setDriveVelocity (0, 0)
slutet
% Cliff Sensors
c = r.getCliffSensors %% 2800 säker, annars vatten
csen_1 = extraktfält (c, 'vänster')
csen_2 = extraktfält (c, 'höger')
csen_3 = extraktfält (c, 'leftFront')
csen_4 = extraktfält (c, 'rightFront')
klippor = [csen_1, csen_2, csen_3, csen_4]
ordcliff = sortera (klippor)
om ordcliff (1) <2750
r.setDriveVelocity (0, 0)
om klippa <800
disp 'klippa'
annan
disponera 'vatten'
slutet
r. TurnAngle (45)
slutet
Steg 2: Skaffa data
När de fysiska stötsensorerna har utlösts kommer roboten att implementera sin Raspberry Pi ombord för att ta ett foto av hindret. Efter att ha tagit ett fotografi, med hjälp av textigenkänning om det finns text i bilden, avgör roboten vad hindret är och vad hindret säger.
img = r.getImage; imshow (img);
imwrite (img, 'imgfromcamera.jpg')
foto = imread ('imgfromcamera.jpg')
ocrResults = ocr (foto)
erkänt text = ocrResults. Text;
figur;
imshow (foto) text (220, 0, erkänt text, 'BackgroundColor', [1 1 1]);
Steg 3: Avsluta uppdraget
När roboten avgör att hindret är HEM, kommer den att slutföra sitt uppdrag och stanna hemma. Efter uppdraget kommer roboten att skicka ett e-postmeddelande om att den har återvänt hem och den kommer att skicka bilderna som den tog under resan.
% Skicka e-post
setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com');
setpref ('Internet', 'E_mail', '[email protected]'); % e -postkonto som ska skickas från setpref ('Internet', 'SMTP_Username', 'enter sender email'); % avsändarnamn användarnamn setpref ('Internet', 'SMTP_Password', 'ange avsändarlösenord'); % Avsändares lösenord
rekvisita = java.lang. System.getProperties; props.setProperty ('mail.smtp.auth', 'true'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465');
sendmail ('Ange mottagande e -post', 'Roomba', 'Roomba har återvänt hem !!', 'imgfromcamera.jpg') % e -postkonto att skicka till
Roboten är sedan klar.
Steg 4: Slutsats
Det inkluderade MATLAB -programmet separeras från hela skriptet som användes med roboten. I det slutliga utkastet, se till att lägga in all kod, förutom initialiseringssteget, i en stundslinga för att se till att stötfångarna ständigt körs. Detta program kan redigeras för att passa användarens behov. Konfigurationen av vår robot visas.
*Påminnelse: Glöm inte att roombaInstall -verktygslådan behövs för att MATLAB ska kunna interagera med roboten och Raspberry Pi ombord.