PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Welchen Controller??



NetBlade
04.04.2005, 19:00
Hallo!

Ich möchte einen Roboter Bauen, der in Gebäuden Navigieren kann. Dazu möchte ich genaue entfehrnugs Messung mit einem Kompass kombinieren. Das ganze soll mit Ketten fahren.
Leider habe ich so gut wie keine Erfahrung im bereich Roboter bau. Ich habe mal meinen Lego RCX mit lejos-Java programmiert, aber der RCX ist mit zu unflexibel.
Ich möchte mir also einen neuen Controller zulegen. Ich habe aber keine Ahnug, was da sinnvoll ist. Ich wüde bis 150Euro ausgeben aber am liebsten weniger. Programmieren kann ich in Delphi, Java, und C#. Ich würde aber auch C++ lernen. Auf jeden fall möchte ich objekt orientiert Programmieren. Die Ketten würde ich gern über Fahrtregler ansteuern. Das ganze soll möglichst flexibel und erweiterungs fähig sein.
Gibt es das in der Preisklasse und wenn nicht, wieviel muss ich dann ausgeben?

ACU
04.04.2005, 19:21
Also hier im Forum sind die Mega Controller sehr beliebt.
Die kann man in Basic, Assembler und C programmieren.
C++ für einen Controller ist eigentlich nicht sinnvoll.

Etwas teurer, aber anfängerfreundlicher ist die C-Control 2.
Entgegen einigen Aussagen, die du vielleicht im Forum findest, ist die C-Control2 mindestens genauso leistungsfähig wie ein Mega (AVR) Prozessor.

Ich habe ein gespaltenes Verhältniss zu den Megas, da ich es einfach keine Verbindung zum Controller aufbauen kann.


MfG ACU

Felix G
04.04.2005, 19:33
Schau mal bei www.robotikhardware.de unter Roboterboards...
für dich kämen da entweder das RN-Control oder RNFRA Board in Frage.

Auf beiden Boards sitzt ein ATmega32, d.h. von der Rechenleistung her sind beide gleichwertig.
(das RNFRA Board hat allerdings zusätzlich noch einen AT90S2313, der den Hauptcontroller etwas entlasten kann)


Objektorientierte Programmierung solltest du bei Mikrocontrollern besser ganz schnell vergessen,
denn so verschwendet man nur die sehr begrenzten Ressourcen.

Der ATmega32 z.B. hat nur 32kb Flash (Programmspeicher), 1kb EEPROM und 2kb RAM, da sollte man schon etwas sparsamer sein.


Da du C# schon beherrschst würde ich dir empfehlen, den Roboter in C zu programmieren. (die Alternativen wären Assembler und Basic)

04.04.2005, 21:42
Hey danke für die schnellen Antwoten.
Das RNFRA Board gefäll mir ganz gut. Aber reicht denn der Speicher da für komplexe Programme?? Der C-Control II hat viel mehr Speicher. Welcher ist jetzt besser?

ACU
04.04.2005, 22:00
Naja wer besser ist, kann/will ich nicht sagen, da ich von Megas zu wenig Ahnung habe.
Aber ich habe von einigen, die sehr komplexe Programme für den AVR schreiben, dass denen der Speicher ausgeht.
Bei der C-Control 2 kann dir sowas nicht passieren.
Die CC2 ist ein wenig komfortabler:
Multithreading, 16Bit, Gleitkomma und extrem viel Speicher.
Gegen den Speicher können selbst eingefleischte Mega Fans nicht viel sagen.

Bei Zeitkritischen Dingen (Laufzeitmessung von Licht zum Beispiel), hat der AVR die Nase vorn, dass gebe ich gerne zu.

Ist deine Entscheidung, was du brauchst.
Die CC2 kann man halt net direkt mit nem AVR vergleichen, da sie schon ne Art Mikrocontrollersystem ist.
Der AVR ist nur ein blanker Chip.


MfG ACU

04.04.2005, 22:54
Gegen den Speicher können selbst eingefleischte Mega Fans nicht viel sagen.

Doch :-)

Man muss nämlich bedenken das die Programme bei der CC2 viel mehr Speicher brauchen als bei den Megas. Die Megas nutzen einen kompakteren Code und sind zudem schneller (1 Takt pro Befehl). Einen Mega32 bekommt man eigentlich schnell nicht so schnell voll.
Zudem gibt es noch größere Megas mit viel mehr Speicher, aber eigentlich braucht man die selten.

ACU
05.04.2005, 12:58
Nein das stimmt so nicht!
Der Code der CC2 ist sehr kompakt.
Der Code einer CC1 ist deutlich kleiner als der eines Megas.
Wurde schon getestet.
Schau dich mal im Internet um.

Und was den Arbeitspeicher angeht: no comment.

