Inhaltsverzeichnis:

Roomba MATLAB-Projekt - Gunook
Roomba MATLAB-Projekt - Gunook

Video: Roomba MATLAB-Projekt - Gunook

Video: Roomba MATLAB-Projekt - Gunook
Video: Mr. Roombato - A MATLAB-Driven Roomba Project 2024, Juli
Anonim
Roomba MATLAB-Projekt
Roomba MATLAB-Projekt

Der aktuelle Plan, den die NASA für den Mars-Rover hat, sieht vor, dass er ein Datensammler ist und um den Mars herumstreift, um Bodenproben zu sammeln, um sie zur Erde zurückzubringen, damit Wissenschaftler sehen können, ob es frühere Lebensformen auf dem Planeten gab. Darüber hinaus sendet der Rover Bilder an Wissenschaftler zurück, damit diese beim Navigieren des Rovers helfen und eventuell auftretende Probleme beheben können.

Die Idee unserer Gruppe für unser Projekt ist, dass der Rover das gleiche macht wie der NASA-Rover, der 2020 die Erde verlassen wird, aber auch die Geographie des Landes kartografiert. Der Roomba wäre in der Lage, Klippen zu erkennen und sich selbst zu stoppen, bevor er herunterfällt, und dann rückwärts zu fahren, sich zu drehen und seinen Kurs zu ändern, damit er nicht herunterfällt und beschädigt wird. Unsere andere in unser Projekt integrierte Idee besteht darin, dass der Roomba in der Lage ist, die Wahrzeichen, die er sieht, zu zeichnen und jedes Mal, wenn die Schleife beendet und ihr Kurs durchlaufen wurde, eine Grafik anzuzeigen.

Dieses anweisbare ist für alle anderen, die die gleiche Art von Code für ihren Roomba erstellen möchten.

Schritt 1: Schritt 1: Benötigte Materialien

Schritt 1: Benötigte Materialien
Schritt 1: Benötigte Materialien
Schritt 1: Benötigte Materialien
Schritt 1: Benötigte Materialien

Du wirst brauchen:

  1. Ein Zimmer
  2. MATLAB
  3. Diese Datei zum Ausführen des roomba
  4. Eine flache Oberfläche
  5. Eine Tischoberfläche als "Klippe"

Schritt 2: Schritt 2: Einrichten / Abrufen von Code für Roomba

Schritt 2: Einrichten / Abrufen von Code für Roomba
Schritt 2: Einrichten / Abrufen von Code für Roomba

Ihr Bildschirm sieht so aus, sobald Sie die Dateien eingeben.

Schritt 3: Schritt 3: Einrichten von Cliff-Sensoren / LED-Leuchten

Dieser Code teilt Ihrem Roomba genau mit, welchen Winkel er drehen soll, überprüfen Sie die Batterieinformationen, sagen Sie Ihrem Roomba, wie schnell er fahren soll, und sucht durch die Kamera des Roomba nach einer Person. Es piept auch, wenn es eine Person identifiziert, und stoppt sich selbst, bevor es von einer Klippe springt.

% versuchen rob.setLEDDigits('') x=0; y = 0; theta=0; Hindernis = ; Zyklus = 1; AngCorr = @(x)x + 3.059.*x.^0.4205; %Funktion zum Korrigieren von Drehwinkeln während 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') Pause(0.5) Hindernis(Zyklus) = 2; AA_cliffbeep(rob) %Back Up And Turn rob.moveDistance(-.15) rob.turnAngle(30) end

Schritt 4: Schritt 4: Auf Hindernisse prüfen

Mit diesem Code wird der Roomba auf Gegenstände in seiner Umgebung überprüft und der Stoßsensor überprüft, um sicherzustellen, dass er stoppt, bevor er sich selbst beschädigt.

%Check Light Sensor if AA_lightcheck(rob) rob.stop rob.setLEDDigits('Wall') pause(0.5) hindernis(cycle) = 1; %Wall AA_wallbeep(rob) %Back Up And Turn rob.moveDistance(-.15) rob.turnAngle(30) end %Check Bump Sensor if AA_bumpcheck(rob) rob.stop rob.setLEDDigits('Wall') pause(0.5) Hindernis (Zyklus) = 1; %Wall AA_wallbeep(rob) %Back Up And Turn rob.moveDistance(-.15) rob.turnAngle(30) end %If none if isleer(Hindernis) Hindernis(Zyklus) = 0; elseif Länge(Hindernis) < Zyklus Hindernis(Zyklus) = 0; Ende

Schritt 5: Schritt 5: Plotten

Schritt 5: Plotten
Schritt 5: Plotten

Dieser Code weist Ihren Roomba an, zu planen, was er auf seiner Reise antrifft. Eine Handlung wie diese wird angezeigt, nachdem der Roomba angehalten hat.

%Get Position d = rob.getDistance; wenn Zyklus == 1 Theta(Zyklus) = 0; x(Zyklus) = d.*cosd(Theta(Zyklus)); % zurückgelegte Gesamtstrecke in x y(Zyklus) = d.*sind(theta(Zyklus)); % zurückgelegte Gesamtstrecke in y sonst theta(Zyklus) = theta(Zyklus-1) + rob.getAngle; x(Zyklus) = d.*cosd(Theta(Zyklus)) + x(Zyklus-1); % zurückgelegte Gesamtstrecke in x y(Zyklus) = d.*sind(theta(Zyklus)).*d + y(Zyklus-1); % zurückgelegte Gesamtstrecke in Y-Ende %Break-Bedingung, wenn rob.getButtons.clean Break-Ende %Inkrement-Zykluszyklus = Zyklus + 1; end rob.stop for i = 1:cycle if hindernis(i) == 1 %Wall plot(x(i), y(i), 'Marker', 'square', 'MarkerEdgeColor', 'r') elseif hindernis (i) == 2 %Cliff plot(x(i), y(i), 'Marker', 'o', 'MarkerEdgeColor', 'k') end text(.9, 0.9, sprintf('Square = Wall \nCircle = Cliff'), 'Units', 'normalized') am Ende halten %Notsignal während true rob.beep pause(3) if rob.getButtons.clean Break end end % catch % rob.stop % end

Empfohlen: