Aktion von anderen RPi aus starten

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
MoD00
User
Beiträge: 8
Registriert: Freitag 5. Oktober 2018, 08:34

Hallo da draussen,
ich bin hier neu im Forum und möchte mich daher erst ein mal kurz vorstellen. Bisher habe ich mich hauptsächlich in der Arduinolandschaft bewegt und nun seit kurzem mit dem Raspberry experimentiert. Hauptsächlich habe ich bis jetzt Zeitsteuerungen und Anzeigen "entwickelt". Mit dem kennenlernen des RPi habe ich nun weitere möglichkeiten entdeckt. So ist der wesendliche Vorteil für mich das Display, die Kamera und die Konektivität des RPi.
Mein aktuelles Projekt soll im groben so aussehen das mehrer Client (RPi Zero + Kamera) von einem "Server" (RPi3, Monitor, Tast. + Maus, evtl. Kamera und einem externen Datenspeicher) aus gestartet und gestopt werden sollen um ein Video aufzuzeichnen. Dieses soll dann auf dem "Server" gespeichert werden.
Was bisher weitestgehendst funktioniert ist das aufzeichen des Videos via GPIO's.
Jetzt stellt sich mir die Frage wie bzw. ob ich von einem RPi aus ein Programm auf einem anderen RPi starten kann oder dierekt in den Programmablauf eingreifen kann. Ob hier BT oder WLAN verwendet wird ist erst mal nicht entscheident aber interssieren würde mich beides.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

BT ist garantiert nicht Bandbreiten-stark genug für sowas. Und mir erschließt sich nicht, warum du da etwas fernsteuern willst. Sofern alle Clients gleichzeitig laufen sollen, musst du eh alle Videoströme gleichzeitig verarbeiten. Du kannst also bequem im Server einfach entscheiden, welche du anzeigst oder auch nicht.

Das dieses Projekt eine ziemliche Herausforderung wird, weil mehrere Videoströme zu verarbeiten alles andere als einfach ist mit der beschränkten Hardware des PI, sei nur so nebenbei angemerkt.

Last but not least zu deiner eigentlich Frage: gehen tut beides, es ist aber ungewöhnlich einen Entwurf zu haben, bei dem Remote Programme gestartet werden. Stattdessen laufen die einfach die ganze Zeit, und verbinden sich einfach mit dem Server. Das ist ganz normale Netzwerkprogrammierung.

Wenn du dir das Leben etwas einfacher machen willst, benutz eine Middleware wie zB ZeroMQ oder meinen Favoriten nanomsg um die Kommunikation zwischen den Beteiligten etwas einfacher zu gestalten.
MoD00
User
Beiträge: 8
Registriert: Freitag 5. Oktober 2018, 08:34

Ok.
Das ist schon mal ein Ansatzt.
Danke.

Ich vermute da habe ich mich etwas falsch ausgedrückt. Es geht mir nicht darum einen bzw. mehrere Stream live zu übertragen. Um die Problematik etwas besser zu verstehen möchte ich ein wenig näher ins Detail gehen.
Ich bin meines Zeichens Trainer im Bogensport. Da dies eine der komplexisten Sportarten ist die es gibt arbeiten wir viel mit Videoaufzeichnungen. Um eine optimale Auswertung des Schussablaufes zu erhalten ist es Notwendig den Schützen von mehreren Perspektiven (vorn, hinten, recht, links, oben plus Nahaufnahmen Gesicht, Bogen und Ziel) gleichzeitig zu Filmen. Üblicherweise werden hierfür ein paar Handy's und manchmal auch die eine oder ander Videokammera mitgebracht. Einer steht dann in der mitte und alle anderen Filmen. Die Schwierigkeiten die sich hierbei stellen sind die syncronisation von Start und Stop und das sammeln des Bildmateriales. Ganz abgesehen von den verwackelten Aufnahmen.

Momentan habe ich 3 Slavesysteme die syncron via GPIO gestartet werden, 2 min. aufzeichnen und die Datei auf einen USB Stick speichern.
Um aber ein wenig flexibler zu sein habe ich mir das so vorgestellt das man je nach Trainingssituation 1 - 8 Slavesystem positioniert welche Zentral gestartet / gestopt werden und dann nach und nach die Videodateien an den Master übergeben.
__deets__ hat geschrieben: Freitag 5. Oktober 2018, 10:06 Wenn du dir das Leben etwas einfacher machen willst, benutz eine Middleware wie zB ZeroMQ oder meinen Favoriten nanomsg um die Kommunikation zwischen den Beteiligten etwas einfacher zu gestalten.
Hast du hierfür ein deutschsprachiges Beispiel?
Ist es vieleicht einfacher einen GPIO anzusprechen und diesen dann einzulesen und auszuwerten?
MoD00
User
Beiträge: 8
Registriert: Freitag 5. Oktober 2018, 08:34

