Legoteil Zählmaschine 2016: Unterschied zwischen den Versionen
Zeile 100: | Zeile 100: | ||
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> | <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> | ||
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> | |||
<source lang="matlab"> | <source lang="matlab"> | ||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |||
% Funktion : Merkmalsextraktion: FARBERKENNUNG % | |||
% Autor : Christo Tsibadze % | |||
% Implementation : MATLAB R2016a % | |||
% % | |||
% Funkion : Funtion ermittelt die Farbe von dem Überlagerten % | |||
% Bereich aus Binär_Objekt_Bild und Originalbild und % | |||
% ermittelt zu welcher Farbe der Tabelle am besten % | |||
% ähnelt % | |||
% EINGABE : RGB_BILD (:,:,3) in uint8 Format % | |||
% BW_OBJECT(:,:) in Binärformat % | |||
% AUSGABE : FARBE LEGO-Farbe als string % | |||
% Änderungsdatum : 21.06.2016 % | |||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |||
function [ FARBE ] = FARBERKENNUNG_V2( RGB_BILD, BW_OBJECT ) | |||
%% Farbwerte-Tabelle mit normierten Lego-Farben | |||
% % R(1) G(1) B(1) Farbcode R(255) G(255) B(255) | |||
Farbwerte=[ 1.00 1.00 1.00;% 01 255 255 255; %'weiss' 1 | |||
0.87 0.78 0.61;% 05 222 198 156; %'beige' 2 | |||
0.70 0.00 0.02;% 21 179 0 6; %'rot' 3 | |||
0.00 0.34 0.65;% 23 0 87 166; %'blau' 4 | |||
0.97 0.82 0.09;% 24 247 209 23; %'gelb' 5 | |||
0.13 0.13 0.13;% 26 33 33 33; %'schwarz' 6 | |||
0.06 0.80 0.19;% 37 16 203 49; %'gruen' 7 | |||
0.70 0.33 0.03;% 38 179 84 8; %'hellbraun' 8 % wird zurzeit nicht verwendet | |||
% 0.69 0.71 0.78;% 194 175 181 199; %'hell-grau' 9 | |||
0.71 0.73 0.80;% 194 175 181 199; %'hell-grau' 9 %angepasst | |||
% 0.35 0.36 0.38;% 199 89 93 96; %'dunkel-grau' 10 | |||
0.45 0.46 0.48;% 199 89 93 96; %'dunkel-grau' 10 %angepasst | |||
0.20 0.00 0.00;% 308 51 0 0; %'dunkelbraun' 11 %wird zurzeit nicht verwendet | |||
]; | |||
%% Eine Maske für die Farbextrahierung aus Binärbild erzeugen | |||
[Hoehe, Breite]=size(BW_OBJECT); %Hoehe und Breite des Bildes ermitteln | |||
Farbmaske=zeros(Hoehe, Breite, 3); %Null-Matrix für Farbmaske erstellen | |||
RGB_BILD=im2double(RGB_BILD); %in double umwandeln, besser zu rechnen | |||
BW_BILD=im2double(BW_OBJECT); | |||
%% nur die Farben aus übereinstimmenden Pixeln RGB zu BW in der Farbmaske übernehmen | |||
Farbmaske(:,:,1) = RGB_BILD(:,:,1).*BW_BILD(:,:); %für Rot | |||
Farbmaske(:,:,2) = RGB_BILD(:,:,2).*BW_BILD(:,:); %für Grün | |||
Farbmaske(:,:,3) = RGB_BILD(:,:,3).*BW_BILD(:,:); %für Blau | |||
%% Pixel-Fläche des Binärbildes berechnen für die Mittelwertbildung | |||
Pixel_Flaeche = sum(sum(BW_OBJECT)); %Flächenberechnung, Pixelanzahl | |||
%% Mittelwertwerte für R, G und Blau berechnen | |||
FARBE(1,1) = (sum(sum(Farbmaske(:,:,1))))/Pixel_Flaeche; %für jede Farbe Summe im Bild bilden und durch die Anzahl der Pixel teilen | |||
FARBE(1,2) = (sum(sum(Farbmaske(:,:,2))))/Pixel_Flaeche; | |||
FARBE(1,3) = (sum(sum(Farbmaske(:,:,3))))/Pixel_Flaeche; | |||
%% Die Farbe aus der Tabelle mit geringster Abweichung zu aktueller Farbe bestimmen | |||
% 1) zu Jeder Tabellenfarbe wird der größstabweichender Farbanteil der | |||
% aktuellen Farbe ermittelt und gespeichert | |||
% 2) anschließend wird die Farbe mit geringsten Wert von den | |||
% maximalabweichungen ermittelt | |||
temp = max(abs(Farbwerte(1,:)-FARBE)); % Max von R,G,B Differenzen zu erster Farbe | |||
MIN_Diff=1; | |||
for i=2:11 | |||
if(temp>(max(abs(Farbwerte(i,:)-FARBE)))) % falls der gleiche Wert mit anderer Farbe kleiner ist, speichern | |||
MIN_Diff = i; % den Farbenindex mit kleinst. Abweichung speichern | |||
temp=max(abs(Farbwerte(i,:)-FARBE)); | |||
end; | |||
end | |||
%% Farbenzuordnung FARBE als Rückgabe | |||
% Anhand der gespeicherten Farbindex, wird eine Farbe zurückgegeben | |||
% zurückgegeben | |||
switch MIN_Diff | |||
case 1 | |||
FARBE='weiss'; | |||
case 2 | |||
FARBE='beige'; | |||
case 3 | |||
FARBE='rot'; | |||
case 4 | |||
FARBE='blau'; | |||
case 5 | |||
FARBE='gelb'; | |||
case 6 | |||
FARBE='schwarz'; | |||
case 7 | |||
FARBE='gruen'; | |||
case 8 | |||
FARBE=38; | |||
case 9 | |||
FARBE='hell-grau'; | |||
case 10 | |||
FARBE='dunkel-grau'; | |||
case 11 | |||
FARBE=308; | |||
otherwise | |||
%disp('Fehler') | |||
%hier ist noch ein Zusatzfall unterscheidbar, es ist gedacht einen | |||
%Maximalabweichung in der Berechnung einzubeziehen, falls die | |||
%kleinst ermittelte Abweichung größer ist als ein bestimmter | |||
%Grenzwert, dann soll hier Fehler ausgegeben werden. | |||
end | |||
end | |||
</source> | </source> | ||
<br /> | <br /> | ||
=== Merkmale === | === Merkmale === |
Version vom 9. Juli 2016, 20:32 Uhr
Aufgabenstellung
Die vorhandene Legoteilzählmaschine (siehe Legoteilzählmaschine_2015 ) soll Soft- und Hardwaremäßig modifiziert werden, um weitere Anforderungen zu erfüllen.
Liste der offenen Punkten vom letzten Semester
- Neues 24 V Netzteil, 24V/10A Netzteil gegen 24V/20A austauschen, um Überlast beim Lauf aller Motoren zu verhindern. Neues Netzteil ist vorhanden.
- Software zur Bildverarbeitung (BV), Die Einbindung einer geeigneten Software zur Teileerkennung steht noch aus. Kommunikation mit Systems sowie Ansteuerung ist fertig. Bildverarbeitung mit 'String' als Output.
- Bauteileliste in Excel, Die Excel Liste, welche alle Teile eines Baukasten erhält, muss mit dem Ergebnis der BV abgeglichen werden. Erkannte Teile in mindestens zwei möglichen Ausrichtungen müssen erkannt und in der Liste vermerkt werden.
- Servo für Teilesortierung, Identisches Servo wie bisher gegenüberliegend montieren, um drei Sortierfächer (Erkannt/Nicht Erkannt/Fremdteil) zu sortieren, Konstruktion, Bestellung wurde an Fr. König geleitet.
- Dieser Punkt wird in diesem Projekt nicht bearbeitet.
- Zeit bis zur Servoöffnung, Das Delay zwsichen Befehl und öffnen der Servos muss ermittelt und je nach Geschwindigkeit angepasst werden. Es ist problemlos möglich, einen weiteren 'String' - Befehl als Buchstaben für die Verzögerungszeit einzubinden, String auslesen und verarbeiten muss in Arduino Software geschehen.
- Kabelkanal montieren, Kabelkanal zur ordentlichen Verlegung der Leitungen an den Förderbändern montieren
- Kamerahalterung, Konstruktion einer Kamerahalterung für die Logitech C920 WebCam Vorschlag: Brücke über Förderband.
- Bildverarbeitungskasten, Für die Bildverarbeitung muss eine der gebauten Bildverarbeitungsbox-Prototypen ausgewählt und montiert werden. Hierfür wurden Lichttests durchgeführt. Ergebnisse sind protokolliert SVN Link zu den Lichttests, Prototypen der Lichtboxen vorhanden.
- Teilezentrierung, Die provisorisch aus Holz gefertigte Teilezentrierung soll in fixierbarer Variante aus Aluminium gefertigt werden. Ergebnisse zu den Tests der Zentrierungsmethoden sind in diesem SVN Ordner protokolliert, Prototypen der gewählten Teilezentrierung ist vor der Bildverarbeitungsbox verbaut.
- Idee Software: Flexible Bildverarbeitungssoftware, Durch definieren der Schnittstellen könnte in der GUI eine Einbindung frei wählbarer BV Software realisiert werden. Optimal geeignet um kleine Projekte dann an der Legoteilzaehlmaschine zu testen.
- Wird in diesem Projekt nicht bearbeitet.
Aufgabenteilung inkl. weiteren Aufgaben aus dem Pflichtenheft
Es wurden für jede Aufgabe ein oder mehrere Verantwortliche(n) aus der Gruppe festgelegt. Jede Person ist dann dafür zuständig, dass diese Aufgaben erfüllt werden. Bei Bedarf steht dieser Person die ganze Gruppe zur Hilfe zur Verfügung.
- Kevin Penner:
- Separierung und Zentrierung der Lego-Teile
- Pflichtenheft Dokumentation mit Software "DOORS"
- Bildverarbeitung/Legoteil-Erkennung
- Simon Hanemann:
- GUI Programmierung
- Dokumentation in HSHL-Wiki
- Video-Anleitung
- Adam Frankhauser:
- Elektr. Sicherheit
- Bildverarbeitungs-Box Fixierung/Stabilisierung
- Video-Anleitung
- Niklas Lingenauber:
- Datenbankanbindung IN/OUT und Listen
- Projektplanung
- QM-Tests (nach Rücksprache mit Prof. Schneider auf das nächste Semester verlegt)
- Bildverarbeitung/Legoteil-Erkennung
- Sergej Krause:
- Teach-IN Funktion
- Datenbankanbindung IN/OUT und Listen
- Separierung und Zentrierung der Lego-Teile
- Christo Tsibadze:
- Projektplanung
- Bildverarbeitung/Legoteil-Erkennung
- Visualisierung von Prozessen mit "Visio"
Projektplan
Meilensteine für das 6. Semester mit Deadlines:
- 06.06.2016: Hardware und Software Inbetriebnahme
- Inbetriebnahme "Erprobung von Sensoren und Aktoren"
- Automatische Sortierung von mind. 30 Teilen
- Sortierung: Erkannt und Nicht-Erkannt
- Bildverarbeitung in "Echtzeit" am PC
- Ausgabe der Inventurliste
- 24.06.2016: Algorithmen:
- Optimierung der Bildverarbeitung
- Automatische vollständige Sortierung: NXT-Basis + Erweiterung
- Planung und Beschaffung der Hardware-Änderung (Auswerfer) für die nächste Projektphase
- 14.11.2016: wird noch festgelegt, entweder Auswerfer- oder Separierung vor der BV Optimierung
- 16.01.2016: Algorithmen Optimierung, Teach-In XT/EV3 und Report
Realisierung
GUI
Bildverarbeitung/Legoteil-Erkennung
Bildverarbeitung_Main_Funktion
Farberkennung
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Funktion : Merkmalsextraktion: FARBERKENNUNG %
% Autor : Christo Tsibadze %
% Implementation : MATLAB R2016a %
% %
% Funkion : Funtion ermittelt die Farbe von dem Überlagerten %
% Bereich aus Binär_Objekt_Bild und Originalbild und %
% ermittelt zu welcher Farbe der Tabelle am besten %
% ähnelt %
% EINGABE : RGB_BILD (:,:,3) in uint8 Format %
% BW_OBJECT(:,:) in Binärformat %
% AUSGABE : FARBE LEGO-Farbe als string %
% Änderungsdatum : 21.06.2016 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [ FARBE ] = FARBERKENNUNG_V2( RGB_BILD, BW_OBJECT )
%% Farbwerte-Tabelle mit normierten Lego-Farben
% % R(1) G(1) B(1) Farbcode R(255) G(255) B(255)
Farbwerte=[ 1.00 1.00 1.00;% 01 255 255 255; %'weiss' 1
0.87 0.78 0.61;% 05 222 198 156; %'beige' 2
0.70 0.00 0.02;% 21 179 0 6; %'rot' 3
0.00 0.34 0.65;% 23 0 87 166; %'blau' 4
0.97 0.82 0.09;% 24 247 209 23; %'gelb' 5
0.13 0.13 0.13;% 26 33 33 33; %'schwarz' 6
0.06 0.80 0.19;% 37 16 203 49; %'gruen' 7
0.70 0.33 0.03;% 38 179 84 8; %'hellbraun' 8 % wird zurzeit nicht verwendet
% 0.69 0.71 0.78;% 194 175 181 199; %'hell-grau' 9
0.71 0.73 0.80;% 194 175 181 199; %'hell-grau' 9 %angepasst
% 0.35 0.36 0.38;% 199 89 93 96; %'dunkel-grau' 10
0.45 0.46 0.48;% 199 89 93 96; %'dunkel-grau' 10 %angepasst
0.20 0.00 0.00;% 308 51 0 0; %'dunkelbraun' 11 %wird zurzeit nicht verwendet
];
%% Eine Maske für die Farbextrahierung aus Binärbild erzeugen
[Hoehe, Breite]=size(BW_OBJECT); %Hoehe und Breite des Bildes ermitteln
Farbmaske=zeros(Hoehe, Breite, 3); %Null-Matrix für Farbmaske erstellen
RGB_BILD=im2double(RGB_BILD); %in double umwandeln, besser zu rechnen
BW_BILD=im2double(BW_OBJECT);
%% nur die Farben aus übereinstimmenden Pixeln RGB zu BW in der Farbmaske übernehmen
Farbmaske(:,:,1) = RGB_BILD(:,:,1).*BW_BILD(:,:); %für Rot
Farbmaske(:,:,2) = RGB_BILD(:,:,2).*BW_BILD(:,:); %für Grün
Farbmaske(:,:,3) = RGB_BILD(:,:,3).*BW_BILD(:,:); %für Blau
%% Pixel-Fläche des Binärbildes berechnen für die Mittelwertbildung
Pixel_Flaeche = sum(sum(BW_OBJECT)); %Flächenberechnung, Pixelanzahl
%% Mittelwertwerte für R, G und Blau berechnen
FARBE(1,1) = (sum(sum(Farbmaske(:,:,1))))/Pixel_Flaeche; %für jede Farbe Summe im Bild bilden und durch die Anzahl der Pixel teilen
FARBE(1,2) = (sum(sum(Farbmaske(:,:,2))))/Pixel_Flaeche;
FARBE(1,3) = (sum(sum(Farbmaske(:,:,3))))/Pixel_Flaeche;
%% Die Farbe aus der Tabelle mit geringster Abweichung zu aktueller Farbe bestimmen
% 1) zu Jeder Tabellenfarbe wird der größstabweichender Farbanteil der
% aktuellen Farbe ermittelt und gespeichert
% 2) anschließend wird die Farbe mit geringsten Wert von den
% maximalabweichungen ermittelt
temp = max(abs(Farbwerte(1,:)-FARBE)); % Max von R,G,B Differenzen zu erster Farbe
MIN_Diff=1;
for i=2:11
if(temp>(max(abs(Farbwerte(i,:)-FARBE)))) % falls der gleiche Wert mit anderer Farbe kleiner ist, speichern
MIN_Diff = i; % den Farbenindex mit kleinst. Abweichung speichern
temp=max(abs(Farbwerte(i,:)-FARBE));
end;
end
%% Farbenzuordnung FARBE als Rückgabe
% Anhand der gespeicherten Farbindex, wird eine Farbe zurückgegeben
% zurückgegeben
switch MIN_Diff
case 1
FARBE='weiss';
case 2
FARBE='beige';
case 3
FARBE='rot';
case 4
FARBE='blau';
case 5
FARBE='gelb';
case 6
FARBE='schwarz';
case 7
FARBE='gruen';
case 8
FARBE=38;
case 9
FARBE='hell-grau';
case 10
FARBE='dunkel-grau';
case 11
FARBE=308;
otherwise
%disp('Fehler')
%hier ist noch ein Zusatzfall unterscheidbar, es ist gedacht einen
%Maximalabweichung in der Berechnung einzubeziehen, falls die
%kleinst ermittelte Abweichung größer ist als ein bestimmter
%Grenzwert, dann soll hier Fehler ausgegeben werden.
end
end
Merkmale
Teach-IN
Datenbankanbindung, Listen IN/OUT
Separierung und Zentrierung der Legoteile
=== Teilezentrierung === Die provisorisch aus Holz gefertite Teilezentrierung soll in fixierbarer Variante aus Aluminium gefertigt werden Ergebnisse zu den Tests der Zentrierungsmethoden sind in diesem SVN Ordner protokolliert Prototypen der gewählten Teilezentrierung ist vor der Bildverarbeitungsbox verbaut
Separierung
Elektronik und Sicherheit
Neues 24V Netzteil
24V/10A Netzteil gegen 24V/20A austauschen, um Überlast beim Lauf aller Motoren zu verhindern.
Kabelkanal
Kabelkanal zur ordentlichen Verlegung der Leitungen an den Förderbändern montieren
Kamera- und Bildbox-Halterung
Konstruktion einer Kamerahalterung für die Logitech C920 WebCam. Vorschlag: Brücke über Förderband Für die Bildverarbeitung muss eine der gebauten Bildverarbeitungsbox-Prototypen ausgewählt und montiert werden. Hierfür wurden Lichttests durchgeführt. Ergebnisse sind protokolliert SVN Link zu den Lichttests Prototypen der Lichtboxen vorhanden
Höhenanpassung der Laufbänder
und Legoförderer (Bunker)
HSHL-Wiki-Dokumentation
gemeinsame Bearbeitung, Jede Aufgabe wird vom zuständigen Person dokumentiert...
Video-Anleitung
Projektplanung
hier können wir Unterschiede nennen: was wir anfangs geplant hatten und was wir wegen Machbarkeit mit Genehmigung von Prof. Schneider abgeändert haben...
Pflichtenheft Dokumentation in DOORS
Prozessvisualisierung mit Visio
QM-Tests
Wurde mit Genehmigung von Prof. Schneider auf das nächst Semester verlegt.
Auswerfer
z.B. Inbetriebnahme des vorhandenen Auswerfers
Planung der Aufgaben für das nächste Semester
Konzept für Sortieranlage
Zum Öffnen des 3D-Modells vom Konzept, laden Sie bitte folgende frei erhältliche Software 3DXML-Player herunter und öffnen Sie die hier gespeicherte 3dxml-Datei. Die Datei finden Sie unter diesem Link im SVN Sortieranlage.3dxml
Vereinzelung von Legoteilen vor der Bildverarbeitung
Ergebnisse
Anleitung Programmstart
- Vorbereitung
- LED-Stecker anschließen
- Hauptstecker anschließen
- Hauptschalter betätigen
- Datenbank starten
- XAMPP control panel starten
- Apache Modul starten
- MySQL Modul starten
- Matlab Programm öffnen
- unter SVN\MTR_SDE_Praktikum_2015\SRC die main-datei öffnen
- Programm starten
- Baukasten in der GUI auswählen
- handgezählte Teile eintragen
- automatischer Zählprozess
- Motoren werden automatisch gestartet
- Kästen hinter das Förderband stellen
- Legoteile in den Bunker füllen
- Esc-Taste betätigen zur Beendigung des automatischen Zählprozess
- Motoren werden automatisch ausgeschaltet
- Inventurliste wird ausgegeben
Video
Video oder kein Video?
Fazit
Abgeschlossene Punkte
Offene Punkte
Dokumentation
SVN
Link zur Bildverarbeitungs-Software --> Algorithmus und Module