05.04.2005, 13:13
Das halt ich für ein Gerücht! Im übrigen ist die CC2 schon recht alt, es gibt ja noch nicht mal Hardware I2C-Bus Unterstützung

ACU
05.04.2005, 15:55
Naja es gibt genug gute Dinge, die schon alt sind.
Schau dir mal an, von wann der L293D ist.

Nein das ist kein Gerücht. Man sollte sich mit der Materie schon etwas beschaffen.
Der C Code wird intepretiert. Dadurch ist er langamer, aber viel kleiner!

ACU

NetBlade
05.04.2005, 17:43
Hm, ich glaube ich werde den C-Control 2 nehmen, wenn die Mega Controller kein multithreading unterstüzen... und wegen dem speicher.

Frank
05.04.2005, 18:05
Ich würde die Entscheidung nicht von solchen Schlagworten wie Multithreading abhängig machen. Das ist doch eine Sache der Software bzw. Interpreters. Das kann man bei Mega´s ganz genauso programmieren, sogar flexibler da er ja viel schneller ist. Gewöhnlich braucht man es nicht da man mit Interrupt quasi auch mehrere Dinge gleichzeitig machen kann.

Um sich für den richtigen Controller zu entscheiden solltest Du schaun was du mit machen willst. Stell dir folgende Fragen und suche die Antwort im Forum. Alles wurde schon oft besprochen.

Reicht der Speicherplatz für die geplante Anwendung?
Reichen die I/O Leitungen für Sensoren und Aktoren etc.?
Reicht die Geschwindigkeit des Controllers überhaupt für die Aufgabe aus?
Will ich eventuell an einen Bus Erweiterungen anschließen und wird der Bus auch unterstützt?
In welcher Sprache kann ich den Controller programmieren? Wird diese unterstützt?
Findet man genug Literatur zum Controller und der Programmiersprache?
Findet genug Anhänger um sich auch in Foren auszutauschen?
Findet man genug Software-Beispiele im Internet?
Was brauche ich zusätzlich um mein Ziel zu erreichen?
Gesamtkosten für Projekt?

Also im Grund musst du erst ein wenig mehr planen um die richtige Entscheidung zu fällen. Bei konkreten Projekten sollte die Controllerwahl erst am Ende stehen.

Felix G
05.04.2005, 18:11
Der Speicher ist grösser als es auf den ersten Blick scheint, und Multithreading braucht man eigentlich nie.
Mal davon abgesehen hat das nichts mit dem Controller zu tun, sondern mit der Software.
Entweder man verwendet eine art mini-Betriebssystem (gibt's für die meisten Controller)
das Multitasking ermöglicht, oder man schreibt sich da selbst was einfaches.

Bei der primitivsten Variante gibt man einfach jeder betroffenen Funktion (also alle die quasi parallel ausgeführt werden sollen) ein Flag.
in main werden dann der Reihe nach alle Funktionen aufgerufen deren Flags gesetzt sind (und die Flags selber natürlich wieder gelöscht).

Ich kenne keinen einzigen Mikrocontroller der multithreading hardwaremässig unterstützt.
(von den gängigen Desktop-Prozessoren kann das doch auch nur der P4)



Wenn man sich mit Mikrocontrollern befasst (egal mit welchen)
muss man sich zunächst mal klarmachen, daß man sie nicht direkt mit normalen Computern vergleichen kann.

8MB RAM sind bei einem PC nur ein schlechter Witz, bei einem Mikrocontroller hingegen wäre das extrem viel.

30MHz Taktfrequenz wären bei einem PC unvorstellbar, für einen Mikrocontroller ist das schon sehr schnell.
(die ATmegas laufen mit max. 16MHz)


Ein ATmega32 ist absolut ausreichend für einen durchschnittlichen Roboter,
auch wenn der Speicher auf den ersten Blick extrem knapp zu sein scheint.


edit: da war ich wohl 'n bischen zu langsam ;)

Alter Knacker
05.04.2005, 18:33
8MB RAM sind bei einem PC nur ein schlechter Witz, bei einem Mikrocontroller hingegen wäre das extrem viel.

30MHz Taktfrequenz wären bei einem PC unvorstellbar.......

hey, ich hab noch langsamere pcs im keller stehen ;-)
mein 286er hatte 20Mhz und 2mb ram, dazu 20mb harddisks, die leider kaputt ist.
wie sagte billyboy mal?
mehr als 640kb wird nie ein programm brauchen?

mfg knacki

ACU
05.04.2005, 20:09
@Frank
Ich würde nicht behaupten, dass die CC2 langsamer ist (von Haus aus).
Der 16Bit Prozessor von Infineon mit 16Bit (Mega hat nur 8) ist sehr leistungsfähig.
Also nichts mit viel schneller!

