Forum: Mikrocontroller und Digitale Elektronik Blutiger Anfänger braucht Rat (ARM,Linux,Roboter, JVM)


von Martin I. (amatek)


Lesenswert?

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

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

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

von mm (Gast)


Lesenswert?

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.

von Martin I. (amatek)


Lesenswert?

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

von Martin I. (amatek)


Lesenswert?

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 ?

von omg (Gast)


Lesenswert?

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

von mm (Gast)


Lesenswert?

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.

von Martin I. (amatek)


Lesenswert?

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.....

von Martin I. (amatek)


Lesenswert?

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 ...

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

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"

von (prx) A. K. (prx)


Lesenswert?

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.

von Martin I. (amatek)


Lesenswert?

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

von mm (Gast)


Lesenswert?

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.

von +- (Gast)


Lesenswert?

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.

von aha (Gast)


Lesenswert?

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.

von +- (Gast)


Lesenswert?

Roboter != Roboterarm für Automobilindustrie

Das kann auch einfach ein kleines Fahrzeug sein wo schlicht die 
Geschwindigkeit eingeregelt werden muss.
(PID Regler, nix wildes)

von mm (Gast)


Lesenswert?

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.

von chris (Gast)


Lesenswert?

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/

von Klaus (Gast)


Lesenswert?

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 ;)

von Chefkoch (Gast)


Lesenswert?

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.

von Martin I. (amatek)


Lesenswert?

@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 :-)

von aha (Gast)


Lesenswert?

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.

von mm (Gast)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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.

von Chefkoch (Gast)


Lesenswert?

@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.

von Martin I. (amatek)


Lesenswert?

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 
?

von omg (Gast)


Lesenswert?

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.. :-)

von Martin I. (amatek)


Lesenswert?

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.

von mm (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.