Demoprogramme in Python
Forumsregeln
Bitte beachte die Forumsregeln!
Bitte beachte die Forumsregeln!
-
- Beiträge: 1
- Registriert: 27 Jan 2017, 20:33
Demoprogramme in Python
Hallo zusammen,
ich bin neu und beschäftige mich grad sehr intensiv mit den Möglichkeiten der ftcommunity CFW.
Da meines Erachtens hier ja die offiziellen Vorlagen (*.rpp) von Fischertechnik nicht kompatibel sind, ist es notwendig Anwendungen in Python zu schreiben.
Meine Frage geht dahin, ob es hier schon Vorlagen für bestimmte Standardmodelle gibt oder zumindest Vorlagen an denen man sich entlanghangeln kann, um das Prinzip zu erlernen.
Danke & Grüße
ich bin neu und beschäftige mich grad sehr intensiv mit den Möglichkeiten der ftcommunity CFW.
Da meines Erachtens hier ja die offiziellen Vorlagen (*.rpp) von Fischertechnik nicht kompatibel sind, ist es notwendig Anwendungen in Python zu schreiben.
Meine Frage geht dahin, ob es hier schon Vorlagen für bestimmte Standardmodelle gibt oder zumindest Vorlagen an denen man sich entlanghangeln kann, um das Prinzip zu erlernen.
Danke & Grüße
Re: Demoprogramme in Python
Hallo threepwood,
Es gibt im Wiki des Github-Repositorys eine Anleitung auf Deutsch und auf Englisch, wie man eine erste App für den TXT mit der Community-Firmware basteln kann. (https://github.com/ftCommunity/ftcommun ... -Anwendung)
Für die Ansteuerung der Ein- und Ausgänge verwendet man hauptsächlich ftrobopy, welches die Ansteuerung der Motorplatine übernimmt und standardmäßig in der Community-Firmware eingebunden ist. Das Handbuch dazu gibt einen ganz guten Überblick über die Funktionen von ftrobopy. (https://github.com/ftrobopy/ftrobopy/ra ... manual.pdf)
Mir hat es zum Beispiel außerdem geholfen, den Code von anderen bestehenden Apps anzusehen um die generelle Funktionsweise einer App besser zu verstehen.
Ich hoffe, dir helfen diese Quellen,
Liebe Grüße,
olagino
Es gibt im Wiki des Github-Repositorys eine Anleitung auf Deutsch und auf Englisch, wie man eine erste App für den TXT mit der Community-Firmware basteln kann. (https://github.com/ftCommunity/ftcommun ... -Anwendung)
Für die Ansteuerung der Ein- und Ausgänge verwendet man hauptsächlich ftrobopy, welches die Ansteuerung der Motorplatine übernimmt und standardmäßig in der Community-Firmware eingebunden ist. Das Handbuch dazu gibt einen ganz guten Überblick über die Funktionen von ftrobopy. (https://github.com/ftrobopy/ftrobopy/ra ... manual.pdf)
Mir hat es zum Beispiel außerdem geholfen, den Code von anderen bestehenden Apps anzusehen um die generelle Funktionsweise einer App besser zu verstehen.
Ich hoffe, dir helfen diese Quellen,
Liebe Grüße,
olagino
-
- Beiträge: 3
- Registriert: 28 Jan 2017, 23:54
Re: Demoprogramme in Python
Hallo,
ich habe auch vor, mit dem TXT und der Communityfrimware zu programmieren, bei mir funktionieren aber manche von den ftRopoPy Beispielanwendungen nicht. Kann mir bitte jemand sagen, was ich falsch mache?
Ich habe mir Linux in einer VM installiert und habe Python 3.6 und PyQt4 drauf. Als Editor nehme ich derzeit IDLE. Das Beispielprogramm PlaySound.py funktioniert und spielt auf dem TXT einen Sound ab. Angeschlossen ist er über USB.
Wenn ich SimpleCameraDemo.py ausführen möchte, das mit CameraGetFrame() und
write(' '.join(pic)) einen Screenshot speichern soll, bekomme ich verschiedene Fehlermeldungen. Beim ersten Durchlauf wird zwar ein Bild gespeichert, aber die Datei ist nur 0 Byte groß. Ich habe an keinen Dateien etwas verändert.
KONSOLE: (Das ==RESTART:path== ist jedes Mal ein neues Ausführen der .py Datei)
SimpleCameraDemo.py:
Liebe Grüße
ich habe auch vor, mit dem TXT und der Communityfrimware zu programmieren, bei mir funktionieren aber manche von den ftRopoPy Beispielanwendungen nicht. Kann mir bitte jemand sagen, was ich falsch mache?
Ich habe mir Linux in einer VM installiert und habe Python 3.6 und PyQt4 drauf. Als Editor nehme ich derzeit IDLE. Das Beispielprogramm PlaySound.py funktioniert und spielt auf dem TXT einen Sound ab. Angeschlossen ist er über USB.
Wenn ich SimpleCameraDemo.py ausführen möchte, das mit CameraGetFrame() und
write(' '.join(pic)) einen Screenshot speichern soll, bekomme ich verschiedene Fehlermeldungen. Beim ersten Durchlauf wird zwar ein Bild gespeichert, aber die Datei ist nur 0 Byte groß. Ich habe an keinen Dateien etwas verändert.
KONSOLE: (Das ==RESTART:path== ist jedes Mal ein neues Ausführen der .py Datei)
Code: Alles auswählen
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "copyright", "credits" or "license()" for more information.
>>>
======== RESTART: /home/myname/workspace/ftrobopy/SimpleCameraDemo.py ========
Connected to TX2013 firmware version 4.2.4
Camera connected
>>>
======== RESTART: /home/myname/workspace/ftrobopy/SimpleCameraDemo.py ========
Connected to TX2013 firmware version 4.2.4
Camera connected
Network error
>>>
======== RESTART: /home/myname/workspace/ftrobopy/SimpleCameraDemo.py ========
Connected to TX2013 firmware version 4.2.4
Camera connected
Traceback (most recent call last):
File "/home/myname/workspace/ftrobopy/SimpleCameraDemo.py", line 14, in <module>
f.write(''.join(pic))
TypeError: sequence item 0: expected str instance, int found
>>>
======== RESTART: /home/myname/workspace/ftrobopy/SimpleCameraDemo.py ========
Connected to TX2013 firmware version 4.2.4
Received data size ( 0 ) does not match length of format string ( 80 )
Connection to TXT aborted
>>>
Code: Alles auswählen
import sys, time
import ftrobopy
# Einlesen und Abspeichern eines TXT Camera Bildes (jpeg)
txt=ftrobopy.ftrobopy('192.168.7.2', 65000)
txt.startCameraOnline()
time.sleep(2.5)
pic = None
while pic == None:
pic = txt.getCameraFrame()
f=open('TXTCamPic.jpg','w')
f.write(''.join(pic))
f.close()
Re: Demoprogramme in Python
Hallo,
Hier ist eine etwas verbesserte Version der SimpleCameraDemo:
Viele Grüße
Torsten
durch einen Bug in der fischertechnik USB Kamera werden die JPEG Daten nicht immer korrekt an den TXT übermittelt (für die Experten: die Kamera kennzeichnet das Ende eines JPEG-Bildes manchmal falsch). Die ROBOPro-Library auf dem TXT erkennt diesen Fehler und schickt in diesem Fall ein leeres Bild zurück. Man muss deshalb in einem Python-Programm diesen Fehler abfangen und einfach so lange ein Bild einlesen, bis dessen Länge größer als 0 ist.Benutzername91 hat geschrieben:Wenn ich SimpleCameraDemo.py ausführen möchte, das mit CameraGetFrame() und
write(' '.join(pic)) einen Screenshot speichern soll, bekomme ich verschiedene Fehlermeldungen. Beim ersten Durchlauf wird zwar ein Bild gespeichert, aber die Datei ist nur 0 Byte groß.
Hier ist eine etwas verbesserte Version der SimpleCameraDemo:
Code: Alles auswählen
import sys, time
import ftrobopy
# Einlesen und Abspeichern eines TXT Camera Bildes (jpeg)
txt=ftrobopy.ftrobopy('auto')
time.sleep(2)
txt.startCameraOnline()
time.sleep(2.5)
pic = None
while pic == None:
pic = txt.getCameraFrame()
if pic != None:
if len(pic) == 0:
pic = None
with open('TXTCamPic.jpg', 'w') as f:
f.write(''.join(pic))
Torsten
-
- Beiträge: 3
- Registriert: 28 Jan 2017, 23:54
Re: Demoprogramme in Python
Danke für die Antwort
Ich habe die Abfrage auf Länge eingebaut und erhalte keine 0-Byte Dateien mehr. Allerdings kann ich die abgespeicherten .jpg Dateien mit dem standart Lunix Image Viewer und auch mit Firefox nicht ansehen.
Die Zeile txt=ftrobopy.ftrobopy('auto') erzeugt bei mir übrigens auch einen Fehler. Python will einen zweiten Parameter von mir haben.
Ich habe die Abfrage auf Länge eingebaut und erhalte keine 0-Byte Dateien mehr. Allerdings kann ich die abgespeicherten .jpg Dateien mit dem standart Lunix Image Viewer und auch mit Firefox nicht ansehen.
Zudem bekomme ich weiterhin häufig diese Fehler beim Ausführen:Error interpreting JPEG image file (Not a JPEG file: starts with 0x5b 0x32)
Code: Alles auswählen
========== RESTART: /home/myname/workspace/testRoboPy/testRoboPy.py ==========
Connected to TX2013 firmware version 4.2.4
Camera connected
>>>
========== RESTART: /home/myname/workspace/testRoboPy/testRoboPy.py ==========
Connected to TX2013 firmware version 4.2.4
Network error
========== RESTART: /home/myname/workspace/testRoboPy/testRoboPy.py ==========
Connected to TX2013 firmware version 4.2.4
Camera connected
>>>
========== RESTART: /home/myname/workspace/testRoboPy/testRoboPy.py ==========
Connected to TX2013 firmware version 4.2.4
Camera connectedReceived data size (
0 ) does not match length of format string ( 80 )
Connection to TXT aborted
========== RESTART: /home/myname/workspace/testRoboPy/testRoboPy.py ==========
Connected to TX2013 firmware version 4.2.4
Camera connected
>>>
========== RESTART: /home/myname/workspace/testRoboPy/testRoboPy.py ==========
Connected to TX2013 firmware version 4.2.4
Camera connected
Traceback (most recent call last):
File "/home/myname/workspace/testRoboPy/testRoboPy.py", line 18, in <module>
f.write(''.join(pic))
TypeError: sequence item 0: expected str instance, int found
>>>
TypeError: __init__() missing 1 required positional argument: 'port'
Re: Demoprogramme in Python
Hallo,
Edit:
Um die Verbindung zwischen TXT und Camera ordentlich zu beenden, solltest Du am Ende Deines Programmes immer ein und am Besten auch noch ein
hinzufügen, sonst sind bei einem Restart evtl. die Ports noch nicht richtig freigegeben (das könnte auch noch ein Grund für Deine Netzwerk-Probleme sein)
Viele Grüße
Torsten
das ist ein Python2 / Python3 Kompatibilitätsproblem (ich hatte SimpleCameraDemo nur mit Python2 getestet). Eine Code-Variante zum Abspeichern der JPEG-Bilder, die sowohl in Python2 als auch in Python3 funktioniert lautet:Benutzername91 hat geschrieben:[...] Allerdings kann ich die abgespeicherten .jpg Dateien mit dem standart Lunix Image Viewer und auch mit Firefox nicht ansehen.
Code: Alles auswählen
with open('TXTCamPic.jpg', 'wb') as f:
f.write(bytearray(pic))
Hmmm... diese Netzwerkfehler treten bei mir nur sehr selten auf, evtl. liegt es an Deiner virtuellen Machine (?). Im 'Online'-Modus verwende ich keine virtuelle Maschine, sondern starte Python direkt, entweder über IDLE in Windows oder auch von der Kommandozeile eines Mac- oder Linux-Systems. Meistens arbeite ich jedoch im 'Offline'-Modus mit dem Python-Interpreter direkt auf dem TXT. Wofür benötigst Du die virtuelle Maschine ?Benutzername91 hat geschrieben:Zudem bekomme ich weiterhin häufig diese Fehler beim Ausführen:
[...][...]Code: Alles auswählen
Connected to TX2013 firmware version 4.2.4 Network error
Code: Alles auswählen
Connected to TX2013 firmware version 4.2.4 Camera connectedReceived data size ( 0 ) does not match length of format string ( 80 ) Connection to TXT aborted
Ja, da hatte ich noch einen Bug in ftrobopy ... der ist seit eben gerade aber gefixt ... und auch schon auf github hochgeladen.Benutzername91 hat geschrieben:Code: Alles auswählen
Connected to TX2013 firmware version 4.2.4 Camera connected Traceback (most recent call last): File "/home/myname/workspace/testRoboPy/testRoboPy.py", line 18, in <module> f.write(''.join(pic)) TypeError: sequence item 0: expected str instance, int found >>>
Welche Version von ftrobopy verwendest Du ? Der 'auto'-Modus ist seit Version 1.56 implementiert, wenn ich mich richtig erinnere. Der 'auto'-Modus hat den Vorteil, dass man Programme nicht ändern muss, wenn man sie über verschiedene Netzwerkinterfaces (USB oder Wireless oder Bluetooth) oder auch im 'Offline'-Mode auf dem TXT direkt ausführt. Die aktuellste Version von ftrobopy ist übrigens die Version 1.64 (https://github.com/ftrobopy).Benutzername91 hat geschrieben: Die Zeile txt=ftrobopy.ftrobopy('auto') erzeugt bei mir übrigens auch einen Fehler. Python will einen zweiten Parameter von mir haben.Code: Alles auswählen
TypeError: __init__() missing 1 required positional argument: 'port'
Edit:
Um die Verbindung zwischen TXT und Camera ordentlich zu beenden, solltest Du am Ende Deines Programmes immer ein
Code: Alles auswählen
txt.stopCameraOnline()
time.sleep(0.1)
Code: Alles auswählen
txt.stopOnline()
time.sleep(0.1)
Viele Grüße
Torsten
-
- Beiträge: 3
- Registriert: 28 Jan 2017, 23:54
Re: Demoprogramme in Python
Hallo Torsten,
vielen Dank für deine schnellen und ausführlichen Antworten . Überhaupt Dankeschön, dass du so eine gut dokumentierte Schnittstelle für die Community entwickelt hast. Programme am PC ausführen zu können macht die Entwicklung wirklich angenehm.
Jetzt klappt alles. Ich habe die neue Version von ftrobopy runtergeladen, habe die File-Befehle ersetzt und habe die stop() und sleep() Befehle angefügt.
Ich bekomme keinen einzigen Fehler mehr (auch trotz VM) und kann alle Bilder öffnen.
Der Grund warum ich eine Linux-VM verwende anstelle von meinem eigentlichen WindowsOS hat folgenden Grund: vor ein paar Wochen, als Python3.6 grade frisch released war, habe ich versuch PyQt4 zu installieren und habe es nicht hinbekommen. Ich hatte Python 3.6 und hatte dann SIP von Riverbank installiert (wird benötigt um PyQt4 installieren zu können) und dann hat pip gesagt, dass PyQt4 nur für python3.4 installiert werden kann. Also habe ich downgegraded auf python3.4, und dann wollte pip mir SIP nicht installieren, weil SIP nur für python3.5 und höher installiert werden konnte. Dann hab ich nach wheeldateien für PyQt4 gesucht aber da war auch irgendwas und auf der Homepage von Riverbank waren für PyQt4 nur Sourcedateien zum selber bauen. Und in der Anleitung, wie man PyQt4 mithilfe dieser Dateien installiert steht nur "jetzt den Make-Befehl deines OS ausführen" und ich wusste nicht wie ich das unter Windows machen soll, da hab ich einfach Linux in einer VM installiert. Da konnte ich PyQt4 dann übrigens über apt direkt installieren. Ich weiß nicht, ob dieses Versions-Problem immernoch besteht und ich weiß nicht, ob ich mich nur blöd anstellt habe und ob man es trotzdem hätte zum laufen bringen können.
Ausserdem plane ich C-Module einzubinden. Ich dachte, dass ich diese C-Funktionen mit POSIX Befehlen in der Linux-VM vielleicht im Onlinebetrieb (also mit meinem PC als Hostplattform) ausführen und testen kann.
liebe Grüße
vielen Dank für deine schnellen und ausführlichen Antworten . Überhaupt Dankeschön, dass du so eine gut dokumentierte Schnittstelle für die Community entwickelt hast. Programme am PC ausführen zu können macht die Entwicklung wirklich angenehm.
Jetzt klappt alles. Ich habe die neue Version von ftrobopy runtergeladen, habe die File-Befehle ersetzt und habe die stop() und sleep() Befehle angefügt.
Ich bekomme keinen einzigen Fehler mehr (auch trotz VM) und kann alle Bilder öffnen.
Der Grund warum ich eine Linux-VM verwende anstelle von meinem eigentlichen WindowsOS hat folgenden Grund: vor ein paar Wochen, als Python3.6 grade frisch released war, habe ich versuch PyQt4 zu installieren und habe es nicht hinbekommen. Ich hatte Python 3.6 und hatte dann SIP von Riverbank installiert (wird benötigt um PyQt4 installieren zu können) und dann hat pip gesagt, dass PyQt4 nur für python3.4 installiert werden kann. Also habe ich downgegraded auf python3.4, und dann wollte pip mir SIP nicht installieren, weil SIP nur für python3.5 und höher installiert werden konnte. Dann hab ich nach wheeldateien für PyQt4 gesucht aber da war auch irgendwas und auf der Homepage von Riverbank waren für PyQt4 nur Sourcedateien zum selber bauen. Und in der Anleitung, wie man PyQt4 mithilfe dieser Dateien installiert steht nur "jetzt den Make-Befehl deines OS ausführen" und ich wusste nicht wie ich das unter Windows machen soll, da hab ich einfach Linux in einer VM installiert. Da konnte ich PyQt4 dann übrigens über apt direkt installieren. Ich weiß nicht, ob dieses Versions-Problem immernoch besteht und ich weiß nicht, ob ich mich nur blöd anstellt habe und ob man es trotzdem hätte zum laufen bringen können.
Ausserdem plane ich C-Module einzubinden. Ich dachte, dass ich diese C-Funktionen mit POSIX Befehlen in der Linux-VM vielleicht im Onlinebetrieb (also mit meinem PC als Hostplattform) ausführen und testen kann.
liebe Grüße
Re: Demoprogramme in Python
Hallo,
Viele Grüße
Torsten
Super, das freut mich.Benutzername91 hat geschrieben:Jetzt klappt alles. Ich habe die neue Version von ftrobopy runtergeladen, habe die File-Befehle ersetzt und habe die stop() und sleep() Befehle angefügt.
Ich bekomme keinen einzigen Fehler mehr (auch trotz VM) und kann alle Bilder öffnen.
Ok, ich verstehe ... das klingt wirklich so, als sei Linux in einer VM derzeit die praktikabelste Variante für Dich.Benutzername91 hat geschrieben:Der Grund warum ich eine Linux-VM verwende anstelle von meinem eigentlichen WindowsOS hat folgenden Grund: vor ein paar Wochen, als Python3.6 grade frisch released war, habe ich versuch PyQt4 zu installieren und habe es nicht hinbekommen. Ich hatte Python 3.6 und hatte dann SIP von Riverbank installiert (wird benötigt um PyQt4 installieren zu können) und dann hat pip gesagt, dass PyQt4 nur für python3.4 installiert werden kann. Also habe ich downgegraded auf python3.4, und dann wollte pip mir SIP nicht installieren, weil SIP nur für python3.5 und höher installiert werden konnte. Dann hab ich nach wheeldateien für PyQt4 gesucht aber da war auch irgendwas und auf der Homepage von Riverbank waren für PyQt4 nur Sourcedateien zum selber bauen. Und in der Anleitung, wie man PyQt4 mithilfe dieser Dateien installiert steht nur "jetzt den Make-Befehl deines OS ausführen" und ich wusste nicht wie ich das unter Windows machen soll, da hab ich einfach Linux in einer VM installiert. Da konnte ich PyQt4 dann übrigens über apt direkt installieren. Ich weiß nicht, ob dieses Versions-Problem immernoch besteht und ich weiß nicht, ob ich mich nur blöd anstellt habe und ob man es trotzdem hätte zum laufen bringen können.
Viele Grüße
Torsten