INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Eigenbau: Arduino 2.5 == Due++ ?
24.06.2015, 08:49 (Dieser Beitrag wurde zuletzt bearbeitet: 24.06.2015 08:51 von DaniDD.)
Beitrag #49
RE: Eigenbau: Arduino 2.5 == Due++ ?
Cooles Projekt, ich habe noch einen Tipp für die wie du vielleicht an mehr Rechenpower und RAM kommst.
Sagt dir Firmata und Processing was? Du spielst da ein spezielles Programm auf den Arduino. Dies findest du bei den Beispielen unter Firmata/StandardFirmata.
Dann installierst du die Processing IDE. Diese basiert auf der Arduino IDE. Wirst dich also schnell zurecht finden. Processing musst du nur kurz fit machen für den Arduino und kannst dann die Ein/Ausgänge des Arduino genau so nutzen als hättest du das Programm auf den Arduino geladen. Ok statt digitalRead(1) schreibt man arduino.digitalRead(1).

Du musst aber den Arduino mit dem PC verbinden. Klar mit Kabel ist das einfach, aber ggf kann man das auch über BlueTooth machen. Das simuliert ja eine serielle Schnittstelle und ber USB ist es ja auch nichts anderes.

Auch wenn der später vielleicht ganz autonom fahren soll, so kann der PC ggf die aufwendige Lernphase erledigen und du lädst dann das "Gehirn" auf die SD Karte
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.06.2015, 09:26 (Dieser Beitrag wurde zuletzt bearbeitet: 24.06.2015 09:36 von HaWe.)
Beitrag #50
RE: Eigenbau: Arduino 2.5 == Due++ ?
hallo,
Processing habe ich schon mal benutzt, aber für das neuronale Netz kommt keine PC-Anbindung in Frage, es muss jederzeit autonom laufen.
Das RAM fürs "Gehirn" ist aber auch ständig vielfach größer als der kleine Teil, der als "IO-Matrix-Pattern" auf SD gespeichert wird: ich hatte mich nämlich entschieden, die ganzen Gewichte und Schwellenwerte gar nicht mitzuspeichern, sondern sie nach dem "Total Recall" einfach aus dem IO-Matrix-Pattern neu zu trainieren - das dauert nur einige Sekunden bis wenige Minuten und spart viel Lese/Schreibarbeit für die SD. Von daher würde ein Training auf dem PC zumindest keinen Speicher sparen, und das virtuelle Training für einen virtuellen Robot in einer virtuellen Umgebung und dann die Transferierbarkeit zurück auf den echten Robot in seiner echten Umgebung ist ja auch noch so ne Sache...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.06.2015, 09:48 (Dieser Beitrag wurde zuletzt bearbeitet: 24.06.2015 09:57 von DaniDD.)
Beitrag #51
RE: Eigenbau: Arduino 2.5 == Due++ ?
Ok, also der Knackpunkt ist der RAM.
Du hast dir doch das Intel Board bestellt. Wie kommst du da mit den wenigen I/Os zurecht oder soll dann das Mega/Due Board mit dem Intel kommunizieren? Falls ja wie? Per I²C?
Nachtrag, ach stimmt, hattest ja geschrieben über I²C
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.06.2015, 09:57
Beitrag #52
RE: Eigenbau: Arduino 2.5 == Due++ ?
Hi,
vielleicht solltest Du Dir doch mal die Variante mit dem SPI-Memory betrachten. (Z.B. http://hackaday.com/2011/09/07/want-2-me...r-arduino/, http://majolsurf.net/wordpress/?p=930 oder http://playground.arduino.cc/Main/SpiRAM).
Mir ist schon klar, dass Du eigentlich etwas wolltest, was man direkt ganz normal in der IDE verwenden kann.
Allerdings kann ich mir gut vorstellen, dass man relativ leicht eine kleine Library dazu schreiben kann, die die Verwendung des "extended Memory" vereinfacht. Das wäre dann z.B. eine Klasse, die man ungefähr wie ein Array verwenden kann und die dann eben bei Bedarf das externe Memory ins normale "mappt".
Vielleicht kann man daraus sogar ein Shield machen, das auch andere wollen. Ich weiß zwar nicht, ob das so oft vorkommt, aber ich habe jetzt auch gerade eine Anwendung, die etwas mehr SRAM vertragen könnte.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.06.2015, 09:59 (Dieser Beitrag wurde zuletzt bearbeitet: 24.06.2015 10:05 von HaWe.)
Beitrag #53
RE: Eigenbau: Arduino 2.5 == Due++ ?
@DaniDD: das ist wirklich ein Problem mit den IOs.
ein paar Dpins werde ich möglicherweise über ein paar PCF8574 (?) und ein paar analoge PCF8591 (?) etc. am I2C Bus muxen können.
Wieviele unabhängige I2C ports der Galileo aber hat, weiß ich noch gar nicht (der Due hat ja 2), das wäre aus Geschwindigkeits- und Erweiterungsgründen schon wichtig. Auch ein weiteres Erweiterungsboard für 6-8 Encodermotore muss ja sowieso noch dran. Aber mit 2 getrennten I2C Ports ist das zu machen.

Sorge machen mir noch etwas die Themen
a) Timer-IRQs (beim Due: Due-Timer, evtl. auch Paralleltasks im µs-Takt) ) und
b) generell das Multitasking (am besten <pthread> oder GCC <thread> weil pre-emptiv, beim Due bisher habe ich nur den Scheduler, der ist aber nur kooperativ, was eh kritisch ist).

