Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

projektesose22:ougpublic:start

Obst und Gemüse

Themenbeschreibung und Überblick

Wir haben einen Roboter gebaut, der Obst und Gemüse in gleichmäßige Stückchen schneidet. Er kann die Größe von Objekten erkennen, sie in gleichgroße Stücke einteilen und sie dementsprechend zerschneiden. Eventuell soll er die Stücke auch noch in einen Korb schieben. Das erkennen der Größe geschieht durch eine Kamera. Da die uns zur Verfügung stehenden Motoren nicht besonders stark sind, liegt unser größter Fokus darauf, eine Konstruktion zu finden, die genug Kraft aufbringen kann, um auch härtere Gemüse wie Möhren zu schneiden.

Methoden

Die Idee war, den Roboter in zwei Teile aufzuteilen. Eine Konstruktion, die für das Schneiden zuständig ist (Bild 1) und eine, die sich durch diese hindurchbewegt (Bild 2).

Konstruktion

Unser Endergebnis besteht im Wesentlichen auch aus diesen zwei Teilen: dem Brett, auf dem das Obst oder Gemüse liegt und aus zwei Steppern, die ein weiteres Brett mit einem Messer nach oben und nach unten bewegen. Ersteres haben wir zwar etwas anders umgesetzt als auf den ersten Skizzen dargestellt, das Prinzip ist aber das gleiche. Die Kamera soll überhalb des zu schneidenen Objektes befestigt werden, um seine Größe zu ermitteln.

Das untere Brett

Die Idee ist relativ simpel. Das Brett ist unten mit einer Schiene verbunden. Mithilfe eines Zahnrades, welches von einem Stepper bewegt wird, wird das Brett nach vorne bewegt und mit ihm das Obst. Wie weit das Brett für jeden Schnitt weiterbewegt werden soll, wird von der Kamera ermittelt (dazu später mehr).

unteres Brett mit Möhre

Das Messer

Der zweite Teil der Konstruktion ist für das Schneiden an sich verantwortlich. Er besteht aus zwei Steppern mit Gewindestangen. Diese bewegen das Brett nach oben und nach unten. Damit das Ganze stabiler wird, haben wir noch zwei weitere Stangen ohne Gewinde eingebaut. Die Schwierigkeit war nun, dafür zu sorgen, dass sich die beiden Motoren gleich schnell drehen, damit das Brett gerade bleibt. Der eine Motor drehte sich nämlich fasst doppelt so schnell wie der andere. Damit sie sich gleich schnell drehen, werden sie unterschiedlich oft angesteuert d.h. der langsamer drehende Motor wird deutlich öfter weiterbewegt als der schnell drehende Motor.

Dieses Video ist entstanden nach dem wir es geschafft hatten, die Motoren synchron zu bewegen. Das Messer gab es zu diesem Zeitpunkt noch nicht.

Bis zu diesem Punkt ist alles sehr sehr gut! Beim Punkt „Bildverarbeitung“ wünsche ich mir eine viel ausführlichere Erklärung der einzelnen Schritten mit Abbildgunen, die jeden Schritt und seine Zwischenergebnisse veranschaulichen. Vor allem wären dafür Abbildungen geeignet, die ihr direkt mit eurer verbauten Robotercamera macht (von oben nach unten).

Zum Beispiel:

Durch diese Vereinfachung ist das Brett, auf dem die Karotte liegt, weiß und die Möhre schwarz auf dem Bildschirm.“ –> zeigt bitte mit 1-2 Abbildungen (Farbbild und Schwarzweißbild), was ihr meint.

So kann dann ganz einfach zuerst von links nach rechts die Anzahl der schwarzen Pixel gezählt werden, um die Länge feststellen zu können und dann in 3cm Abständen die Breite der Möhre, in dem man von oben nach unten zählt.“ –> Macht vielleicht ein Bild von der Möhre, wie eure Kamera sie sieht, und zeichnet drauf, was genau gemessen wird - welche Dimensionen. Ihr könnt z.B. zeichnen, was als Länge der Möhre gilt und welche Linien als Breite (zeichnet vielleicht senkrechnte Linien in das Bild ein an die Stellen, wo ihr die Breite misst). Wird an jeder Pixelreihe die Breite gemessen oder nur alle 3cm? Das hab ich aus dem Text nicht verstanden.

Diese Informationen werden dann weiter an das Arduino Programm von Processing in einer Liste übergeben.“ –> Gibt bitte ein Beispiel davon, wie diese Daten aussehen (=wie ist der Protokoll). Sind es einzelne Zahlen, die durch Semikolons getrennt sind? Oder wie kann ich mir vorstellen, was von Processing zu Arduino geschickt wird?

So kann dann ganz einfach zuerst von links nach rechts die Anzahl der schwarzen Pixel gezählt werden, um die Länge feststellen zu können und dann in 3cm Abständen die Breite der Möhre, in dem man von oben nach unten zählt. Aufgrund dieser beiden Daten, Länge und verschiedene Breiten, wird dann durch die Kreisformel pr² das vorhandene Volumen errechnet und durch ein zuvor festgelegtes Wunschvolumen die jeweilige Breite der Schnitte. Diese Informationen werden dann weiter an das Arduino