Den Speicher braucht ihr nicht?
Naja was weiß man jetzt, was man mit dem Roboter machen will.
Wenn man zum Beispiel Bilder speichern will (CMUCam z.B.) oder eine Karte anlegen will, ist viel Ram sehr wichtig.

Finde ich Schade, dass die CC2 immer von allen runtergeredet wird.
99% von diesen Leuten haben sich noch nichtmal damit beschäftigt, was die CC2 alles kann. Sicher ist sie nicht ganz billig, aber ich habe die Investition nie bereut.

Multithreading braucht man nie?
Also es ist schon sehr sehr praktisch, wenn nicht das ganze Programm halten muß, nur weil man auf Daten wartet.


ACU!

Felix G
05.04.2005, 20:47
Der Performance Unterschied zwischen 8 und 16-Bit ist nicht so groß wie man es erwarten würde.
Nicht immer muss der 16 Bit Controller dem anderen überlegen sein

Zum speichern großer Datenmengen würde ich (wenn die Übertragung per Funk und abspeichern auf dem PC nicht in Frage kommt) eine SD-Karte verwenden.
Die sind leicht anzusteuern und bieten mehr als genug Platz.


Und das multithreading ist, wie schon erwähnt, eine reine Softwareangelegenheit.
Dabei ist es völlig egal welchen µC man verwendet.

ACU
05.04.2005, 20:55
@Felix G.
Die SD Karten Hersteller werden feiern.
Wenn du das machst, ist die Karte schnell im A... .
Die maximalen Schreibzyklen sind schnell erreicht. Besonders wenn du den Speicher zum Beispiel als Messwerte-cache benutzt.

Multithreading mußt du erstmal programmieren.
Ist nicht so einfach. Wenns schon da ist: umso besser.
Ich benutze es oft und habe mich daran gewöhnt.

Bei bestimmten Operationen ist ein Leistungszuwachs schon da!
Du mußt bedenken, dass es nicht so ist, wie zwischen 32Bit und 64Bit.
Die AMD 64 haben nur manche 64Bit Befehle. Sie sind nicht reinrassig 64Bit.
Die CC2 ist komplett 16Bittig.


ACU

Frank
05.04.2005, 21:22
Hallo Acu,

es will doch niemand die CC II runter reden. Aber wenn schon was erwähnt wird, dann darf man es ja sachlich vergleichen und ein wenig klarer stellen.
Wie gesagt: Multithreading ist eine Sache der Software - die kann überall implementiert werden. Es ist ja schön das die CC II Software das dort kann, aber das hat wenig mit dem Controller zu tun.
Aber ich geb´s langsam auch auf, Controller, Betriebsystem und Controllerboards - immer wieder wird alles durcheinandergeworfen obwohl es schon 100 mal hier im Forum erläutert wurde.

Der große Speicher der CC II ist vorteilhaft und ein echtes Argument, aber es gibt auch Megas mit viel Speicher sogar mit Anschluss für externen Speicher. Und das gute, fast alle Megas (AVR´s) sind fast auf die gleiche Weise programmierbar. Man kann sich also für jedes Projekt ohne große Lernphase den passenden Controller zulegen oder sogar mehrere kombinieren ohne das es allzu teuer wird. Beim kombinieren mehrerer Controller hat man dann übrigens echtes Multithreading ;-)

Bei den Kosten sollte man auch mal berücksichtigen das man einen Fehler macht und einen Port himmelt. Sowas wird dann bei den verschiedenen Controllern die ausgewechselt werden müssen auch unterschiedlich teuer. Einen Mega8 bekommt man für 3 Euro, einen Mega 32 glaub für ca. 8 Euro. Was kostet die CC2?

Übrigens 8 Bit Risc Prozessoren (wie die Megas) sind in vielen Aufgaben den 16 Bit Controllern überlegen, was Rechenleistung betrifft. Auch das findet man hier im Forum. Für bestimmte Steueraufgaben wo mehr Mathematik statt Timing gefragt ist, da ist vermutlich die Stärke der CC II. Aber bei Robotik, Modellbau etc ist das Timing oft wichtiger, da sind die schnellen Megas einfach oft besser einzusetzen. Es ist halt so!
Es gibt sicherlich noch ne ganze Reihe weiterer Controller die noch besser wären, allerdings sind die nicht sehr populär und wenig öffentlich dokumentiert was dann auch wieder ein großer Nachteil für Hobbyisten ist.

Felix G
05.04.2005, 21:40
Die SD-Karten waren ja nur ein Beispiel, es kommt natürlich immer darauf an was man konkret speichern will.
Wenn der Roboter eine Karte von seiner Umgebung erstellt sind die gut geeignet, da sich diese ja nicht so häufig ändert.
Bei Daten die sich andauernd ändern muss man natürlich eine andere Möglichkeit suchen den Speicher zu erweitern.


