Demoprogramme in Python

Community-Firmware (cfw), Selbstbaucontroller (TX-Pi, ftduino, usw.), usw.
Forumsregeln
Bitte beachte die Forumsregeln!
Antworten
threepwood
Beiträge: 1
Registriert: 27 Jan 2017, 20:33

Demoprogramme in Python

Beitrag von threepwood » 28 Jan 2017, 10:29

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

olagino
Beiträge: 93
Registriert: 02 Aug 2014, 13:13
Kontaktdaten:

Re: Demoprogramme in Python

Beitrag von olagino » 28 Jan 2017, 10:35

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

Benutzername91
Beiträge: 3
Registriert: 28 Jan 2017, 23:54

Re: Demoprogramme in Python

Beitrag von Benutzername91 » 29 Jan 2017, 00:07

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)

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
>>>  
SimpleCameraDemo.py:

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()

Liebe Grüße

Torsten
Beiträge: 310
Registriert: 29 Jun 2015, 23:08
Wohnort: Gernsheim (Rhein-Main-Region)

Re: Demoprogramme in Python

Beitrag von Torsten » 29 Jan 2017, 14:41

Hallo,
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ß.
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.

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))
Viele Grüße
Torsten

Benutzername91
Beiträge: 3
Registriert: 28 Jan 2017, 23:54

Re: Demoprogramme in Python

Beitrag von Benutzername91 » 29 Jan 2017, 17:07

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.
Error interpreting JPEG image file (Not a JPEG file: starts with 0x5b 0x32)
Zudem bekomme ich weiterhin häufig diese Fehler beim Ausführen:

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
>>> 
Die Zeile txt=ftrobopy.ftrobopy('auto') erzeugt bei mir übrigens auch einen Fehler. Python will einen zweiten Parameter von mir haben.
TypeError: __init__() missing 1 required positional argument: 'port'

Torsten
Beiträge: 310
Registriert: 29 Jun 2015, 23:08
Wohnort: Gernsheim (Rhein-Main-Region)

Re: Demoprogramme in Python

Beitrag von Torsten » 29 Jan 2017, 19:07

Hallo,
Benutzername91 hat geschrieben:[...] Allerdings kann ich die abgespeicherten .jpg Dateien mit dem standart Lunix Image Viewer und auch mit Firefox nicht ansehen.
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:

Code: Alles auswählen

with open('TXTCamPic.jpg', 'wb') as f:
  f.write(bytearray(pic))
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
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:

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
>>> 
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: 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'
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).

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)
und am Besten auch noch ein

Code: Alles auswählen

txt.stopOnline()
time.sleep(0.1)
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

Benutzername91
Beiträge: 3
Registriert: 28 Jan 2017, 23:54

Re: Demoprogramme in Python

Beitrag von Benutzername91 » 29 Jan 2017, 21:00

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

Torsten
Beiträge: 310
Registriert: 29 Jun 2015, 23:08
Wohnort: Gernsheim (Rhein-Main-Region)

Re: Demoprogramme in Python

Beitrag von Torsten » 29 Jan 2017, 22:00

Hallo,
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.
Super, das freut mich.
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.
Ok, ich verstehe ... das klingt wirklich so, als sei Linux in einer VM derzeit die praktikabelste Variante für Dich.

Viele Grüße
Torsten

Antworten