Bildverarbeitung

Damit zum einem die Möhrenstückchen, egal wie breit die Möhre selbst ist, letztendlich das gleiche Volumen haben und zum anderen der Roboter die Informationen erhält, wo er anfangen und wo er aufhören muss zu schneiden, brauchen wir eine Bildverarbeitung. Dafür haben wir eine Kamera angebracht, deren farbiges Bild durch ein bereits bestehendes Programm in ein Schwarz-Weiß-Bild umgewandelt wird. Die Verarbeitung des Kamera Bildes war uns in Processing möglich, nicht aber in dem Arduino Programm. Daher haben wir alles was mit dem Bild zu tun hat in Processing geschrieben und im Anschluss die Daten übergeben. Durch diese Vereinfachung ist das Brett, auf dem die Karotte liegt, weiß und die Möhre schwarz auf dem Bildschirm.

'normales' Bild → Schwarz-Weiß-Bild in Processing

So kann dann ganz einfach zuerst von links nach rechts die Anzahl der schwarzen Pixel gezählt werden, um die Länge feststellen zu können und dann in 50 Pixel-Abständen (in blau) die Breite der Möhre, in dem man von oben nach unten zählt (in Roter Farbe markiert). 37,5 Pixel entsprechen 1cm in der Realität bei dem festgemachten Abstand der Kamera zur Möhre.

Aufgrund dieser beiden Daten, Länge und verschiedene Breiten, wird dann durch die Kreisformel pr² das vorhandene Volumen in den verschiedenen Abschnitten (in grüner Farbe) errechnet. Durch ein zuvor festgelegtes Wunschvolumen wird dann die jeweilige Breite der Schnitte in den verschiedenen Abschnitten errechtnet. Diese Informationen werden dann weiter an das Arduino Programm von Processing in einer Liste übergeben. Die Übergabe von Processing zu Arduino hat sich letztendlich als etwas schwieriger herausgestellt. In Processing waren die Positionen aller Schnitte in einem Array gespeichert, parallel zur Speicherung im Array wurden die Daten auch in einer Liste gespeichert. Doch es war schwer, die Liste als Ganzes zu übergeben und nicht nur den ersten Wert. Dies konnten wir letztenlich leider nicht mehr ganz beheben und leider können wir die Daten nicht komplett weiter schicken. Daher sind die Volumen der einzelenen Möhrenstücke leider nicht exakt gleich. In Arduino ensprechen 53 Motor Steps 1cm, daher wurden die übergebenen Pixel Werte mit 1,4 Multipliziert, um bei 37,5 Pixel pro Zentimeter keine Verzerrung zu bekommen.

Können wir vielleicht ein Beispiel mit der Möhre/Banane haben statt mit einem Fenster?

So sieht zB eine Ausgabe des Processing Programms aus. Erst wird die Länge der Möhre und an verschiedenen Stellen die Breite, also der Radius ausgegeben (im vorherigen Bild Rot markiert). Dann die Stellen der Schnitte. Das ist nicht genau, was an das Arduino Programm ausgegeben wird, sondern eher ein Check, welche Werte wo berechnet werden. Hier kann man auch genau sehen, wie die Abstände der Schnitte immer geringer werden, je näher man dem Ende der Möhre kommt. Das ist auch genau, was passieren soll, denn zum Ende hin wird die Möhre ja auch immer Breiter.

Materialliste

Bauteil Anzahl
Arduino nano 1
Stepper 3
DRV8825 Stepper Driver 3
Webcam 1
sonstige Materialien
Holz
Schrauben
Muttern
scharfe Metallplatte (als Messer)
Spannungsquelle
Kabel, Widerstände, etc.

Ergebnis und Diskussion

Das grundlegende Ziel haben wir erreicht. Der Roboter kann Obst und Gemüse in gleichgroße Stückchen schneiden. Die Kamera erkennt auch die Größe von Objekten und teilt sie in gleichgroße Teile auf. Allerdings ist die Umrechung der von der Kamera errechneten Abstände auf die realen Abstände, um die sich das Brett letztenendes bewegt noch nicht ganz ausgereift. Daran arbeiten wir noch zum Zeitpunkt dieser Dokumentation.

Aus zeitlichen Gründen haben wir es leider auch nicht geschafft, den Roboter so zu erweitern, dass er die Stückchen in den angebauten Korb schiebt. Dies wäre eine Erweiterungsmöglichkeit, die in den folgenden Semestern vorgenommen werden kann.

Anfangs hatten wir ja noch viele weitere Ideen, was der Roboter noch alles machen könnte, haben aber relativ schnell festgestellt, dass das zeitlich in niemals realistisch gewesen wäre.

Hier sind noch einige Videos, die in der Testphase entstanden sind.

Code

projektesose22/ougpublic/start.txt · Zuletzt geändert: 2022/08/29 21:45 von d.golovko