Raspberry Pi vs. Arduino bei Zeitkritischen Anwendungen

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    ich bastel gerade an einem weiteren Kamera Slider. Der Slider soll - mit einem Nema 17 Stepper Motor, 14:1 Planetengetriebe und einem Big Easy Driver ausgestattet - ausschließlich für Timelapse Aufnahmen (auch über wirklich lange Zeiträume von bis zu 24 Stunden) laufen. Ich lese immer wieder, dass der Pi (Zero in meinem Fall, das wäre das Wünschenswerte wegen seiner Baugröße und weil ich weder viele USB Anschlüsse noch LAN brauche) für Zeitkritische Anwendungen nicht wirklich geeignet sein soll. Vor diesem Hintergrund teste ich die Steuerung des Sliders gerade mit einem Arduino Nano.

    Kann mir einer von euch bitte etwas mehr Input zu dem 'Zeitkritisch' geben? Bei einem Timelapse Slider kommt es ja - wie der Name schon sagt - eben genau auf die Zeit an. Wenn der Slider also alle 5 Sekunden einen (Micro)Step (und ein Bild mit der Kamera) machen soll, dann erwarte ich das auch im Ergebnis (sowohl in der Position des Dollys auf der Schiene als auch in der Anzahl der Bilder). Nicht das sich die Zeit plötzlich dehnt oder verkürzt weil ich auf die falsche Hardware gesetzt habe.

    Danke!

    Einmal editiert, zuletzt von doing (16. Februar 2017 um 18:05)

  • Raspberry Pi vs. Arduino bei Zeitkritischen Anwendungen? Schau mal ob du hier fündig wirst!

  • ein normaler Linux-Rechner ist, nach der reinen lehre, nicht echtzeitfähig.
    darunter wird verstanden, dass er innerhalb einer definiert (kurzen) zeit auf ein Ereignis reagiert.

    ein Arduino wäre es eher, da dieser nur ein Programm ausführt, und nichts anderes.

    bei einer zeit von 5 (in Worten FÜNF) Sekunden sollte aber auch ein PI das können, man sollte nur nicht einen normalen Zeitgeber, sondern den HPT verwenden, um die Zeit besser einzuhalten.

    Computer ..... grrrrrr

  • Tja ... definiere mal 5 Sekunden ;) ...
    Das Problem des PWM-Signals hast Du durch das EasyDriver-Teil ja bereits per Hardware gelöst ...
    Bleibt die Frage, wie genau das mit den 5 Sekunden sein muss.
    Also bei einer reinen Zeitraffer-Geschichte würde ich jetzt mal behaupten, dass da eine Sekunden hin oder her keine Rolle spielen ...

    Wie sieht's da auf dem Pi mit z.B. Jessie aus?
    Also: sobald Last auf den Pi gegeben wird musst Du mit Latenzzeiten von bis gut 1000 ms rechnen ...
    Das liegt nun mal in der Natur der Sache durch das preemptive Multitasking.
    Das ist jetzt nicht immer der Fall, die Spitzen liegen aber durchaus in diesem Bereich.
    Genaue Erkenntnis über die bei Dir auftretenden Latenzzeiten wird Dir da nur eine Versuchsreihe bringen (also z.B. ein simples Programm, das alle Sekunde einen genauen Timestamp schreibt und eine LED blinken lässt).

    Dabei ist die Last zunächst mal mit ausschlaggebend. Wenn sich die in Grenzen hält, bleiben auch die Latenzzeiten deutlich niedriger.

    Dagegen gibt es jetzt mehrere Maßnahmen:
    1. Du setzt ein OS mit RT-patch ein ( z.B. das -> Image von EMLID <- ).
    Das ist imho einen Versuch wert ... allerdings weiß ich nicht, ob das auf einem Zero läuft ... kann ich bei Gelegenheit aber mal ausprobieren. Damit liegen die max. Spitzen der Latenzen unter Last bei ca. 80 ms ...

    2. Da Du ehe schon einen Arduino im Einsatz hast: lass' den die Steuerung übernehmen ... das sollte mit dem EasyDriver Board realtaiv einfach sein. Alternativ dazu könntest Du auch mal einen ESP8266 ausprobieren ...

    Wobei bei Variante 2 der Raspi vollkommen überflüssig wäre, es sei denn, Du willst damit noch was anderes machen.

    //EDIT: Der Download-Link oben lief leider mittlerweile ins Leere ... ist korrigiert: -> https://docs.emlid.com/navio2/Navio-A…-raspbian-image

    cu,
    -ds-

  • Hi,

    Bei Zeitraffer mit Slidern kommt es unter anderem auf den Bildwinkel an, den du mit deiner Kamera abdeckst. Bei sehr weiten Winkeln fallen auch das wackeln der Kamera oder verpasste Schritte nicht so auf. Ausserdem habe ich gelernt, daß Kamerafahrten mit Beschleunigung und Abbremsen viel besser ausschauen.

    Der Slider, den ich gebaut habe hat eine Untersetzung von 40:1 (Schneckengetriebe, damit es selbsthaltend ist) und ich benötige glaube ich 160000 Schritte, um den einen Meter zurückzulegen. (200 Schritte*40 (Untersetzung)*20 (5cm Vorschub pro Umdrehung))

    Alle 5 Sekunden einen Microstep lese ich gerade, das ist nicht viel. Allerdings wird der Stromverbrauch echt hoch. Beim Microstepping braucht der Easydriver mehr als nur den einfachen Spulenstrom. Wie willst du das denn 24 Stunden am laufen halten?

    Häng doch einen Arduino mit GRBL dazwischen und starte vom Raspbi einen G-Code Befehl, der sagt: "Bewege dich 1 Meter mir einer Beschleunigung von X und einer Geschwindigkeit von Y". Immer Wenn die Zeit zwischen 2 Bildern um ist, hältst du den Arduino über einen Stop-befehl an , wartest bis das System ausgewackelt hat, machst dein Bild und lässt ihn dann weiterfahren. Die Kommunikation geht über Seriell, USB oder sogar einen GPIO. Komplexeres wie z.B. "Fahre die ersten 20cm mit Geschwindigkeit X und dann mit Geschwindigkeit Y weiter" geht natürlich auch.

    Bye

    Einmal editiert, zuletzt von maecki (16. Februar 2017 um 18:41)


  • Wobei bei Variante 2 der Raspi vollkommen überflüssig wäre, es sei denn, Du willst damit noch was anderes machen.

    Das ist genau der Punkt. Ich habe hier schon einen Slider stehen (du erinnerst dich an die Teile von Openbuilds bzw. RatRig, die wir auch im Barkeeper Thread erörtert haben), den ich mit einem selbstgebauten Remote Head ausgestattet habe. Diesen Slider kann ich (neben Timelapse und vorprogrammierten Bewegungen) auch mit einem PS4 Controller in allen drei Achsen steuern, was auch echt knorke funktioniert.

    Schön wäre es daher wenn ich auch bei dem neuen Slider - der auf einer verfeinerten Hardware aufbaut - zumindest die Option hätte ihn in einer Achse über den PS4 Controller steuern zu können. Ich dachte da an den Pi Zero mit dem WiFi HAT von RedBearLab, den ich rein zufällig hier herumliegen habe. Daher mein Schwanken zwischen dem Arduino Nano und dem Pi, der mir letzteres ermöglichen würde.

    Wenn du Zeit und Lust hast den RT Patch mal auf dem Pi Zero zu testen wäre ich dir verbunden. Alternativ werde ich das natürlich auch mal austesten > Danke für den Link zum Image!


    Alle 5 Sekunden einen Microstep lese ich gerade, das ist nicht viel. Allerdings wird der Stromverbrauch echt hoch. Beim Microstepping braucht der Easydriver mehr als nur den einfachen Spulenstrom. Wie willst du das denn 24 Stunden am laufen halten?

    Hi maecki,

    das sollte mit einem Netzteil erstmal kein Problem darstellen. Das Ganze am Ende auf einen Akku zu bringen steht sehr viel weiter hinten in der ToDo Liste, im Moment teste ich noch die verfeinerte und zum Teil gedruckte Hardware... ;)

    GRBL werde ich mir mal ansehen - auch dir Danke für den Input!

    Einmal editiert, zuletzt von doing (16. Februar 2017 um 19:02)

  • Hallo doing,

    der RPi ist nicht annähernd echtzeitfähig. Ich hatte mal ein Testprogramm geschrieben, dass nichts anderes macht, als einen Zähler hochzuzählen, bis die Systemuhr den Ablauf einer Sekunde meldet. Der kleinste Wert zzgl. 50% ergaben den größten Wert (gemessen auf einem RPi B+, um Einflüsse durch Hochtakten der CPU auszuschließen).
    Das gleiche Programm habe ich auf einem PC laufen lassen. Kleinster und größter Wert unterschieden sich um 3%.


    Mal ein ganz anderer Ansatz, um den RPi für dieses Projekt tauglich zu machen.
    Nimm einen Kondensator und einen Widerstand. t = RC. Lasse den Kondensator über den Widerstand mit einem GPIO-Ausgang aufladen und nach Aufladen wieder entladen. Zwischen Entladen (LOW-Pegel bei 0,8 V) und Aufladen (HIGH bei 1,3 V) wird immer die gleiche Zeit liegen.
    Wenn Du R und C so wählst, dass über den GPIO-Ausgang und den kleinen fließenden Strom R*C auf 5 Sekunden (oder ein ganzzahliger Bruchteil davon) kommt, dann hast Du jedenfalls sehr reproduzierbare Intervalle. Und - vielleicht - reicht der Entladepuls auch noch für den Stepper-Antrieb.

    Ein solches Programm habe ich auch mal geschrieben. Daher kann ich bestätigen, dass diese Zeiten recht konstant sind.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo Andreas,

    wenn ich deinen Vorschlag richtig verstanden habe, dann wäre ich aber durch die Wahl von Widerstand und Kondensator auf einen (über die Hardware) definierten Zeitinterval festgelegt. Das kann es natürlich nicht sein, denn den Zeitinterval muss ich schon - entsprechend der beabsichtigten Aufnahmen - ändern können. In meinem anderen Slider Projekt läuft das alles über einen Touchscreen, da kann ich die Anzahl der Bilder und den Interval zwischen den Bildern über ein GUI (Pygame) hinterlegen...

    Einmal editiert, zuletzt von doing (16. Februar 2017 um 19:27)

  • Hallo Doing,

    es gibt ja auch Potis und Drehkondensatoren, um R*C zu ändern.

    Ändert sich denn das Zeitintervall während einer Aufnahmenserie? Dann ist das mit den R und C in der Tat ungeschickt.
    Wenn Du es aber nur einmal vor einer Aufnahmenserie festlegen musst, dann wäre das mein Mittel der Wahl, um auf einem nicht Realtime-OS einigermaßen konstante Zeitintervalle erzeugen zu können.
    Einigermaßen = Abweichungen im Bereich von max. 10 ms (bei 5 Sekunden) - vielleicht auch deutlich weniger.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Tjaaa ... schlechte Nachricht ... das Image von EMLID läuft nicht auf dem Zero ... die grüne LED blinkt nur zyklisch 7-mal.
    Dasselbe Verhalten in einem "alten" Raspi B.
    Da scheint was zu fehlen ... so mal grpb drübergeschaut sind da nur die Files für den Pi2 und Pi3 drauf ...
    Ich hab' hier aber noch ein älteres Image ... das probier' ich jetzt mal als nächstes ...

    Wenn alle Stricke reissen: https://github.com/emlid/linux-rt-rpi ... selber bauen ;)

    Andreas: mal ehrlich ... um in dem Zusammenhang auf die Idee mit einem Schwingkreis zu kommen bedarf es schon sehr viel Kreativität ;) ...

    Ok ... das alte Image bootet leider auch nicht auf dem Zero ...
    Bleibt, in dem Fall, nur selber bauen ... wobei ich jetzt erst mal schauen würde, ob Du nicht vielleicht doch mit den vorhandenen "Verzögerungen" leben kannst ...

    Bis dann,
    -ds-


  • Ich lese immer wieder, dass der Pi (Zero in meinem Fall, das wäre das Wünschenswerte wegen seiner Baugröße und weil ich weder viele USB Anschlüsse noch LAN brauche) für Zeitkritische Anwendungen nicht wirklich geeignet sein soll. Vor diesem Hintergrund teste ich die Steuerung des Sliders gerade mit einem Arduino Nano.

    Kann mir einer von euch bitte etwas mehr Input zu dem 'Zeitkritisch' geben? Bei einem Timelapse Slider kommt es ja - wie der Name schon sagt - eben genau auf die Zeit an. Wenn der Slider also alle 5 Sekunden einen (Micro)Step (und ein Bild mit der Kamera) machen soll, dann erwarte ich das auch im Ergebnis (sowohl in der Position des Dollys auf der Schiene als auch in der Anzahl der Bilder). Nicht das sich die Zeit plötzlich dehnt oder verkürzt weil ich auf die falsche Hardware gesetzt habe.

    Alle 5sec.... alles, was nicht RasPi heisst, sollte dafür mehr als präzise genug sein...

    Warum nicht einen ESP8266 ?
    Der lässt sich fast wie ein Arduino programmieren und ist mit seinen 80MHz sehr schnell.

    Hat EEPROM-Speicher onboard (Zum Ablegen von Daten) und kann in einen Schlafmodus gehen (konfigurierbar)...

    Ok, der hat auch WLAN (könnte als AP arbeiten, so dass man da sogar in die Steuerung eingreifen könnte per entsprechendem GUI-Interface deiner Wahl und Kreativität..)
    (Man muss das ja nicht nutzen... :fies: )

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!