mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Roboter - Neuronale Netzwerke?


Autor: Mr Chip (mrchip)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich habe ja leider feststellen müssen, dass mein Roboter von seinen
möglichen Fähigkeiten langsam an seine Grenzen stösst. Da habe ich mir
überlegt, warum nicht anstatt neue Fähigkeiten hinzufügen bestehende
Fähigkeiten anders implementieren?

Da kam ich wieder auf ein Thema zurück, das mich schon lange
interessiert: Neuronale Netzwerke. Meine Idee wäre es, dass der Roboter
mit einem untrainierten Netz losfährt und sich dann beibringt, im Zimmer
herumzufahren ohne irgendwo anzustossen. Ich habe 3 digitale Inputs
(Annäherungssensor vorne-links und vorne rechts, Schalter wenn er
tatsächlich kollidiert). Dies soll zu 2 digitalen Ouputs führen (Motor
rechts/links vor/zurück). Des weiteren muss natürlich die
Zeitkomponente irgendwie berücksichtigt werden.

Was meint ihr, ...
...ist das grundsätzlich möglich?
...schafft das ein Mega8?
...kann der Roboter in vernünftiger Zeit vernünftig trainiert werden?
...wie könnte man das Netzwerkdesign gestalten/optimieren?

Hat jemand vielleicht schon Erfahrungen damit?

Gruss

Michael

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was Du suchst ist ein "TDNN", TimeDelayNeuronalNetwork, Google hilft
da erstmal weiter.

Umsetzung auf einem uC ist vermutlich nicht so einfach, wegen Floats,
kompilizerten Aktivierungsfunktionen, Speicherbedarf.

Und für eine Komplexe Aufgabe wie das "lernen" eines Zimmers müsste
das Netz schon seehr gross sein, da hätte vermutlich auch ein schneller
P4 Probleme, das in annehmbarer Geschwindigkeit zu machen.

Trainingszeiten sind auch nicht zu vernachlässigen, > 10.000
iterationen solltens schon sein, d.h. mal ein Jahr ununterbrochen
herumfahren lassen, bis es in etwa "gelernt" ist.

/Ernst

Autor: Mr Chip (mrchip)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Huhuu...das tönt ja nicht gerade vielversprechend. Aber ich habe es
schon befürchtet, dass das relativ schwierig würde.

Noch eine Klarstellung: Ich möchte nicht den Roboter das Zimmer lernen
lassen, sondern lediglich, dass er herumfährt ohne anzustossen - er
soll also seinen Ausweich-Alogorithmus lernen. Aber wie gesagt, selbst
das dürfte schwierig sein - man sagt ja, dass ein NN mindestens 10 mal
so viele Trainingsbeispiele braucht wie es Verknüpfungen hat.

Die andere Frage ist natürlich, ob es überhaupt etwas hergibt bzw.
sinnvoll ist den Ausweichalgorithmus lernen zu lassen. Dieser ist in
meinem Fall so einfach formuliert, (Das Servo auf der Gegenseite eines
ausschlagenden Annäherungssensor wird rückwärts angesteuert.) dass kaum
interessante Verbesserungen möglich sind.

Eine alternative wäre es natürlich, den Bot eine etwas "höhere"
Fähigkeit lernen zu lassen - z.B. das Fahren eines Weges anhand eines
speziellen Inputs (z.B. Fahren in richtung der hellsten Stelle)

Gruss

Michael

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rein das Ausweichen (also Sensor spricht an => Stückchen Rückwärts +
drehen) sollte machbar sein, auch mit einem uC-Sized netz...

Könnt evt. auch mit online-lernen klappen, hab da vor einiger Zeit mal
was über einen 6-Beinigen Krabbel-Roboter gelesen, dem die mit einem NN
pro Bein das Laufen beigebracht haben, vielleicht findest Du da ein paar
Anregungen.

/Ernst

Autor: Sven Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin...

Such mal nach dem SNNS, AFAIK Stuttgarter Neuronal Netz Simulator, oder
so ähnlich. Kürzel findest du aber auf alle Fälle.

Das ist eine komplette JAVA Umgebung zum generieren von NN. Wenn du
"künstliche" Ein-/Ausgabedaten generieren kannst, fütterst du die in
das System und erhälts ein komplettes NN in ANSI-C. Haben wir für ein
Praktikum mal in Lego Mindstorm gepackt... schon putzig.

