skg-rob
11.07.2010, 16:59
Hallo Leute.
Wie oben schon beschrieben überlege ich gerade bei unseren Robotern die Bilderkennung einzuführen. Vorher stellen sich mir jedoch einige Fragen.
Zu aller erst: Ich kenne mich mit C++ aus, allerdings beschränken sich meine Kenntnisse auf das nötigste (ich habe nie richtig programmieren gelernt, sondern von Anfang an mit den QFix Bibliotheken gearbeitet. Wer die kennt, wird wissen was ich meine). Allerdings ist für die nächsten Wochen eine "Weiterbildung" angesetzt.
Also, wofür brauche ich die Bilderkennung?
Es geht um einen Roboter der Fußball spielt. Mit der Kamera soll er den Gegner im Tor erkennen, bzw. die Stelle wo das Tor frei ist. Der Roboter arbeitet autonom, ich kann im also nur den Algorithmus zur Abstraktion einpflanzen und ein Programm um das entstandene Bild auszuwerten.
Genauer: Das Spielfeld hat einen grünen Boden, schwarze Banden und eine Vertiefung in der Wand als Tor. Die Tore sind farbig. Was ich also machen will:
1. Den grünen Boden und alles was über der Bande ist ignorieren. Also alles grüne löschen, dann die Kante für die Bande erkennen oder alles was nicht der Farbe der Bande und des Tores entspricht ignorieren.
2. Die Kante Tor/Bande erkennen. Ich habe etwas über Matrizen gelesen, die man anwenden kann aber dazu später mehr.
3. Die Kante gegnerischer Roboter/Tor erkennen
4. Die Größe des Tores mit der Höhe der Bande verrechnen um die tatsächliche, Entfernungsunabhängige Größe zu bestimmen, also ob genug Platz ist für den Ball etc.
5. Schauen ob das ganze den in der Mitte des Bildes ist, also ob man schon schießen kann oder weitermachen soll wie bisher. Daraus folgt: Ein Stream dient als Ausgangsmaterial!
Was ich bisher weiß und meine Fragen:
Ich habe das gute Tutorial hier in der RN Knowledge Base gelesen. Leider ist das doch sehr kurz und die meisten Fragen bleiben offen:
1. Wie funktioniert das mit der BE? Gibt es spezielle Programme um einen Algorithmus zu entwickeln?
1.1. Ich habe im Tutorial die Matrizen gesehen. Aber wie wende ich diese auf das Bild an? Ich kann schlecht sagen nimm diese Matrix und wende sie auf jedes Pixel an. Kommen da wieder spezielle Entwicklungstools/Software zum Einsatz?
2. Ist so etwas überhaupt realisierbar, was ich vorhabe? Oder ist das schon eine eher komplexere Angelegenheit?
3. Was brauche ich also? Als erstes natürlich eine Kamera. Aber dann? Das Bild muss ja ausgewertet werden. Geschieht das über einen Prozessor in der Kamera oder muss ich die Daten immer an mein Board weitergeben? Entwicklungssoftware?
4. Wenn ich das Bild also ausgewertet habe und anhand des Verhältnisses Bandenhöhe/Törgröße sagen kann, dass farbige Rechteck ist xcm breit, muss dass dem Board mitgeteilt werden! Welche Outputs gibt es bei Kameras?
Entschuldigt wenn es dieses Thema schon tausendmal gab, aber ich habe bisher im Net noch nichts gefunden was mir viel weitergeholfen hätte. Also immer her mit Links, wenn ihr nützliche Seiten kennt!
Achja, fast vergessen: Wie gesagt arbeiten wir mit einem QFix Soccerboard (ATMega 128, i²c, digital und analog Eingägne). Windows oder Linux ist egal, letzteres wäre mir aber fast lieber, da dort unsere komplette Programmierung abläuft.
Vielen Dank jetzt schon mal für eure Mühe! mfg skg-rob
Edith sagt: Im Anhang seht ihr das Spielfeld, meine Erläuterungen können ziemlich unverständlich sein.
Und nochmal Edit: Ich habe auch noch schnell ein vereinfachtes Bild der Kamera gemalt.
Wie oben schon beschrieben überlege ich gerade bei unseren Robotern die Bilderkennung einzuführen. Vorher stellen sich mir jedoch einige Fragen.
Zu aller erst: Ich kenne mich mit C++ aus, allerdings beschränken sich meine Kenntnisse auf das nötigste (ich habe nie richtig programmieren gelernt, sondern von Anfang an mit den QFix Bibliotheken gearbeitet. Wer die kennt, wird wissen was ich meine). Allerdings ist für die nächsten Wochen eine "Weiterbildung" angesetzt.
Also, wofür brauche ich die Bilderkennung?
Es geht um einen Roboter der Fußball spielt. Mit der Kamera soll er den Gegner im Tor erkennen, bzw. die Stelle wo das Tor frei ist. Der Roboter arbeitet autonom, ich kann im also nur den Algorithmus zur Abstraktion einpflanzen und ein Programm um das entstandene Bild auszuwerten.
Genauer: Das Spielfeld hat einen grünen Boden, schwarze Banden und eine Vertiefung in der Wand als Tor. Die Tore sind farbig. Was ich also machen will:
1. Den grünen Boden und alles was über der Bande ist ignorieren. Also alles grüne löschen, dann die Kante für die Bande erkennen oder alles was nicht der Farbe der Bande und des Tores entspricht ignorieren.
2. Die Kante Tor/Bande erkennen. Ich habe etwas über Matrizen gelesen, die man anwenden kann aber dazu später mehr.
3. Die Kante gegnerischer Roboter/Tor erkennen
4. Die Größe des Tores mit der Höhe der Bande verrechnen um die tatsächliche, Entfernungsunabhängige Größe zu bestimmen, also ob genug Platz ist für den Ball etc.
5. Schauen ob das ganze den in der Mitte des Bildes ist, also ob man schon schießen kann oder weitermachen soll wie bisher. Daraus folgt: Ein Stream dient als Ausgangsmaterial!
Was ich bisher weiß und meine Fragen:
Ich habe das gute Tutorial hier in der RN Knowledge Base gelesen. Leider ist das doch sehr kurz und die meisten Fragen bleiben offen:
1. Wie funktioniert das mit der BE? Gibt es spezielle Programme um einen Algorithmus zu entwickeln?
1.1. Ich habe im Tutorial die Matrizen gesehen. Aber wie wende ich diese auf das Bild an? Ich kann schlecht sagen nimm diese Matrix und wende sie auf jedes Pixel an. Kommen da wieder spezielle Entwicklungstools/Software zum Einsatz?
2. Ist so etwas überhaupt realisierbar, was ich vorhabe? Oder ist das schon eine eher komplexere Angelegenheit?
3. Was brauche ich also? Als erstes natürlich eine Kamera. Aber dann? Das Bild muss ja ausgewertet werden. Geschieht das über einen Prozessor in der Kamera oder muss ich die Daten immer an mein Board weitergeben? Entwicklungssoftware?
4. Wenn ich das Bild also ausgewertet habe und anhand des Verhältnisses Bandenhöhe/Törgröße sagen kann, dass farbige Rechteck ist xcm breit, muss dass dem Board mitgeteilt werden! Welche Outputs gibt es bei Kameras?
Entschuldigt wenn es dieses Thema schon tausendmal gab, aber ich habe bisher im Net noch nichts gefunden was mir viel weitergeholfen hätte. Also immer her mit Links, wenn ihr nützliche Seiten kennt!
Achja, fast vergessen: Wie gesagt arbeiten wir mit einem QFix Soccerboard (ATMega 128, i²c, digital und analog Eingägne). Windows oder Linux ist egal, letzteres wäre mir aber fast lieber, da dort unsere komplette Programmierung abläuft.
Vielen Dank jetzt schon mal für eure Mühe! mfg skg-rob
Edith sagt: Im Anhang seht ihr das Spielfeld, meine Erläuterungen können ziemlich unverständlich sein.
Und nochmal Edit: Ich habe auch noch schnell ein vereinfachtes Bild der Kamera gemalt.