Gegen das multithreading sage ich ja garnichts,
und es ist natürlich sehr praktisch wenn ein System das schon von sich aus beherrscht.
Aber dieser Luxus kostet für meinen Geschmack einfach zu viel Rechenleistung.
Bei der C Control vermutlich noch mehr als bei einem AVR mit mini-Betriebssystem,
denn die CC nutzt nunmal eine Interpretersprache, und die sind in fast jeder Hinsicht normalen Programmiersprachen unterlegen.


Der Unterschied zwischen 8 und 16Bit ist ähnlich gering wie der zwischen 32 und 64Bit.
Einen spürbaren Leistungszuwachs gibt es hingegen beim Sprung von 16 auf 32Bit.
(ich bin eh der Meinung daß die 16Bit µCs relativ nutzlos sind, denn so viel teurer sind 32er nun auch nicht)

nestler
05.04.2005, 21:46
Ich muss jetzt doch auch nochmal meinen Senf dazu geben ;-)

Wie viele von Euch wissen, habe ich einige Erfahrung mit der CC2, jedoch
wenig Erfahrung mit anderen Controllern - gut möglich, dass meine Ansicht
etwas verzerrt und sehr subjektiv ist.

Als Anfänger ist es meiner Meinung nach ganz wichtig, dass möglichst
schnell was funktioniert. Außerdem sollte das Ganze möglichst flexibel
sein. Zugegebenermaßen CC2 und Applicationboard sind nicht ganz billig,
dafür kann ich ohne Hardwareerfahrung schnell "ein paar Zeichen auf dem
Display" ausgeben.

Und wozu das Rad neu erfinden? Klar lässt sich Multithreading selber
programmieren. (Wobei der erwähnte Ansatz nur das sog. "Zeitscheiben-
verfahren" ergibt - bei der CC2 gibt es jedoch auch Prioritäten für die
einzelnen Threads...) Das "Betriebssystem" auf der CC2 macht den Pro-
zessor natürlich etwas langsamer, aber von der Programmierung her -
gerade für PC-auf-µC-Umsteiger deutlich einfacher handhabbar...

Es ist nicht immer nur alles "schwarz-weiss". Es gibt keine "guten" und
"schlechten" µC...

Aber dieses Thema wird ja immer wieder zu einer Grundsatzdiskussion :-)


Gruß,
Simon

NetBlade
06.04.2005, 19:10
Ihr macht mir die Entscheidung nicht einfach...
Im übrigen suche ich auch nach einem ganzem Board.

Ich werde sehr viel speicher brauchen, weil der Roboter zur Navigation eine Karte erstellen soll. Der Roboter soll die Karten mit hilfe von einem Ultraschall-Sensor (wahrscheilich SRF08) erstellen. Das Karten erstellen brauch, so wie ich das einschätze, viel rechen Leistung und Speicher.

NumberFive
06.04.2005, 21:02
NetBlade ich glaube nicht das man eine karten und so in ein µC machen kann / sollte das wirs du auch mit dem speicher in CC2 nicht alzu weit kommen.
So was würde ich immer mit dem PC machen der kann mit großen daten mengen einfach besser um gehen.

Komme aus der PC welt und habe mir ein AVR angefangen war für mich zwar auch ein umstellung kein Betriebs system mehr zu haben aber jetzt habe ich dran gewöhnt und vermisse bei der der normalen Arbeit die zeiten meins AVR's.

Also mein program im avr warten dauert auf irgendwas aber ich habe im avr noch nie ein thread gebraucht. Ob wohl wenn ich das prg auf ein eine PC das prg geschrieben hätte da bestimmt 5 drin währen.

Ein Controller ist einfach viel schneller.

Gruß

PS: das haupt prg steht nie wo zu gibt es interupts.

ACU
06.04.2005, 22:23
Wieso kommst du mit dem Speicher der CC2 nicht weit???
Das sind 64KB!
Hast du eine Ahnung, wieviel man da rein packen kann????
Das ist einfach riesig. Das ist 64 mal mehr als ein Mega mitbringt.

Das mit den Karten geht. Ich habe es selbst noch nicht gemacht, aber ist definitiv auf einem MC möglich.

"Ein Controller ist viel schneller".
Aha, warum habe ich dann einen PC, wenn ein Mega das schneller kann?
Eine CPU hat eine deutlich höhere Rechenleistung.
Du kannst nicht einfach sagen, die ist schneller.
Das trifft möglicherweise auf Steuerungsaufgaben, nicht aber auf Bilderkennung etc. zu.

Was Threads angeht: Wer nicht will, der hat schon. Ist auf alle Fälle eine sehr sehr praktische Erfindung.


MfG ACU

