kein preemptives Multithreading - das war für mich der Grund, für viele Apps eine Alternative zu Arduinos zu suchen und teilw. zum Raspi mit Posix pthread zu wechseln.
Keine Frage, was seine Performance mit 4Kern-cpu, USB, Multimedia, Grafik und Bildverarbeitung (gtk, qt, opencv) angeht, ist er allen Arduinos haushoch überlegen -
- aber jetzt kann ihm der ESP32 fast das Wasser reichen.
Seine Entwickler haben "echte" C++ std Funktionen implementiert, und nun läuft sogar std::thread mit preemptivem Multithreading, unglaublich.
Dabei hat er immerhin eine 2-Kern-cpu mt 240MHz und fpu (1 Kern nur für WiFi), die WiFi/Webserver-API ist fast ähnlich simpel wie beim esp8266, nur beim RAM wird etwas "gemogelt", weil für stat. RAM "nur" 160 MByte zur Verfügung stehen und weitere 160MByte nur als zusätzliches dyn. RAM auf dem Heap per malloc, doch auch daran arbeiten sie, um es auch statisch zur Verfügung zu stellen.
Dabei lässt er sich wie ein Arduino Uno, Mega oder Due über die Arduino IDE programmieren, und sein UART steht als Serial1 (RX1/TX1) zusätzlich zu USB-Serial zur Verfügung. Wifi fordert zwar ein paar ADC Port-Pins ein, aber was bleibt ist fast ein Nano mit Raspi Zero Performance. Hier könnte ich mir z.B. vorstellen, für mehr schnelle und pwm-fähige digitale Pins oder spezielle Arduino-R3-Shields noch ein 2. Arduino-Huckepack-Board per UART dranzuhängen - was allerdngs auch für den Raspi in ähnlicher Weise nötig sein wird.
Für einen RP6-Nachfolger wäre der ESP32 (meiner ist ein Adafruit Feather ESP32 mit 480x320 Touchscreen) neben Raspi 2/3 und Raspbian+wiringPi definitiv ein super Kandidat.
Ich halt nicht viel von der Idee.
Warum?
Ich mochte den RP6 nie wirklich. Meiner Meinung nach ist er, vom Konzept her, zwar zu vielem fähig, aber zu nix so richtig nütze. Kettenantrieb: cool!
Aber wenn das Ding schon mit Türschwellen Probleme kriegt, wirds etwas albern- da hätten zwei Räder und ein halber Tischtennisball auch gereicht.
Aufm Stubentisch brauch ich wirklich kein Kettenfahrwerk....
Ausserdem halte ich nichts von irgendwelchen Bibliotheken, die sich ein Hersteller (oder auch ne Community) speziell für _diesen_ Roboter ausgedacht hat.
Da hängt man dran, man benutzt sie, aber wenns mehr werden soll, hat man es schwieriger.
Von daher sehe ich es ähnlich wie Moppi: Arduino Mega 2560 (ich möchte hier denjenigen sehen, der den, als Roboter, wirklich voll ausnutzen kann, irgendwelche akademischen Benchmarks bringen es nicht), dazu aber kein Wifi-Shield.
Das braucht man nicht: gerade der Mega hat so schöne serielle Schnittstellen, wo man ohne weiteres einen NodeMCU ran tüdeln kann....wenn man Wifi eben haben will. Das tolle: nen Mega-Clone und nen NodeMCU zusammen kriegt man für...na sagen wir nen Zehner.
Was leistungsfähigeres _ist_ cool, keine Frage, aber: der RP6 wollte eher ein Anfänger-Gerät sein(isser auch, finde ich)- nun setzt mal einen Anfänger vor nen Raspi: ihr liefert ihm einige Bibliotheken und Beispielprogramme mit, er probiert die aus- und dann?
Dann sitzt er vor einem, kaum noch zu begreifenden Rechenmoster und weiss nicht weiter.
Und mal ehrlich: um ein paar Motoren (meinetwegen auch ein halbes Dutzend) anzusteuern brauch ich noch lange keinen Raspi!
Das krieg ich mitm Uno auch hin....und selbst, wenn da ein GPS und ne Tüte voller anderer Sensoren ins Spiel kommen, geht das noch lässig mit nem Arduino Mega- ausgelastet ist der damit nicht.
Ich halt nix davon, jedes Problem einfach mit geballter Rechenleistung zu erschlagen, das ist weder sinnvoll, noch nötig- und man lernt auch nix bei.
Dann das Fahrwerk: da will jeder was anderes haben. Der eine will, dass es draussen klarkommt (*handheb), dem anderen reicht eine Teppichratte vollkommen aus. Das geht, alles, wenn man gar kein "fertiges" Teil entwickelt: dem Rechner ist es nämlich egal, ob er Treiber ansteuert, die 2A bei 5v liefern, oder welche, die 15A bei 30V bringen.
Fazit: man entwickelt _entweder_ einen "Bausatz"- von denen es meiner Meinung nach genug gibt, und den dann nur Leute kaufen (oder eben bauen) werden, in deren Beuteschema das Ding passt, oder man macht es wie ich:
-das will ich haben
-das brauche ich dafür
-zeichnen, einkaufen, Lötkolben schwingen, drucken
-happy sein, wenn es läuft.
Guckt einfach mal bisschen auf Thingiverse rum, da schwirren einige Roboter rum, die teilweise recht nett sind (z.B. ein ganz niedlicher FPV-Rover mit Raspi), aber es gibt auch einzelne Kettenfahrwerke zum selber drucken (die hab ich z.B. modifiziert, an meinem Kettenrover dran), alles Mögliche.
Mit sowas ist man weit flexibler als mit einer fast-fertig-Lösung, die nur ne Weile interessant ist (ich war auch ne ganze Weile von meinem NiboBee fasziniert, inzwischen staub ich den zweimal im Jahr ab und das wars).
Viel sinnvoller wäre es, flexible Chassis zu entwickeln denn: was da so auf dem Markt ist, gefällt mir entweder überhaupt nicht (wie der völlig nutzlose Wild Thumper, der gnadenlos am eigenen Konzept vorbei rauscht), oder ist so teuer, dass ich gar nicht drüber nachdenke.
Ob dann da jemand nen Pi, eine Banane oder nen Pro Mini reinschraubt, sollte unwichtig sein.
Etwas ähnliches ist mein Kettenroboter: der ist schonmal outdoor-tauglich.
Einfach, weil er ein geschlossenes Gehäuse hat (auch oben ist der zu, ein bisschen Regen juckt den nicht)- der wäre _im Prinzip_ auch tauchfähig zu bekommen.
Trotzdem kann man ihn drinnen auch fahren.
Ich hab (der war nur für gedacht, selber gedruckte Ketten mal auszuprobieren) einen NodeMCU drin und zusätzlich nen kleinen Arduino- ich glaube, ein Micro. Gesteuert wird das Ding einfach per Handy mit ner simplen App, und er hat, ausser zwei Motoren, eigentlich nix sinnvolles (ne handvoll RGB-Led's. aber die sind eher zum Angeben da).
ABER: der hat noch Aussparungen, in die man z.B Umwelt-Sensoren (sowas wie Luftdruck, Feuchte, Temperatur) bauen kann, und innendrin genug Platz auch für einen RasPi.
Den Deckel kann man abschrauben, und durch einen anderen ersetzen, dann könnte man einen Roboterarm genauso rauf bauen wie nen Laser-Scanner oder sonstwas.
Front und Heck sind ebenfalls einzelne Teile, auch hier könnte man erweitern....genauso war die Absicht dahinter.
Einziger Nachteil: das Ding gibts nirgends zu kaufen- die Dateien könnte ich frei geben, aber man braucht nen 3D-Drucker.
Und: er ist auf das zugeschnitten, was ich vor hatte- um den wirklich flexibel zu machen, müsste man einiges umkonstruieren.
Beispielsweise hab ich Abstandshalter für die Platinen gleich mit einmodelliert, die werden also passend mit gedruckt.
Aber das ist alles machbar.
Wenn also jemand hier Lust hat, mal ein _brauchbares_ und universelles Chassis zu entwickeln, was man selbst drucken kann (ggf. mit zugekauften Teilen, es macht nicht unbedingt Sinn, auf Krampf _alles_ drucken zu wollen), bin ich dabei aber: Bedingung ist, dass die Rechentechnik _nicht_ festgelegt wird.
Da soll mal jeder sein eigenes Süppchen kochen-wie man weiter oben ja deutlich sieht, wollen das wohl die meisten auch.
Schliesslich würde _das_ niemanden dran hindern, für _seine_ Lösung dann Bibliotheken zu schreiben, und zu veröffentlichen, womit das Ganze wiede anfängerfreundlich werden kann.
Grüssle, Sly
..dem Inschenör ist nix zu schwör..
ziemlich viele Buchstaben, Rabenauge, aber hast du den TOP und die Nachfolgeposts nicht ganz gelesen?
1.) geht's auch um deutlich leistungsfähigere Motoren und
2.) um ein Fahrgestell, das möglichst sowohl indoor- als auch outdoor- (Rasen-) tauglich ist, nicht aber für schweres offroad-Terrain - festgelegt zu Ketten oder Räderantrieb war bisher nichts.
3.) zu den µCs, wie schon ausgeführt: von mickrigen AVRs als "Großhirn" (inl. Mega) halte ich absolut nichts: Dann schon lieber den Due oder den GrandCentral im gleichen Platinen-Layout.
Über die Art der Räder/Ketten kann man sich dennoch unterhalten, wenngleich ich von Ketten für schwere Fahrzeuge absolut abraten würde:
entweder rutschen sie auf Parkett oder glattem Marmor/Granitboden oder sie reiben mächtig auf langflorigem Teppich und ziehen beim Drehen auf der Stelle teilweise Fäden raus, und wegen des starken Schlupfs vor allem in Kurven sind sie nicht odometriefähig. Ich habe/hatte einen solchen in mehreren Ausführungsvarianten, ich kann nur davon abraten.
Wirklich große Gummiräder (Pneus mit geeignetem Profil) halte ich für besser, gerade auch für höhere Schwellen.
Wenn jemand aber ein Fahrgestell drucken kann, in Kleinserie, stabil genug auch für höheres Gewicht und Belastung (1 Kiste Bier oder wenigstens ein paar Sixpacks sollten sie schon transportieren können), dann wäre das doch schon ein super Einstieg.
Komisch, bei meinem Rasenmäher kam ich mit dem Mega nie ans Rechenlimit, mir ging nur der RAM aus.
Das Ding machte Odometrie, A* Wegberechnung, Partikelfilter zur Positionsberechnung, GPS, 3 Motoren regeln, LCD und Bluetooth Ausgabe, usw.
Wenn man sich die Mühe macht die Berechnung auf Festkomma und Winkelberechnungen über Look-up Tables zu machen flutsch das wie nix.
Aber wenn man das Gleiche unter Arduino mit float aufgesetzt hätte, wäre es natürlich in die Hose gegangen. Da braucht es natürlich einen ARM Prozessor damit man die Odometrie auf 0.001° Abweichnung berechnen kann aber in der Wirklichkeit der Roboter bei einem Steinchen schon unbemerkte >1° Abweichung reinbekommt.
Und das Ding ist leichter Echtzeitfähig zu bekommen wie andere Plattformen.
Ich würde das trennen, Motoransteuerung und Sensoren wie Motordrehzahl über Microcontroller, Bedienoberfläche und das ganze BlingBling mit Raspi und Co.
alles über meinen Rasenmäherroboter (wer Tippfehler findet darf sie gedanklich ausbessern, nur für besonders kreative Fehler behalte ich mir ein Copyright vor.)
ja, für Motorencoder und pwm gebe ich dir prinzipiell Recht,
allerdings kann das für 2-3 Encodermotoren auch der Raspi und auch der ESP32 schon selber, ganz alleine, ohne Zusatzboards
- und 2 Encodermotoren reichen ja auch zunächst für ein einfaches Transportvehikel.
Und zuwenig RAM bei AVRs ist ja auch mein eigenes Gegenargument.
Was Echtzeitfähigkeit angeht ist ein ESP32 für GPIO r/w aber sogar 40x (vierzig! mal!) schneller als ein AVR, und das gilt sogar auch für einen Raspi 2 oder 3, auf dem nebenher ebenfalls noch HDMI, WiFi, UART/Bluetooth, WL USB-Keyboard/Maus und eine USB cam laufen (C mit pigpio, wiringPi, pthread, trotz Linux root-Zugriffe auf den Kernel). Das habe ich selber schon gemacht, es funktioniert einwandfrei.
Was viele nicht wissen: man kann für den Raspi sowohl pthread-Priorities höher definieren als für default-OS-threads, als auch sogar bestimmte cpu-Cores fürs eigene Programm reservieren und für den Linux Kernel komplett sperren (letzteres war bisher aber noch nicht einmal nötig). Allerdings gelten diese Vorteile nur für C, nicht für Python.
Den ESP32 betreffen Kernel-Zugriffe aber ja überhaupt nicht, und WiFi wird von seinem 2. core ja ganz unabhängig gesteuert.
Aber wir können es trotzdem so stehen lassen mit einem AVR Zusatzboard, denn (leider) funktionieren auch manche fertigen Shields nicht mit 3.3V Technik (es sei denn man entwickelt es selber).
Geändert von HaWe (25.05.2019 um 12:53 Uhr) Grund: typo
Möglich ist alles, aber man kommt sehr schnell an die Grenzen des Bauraumes eines 3D-Druckers.
Und so richtig Spaß kommt bei großen Teilen auch nicht auf, weil der Druck doch recht lange dauert. Da kann ein Fehldruck schon mal die zeitliche Verzögerung von nem ganzen Tag bedeuten. Für Spezialteile (Verbinder, Aufhängungen, ...) geht's. Solide Böden oder Wände müsste man aus Blech, Acrylglas oder Holz fertigen.
Geändert von Holomino (25.05.2019 um 15:06 Uhr)
gute Idee, danke!
Lesezeichen