Adaptives lernen ging auch, das ging dann aberrichtig ans Eingemachte.

--
 SJ

Autor: TOM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das wird wohl etwas schwierig mit einem µC. Was du willst ist ja nicht
nur das lernen von logischen Zusammenhängen, sondern gleich ganze
Abläufe. Das ist mehr als kompliziert. Wie Ernst schon sagt, ist das
mit viel Float-Rechnerei verbunden, wofür ein kleiner µC nicht geeignet
ist. Ich hab in meiner Diplomarbeit ein neuronales Netz in einen FPGA
(Xilinx Virtex II) implementiert, genau aus Gründen der vielen vielen
Berechnungen, die zwar immer gleich sind, aber ohne eine gewisse
Parallelität auf einem Roboter "onboard" nicht zu bewältigen sind.
Außerdem ist die Theorie nichts, was man mal so nebenher erarbeitet. Da
gehört schon einiges an Zeitinvestition dazu, wenn man sich in das Thema
einarbeiten will.

Gruß

Thomas

Autor: FHler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich entwickle eine 2D Umgebungsabbildung für einen mobilen Roboter.

Mit diesen Informationen wird sich der Roboter Orientieren können und
diesen Raum auch Identifiezieren können. Da der Roboter weiss wie der
Raum aussieht ist eine Kollision fast ausgeschlossen.

Nach einem Scan soll dann auf der Karte ein Punkt makiert werden und
der Roboter berechnet denn einfachsten und schnellsten weg dort hin.

Der gesamte Robter wird über WLAN betrieben. Die Karte wird auf einer
eigens Programmierten Software dargestellt (C++.NET) und läuft auf dem
Embedded PC.


Das gesamte Projekjt läuft zur zeit sehr gut.
Vll. als alternative zur deiner Idee. (Anregung)


Gruss

Autor: etsmart (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn es nur um das ausweichen von Hindernissen geht, ist ein NN
vielleicht schon zuviel Arbeit.
Schau mal ob FuzzyLogik da nicht sinnvoller wäre. Er lernt dann zwar
nichts, aber brauch er ja für Hindernisse nichts lernen.
Ich habe vor ca 1 1/2 Woche eine Simulation von meinem Regelungstechnik
Prof. dazu gesehen. Ein Auto, dass eine Strecke entlang fährt, einem
Hindernis ausweicht und wieder gerade aus.
Das war in einem 'Crash Kurs'. Wir haben in zwei Tagen genug gelernt,
um dieses Beispiel nachzubilden ... denke ich :)
Soviel zum Zeitaufwand !!

Autor: Ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um mal mit einem Mythos aufzuräumen:

Floats sind für Neuronale Netze nicht erforderlich!

Viele Hardwarebeschleuniger für Neuronale Netze arbeiten mit
Festpunktarithmetik. Informationen findest Du z.B. beim googlen nach
Synapse bzw. MA16 (der darauf verbaute Chip von Siemens)

Für die Gewichte reichen 16bit Fixpunkt, die Inputs müssen dann 8bit
haben. Durch die Fixpunktarithmetik lassen sich wesentliche Rechnungen
(Matrixmultiplikation) erheblich vereinfachen.

Auf einem uC lassen sich natürlich NNs implementieren. Sofern man weiss
was man machen will und einen geeigneten Netztyp findet, ist es
schlussendlich nur eine Frage des zur Verfügung stehenden Speichers.
Für das, was auf einem Mega8 an Speicher ist, reicht die Rechenleistung
dann allemal aus.

In Deinem Fall könnten Eingangsdaten z.B. sein:
* aktuelle Geschwindigkeit
* aktuelle Richtung
* Zeit seit der letzten Kollision
* Zustand der Bumper

Du könntest dabei so vorgehen, mit dem Bot erst mal Daten zu sammeln
und ein Netz auf dem PC zu trainieren (nur wenige Trainingsschritte).
Das Netz bringst Du dann auf den Mega8 und läßt es dort online weiter
trainieren. Die Gewichte lassen sich im EEPROM ablegen und beim Reset
ins RAM laden.

Das Problem, dass noch zu lösen ist: Du musst irgendwie die Lernmenge
mit den Zielwerten, d.h. gewünschter Netzausgang, belegen, um die
Gewichtsanpassung durchführen zu können (Ein selbstorganisierendes Netz
eignet sich für die Aufgabe nicht).

Autor: Mr Chip (mrchip)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Außerdem ist die Theorie nichts, was man mal so nebenher erarbeitet

Ja, das ist es eben. Zurzeit bin ich sowieso eher mit arbeiten (Man
kann ja nicht nur den Eltern auf der Tasche sitzen ;-) ) als mit
basteln beschäftigt, also werde ich das ganze wohl auf später
verschieben müssen. Während dem Studium müssen ja auch immer mal wieder
Projekte gemacht werden, und ich werde da sicher noch etwas mehr
Mathematik lernen...



> Mit diesen Informationen wird sich der Roboter orientieren können
und
diesen Raum auch Identifiezieren können. Da der Roboter weiss wie der
Raum aussieht ist eine Kollision fast ausgeschlossen.

Sowas hatte ich eigentlich auch vor. Doch leider klappt die
Positionsbestimmung einfach zu ungenau. Wie schaffst du es, absolut
präzise Positionsangaben zu erhalten?


> Du könntest dabei so vorgehen, mit dem Bot erst mal Daten zu sammeln
und ein Netz auf dem PC zu trainieren (nur wenige Trainingsschritte).
Das Netz bringst Du dann auf den Mega8 und läßt es dort online weiter
trainieren. Die Gewichte lassen sich im EEPROM ablegen und beim Reset
ins RAM laden.

Sowas in der Art wäre auf jeden Fall sehr sinnvoll. Eventuell könnte
man den gesamten Roboter simulieren und erst am Schluss das NN
übertragen.


> Schau mal ob FuzzyLogik da nicht sinnvoller wäre. Er lernt dann zwar
nichts, aber brauch er ja für Hindernisse nichts lernen.

Hmm...weniger. Das Lernen würde mich eben speziell interessieren.

Autor: FHler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
Definiere "präzise" Positionsangaben !?
Also 1cm genauigkeit wird wohl nicht machbar sein.
Ich gehe von einer genauigkeit von ca. 5cm aus. Und das wäre schon
gut.
Ich benutze einmal die Karte und einen Fahretenschreiber um die
Position zu bestimmen. In der Karte ist ein Raster von 10cm x 10cm
also eine genauigkeit von 10cm, im raster selber wird noch der
Fahrtenschreiber selber ausgewertet. Um höhere genuigkeit zu erzielen.
Das zu Theorie.
Zur Praxis kann ich noch nichts sagen da ich noch nicht soweit bin.

PS: Raster von 10cm ergibt sich aus der ungenauigkeit der Messdaten der
Sensorik.



Gruss

Autor: FHler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry im Raster ist natürlich der maximale Fehler von 14cm (Worst case)



Gruss

Autor: Mr Chip (mrchip)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich berechne die Position aus Winkel des Roboters und gefahrener
Strecke. Mein Problem ist eben, dass der aktuelle Winkel des Roboters
nicht absolut genau erfasst werden kann -> Das summiert sich enorm auf
-> die trigonometrische Berechnung der Position produziert riesige
Fehler. (Sagen wir 3° ungewollte Drehung beim Geradeausfahren pro Meter
und 5° ungenauigkeit pro Wendemanöver => nach 5 Meter und 5 Wendemanöver
beträgt die Abweichung bis zu 40°. Der Roboter fährt also in ganz eine
andere Richtung als er denkt, dies zu tun...)

Gruss

Michael

Autor: FHler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Winkel ungenauigkeit wird durch den Scanner behoben. Da ein versatz des
Raum erkannt.
Das was ich mache ist das so genannte SLAM Problem.
Würde danach mal googeln.



gruss

Autor: Mr Chip (mrchip)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Winkel ungenauigkeit wird durch den Scanner behoben. Da ein versatz
des
Raum erkannt.

Wie weit kann denn dein Roboter sehen?


> Das was ich mache ist das so genannte SLAM Problem.
Würde danach mal googeln.

Ok ;-)

Autor: FHler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Radius beträgt 5m also kannst du die meisten Räume mit erfassen.
Gesamte rund um scan dauert ca. 3,5sek. Also ist Scannen beim Fahren
kein Problem.


Gruss

Autor: anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo, mein robby hat 2 srf04-ultra(vorn und hinten 180grad schenken mit
servo ,genauigkeit des 5euro-servo 0,5grad bzw 360 schritte auf 180
grad). dazu ein compassmodul cmps03. scannerorientierungen bekommt er
über funk vom pc. geht bis auf 2 cm genauigkeit, tolle sache.

mfg

Autor: Mr Chip (mrchip)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Radius beträgt 5m also kannst du die meisten Räume mit erfassen.
Gesamte rund um scan dauert ca. 3,5sek.

Achsoo...da spielt mein Roboterchen natürlich in einer anderen Liga -
lediglich zwei selbstgebastelte Annäherungssensoren, die bei ca 7 cm
angeben ;-) Und anständig geradeausfahren kann er auch nicht. Mal
schauen, was man da noch herausholen kann.

Autor: FHler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@anfänger :

Ist das Kompass modul zu gebrauchen!? Habe das auch hier liegen und
auch angesteuert aber er soll eine ungenauigkeit von 2grad haben.
Erste Test waren sehr enttäuschen meiner meinung nach, da sobald stör
faktoren wie (Leiter, Magnete...) in die nähe kamen, war Norden überall
und nirgends.

Und waruf beziehen sich die 2cm genauigkeit!? Auf Entfernunug oder
Position im Raum?
Weil das SRF04 modul hat eine sehr Breite keule was für eine Raum
abtastung nicht sehr nützlich ist. Da man zwei sehr nah liegende Punkte
nicht unterscheiden kann.


Gruss