Da habe ich noch gar keinen Plan, wie das beim Galileo läuft, aber damit steht und fällt eigentlich alles.

@Thorsten: wenn ich sowas fix und fertig mit libs bekommen könnte, wäre das u.U. sogar eine Notlösung, allerdings laufen auch Display und SD über SPI, das macht die Sache wschl schon sehr langsam... :-\ . Ich komm aber darauf zurück!
(ps, wie sind denn die Zugriffszeiten im Vergleich zw. SPIram und "echtem" RAM ?)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.06.2015, 10:35 (Dieser Beitrag wurde zuletzt bearbeitet: 24.06.2015 10:36 von DaniDD.)
Beitrag #54
RE: Eigenbau: Arduino 2.5 == Due++ ?
Ich gebe zu bei dem Programm sehe ich nicht ganz durch. Hab mich auch bis jetzt so gut wie noch nicht mit ANN beschäftigt. Bin aber letztens über einiges gestolpert, u.a. über die FANN Library, die aber sicher zu Speicherhungrig für den Arduino ist und daher sicher noch nicht umgesetzt wurde.
Frage zu deinem Quellcode. Du meinst du brauchst ...Multitasking. Vor allem damit der nicht stoppt und die Motoren immer was zu tun haben? Könnte man da nicht einen Interrupt programmieren wo per Timer alle 1/10sek eine Unterroutine angesprungen wird die sich um die Motoren kümmern oder die Sensoren abfragen. Die Motoren könnten da auch bspw schon mal in eine Richtung fahren die nicht sooo perfekt ist weil die auf einem unfertigem Ergebniss basieren.
Oder wozu wird sonst das Multitasking benötigt?
Du nimmst IR Abstandsmesser. Warum nicht die wesentlich günstigeren Ultraschall? Weil die Probleme mit "weichen" Gegenständen haben?
Du hast 4 Motoren? Wie sind die angeordnet?
Hast du ein Video wo man schon mal sieht wie sich dein Gefährt bewegt?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.06.2015, 11:23 (Dieser Beitrag wurde zuletzt bearbeitet: 24.06.2015 12:46 von HaWe.)
Beitrag #55
RE: Eigenbau: Arduino 2.5 == Due++ ?
das ist jetzt nicht einfach und schnell zu erklären mit dem MT.
Interrupts wären kein Problem für zeitlich kurze Aktionen, aber für zeitlich landauernde Berechnungen eben schon.
Auf dem Robot laufen
- der Jordan Net Berechnungs-/Auswertungs-Task, der die angelegten Inputs heuristisch in Outputs umrechnet ("HAL"); 1 Durchlauf dauert ca. 10ms, ohne delay, aber ausgebremst durch das wahnsinnig lahme Display. Größere Netze brauchen entsprechend überproportional länger.
- alternativ: ein Net-Trainings-Task, dauert Sekunden bis Minuten, aber ausschließlich, also auch zeitlich unkritisch, der Robot steht derweil.
- ein Sensor- und Encoder-Poll-Task, 50ms mit delay (also unkritisch)
- ein Motor-Control-Task (an, aus: unkritisch, aber mit PID-Steuerung: zeitkritisch!)