NumberFive
06.04.2005, 22:53
ACU mich würde echt interesieren wie du ein karte eines zimmers in die 64 KB packst mit alle schränken und so. wenn sich die Hindernisse noch dazu bewegen können.

Du brauchst 1 byte für die X koardinate und 1byte für die YKoordinate.
dann hättes du eine max auflösung von 256x256 punkte für die karte.
damit ist dann der speicher voll un du weiß nicht ob man den punkt befahren kann oder nicht. Ok man könnte vectoren speicher das währe dann 4 byte pro vector + 1bit für die befahr barkeit. aber der algorytmus
den man dann brauch ist auch nicht ohne ok bei den vectoren währen das dann bei 524288 bits / 17 ^= ca. 30840 vectoren ok das ist eine menge
wo bei das mit den bits sicher auch auf einer cc2 nicht ganz so einfach seinen wird. bin von eine bitmap als karte aus gegangen das war zu kurz gedacht.

es sollte keine aussage für oder geben den AVR oder cc2 sein den ich kann zur cc2 nix sagen den die kenne ich nicht.

Warum kein AVR an stand dem PC weil einfach für den AVR keine browser gibt *g*

Ein PC kann halt einfach viel aber nix wirklich gut liegt in der natur der Sache. entwder spezilist oder alles könner.

Frank
07.04.2005, 09:49
Wie Nestler schon sagt, scheint wieder ne Gruundsatzdiskussion zu werden. Persönlich würde und habe ich natürlich auch den AVR´s den Vorzug gegeben, Gründe wurden ja schon genannt. Etwas Hardware muss man immer noch an fast jedes Board basteln, bei dem einen fehlen Ports oder Motortreiber bei dem anderen könnte es etwas mehr Speicher sein. Gerade deshalb sind mir die flexiblen AVR´s lieber, denn die Erweiterung kann man dann oft mit gleichen Controlltertypen ohne Umlernen ergänzen. Notfalls könnte man auch Ram dran basteln und per I2C abfragen wenn die Geschwindigkeit für das Vorhaben ausreichend wäre.

Aber wenn nun Karten im Vordergrund stehen und nur das eine Projekt geplant ist, dann ist die CC II sicher nicht verkehrt. Allerdings muss man sich ein wenig daran gewöhnen das sie wohl im Hobbybereich nicht so oft wir Avr´s eingesetzt und man dann nicht so viele Beispiele finden wird.

Am besten man liest ein wenig in den Forum und macht sich dann anhand des Vorhabens und der Zielsetzung selbst ein Bild. Aber grundsätzlich würde ich auch empfehlen das erste Board nicht komplett selbst aufzubauen, ich würde dann schon zu Fertigteilen wie rn-control oder cc II raten, zumindest wenn man noch nicht so viel Bausatzerfahung hat. Es macht mehr Spaß wenn man einen schnellen unkomplizierten Einstieg findet und dann das ganze langsam ausbaut.

ACU
07.04.2005, 15:59
@NumberFive
Irgendwas an deiner Rechnung stimmt nicht (glaube ich).
Die erste Rechnung (mit den 256*256) verstehe ich nicht ganz.
Wieviel Byte braucht jedes Feld den bei der ersten Rechnung?
256 * 256 ist in meinen Augen ein bischen wenig.
Wenn der Ram nicht reichen sollte, dann würde ich mir I²C Bus Module kaufen. Zum Beispiel bei CC Tools (Link zu den Modulen (http://cctools.hs-control.de/ext_index.php?indexp=R).


Ja Frank hat Recht, die CC2 ist nicht sehr verbreitet. Das liegt wahrscheinlich am relativ hohen Preis.
Aber du wirst trotzdem Hilfe bekommen, da es doch einige gibt, die eine CC2 verwenden.

MfG ACU

NumberFive
07.04.2005, 18:08
@ACU

mein erste rechung war so wenn ich die Zahl 256 dratselle will brauche
ich genau ein byte sorry 255 das macht dann 256 werte.
Also brauche ich bei dieser Darstellungs form genau 256x256 Bytes für die
Abbildung der Koordianten das sin dann 65536 Byte ^= 64 KB hier habe ich jetzt nicht mehr die Möglichkeit dazustellen ob befahrbar oder nicht.
Ich sagmal das ist das Schachbrett oder bitmap verfahren (so prgrammiere ich zur zeit)

Es gibt aber noch die Vectoren ver fahren das heist ich brauche ein beschreibung der strecke . eine strecke besteht immer aus anfag und ende
also bei einer auf lösung von 256.

1 Byte für X1
1 byte für y1
1 Byte für x2
1 Byte für y2

+ ein bit damit ich weiß ist der vetor befahrbar oder nicht
dann komme ich auf 33 bit (ok hier war oben der fehlern)
mach ca. 15887 vectoren allerdingst nur bei ein auf lösung
von 256 x 256.

Woll gemerkt das ist aus gerecht als würde ein prg 0 byte
Hautspeicher brauchen.

Gruß

NetBlade
07.04.2005, 18:27
Der Speicher reicht: Wenn ich eine Fläche von 200cmx200cm habe, habe ich 40000 einzelne Quadrate. Würde ich für jedes Quadrat speichern, ob es wand oder nicht ist, bräuchte ich 5000bytes (1byte=8bit). Die frage ist nur, ob die rechen Leistung vom CC2 noch reicht, wenn ich das ganze auf Licht(laser) laufzeitmessung umstellen will?

Sandro
07.04.2005, 18:42
Ich hab zwar noch nie eine Karte programmiert, aber ist die Koordinateninformation nicht schon in der Adresse der Zpeicherzelle enthalten?

Bei 64K sind das 16Bit. Benutze ich das Lowbyte als Spalten und das Highbyte als Zeilen habe ich bereits eine Auflösung von 256x256, ohne auch nur ein Byte Speicher dafür verschwenden zu müssen. Dabei steht dann für jede Position ein ganzes Byte zur verfügung.

Hab ich da einen Denkfehler?

nestler
08.04.2005, 13:52
Prinzipiell gibt es (meiner Meinung nach) drei Möglichkeiten, eine Karte
(bitmap) sinnvoll zu speichern.

(weiss: befahrbar, schwarz: nicht befahrbar)

Möglichkeit 1: Karte ist weiss, Speicherung der Koordinaten der schwarzen
Punkte (2 byte bei Größen bis 256*256) - Sinnvoll bei sehr "weissen"
Karten

Möglichkeit 2: Karte ist schwarz, Speicherung der Koordinaten der
weiss Punkte (2 byte bei Größen bis 256*256) - Sinnvoll bei sehr
"schwarzen" Karten

Möglichkeit 3: Netblades Speicherung. (1 bit pro Punkt) - Sinnvoll bei
"bunten" Karten. Vorteil: Konstanter Platzbedarf. Nachteil: sehr "weisse"
und sehr "schwarze" Karten sind genauso gross...

(Ich denke, damit wären wir entgültig vom eigentlichen Thema weg.... ;-) )

Gruß,
Simon

uwegw
08.04.2005, 14:48
Die frage ist nur, ob die rechen Leistung vom CC2 noch reicht, wenn ich das ganze auf Licht(laser) laufzeitmessung umstellen
definitiv nicht! c ist ganz schön groß... da kommt auch ein PC nicht mehr hinterher...

lichtlaufzeitmessung funktionert zwar, aber nur mit riesigem aufwand... (man kann zb den abstand erde-mond sehr genau bestimmen weil dort seit einer apollomission ein spiegel steht...)
beschränke dich lieber auf ultraschall, da kommen normale controller noch einigermaßen mit... und das ganze bleibt preiswert...

Felix G
08.04.2005, 18:07
@nestler
alle 3 Varianten sind ungeeignet.

Bei dem begrenzten Speicher den man zur Verfügung hat sollte man unbedingt mit Vektoren arbeiten.

nestler
11.04.2005, 22:17
hm....

natürlich hast du recht, dass sich mit vektoren die bilder noch kompakter
speichern lassen. jedoch sieht der roboter die umgebung leider nicht in
"vektorform", sondern in noch in "bitmap form".

vereinfacht schaut der roboter auf einen punkt a0 mit den koordinaten x0,
y0. dieser punkt ist entweder befahrbar oder unbefahrbar. dann schaut
der roboter auf den nächsten punkt a1, usw...

das problem: wie kann der roboter diese information sinnvoll in vektoren
speichern? er müsste ja nach geraden o.ä. die der neue punkt mit be-
kannten punkten bildet, suchen. das ist einerseits zeitaufwändig, ander-
erseits bei einem gewissen grundrauschen (das sich wohl nicht vermei-
den lässt) ziemlich ineffektiv.

folgendes muster:


111111111111111111111
011010101010101010110
000000000000000000000
00000000000x000000000


(roboter x schaut auf eine wand in "nord"richtung)
dieses muster lässt sich nur mit viel aufwand vektorbasiert kompakter
speichern. die wand hat zwar einen "inhalt" die oberfläche ist aber "ver-
schwommen". das heisst, es gibt viele einzelne punkte und linien der
länge 2 (brauchen beide genauso viel platz, wie im bitmap!)

gruß,
simon

Felix G
11.04.2005, 22:53
Natürlich ist eine Vektorkarte schwerer zu handhaben, aber es hat eben alles seine Vor- und Nachteile.

Grundsätzlich ist es ja eigentlich immer so, daß man zwischen Rechenleistung, Geschwindigkeit und Größe abwägen muss. (nicht nur bei Karten)
Soll ein Algorithmus schneller werden braucht man entweder mehr Rechenleistung oder mehr Speicher,
dreht man an einem Parameter so muss man zwangsläufig auch die anderen anpassen.


Ich würde übrigens nicht unbedingt sagen, daß der Roboter die Umwelt in Bitmap-Form sieht...

Wenn von Anfang an klar ist, dass Vektorkarten genutzt werden sollen, kann man ja die Verarbeitung der Sensordaten gleich darauf ausrichten.
Umfährt der Roboter z.B. ein Hindernis, kann er ja gleich versuchen den Abstand konstant zu halten.
Überschreitet dann die Richtungsänderung einen bestimmten Wert wird das als Ecke erkannt und ein entsprechender Vektor in die Karte eingetragen.


So kann man von Anfang an die Probleme vermeiden die sich ergeben wenn der Roboter eine Bitmap-Karte erstmal in eine Vektorkarte umrechnen muss.
(er müsste erstmal das Bild durch ein paar Filter jagen und dann die Ecken suchen, was viel zu viel Rechenleistung und Speicher benötigen würde)

13.04.2005, 04:57
Nochmal zurück zum Thema:

Natürlich kann man den Speicher des AVR auch leicht erweitern. 64KB sind kein Thema.
Für die genannte Aufgabe der Kartenerstellung allerdings sind beide Varianten nicht geeignet. Ich sehe da zwei Möglichkeiten:
1. Atmel Controller mit Funkanbindung, der überträgt die Wegdaten, Sensordaten, etc. per Funk an einen PC, der die Arbeit macht.
2. Embedded Linux System, z.B. http://www.gumstix.com . Die arbeiten mit nem richtig schnellen ARM-Kern und darauf lassen sich dann auch ordentliche Algorithmen programmieren.

NetBlade
14.04.2005, 17:18
Hm, wie werden die Embedded Linux Systeme den Programmiert??
die Preise bei gumstix sind ja noch ok...
kann mir jemand mehr über diese Linux Systeme Erzählen??

nestler
15.04.2005, 10:22
naja, da gibt es eigentlich die gleichen compiler wie auch für linux.
d.h. du kannst z.b. in c programmieren...

was du natürlich beachten solltest: embedded pc geht schon mehr
in richtung pc. - das bedeutet, es ist ist ein eigenständiges system.
du schliesst deinen monitor und deine tastatur an das system an
und kannst direkt auf dem roboter programmieren...

eine funkanbindung ist natürlich immer sinnvoll. damit lassen sich dann
auch mehrere karten laden / speichern.


gruss,
simon

NumberFive
18.04.2005, 19:31
So jetzt muss ich mich wohl bei Thread Ersteller entschuldigen
das der Thread so abgedriftet ist.

Aber ich bin nach wie vor davon überzeugt das "PC" und Controller sich die
Aufgaben teilen sollten. Egal wie man es nun realisiert.

PC mit XYZ und robi mit Funk
Oder den PC mit schleppen egal ob als Epia oder anderes Embedded System.

Der Controller für schnelles I/O was sich leicht bauen lässt und für
das Rechnen und die Massen Daten was wo ich teile aus dem Regal
nehmen kann.

Noch eine Kleinigkeit wenn ein "PC" auf dem robi hat kann auch WLAN
als Funk verwenden um ins "Gehirn" zu gucken. Ich finde auch die Idee richtig interessant das Roboter mit einander reden können auf treffen oder so. Oh gleite schon wieder ab deshalb mache ich jetzt Schluss

NetBlade
18.04.2005, 20:02
Ja, ich glabe ich werde ein Gumstix Conex 400g (mit 400mHz) nehmen in kombination mit irgent einem (nicht so teurem) Controller. Die haben da bei Gumstix.com auch schon nen vorschlag für nen Board mit nem ATMega Controller (Robostix). Das gibt es aber leider noch nicht zu kaufen und ich bin noch nicht so erfahren mit Hadware...
Wie verbinde ich den Controller überhaut mit dem "PC"??
Über die RS232??

NumberFive
18.04.2005, 20:36
ja die meinsten hier machen es per RS232 das mache ich auch so wenn
man da ein bischen kobelt reicht das lange.

bei http://www.robotikhardware.de

gibt es fast alles was du brauchst nur die haben urlaub zur zeit. habe ich gerade gesehen. es gibt da die meinsten sachen auch aufgebaut und getestet.

NetBlade
18.04.2005, 21:02
Gibt es da noch andere Möglichkeiten (I2C??, CAN??), wie funktionieren die und was ist für welche Anwendungen am besten/schnellsten?

Felix G
18.04.2005, 21:19
Also ich würde mal pauschal sagen um einen µC mit einem PC zu verbinden: RS232
Denn da braucht man keine zusätzliche Hardware (es sei denn der Rechner hat nurnoch USB)

Will man mehrere µCs verbinden:
- I²C wenns einfach sein soll
- CAN wenns robust sein soll (lange Leitungen und/oder vorbei an Trafos o.ä.)

NumberFive
19.04.2005, 19:11
Mein Notebook hat keine RS232 habe mir ein adapter gekauf und keine probleme bis 19200 baud. Höher habe ich nicht getestet.

Gruß

20.04.2005, 07:25
Hallo Leute,

habe gerade gelesen, dass die Diskussion zum Gumstix geht. Habe mir einen solchen Rechner letztes Jahr gekauft. Bisher habe ich noch nicht viel damit gemacht, aber er soll als Hauptrechner in meinen Roboterprojekten eingesetzt werden.

Bezüglich der Programmierung muss ich "nestler" korrigieren. Der Gumstix ist in diesem Sinne kein Embedded PC - Tastatur oder Monitor lassen sich nicht anschliessen. Besser passt vielleicht die Bezeichnung SBC (Single Board Computer).

Der Gumstix wird über die serielle Schnittstelle programmiert. Je nachdem, welches Adapterboard man dazugekauft hat (dringend zu empfehlen) muss man sich noch einen Pegelwandler mit dem MAX3232 bauen, um ihn per RS232 an den PC anzuschliessen. Die Datenübertragung läuft per default mit 115200 Bit/s. Aber auch ein USB-auf-seriell-Adapter sollte das können. Man kann sich über ein Terminal auf dem SBC einloggen und bekommt dann eine Linux-BASH mit einer eingeschränkten Menge an Kommandos. Man kann den Gumstix auch per USB mit dem LAN verbinden. Wie es geht, steht im Gumstix-Wiki.

Von den 3 verfügbaren seriellen Schnittstellen bleiben so im Normalfall 2 übrig, um einen Roboter zu steuern. Zusätzlich gibt es noch I2C - daran arbeite ich gerade. Es gibt auch Boards mit Bluetooth - die haben dann entsprechend eine serielle weniger.

Der Rechner hat relativ wenig "Festplatte" - 4 MB Flash, aber 64 MB RAM. Man kann eine SD/MMC-Karte mounten und hat dann entsprechend mehr Platz für Daten.

Die Software wird ständig verbessert, einiges (z.B. Bluetooth) ist aber m.E. noch nicht ausgereift. Das entnehme ich den vielen Diskussionen in der Mailinglist. Man sollte auch beachten, dass alle IO-Signale eine Spannung von 3.3V haben. Will man das mit einem 5V-System kombinieren, fangen die Probleme der Pegelwandlung an. Also vielleicht lieber einen älteren 5V-Rechner kaufen.

Weitere Info auf meiner HP, genauer, http://www.voidpointer.de/flobo/flobo5.html#5.2

Gruß, Achim.

NetBlade
20.04.2005, 16:05
@Achim

Ich hab schon stundenlag gesucht und nichts vergleichbares zu den Gumstix gefunden. Entweder waren die Dinger teurer oder nicht vergleichbar. Wäre nett, wenn du mir nen paar links zu Rechnern mit 5V geben könntest...

voidpointer
20.04.2005, 16:37
(So, diesmal bin ich aber eingeloggt.)

Da hast Du mich jetzt bei einer Pauschalaussage erwischt. Ehrlich gesagt, kenne ich zur Zeit keine Rechner, die noch mit 5V IO arbeiten. Die Dimm-PC von Kontron tun dies möglicherweise, verbrauchen aber auch mehr Strom. Hatte mich ursprünglich für das Cobra5282-Board von Elektronikladen interessiert, aber das arbeitet auch mit 3.3V. Auf den Gumstix bin ich über http://www.linuxdevices.com/ aufmerksam geworden. Vielleicht gibt es dort noch andere Rechner.

Überlegen sollte man, ob nicht auch die Peripherie mit 3.3V leben könnte. Servos z.B. könnte man mit 5V versorgen, aber für die Impulsleitung sollten auch 3V ausreichen usw.

Gruß, Achim.

pebisoft
28.06.2005, 16:25
"wie sagte billyboy mal?
mehr als 640kb wird nie ein programm brauchen? "

er hat recht gehabt für ein dos-programm. ein dos programm ist nie grösser als 640 kbyte, die daten, die werden natürlich in den oberen speicher (ems) abgelegt, aber nie der ablaufenden programmcode.
wenn man den vorteil hat, das man lesen kann und die geschichte richtig verfolgen kann.
ich sage immer wieder "die östrreicher lernen es nie".
mf gpebisoft