MoD00 hat geschrieben: Freitag 5. Oktober 2018, 13:44
Hast du hierfür ein deutschsprachiges Beispiel?
Sorry habe gerade deine Antwort im Raspi Forum gefunden .
Probiere das gleich mal aus.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ah. Es ist also nicht wichtig, die Stroeme in Echtzeit zu uebertragen. So ein System wie von dir geplant kann man durchaus hinkriegen. Interessant fuer euch sind da ggf. auch Ansaetze, hoehere Bildraten mit der PI-Camera zu erzielen:

https://gist.github.com/CarlosGS/b8462a ... bb0f3a4d63

Natuerlich zum Preis reduzierter Aufloesung - aber das mag verschmerzbar sein, je nach Bildauschnitt.

Und natuerlich waeren auch ein kleines, lokales NTP-Setup zur Zeitsynchronisation ganz hilfreich, damit die Aufnahmen wirklich synchron sind.

Naja. Da kann man viel basteln, bis das alles steht.
MoD00
User
Beiträge: 8
Registriert: Freitag 5. Oktober 2018, 08:34

Danke für die Antwort.
Stelle mich gerade ein wenig glatt an.
Offensichtlich ist nanomsg nicht Bestandteil der standart Installation.
Habe leider nicht so richtig was im Netz gefunden.
Ist wahrscheinch bestandteil eines Paketes.
Könnt ihr mir sagen wie ich das installieren kann?
MoD00
User
Beiträge: 8
Registriert: Freitag 5. Oktober 2018, 08:34

habe folgenden Anweisungen ausgeführt

Code: Alles auswählen

apt-get install python-pip libnanomsg-dev 
2.pip install nanomsg
3.python -c "import nanomsg"
offensichtlich wurde nonomsg aber im Python 2.7 installiert

Ich würde aber lieber mit der neuesten version arbeiten.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dann gib das pip der neuen Version an. Dann wird auch für dessen Python installiert. Das müsste pip3 sein, oder “python3.6 -mpip ...” sollte auch gehen. Dann ist man sicher das richtige zu erwischen.
MoD00
User
Beiträge: 8
Registriert: Freitag 5. Oktober 2018, 08:34

Habe beide Varianten ausprobiert.
Bekomme aber immer einer Warnung beim Testen.
Getestet habe ich erst mal nur den import. Also eine Testdatei mit folgenden Inhalt:

Code: Alles auswählen

import nanomsg
Folgende Meldung erhalte ich:

Code: Alles auswählen

warning (from warnings modul):
  File"/usr/local/lib/phyton3.5/dist-packages/nanomsg_wrappers/__init__.py",
  line22
     "%s, performance may beaffected!"( % (default,))
UserWarning: Could naot default wrapper for your plattform: cpy, performance
may be affected!     
Kann ich das ignorieren da es nur eine Warnung ist?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich denke. Und die Ursache ist wahrscheinlich im Log des Installationskommandos zu finden. Ich nehme mal an dir fehlt ein C-compiler & co.
MoD00
User
Beiträge: 8
Registriert: Freitag 5. Oktober 2018, 08:34

das ist gut möglich
welchen sollte ich hier installieren?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Musst du ja nicht, geht ja auch so. Und wenn hast du nur einen Wahl - das build-essential Paket. Da ist der GCC drin.
MoD00
User
Beiträge: 8
Registriert: Freitag 5. Oktober 2018, 08:34

Habe jetzt an drei verschiedenen Systemen getestet und komme immer wieder auf das gleiche Problem.
Um weiter zu kommen habe ich mit den Standart socket gearbeitet und das klappt ganz gut. Werde mich jetzt mal damit näher befassen. zu testen währe da noch die multithread geschichte.
Danke erst mal ich melde mich dann noch mal.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Was ist denn „das gleiche Problem“? Die Warnung? Kann ignoriert werden.

Und klar gehen sockets auch. Die tun aber nicht das gleiche. Die verbinden sich nicht automatisch neu. Die garantieren dir auch nicht, das deine Nachricht vollständig gesendet, noch das sie vollständig empfangen wird. Das musst du drumrum bauen. Und das tun 99.999% der im Netz auffindbaren Beispiele nicht.

Und das ist ja nur die unterste Schicht. Nanomsg kennt Topologien. Also zb Bus, bei dem jeder alle Nachrichten der anderen bekommt. Wie man das für deinen Fall braucht. Auch das muss man alles selber basteln.
Antworten