so weit kriegt man das mit kooperativem MT und DueTimer auf dem Due für sehr kleine Netze hin.

Jetzt aber kommen für den Fahrbetrieb noch hinzu
- ein Navigationstask (Odometrie, Gyro, Kompass mit Sensorfusion) (5ms ohne delay)
- ein Astar-Task der den kürzesten Weg berechnet (wie Auto-Navi: rechenintensiv, langdauernd, aber geringere Priorität)
- ein Muster-Erkennungstask mit Fast Fourier Transformation (500ms ohne delay, ebenfalls rechenintensiv, langdauernd, aber geringere Priorität ),
- ein Subsumption-Arbitrator-Task, der zeitkritischen Tasks eine höhere Priorität einräumt.

ein langdauernder IRQ-Task würde jetzt die anderen Tasks behindern, nur kurze Zeitscheiben mit wenigen µs Dauer könnten den zwischenzeitlichen Ablauf anderer Tasks garantieren.

Wie gesagt, in allen Details schwer vollständig zu erklären.

Vom RAM-Speicher: ca. 50% vom Net Brain werden ständig gebraucht (IO-Matrix-Pattern, Neuronen und Gewichte), weitere 50% werden nur während der Trainingsphase für die Backpropagation vorrübergehend gebraucht (z.Zt. jeweils ca. 40kByte, künftig eher - nach Möglichkeit - jeweils das 10-20fache).
Hinzu kommen nochmal ca. 40kByte RAM für Umgebungskarten und Astar.
Bisher verwende ich: ca. 100 Inputs, 20+20+20 Neuronen, 20 Outputs, 60 trainierbare Muster)
Ziel allerdings sind (schrittweise vergrößert) 200 Inputs, 100+80+100 Neuronen, 100 Outputs, 1000 trainierbare Muster)
512k RAM wären also knapp, 1Mbyte schon handhabbar, ab 4MByte wäre die Situation entspannt....
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.06.2015, 11:50 (Dieser Beitrag wurde zuletzt bearbeitet: 24.06.2015 11:55 von DaniDD.)
Beitrag #56
RE: Eigenbau: Arduino 2.5 == Due++ ?
Danke für die ausführliche Darstellung Smile
Ja jetzt verstehe ich etwas besser wozu das benötigt wird.
Bei dem Aufbau würde ich aber auch gleich an ein 2-geteiltes System denken. Also das eine macht, das andere denkt Wink
Also eins für die Abfrage der Sensoren, vielleicht auch der Routenberechnung, der Steuerung der Servos und Motoren. Das andere System um das ganze auszuwerten und die richtung festzulegen (ich will jetzt nach da drüben fahren).

Wie war das gleich, OOP liegt dir nicht so? Eigentlich schade da man hier ganz gut wenn man alles in einem Programm hat die verschiedenen Sachen gegeneinander kapseln kann. Man muss in C++ auch nicht unbedingt erben...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Adafruit SousVide - Eigenbau Smasha 13 1.237 29.10.2015 21:37
Letzter Beitrag: hotsystems
  LCD Anzeige für Arduino Mega2560 an Arduino Due? DaniDD 1 806 03.06.2015 12:16
Letzter Beitrag: DaniDD
  Arduino Pin mit anderem Arduino auslesen - geht das? Gelegenheitsbastler 8 3.214 08.05.2015 20:49
Letzter Beitrag: Bitklopfer
  Eigenbau Lichtschranke mit kurzer Reaktionszeit Foto-Ralf 9 3.192 28.02.2015 23:58
Letzter Beitrag: ardu_arne
  Portalfräsmaschine im Eigenbau itsy 5 2.099 08.11.2014 19:11
Letzter Beitrag: itsy
Question Arduino Mega ADK oder Arduino Due? Baja-Junky 1 4.160 14.08.2013 21:16
Letzter Beitrag: Bitklopfer

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste