Inhoudsopgave:

Roomba MATLAB-project: 5 stappen
Roomba MATLAB-project: 5 stappen

Video: Roomba MATLAB-project: 5 stappen

Video: Roomba MATLAB-project: 5 stappen
Video: Matlab Simulation for iRobot Create Maze Exploration 2024, November
Anonim
Roomba MATLAB-project
Roomba MATLAB-project

Het huidige plan dat NASA voor de Marsrover heeft, is dat het een gegevensverzamelaar wordt en rond Mars gaat zwerven, waarbij monsters van de grond worden verzameld om terug naar de aarde te brengen, zodat wetenschappers kunnen zien of er eerdere levensvormen op de planeet waren. Bovendien stuurt de rover afbeeldingen terug naar wetenschappers, zodat ze kunnen helpen bij het navigeren door de rover en eventuele problemen kunnen oplossen.

Het idee van onze groep voor ons project is dat de rover hetzelfde doet als de NASA-rover die in 2020 de aarde zal verlaten, maar ook om de geografie van het land in kaart te brengen. De roomba zou kliffen kunnen voelen en zichzelf kunnen stoppen voordat hij eraf valt, en dan achteruit gaan, draaien en van koers veranderen zodat hij niet valt en beschadigd raakt. Ons andere idee dat in ons project is geïntegreerd, is dat de roomba de oriëntatiepunten die hij ziet kan uitzetten en een plot kan laten zien telkens wanneer de lus is voltooid en zijn koers is gelopen.

Deze instructable is voor iedereen die hetzelfde type code voor zijn roomba wil maken.

Stap 1: Stap 1: Benodigde materialen

Stap 1: Benodigde materialen
Stap 1: Benodigde materialen
Stap 1: Benodigde materialen
Stap 1: Benodigde materialen

Je zal nodig hebben:

  1. een kamerba
  2. MATLAB
  3. Dit bestand om de roomba. uit te voeren
  4. Een plat oppervlak
  5. Een tafelblad om als "klif" te fungeren

Stap 2: Stap 2: Code instellen/opvragen voor Roomba

Stap 2: Code instellen/opvragen voor Roomba
Stap 2: Code instellen/opvragen voor Roomba

Uw scherm ziet er zo uit zodra u de bestanden invoert.

Stap 3: Stap 3: Afgrondsensoren/LED-verlichting instellen

Deze code vertelt uw roomba precies in welke hoek hij moet draaien, controleert de batterij-informatie, vertelt uw roomba hoe snel hij moet gaan en controleert of er een persoon is via de camera van de roomba. Hij piept ook als hij een persoon identificeert en stopt zichzelf voordat hij van een klif afgaat.

% probeer rob.setLEDDigits('') x=0; y=0; theta=0; obstakel = ; cyclus = 1; AngCorr = @(x)x + 3.059.*x.^0.4205; %Functie om draaihoeken te corrigeren terwijl rob.getBatteryInfo.percent > 15 rob.setLEDDigits('') rob.setDriveVelocity(0.1) %Go %Check For Person if AA_checkperson(rob) rob.beep end %Check Cliff Sensor if AA_cliffcheck(rob) rob.stop rob.setLEDDigits('Cliff') pauze (0.5) obstakel (cyclus) = 2; AA_cliffbeep(rob) %Back-up en draai rob.moveDistance(-.15) rob.turnAngle(30) end

Stap 4: Stap 4: Controleren op obstakels

Deze code zorgt ervoor dat de roomba wordt gecontroleerd op items eromheen en controleert de stootsensor om ervoor te zorgen dat deze stopt voordat deze zichzelf beschadigt.

%Controleer de lichtsensor als AA_lightcheck(rob) rob.stop rob.setLEDDigits('Wall') pauze (0.5) obstakel (cyclus) = 1; %Wall AA_wallbeep(rob) %Back-up en draai rob.moveDistance(-.15) rob.turnAngle(30) end %Check Bump Sensor if AA_bumpcheck(rob) rob.stop rob.setLEDDigits('Wall') pause(0.5) obstakel (cyclus) = 1; %Wall AA_wallbeep(rob) %Back-up en draai rob.moveDistance(-.15) rob.turnAngle(30) end %Als geen indien leeg (obstakel) obstakel (cyclus) = 0; elseif lengte(obstakel) <cyclus obstakel(cyclus) = 0; einde

Stap 5: Stap 5: plotten

Stap 5: plotten
Stap 5: plotten

Deze code vertelt je roomba dat hij moet uitstippelen wat hij op zijn reis tegenkomt. Een plot als deze zal verschijnen nadat de roomba is gestopt.

%Get Positie d = rob.getDistance; als cyclus == 1 theta(cyclus) = 0; x(cyclus) = d.*cosd(theta(cyclus)); % totale afgelegde afstand in x y(cyclus) = d.*sind(theta(cyclus)); % totaal afgelegde afstand in y else theta(cycle) = theta(cycle-1) + rob.getAngle; x(cyclus) = d.*cosd(theta(cyclus)) + x(cyclus-1); % totale afgelegde afstand in x y(cyclus) = d.*sind(theta(cyclus)).*d + y(cyclus-1); % totaal afgelegde afstand in y einde %Break condition if rob.getButtons.clean break end %Increment cycle cycle = cycle + 1; end rob.stop for i = 1:cycle if obstakel(i) == 1 %Wall plot(x(i), y(i), 'Marker', 'square', 'MarkerEdgeColor', 'r') elseif obstakel (i) == 2 %Cliff plot(x(i), y(i), 'Marker', 'o', 'MarkerEdgeColor', 'k') end text(.9, 0.9, sprintf('Square = Wall \nCircle = Cliff'), 'Units', 'normalized') vasthouden aan einde %Distress Signaal terwijl true rob.beep pause(3) if rob.getButtons.clean break end end % catch % rob.stop % end

Aanbevolen: