Hallo Forum, habe mich herade mal hier angemeldet, da ich schon seit jahren immer wieder hier gelandet bin und nun die zeit einfach mal reif ist, phantasie, grips und kohle springen zu lassen. Aber für was denn ? Das versuche ich hier mal zu beschreiben und hoffe auf reges feedback. Also: seit geraumer zeit beschäftige ich mich mit KI und neuronalen netzen und habe nun endlich mal die kohle, meine kreativität in richtung hardware auszulesen. Was ich gerne möchte: einen robo steuern. es exsistiert noch nichts. als hirn des robos soll ein leistungsfähiger uC zum einsatz kommen, wenn mit BS, dann linux. Habe schon etwas gegoogelt und bin auf eine firma gestoßen, die für 450 okken n arm+linux+touchscreen vertreibt, mit allen denkbaren interfaces. ich frage mich allerdings, ob das nicht etwas zu hoch gepockert ist. leistungsfähig und mit genug schnellem speicher sollte der uC schon ausgerüstet sein, denn er soll recht fix mit neuronalen netzen "rechnen". die sensorik stelle ich mir dann so vor, das kleine eigenständige uC's (atmega,pic etc) die signale für den "neuro-rechner" aufarbeiten und z.B. über usb mit ihm kommunizieren. mir geht es hier also primär ums hirn. ist es sinnvoll, java und hardware-jvm einzusetzen, oder doch lieber in c/c++ ? Ich möchte nicht ein halbes jahr damit verbringen, mir die hardware "zusammenzulöten". hat irgendjemand vielleicht ne idee, ob es ein nettes entwicklerboard gibt, das meinen ansprüchen genügen würde und wirklich allerhöchstebns 500 euren kostet ? also lieber die hälfte. mit BS oder ohne ? mit hat natürlich den vorteil, das sich auch noch andere schöne sachen machen lassen würden.... naja, vielleicht fühlt sich ja jemand angesprochen, über pfiffige antworten würde ich mich jedenfalls sehr freuen... gruß, Martin
Brr... Texte durchlesen, die falscherweise durchweg klein geschrieben sind ist eine Zumutung. Aber jetzt meine Anmerkung: Ich wuerde mal sagen, das ist viel zu weit gegriffen fuer den Anfang. ARM ist nichts fuer Anfaenger. Michael
Du kannst dir das Beagle Board oder Overo Water/earth/Air/fire anschauen. Beide enthalten sehr schnelle ARMs (600 Mhz, Superscalar und Floating Point Engine (!)). Es noch z.T. ein Fixpoined DSP dazu. Es läuft auch Linux drauf. Nachteil: Die Prozessoren sind Application Processors, d.h. es gibt sehr wenig Schnittstellen für den Roboter. U.u. brauchst du noch extra Hardware/uCs fuer den Roboter. Prinzipiell ist C/C++ gut, Java ist evtl okay falls du sinnvoll programmierst und die richtige JVM / JIT Compiler verwendest. Mit Hardware JVM kenne ich mich nicht aus. Ganz wichtig: Ich weiß nicht ob du deine Neuronalen Netze in Fließkomma oder Fixkomma rechnen willst - dies macht einen großen Unterschied - Software FPUs sind sehr, sehr langsam.
Danke für die schnelle Antwort (ich versuchs mal mit der schift-Taste). Hmm, wieso ist ARM nichts für Anfänger ? Ob ich nun für 'n Atmega32 mit dem GCC kompiliere oder für einen ARM....wo ist der Unterschied ? Ausserdem gibt es bestimmt gute Bücher, programmieren tue ich seit 24 Jahren in allen möglichen Sprachen, linux nutze ich aktiv als Lieblingsbetriebsystem seit '95, von Suse bis Gentoo . Ich hätte nur eben Lust auf einen ARM, da ich PC's nuun schon zu genüge kenne und sie nichts Neues sind. Ausserdem sind die ARMs faszinierende Stromsparer. Naja, vielleicht liege ich ja auch falsch, aber es steht fest, das ein Atmega für ein neuronales Netz nicht genügend Resourcen besitzt. Aufgrund meiner mangelnden Erfahrung im Embeddedbereich setze ich ja auch auf ein vorinstalliertes Linux..... Freue mich immer noch über Ratschläge, vielleicht much mal konstruktive, is schließlich meine Kohle..... so long
Hallo mm, vielen Dank für deine Tipps. Die neuronalen Netze müssen nicht so genau sein, da würde Fixkomma wohl reichen, da es sich um fast lineare Funktionen handelt. Du sagts: emuliert ist langsam...klar, sah man ja beim Sprung vom 386 zum 486. Aber was hat es mit den FPU's auf sich? ) Ist es dann nicht egal, wenn man doubles nimmt ?
Blutiger Anfänger und Roboter mit neuronalem Netz, ARM Controller, Linux Betriebssystem, Java, C++ beißen sich etwas!! Wenn es dir nur um die neuronalen Netze geht, dann nimm Matlab dort kannst du dir dein neuronales Netz zusammen bauen und testen. Das sind alles für sich schon sehr anspruchsvolle Projekte: - Roboter aufbauen (Mechanik, Sensorik, Aktoren,...) - ARM Controller (Architektur, Compiler,...) - Linux Betriebssystem (Kernel übersetzen, compilieren, ...) - Embedded Java Virtual Machine (...) - C (ok).. - C++ (Dynamische Speicherverwaltung, Virtual Tables,...) Fang erstmal klein an: - kleinen Roboter aufbauen, mit 2 Elektromotoren, Sensoren, Taster.. so kannst du dafür schon mal ein Gefühl gewinnen - Entwicklungsboard mit ARM Controller besorgen Embedded Linux draufspielen und eine kleine Testapplikation schreiben - Java würde ich mal vergessen.. ansonsten such dir eine schnelle Embedded Java Virtual Machine und installier es auf deinem Linux und schreib eine kleine grafische Anwendung.. Achja und dann kommt noch das Thema neuronale Netze: - besorg dir ein Buch über Signalverarbeitung und lies dich in den Filter "NN" ein, was für Rechenpower wird benötigt, wie aufwendig ist das "Back-Tracing"? Wie viele Neuronen? usw. Dann kannst du das ganze am Ende, wenn du mit allen Gebieten Erfahrung hast zusammen führen. Ansonsten bist du sehr schnell frustriert und du verlierst die Lust daran. Mein Tipp: Systematisch ran gehen... und step by step lernen. Dann kann das auch durchaus werden. Lg
Die Overos und das Beagle Board haben beide Omap Prozessoren von TI. Der Armkern davon kann direkt mit 32 (float) und 64 bit (double) Fließkommazahlen rechnen. Somit ist die Verarbeitung von Fließkommazahlen sehr schnell. Insbesondere gibt es auch Hardware Division und Quadrat-Wurzeleinheiten. Verarbeitung von double ist etwas langsamer als float.
Hi omg: Neuronale Netze kenne ich schon, schau mal auf meine Seite:http://martinimig.de/biesterapplet.php Das ist schon recht interessant und nicht ohne. Also das mit dem Arm ist glaube ich schon OK, denn wenn Linux drauf läuft, dann fühle ich mich ja schon etwas zuhause. Du hast von einer "schnelle Embedded Java Virtual Machine" gesprochen.... Kann ich sowas auf dem PC installieren ? Und sonzusagen das, was auf dem "Hirn" laufen soll, am PC simulieren ? Wäre ja super, kannst Du mir mal n Tipp geben, wo ich mir so eine saugen kann ? Leztendlich wird mir die Sensorhardware zu schaffen machen, denn als ich den Lötkolben noch täglich in die Hand genommen habe, war 2.54 schon eng ;-). Allerdings habe ich einen Kumpel, der in seinem Job mircokontrollerplatinen entwikelt und das KnowHow besitzt. Das is n Pfund ! Als Roboter wollte ich mir schon einen von der Stange holen, der bereits servos und Motor integriert hat. Mich interessiert vorwiegend halt die Steuerung und das Netz. Klasse, schon viel Infos bekommen hier, super Forum ! Und das Beagelboard für 120 Euren ? Nicht schlecht Herr Specht. Das andere schaue ich mir jetzt mal an.....
Kennt jemand evtl. noch n gutes buch über uC's & Co ? Wo einem die Begriffswelt schön erklärt wird, Fallstricke aufgezeigt und so ? @mm: ich habe mir jetzt mal beide Boards angeschaut: Ich glaube , die Overo's sind eigendlich sinniger für mich, da es diese Erweiterungsplatinen gibt und 256MB statt 128 DDR druf sind. Gefallen tut mir -weiß nicht warum - das Beagle besser. Hmm....Bauch oder kopf ? Jedenfalls vielen Danke für diese Info über die Boards, die entsprechen schon recht gut meinen Vorstellungen. Mal sehen, vielleicht bekommt man ja auch n 512-er Beagle irgendwo her ? mal googlen. Euch ein schönes WE, ich gehe mal in den Park ...
Martin Imig schrieb: > Hmm, wieso ist ARM nichts für Anfänger ? Ob ich nun für 'n Atmega32 mit > dem GCC kompiliere oder für einen ARM....wo ist der Unterschied ? oO"
Martin Imig schrieb: > Hmm, wieso ist ARM nichts für Anfänger ? Ob ich nun für 'n Atmega32 mit > dem GCC kompiliere oder für einen ARM....wo ist der Unterschied ? Dem Compiler ist es egal, das stimmt. Aber dir? Du musst den Code ja schreiben, d.h. das Teil verstehen. Vergleiche mal das Datasheet eines AVR mit seiner ziemlich reichhaltigen Beschreibung sämtlicher Timer-Modi und deren Anwendung bis hin zu Beispielcode mal mit den Kapitel im STM32 Manual über dessen Timer, dann wird der Unterschied denke ich rasch deutlich.
Nicht, das ich ignorant wäre... wäre nett, wenn Ihr mir mal sagt, was sache ist. timer, ok, kenne ich vom C16 ;-) Ich habe mir bisher vorgestellt, das, wenn der Code OK ist, ich mich nicht weiter um die Hardware kümmern müßte. Falsch? welche Fallstricke lauern denn da ? Wieso muss ich mich mit Timern auseinander setzen ? Hoffe auf Antwort.... lg
Für das Beagleboard gibt es auch größere Speichermodule - z.B. 4 GB Nand Flash und 2 GB RAM. (44 $ ohne Versand und Steuern) Allerdings sind die Speichermodule auf den OMAP Prozessor gelötet.
Das will ich sehn das jemand den BGA Package on Package Speicher mit 0.5er Pitch selbst (=keine Firma) auf den OMAP drauflötet (und vorher den Speicher der schon drauf ist runter) ;) @Martin: Wenn das Betriebssystem alle Treiber drin hat und die genau das machen was Du brauchst muss Du nur schauen wie sich die Treiber ansprechen lassen. Aber das Beagle Board und die Overos alleine werden eher nicht so gut für nen Roboter - die musst Du mit nem Mikrocontroller (ohne Betriebssystem) kombinieren damit das was wird. Wegen Motorsteuerung und anderen Sachen wo garantierte und schnelle Reaktionszeit gefragt ist. Da kannste dann auch einfach nen MEGA nehmen. Fertig aufgebaute Roboter - da gäbe es den RP6, der hat nen MEGA32 drauf und ist für Einsteiger gedacht also fertige Programmierbeispiele dabei. Da wäre jedenfalls genug Platz um nen Beagle Board oder so draufzubauen und das teil dann über die serielle schnittstelle zu steuern.
Roboter.. Neben ein paar Interfaces, und ein paar Sensoren & Aktoren, ist das zuerst mal eine satte Menge von Differentialgleichungen, sonst wird das nichts. Ich hab schon Sachen gesehen... bei einem bekannten grossen Automobilhersteller, keinem kleinen Kraemer, einem Satz Standardroboter ab Stange wurde da in absolut stuemperhafter Weise auf die Achse mit den haeufigsten Drehungen eine Platte mit sinnlos hohen Traegheitsmoment verpasst. Zum Einen wird die Regelung schwierig, die Bewegung langsam und der Energieverbrauch ist hoch. Einfach mal ein paar Schrittmotoren zusammenklempnern - bringt wenig.
Roboter != Roboterarm für Automobilindustrie Das kann auch einfach ein kleines Fahrzeug sein wo schlicht die Geschwindigkeit eingeregelt werden muss. (PID Regler, nix wildes)
Falls man nicht zu viel sparen muss, kann man auch vorgefertige Motorsteuerungen/regelungen kaufen die z.B. per I2C angesteuert werden. http://www.robotikhardware.de/ http://www.roboter-teile.de/Shop/index.php Falls man einen Roboter mit 2 parallelen, angetriebenen. geschwindigkeitsgeregelten Rädern mit guter Bodenhaftung hat - dann kommt man mit 3 Zuständen und hat relativ genaue Parameter. Es ist also eine "einfache" nichtlineare DGL.
Hallo Martin, Dein Projekt hört sich interessant an. Falls Du in Berlin lebst, könnte man sich mal treffen: http://www.roboterclub-berlin.de/
Wenn du sowieso Linux auf dem ARM installieren willst, dann haste recht und musst dich kaum um die Hardware kümmern. Das nimmt dir Linux ja fast vollständig ab. Dazu ist ein OS schließlich da ;)
Hallo Martin, klingt interessant, aber mit wenig Erfahrung bzgl. uCs und Hardware kann man sich da leicht verstricken. Um schnell Land zu sehen würde ich Dir eine fertige Embedded-Linux-Plattform mit I2C nahelegen, die Du dann mit C++ programmieren kannst. Die NSLU2 (mit Debian/ARM) oder der ASUS WL500g (mit OpenWrt/MIPS) bieten sich dafür an. Insbesondere die NSLU2 mit Debian hat den Vorteil, dass Du "nativ" darauf entwickeln kannst (wenn auch etwas lahm) und Dich nicht mit Cross-Compilern herumschlagen musst falls Du das nicht möchtest. Im Grunde bekommst Du für <100 EUR ein tolles Entwicklerboard - die Stückzahlen im Konsumerbereich machen's möglich. Ein Batteriebetrieb sollte bei dem Verbrauch kein Problem sein. Schau' Dir mal http://www.praxisbuch.net/embedded-linux/ an, das könnte was für Dich sein. Da gibt es auch eine freie Toolbox um I2C-Komponenten anzusteuern u.v.m. Auf eine Anbindung von Mikrocontrollern via USB würde ich verzichten, das ist nicht ganz einfach. Für den Anfang solltest Du fertige I2C-Module verwenden wie von mm vorgeschlagen, um Motoren anzusteuern oder Sensoren zu lesen. Wenn Dir das nicht reicht kannst Du Dich später immer noch mit der Programmierung von I2C-Slaves beschäftigen. Die Linux-Vorteile wie Treiberunterstützung zum Betrieb von Webcams, USB-Seriell-Wandlern und Netzwerkanbindung (SSH) hast Du natürlich, im Gegensatz zu einem uC ohne "richtiges" Betriebssystem.
@chris: Köln is nich berlin? oder ! Sonst hätten wa uns gerne mal trffen können. An Alle: Danke fürs rege Feedback! Habt mir echt viele Tipps gegeben, die ich mir erst mal durch den Kopf gehen lassen muss. Und ja, so habe ich mir es ja auch gedacht, das drumherum halt so Atmegas werkeln. Wie kommunizieren die den dann mit dem Hirn ? I2C ? Ist das das Protokoll der Wahl ? Können die das nativ oder müsste ich den Treiber selbst schreiben ? Wenn ja: warum denn nicht, ist bestimmt interessant. Dass wird n g-d-bugge :-)
Fuer interprozessor kommunikation ist SPI besser geeignet als I2C, denn bei I2C muss man die Datenrichtung immer umschalten, waehrend SPI feste Richtungen hat. Beides sind Punkt zu Punkt protokolle. SPI gibt vor durchschlaufbar, dh kaskadierbar zu sein, was aber nur bei identischen Geraten funktioniert. In Realitaet ist man daher schnell bei SoftSPI, wo die die Pins mit software bewegt werden. Beiden, SPI und I2C ist gemeinsam, dass sie keinerlei Pufferung haben, dh relativ cpu intensiv sind. Demgegenueber hat ein UART in der Regel ein bis zwei byte Buffer.
I2C hat den großen Vorteil, dass man einfach einen Master und viele Slaves an einen Bus anschließen kann. I2C ist halb duplex - einer darf senden, der andere nicht. Prinzipiell kann der Master wechseln. Bei SPI funktioniert dies auch man braucht aber einen extra "Adressbus". Man wählt den Empfänger (IC) durch eine Chip Select Leitung aus. Dies bedeutet, dass man verbraucht pro Empfänger ein extra Pin des uCs verbraucht oder man braucht extra Logicbausteine für die Adressierung. SPI ist vollduplex. Es gibt auch einen Master und viele Slaves. Der Master kann nur schlecht wechseln.
Effiziente Interprozessor-Kommunikation mit SPI setzt voraus, dass der SPI-Slave gepuffert arbeitet, sonst wird es etwas haarig. Bei I2C wiederum muss man drauf achten, dass der vorgesehene Slave auch dazu fähig ist, was auch bei vorhandener I2C-Hardware keineswegs selbstverständlich ist, denn es gibt welche die nur als Master arbeiten können. Bei AVRs beispielsweise fehlt dem SPI der Puffer, aber I2C ist trotz des anderen Namens vollständig. Bei manchen anderen Typen ist es genau umgekehrt.
@Martin: Was genau sollen die Atmegas denn "werkeln"? Wenn Du keine wirklich zeitkritischen Aufgaben wie bspw. eine Drehzahlregelung machen möchtest würde ich das erstmal den Hauptrechner machen lassen. I2C is m.M. dann das Protokoll der Wahl, wenn Du schnell und günstig Peripherie (Taster, Sensoren, Motoren) anbinden möchtest und keine langen Wege hast. Ultraschallsensoren (SRF02 bei www.roboter-teile.de) und Schrittmotortreiber (TMC222, bspw. fertig bei Conrad Nr. 198266) kannst Du so direkt an eine NSLU2 anschliessen, sobald Du den internen I2C nach Außen geführt hast. Zu Deiner anderen Frage: Atmegas besitzen eine Hardware-I2C-Schnittstelle (TWI), die Dir schonmal einen großen Teil der Kommunikation abnimmt. Bit-Bang musst Du also nicht selbst machen. Bevor Du mit der I2C-Slave-Programmierung loslegst würde ich aber zunächst die Verwendung von I2C empfehlen um etwas Erfahrung zu sammeln. Falls Du es nicht lassen kannst findest Du hier http://www.atmel.com/dyn/resources/prod_documents/doc2565.pdf die wichtigsten Infos.
Hallo Leute, ich muss hier echt mal n Lob aussprechen, auch auf die Gefahr hin, das es jemenden nervt! Es gibt ja Menschen, die es nervt, wenn man sie lobt ;-) Ich gehöre definitiv nicht dazu. Also: Danke für die vielen Tipps!!! Das muss sich erst mal setzen jetzt. Würde schon gerne n Teamprojekt machen, nur leider sind ja alle immer so weit verteilt. Könnt Ihr euch noch ne Welt, das Leben ohne Internet vorstellen ? ich schon: manchmal wäre es ruhiger, oder aber langweiliger, weil es einfach spass mach, sich auszudrücken. Und ich glaube, bei euch sind auch viele, die ähnlich denken. Ich habe es mit Begeisterung aufgenommen, das es für's Beagleboadr ne "Speichererweiterung" (So hießen die früher doch -lol) gibt. Damit steht dem ja nix entgegen! Wie ist das eigendlich mit deisem Board ? ok, da is linux drauf, was ist, wenn man es sich mal zerschießt ? Gibbet sowas wie n Image, das man dann wieder draufspielen kann? Das ist im EEprom, oder ?
Hat das Ding nicht den Flash Boot Loader? Also in einem bestimmten Teil des FLASH liegt dann der Bootloader und in einem anderen das OS. Mit einem Tool kannst du dann das OS neu draufspielen,.. so zumindest meine Erfahrung.. aber kann mich auch täuschen.. :-)
So, Buch bestellt :-) Kundenrezessionen waren sehr entgegenkommend. Da ich die Hardware erst im Oktober kaufen möchte, ist es bestimmt gut, sich vorher mal etwas einzulesen. Die Netstorage sind bestimmt ob der großen Stückzahlen n Blick werd, doch ist das Beagleboard einfach schneller. Da kann man doch bestimmt auch nativ drauf entwickeln, oder ? Ansonsten hat crosscompiling : gcc ist dein Freund, auch wenn es auf die dauer bestimmt etwas nervt, den code immer rüberzuschieben.
Hier gibt es eine kurze, gute Zusammenfassung zum Beagle Board (mit Linux) http://elinux.org/BeagleBoard Ja es gibt einen "Bootloader" man kann neben NAND (on Board) über USB, MMC oder UART booten. Compiler: Das Beagleboard hat 2 Prozessoren - general purpose processing unit (Arm Cortex A-8) und digital signal processor (TI DSP, C64..). Also braucht man 2 Compiler, falls man beides nutzt. ARM Compiler: z.B. GCC läuft unter Linux DSP: gibt es einen von TI für Linux, dieser hat evtl Einschränkungen Fazit: Falls du ein Linux als Betriebssystem auf dem Beagleboard laufen hast, dann brauchst du kein Crosscompiler.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.