Autor: 3 Newton (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"An seine Grenzen stößt". Aha. Und wieso denkst Du dass neuronale
Netze die ganze Sache mit weniger Aufwand hinbekommen? Eben nicht auf
Chips die auf sequenzielle Abarbeitung eingestellt sind. Da braucht es
für richtig Speed spezielle Chips sonst wird es nur alter Wein in neuen
Schläuchen. Versprich Dir nicht zuviel von den neuronalen netzen.
Praktisch können die nur in wenigen bereichen mehr als klassische KI.
Die ist hier angebracht. Und das Programm lautet: Fahr zurück wenn
Hindernis. Positionsbestimmung? Praktisch wohl nur über
Markierungspunkte im Raum zu machen. vergesst alle Maussensorideen, das
ist doch Schwachfug und ungenau auf mehrere Meter. Man muss die maus
doch schon auf dem Pad ab und zu nachsetzen weil sich der Fehler
akkumuliert hat.

3N

Autor: mr.chip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> "An seine Grenzen stößt".

Damit meine ich, dass die bestehende Hardware mehr oder weniger
ausgereizt ist, was ihre softwareseitige Verwendung angeht. Darum die
Idee, die Software mal völlig andersrum funktionieren zu lassen. Nicht
unbedingt, um damit grosse Verbesserungen zu erzielen, sondern um halt
eine zusätzliche Technologie auszuprobieren, einen anderen Ansatz zu
wählen, Erfahrungen zu sammeln... Nach diesem Thread bin ich mir
allerdings nun relativ sicher, dass es in meinem Fall eher weniger Sinn
macht.

Autor: 3 Newton (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jupp. Stimmt. Ich war auch erst begeistert von den Dingern aber viel
kommt nicht bei rum. Nur Spezialanwendungen und nie auslesbares Wissen
oder Sicherheit der Reaktion. Wenn Du mit neuronalen netzen spielen
willst empfehle ich das Buch hier:
http://www.amazon.de/exec/obidos/ASIN/3446225749/
Da sind Beispiele wie man die Teile zum Bleistift mit Excel erstellen
und testen kann. Sehr hübsch!

3N

Autor: Kojote (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mir fällt da grad was ein...
habt ihr schon mal überlegt anstatt mit einem kompass chip, irgend was
piezo gyroskop ähnliches zu verwenden? hätte den vorteil das es sich
nicht durch magnetfelder/metall ablenken lässt.

damit würde man nur die änderung auf der eigenenachse auswerten, um die
sich der bot dreht und damit eine info über den aktuellen winkel
erhalten.
die teile gibts entweder als chip(müsste noch mal nachschauen was der
genau für einer war)
oder man verwendet ein fertiges modul aus dem modellbau bereich mit dem
man normal servos korrigieren kann (signal als PWM).

Autor: 3 Newton (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, das Problm ist bei all diesen Sachen: kleine Fehler mal große
Strecke= wenig brauchbares.

3N

Autor: Mr Chip (mrchip)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Naja, das Problm ist bei all diesen Sachen: kleine Fehler mal große
Strecke= wenig brauchbares.

Genau. Eine einmalige Abweichung von 5° macht relativ wenig aus - aber
wenn man dann noch ein paar Meter fährt, sich 3 mal dreht, wieder ein
paar Meter fährt und dann eigentlich die Durchfahrt durch eine Tür
erfolgen sollte, dann wird man ziemlich negativ überrascht ;-)

Am vielversprechendsten scheint mir, den Roboter geradeausfahrender zu
machen (indem das schnellere Servo alle x Impulse keinen Impuls
bekommt) und ihn dann gezielt feste Hindernisse anlaufen zu lassen. Man
hatt dann bereits eine Achse wieder bestimmt, die zweite lässt sich
relativ genau aus dem Auftreffenszeitpunkt bestimmen, wie schliesslich
auch der Winkel. Das funktioniert natürlich nur bei relativ grossen,
einfachen Hindernissen wie Wänden oder Schränken.

Hoffentlich bringe ich diese ganze Anwendung noch in meine übrigen 4 kB
Programmspeicher (C) ^^

Autor: Ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Praktisch können die nur in wenigen bereichen mehr als klassische KI.

Aber dort wo die klassische KI versagt, oder der Aufwand explodiert,
leisten Sie eben mehr.

Beispiele: Klassifikation großer, verrauschter Datenmengen
(Spracherkennung, 3D Objekterkennung, bildbasierte
Fehlerklassifikation). Z.B. (mal was zum Ausprobieren):
http://www.techinfo.rwth-aachen.de/Forschung/VIR/Axiom/demo/

Bei der Navigation von Robotern lassen sie sich natürlich auch
einsetzen. Ich stimme aber meinen Vorpostern zu, dass die gegebene
Aufgabe auch von anderen Verfahren - wahrscheinlich einfacher - gelöst
werden kann. Andererseits ist es aber ein guter Einstieg. Und falls es
mal um die Navigation per Kameradaten geht, können die KNNs dann gute
Dienste leisten (auch bei wenig Speicherplatz).

Autor: Mr Chip (mrchip)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Beispiele: Klassifikation großer, verrauschter Datenmengen
(Spracherkennung, 3D Objekterkennung, bildbasierte
Fehlerklassifikation).

Also dort, wo grosse Datenmengen nach unmathematischen, unscharfen
Kriterien beurteilt werden müssen. Trifft bei meinem Roboter definitiv
nicht zu. Aber vielleicht für ein späteres Projekt, interessant wäre es
schon! Ich denke hier z.B. an einen Roboter mit einer gewissen Zahl
gleicher digitaler/analoger Inputs (z.B. Entfernungsmesser rundherum
angebracht) und wieder einer gewissen Zahl gleicher digitaler/analoger
Outputs (z.B. einige spezielle Räder, um den Roboter in alle Richtungen
zu bewegen). So könnte sich das Netz relativ frei trainieren.

Noch eine Zwischenfrage: Es gibt ja zu halbwegs akzeptablen Preisen
Kameramodule zu kaufen. Könnte man die mit einem Mikrocontroller (ab
welcher Kategorie?) verarbeiten?

Autor: Ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Kriterium ist schon mathematisch, da sich das Training eines KNN wie
eine nichtlineare Regression (z.B. bei backpropagation Training), bzw.
bei Klassifikatoren (z.B. SOM) eine Partitionierung eines
n-Dimensionalen Raumes (n = Anzahl Dimensionen der Ausgabeschicht)
betrachten läßt. Der Übergang zwischen statistischen Klassifikatoren
(wie z.B. k-nearest neighbour) und KNNs ist dabei fliessend.

Aber wie Du schon angemerkt hast, ist für Deine Aufgabe ein KNN
overkill. Aber ich denke dennoch, dass es einen Versuch wert ist, da
man bei einer kleinen Anzahl Eingangs- und Ausgangsknoten sehr viel
lernen kann und einzelne Effekte unmittelbarer zutage treten.

Zur Zwischenfrage:
Ich habe eine Gameboy-Kamera bei eBay ersteigert (2€+Versand) dafür
gibt es jede Menge Schaltpläne und Code für den Anschluss an einen AVR
im Netz.

Das schöne bei der Kamera ist, dass sie ausserdem sehr klein, leicht
und einfach anzusteuern ist (Läuft bei mir an einem Mega168). Hinzu
kommt, dass die Kamera auch schon Kantenerkennungs bzw.
-verstärkungsmodi eingebaut hat, so dass man auf dem Controller
Rechenzeit sparen kann.

Durch den geringen Preis kann man sich so ein System schon für unter 7€
zusammenbauen.

Autor: Mr Chip (mrchip)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Aber wie Du schon angemerkt hast, ist für Deine Aufgabe ein KNN
overkill. Aber ich denke dennoch, dass es einen Versuch wert ist, da
man bei einer kleinen Anzahl Eingangs- und Ausgangsknoten sehr viel
lernen kann und einzelne Effekte unmittelbarer zutage treten.

Ja, genau so denke ich auch. Das war ursprünglich eigentlich auch die
Idee.

> Ich habe eine Gameboy-Kamera bei eBay ersteigert (2€+Versand) dafür
gibt es jede Menge Schaltpläne und Code für den Anschluss an einen AVR
im Netz.

Hört sich interessant an! Ob ich das auch mit einem Mega8 zum Laufen
bringe? Und hoffentlich bekomme ich so eine in der Schweiz ^^ Würde die
Bildqualität genügen, um die Kamera zum navigieren zu Hilfe zu nehmen
oder gar um eher kleinere Objekte in einer gewissen Entfernung zu
erkennen?

Autor: Ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klar, mit dem Mega8 geht das auch.

Das Problem mit den "kleinen" Megas ist, dass deren SRAM Kapazität
nicht sehr groß ist. Die Kamera liefert 128x128 Pixel. Wenn Du die in
ihrer Gänze nutzen möchtest, brauchst Du externen Speicher. Hierfür
gibts Lösungen (z.B. mit Mega162 und externem SRAM). Damit bleibt man
immer noch unter 10€.

Man kann natürlich auch die Bildauflösung per Software reduzieren.

Bei der vollen Auflösung ist die Qualität recht gut:
http://www.roboternetz.de/phpBB2/viewtopic.php?t=7...

Autor: Mr Chip (mrchip)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Das Problem mit den "kleinen" Megas ist, dass deren SRAM Kapazität
nicht sehr groß ist. Die Kamera liefert 128x128 Pixel.

Wie gross ist ein Pixel? Wohl kaum ein ganzes Byte?

> Wenn Du die in
ihrer Gänze nutzen möchtest, brauchst Du externen Speicher.

HAbe mich noch nie damit befasst, gibt es da spezielle Bausteine, die
direkt mehr RAM "simulieren" (d.h. mit den gleichen Befehlen wie
internes RAM angesteuert werden können) oder schliesst man sowas z.B.
per TWI oder SPI an? Also jetzt speziell für den Mega8. Huuuch...und
wie kann man sowas im AVR Studio noch simulieren/debuggen? ^^

Autor: Mr Chip (mrchip)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gleich noch ne Frage: Von der Gameboy-Kamera gibt es nur einen Typ?
(nicht damit ich da etwas falsches ersteigere...)

Autor: Ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, bis auf die Farbe des Gehäuses. Kannst also nix falschmachen - es
sei denn, Du bist sehr farbsensibel. Ohne Gehäuse sehen die Kameras
aber alle gleich aus.

Autor: Mr Chip (mrchip)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, Kamera ist geebayt ;-) Ich denke, damit lässt sich einiges
herausholen. Vorerst wird aber wohl eine intensive Einarbeitungsphase
folgen, damit ich einerseits die ganze Ansteuerung in den Griff
bekomme, andererseits aber auch Techniken zur Mustererkennung. Hätte
mir evtl. jemand gerade ein paar Links zum Thema?

Noch ne kleine Frage: Auf zwei, drei kurz angesurften Seiten habe ich
was von einem "schnellen AD-Wandler" gelesen, da die Grauwerte ja
analog herauskommen. Reicht hier der ADC des Mega8 bzw. ein TLC547 an
LPT1 des PC? Brauche ich zwingend etwas schnelles oder dauert sonst
halt einfach das Bildauslesen etwas länger?

Autor: Ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitteschön:
Gameboykamera am AVR
http://www.seattlerobotics.org/encoder/200205/gbcam.html

Lange Thread auf roboternetz dazu:
http://www.roboternetz.de/phpBB2/viewtopic.php?t=7...

Der ADC des Mega 8 reicht. Im 8 bit Modus kann man den bzgl. Samplerate
sehr weit treiben. Schau Dir mal die Bilder auf roboternetz an.

Autor: Mr Chip (mrchip)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Bitteschön:

Dankeschön ;-)


> Der ADC des Mega 8 reicht. Im 8 bit Modus kann man den bzgl.
Samplerate
sehr weit treiben. Schau Dir mal die Bilder auf roboternetz an.

Nur - der ADC muss nebenher noch mindestens zwei Werte von den
Annäherungssensoren auslesen. Aber wahrscheinlich wird der Mega8 dann
sowieso bald mal zu klein, nur schon was Programmspeicher für die ganze
Verarbeitung angeht.

Autor: Ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich empfehle den Mega168. Ist nicht wesentlich teuerer. Doppelter
Flashspeicher vergl. mit Mega 8 und kann mit 20MHz getaktet werden. Ich
verwende einen 18.432MHz Quarz, da lassen sich die Daten sauber mit
115200bd zum Host übertragen.

Das Auslesen der Sensoren sollte kein Problem sein, dauert ja nicht
lange und kann z.B. während der Belichtungszeit des Chips stattfinden.

Autor: mr.chip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Das Auslesen der Sensoren sollte kein Problem sein, dauert ja nicht
lange und kann z.B. während der Belichtungszeit des Chips stattfinden.

Klar, ja ;-) Sonst könnte man die Kamera ja auch einfach langsamer
auslesen - oder?

Autor: Ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Kamera kann man auch sehr langsam auslesen (wenige kHz) Dann leidet
aber die Bildqualität. Das mussst Du auch nicht. Im 8Bit Modus kann man
den ADC mit 144kHz betreiben, da geht das auslesen der Kamera recht fix.
Es geht auch, bei leichtem Qualitätsverlust, bis zu 1MHz als ADC Takt.

Zum Auslesen der Abstandssensoren würde ich der Genauigkeit wegen aber
wieder auf 144kHz wechseln.

Autor: mr.chip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich überlege mir gerade, ob es wohl möglich wäre, das Bild direkt über
den Controller an den Fernseher auszugeben. (So als kleineres Projekt
für zwischendurch möchte ich mal was im AVR-Tennis-Stil (Elektor
06/2003) machen.) Aber dafür ist die ganze Sache wohl zu langsam - es
sei denn, man leite den Analogwert aus der Kamera direkt an das
BAS-Signal.

Der Grund, warum ich das mal noch so versuchen möchte: Zurzeit habe ich
leider keine Speicherchips (werde dann alle Roboter-Hardwar zusammen
bestellen) und möchte die Kamera trotzdem schonmal testen.

Autor: Ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das geht auch am PC via Serielle Schnittstelle, falls Du schon einen AVR
plus MAX232 hast.

Autor: Mr Chip (mrchip)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

> Das geht auch am PC via Serielle Schnittstelle, falls Du schon einen
AVR plus MAX232 hast.

Ja, daran habe ich auch gedacht. Leider habe ich noch keinen MAX232...
Vielleicht versuche ich dann etwas über die parallele Schnittstelle.

Gruss

Michael

Autor: mr.chip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Wie bereits angetönt, habe ich die Dokumentation zum Roboterprojekt nun
auf meiner Webseite aufgeschaltet:

http://www.thinkcool.ch

Ein kleines Dankeschön für die viele Hilfe und ein klein wenig
Eigenwerbung ;-)

Gruss

Michael

PS: Kritik und Anregungen zur Website sind immer willkommen!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.