Robo Pro Coding und Python

Alles rund um TX(T) und RoboPro, mit ft-Hard- und Software
Computing using original ft hard- and software
Forumsregeln
Bitte beachte die Forumsregeln!
Antworten
Techum
Beiträge: 84
Registriert: 25 Dez 2014, 20:50
Kontaktdaten:

Robo Pro Coding und Python

Beitrag von Techum » 28 Dez 2021, 12:26

Hallo Zusammen,

wie versteht ihr die neue Option, mit ROBO Pro Coding direkt Python code zu erzeugen?

Zwar werden die Programmteile (z.b. main.py) mit Python Symbol angezeigt. Wenn man exportiert, wird aber nur ein .ft file erzeugt. Außerdem kann man auch nur .ft files importieren, also keine Python files, sehe ich das richtig?

Die eigene FT IDE ist recht schwach, aber offenbar muss man sie verwenden, weil sich sonst keine Verbindung zum Controller herstellen lässt.
Immerhin kann man Code z.B. aus PyCharm oder aus dem grafischen Teil der ROBO Pro Coding Umgebung (rechte Maustaste und "kopieren") hineinkopieren.
Letzteres erscheint mir überhaut die einzige Möglichkeit zu sein, mit der quasi undokumentierten Python Schnittstelle umzugehen.
Wohl eher möglich aber m.E. nicht praktikabel: Man generiert Code in der grafischen Umgebung soweit man kommt, öffnet ihn dann in der Python FT IDE und reichert das Programm dann um einige Finessen an?

Die Python FT IDE kennt jedenfalls keinerlei "Kontext". Wenn ich einen Encodermotor definiert habe als
TXT_M_M1_encodermotor = txt_factory.motor_factory.create_encodermotor(TXT_M, 1)
bietet mir die IDE bei Eingabe von "TXT_M_M1_encodermotor." keine Methoden zum Objekt an. (es existieren set_speed, set_distance...)

Die "Hilfe" ist sogar verwirrend. Tippe ich "camera.i" wird mir img vorgeschlagen (HOFFNUNG!) - aber dann:

img = TXT_M_USB1_1_camera.img()
AttributeError: 'Txt4Camera' object has no attribute 'img'
Ok, aber welche attribute hat Txt4Camera denn? Hierzu gibt es keine Unterstützung - oder ich finde sie nicht.

Also das ist aus meiner Sicht noch nichts - die grafische Programmierung ist ok, die Nutzung von Python (mal abgesehen davon, dass es noch 3.5 zu sein scheint) ist aber aus meiner Sicht unterentwickelt. Schade.

Bei der höheren Rechenleistung des TXT 4.0 wäre u.A. die Auswertung des Kamerabildes interessant - OpenCV steht ja zur Verfügung. Allerdings scheint es überhaupt keine Methode zu geben, das Bild zu nutzen, sondern nur die Messwerte.
Das wäre sehr schade und würde die Möglichkeiten des neuen TXT 4.0 deutlich hinter die zurückwerfen, die man aktuell mittels ftrobopy mit dem TXT hat.
Auch die Möglichkeit, den Code online auszuführen, also rechenintensive Aufgaben auf einem anderen Gerät mit ordentlicher GPU zu machen und nur Fahrbefehle oder einfachere Aufgaben auf dem TXT 4.0 selbst zu erledigen, fehlt m.E.

Vielleicht habt ihr ja andere Erfahrungen gemacht.
Wir werden jetzt also erst mal grafisch programmieren - oder mit dem TXT...

Viele Grüße
Techum

Benutzeravatar
MasterOfGizmo
Beiträge: 2720
Registriert: 30 Nov 2014, 07:44

Re: Robo Pro Coding und Python

Beitrag von MasterOfGizmo » 28 Dez 2021, 21:46

Das Thema hatten wir ja gerade in einem anderen Threads.

Python auf dem TXT-4.0 ist eher eine Mischung aus Textadventure und Intelligenztest. Du bekommst keine Hilfestellung, aber wenn Du zu es dann geschafft hast, ein eigenes Python-Programm zu erstellen, dann hast Du was fürs Leben gelernt.

Realistisch gesehen würde ich sagen, dass sich ft hier ziemlich übernommen hat, in-House keiner genug Ahnung von Python hat, um sinnvolle Vorgaben zu machen und die Dienstleister halt das geforderte Minimum geliefert haben.

Aber das heißt ja nicht, dass sich da nicht in irgendwelchen Updates noch was tut. Und im Zweifelsfall kämpfst Du Dich da selbst durch und schreibst einen ftPedia-Artikel über Deine Erkenntnisse
Arduino für fischertechnik: ftDuino http://ftduino.de, ftDuino32 http://ftduino.de/32

Techum
Beiträge: 84
Registriert: 25 Dez 2014, 20:50
Kontaktdaten:

Re: Robo Pro Coding und Python

Beitrag von Techum » 28 Dez 2021, 23:01

Danke für die ermutigenden Worte, Master of Gizmo!

Also, das .ft file ist einfach ein gepacktes file - wenn man das z.B. mit 7Zip entpackt, bekommt man
  • project.json (manifest in JSON Format)
  • xyz.blockly (xyz main blockly)
  • xyz.py (xyz main Python file)
  • LIB (directory)
    • controller.py (Controller config file)
    • controller.blockly (Controller blockly file)
    • display.py (Display python file - display thread - basierend auf ftgui)
    • display.qml (Display QML file)
    • display.xml (Display parameter - Position der Elemente etc.)
    • camera.py (Kamera config file)
    • camera.xml (Kamera parameter, FPS usw.)
    • library_abc.py (Unterprogramme Python)
Ist von der Struktur etwas aufwendiger als die CFW APP files, aber die gleiche Idee.

Die Files bekommt man recht einfach herunter und hochgeladen, indem man einfach im Browser die IP des TXT 4.0 eingibt und sich per ft / fischertechnik anmeldet.

Schönen Abend noch!

Techum
Beiträge: 84
Registriert: 25 Dez 2014, 20:50
Kontaktdaten:

Re: Robo Pro Coding und Python

Beitrag von Techum » 29 Dez 2021, 14:49

Wie hier einige vielleicht längst verstanden haben: Man kann sich z.B. über Filezilla mit dem TXT verbinden und dann hier:
/usr/lib/python3.5/site-packages/fischertechnik
nachlesen, welche Klassen und Methoden es gibt - bzw. sich das ganze lokal kopieren und in einer Entwicklungsumgebung ansehen.

Dann sieht man z.B., dass es unter Camera eine Methode read() gibt, die den Kamera-Frame liefert, wenn die Kamera gestartet worden ist.
Also kann man das Kamerabild z.B. so auslesen und lokal speichern: (als stream senden fände ich ja cooler, das klappt aber noch nicht)

TXT_M_USB1_1_camera.start()
success, frame, pic = TXT_M_USB1_1_camera.read()
cv2. imwrite('/opt/ft/workspaces/test.jpg', frame)

Da ist einiges Spannendes installiert:
- Tesseract for OCR
- Keras (machine learning)
- Tensorflow (machine learning / Objekterkennung)
- openapi
...

Also doch "programmieren wie die Profis", wie es auf der FT Website heißt? ;)

vleeuwen
Beiträge: 1565
Registriert: 31 Okt 2010, 22:23
Wohnort: Enschede (NL)
Kontaktdaten:

Re: Robo Pro Coding und Python

Beitrag von vleeuwen » 29 Dez 2021, 15:10

pip3 list
Package Version
----------------------------- ---------
adafruit-circuitpython-bno055 4.0.0
apds9960 0.2
asn1crypto 0.24.0
attrs 18.1.0
bme680 1.0.5
certifi 2018.8.13
cffi 1.11.5
chardet 3.0.4
click 6.7
clickclick 1.2.2
connexion 2.3.0
coverage 4.4.2
cryptography 2.3
Flask 1.0.2
Flask-Cors 3.0.6
Flask-SocketIO 4.2.1
Flask-Testing 0.6.1
ft-controllerlib 6.0.8
idna 2.7
imutils 0.5.3
inflection 0.3.1
itsdangerous 0.24
Jinja2 2.10
jsonschema 2.6.0
MarkupSafe 1.0
ndg-httpsclient 0.5.1
nose 1.3.7
numpy 1.14.5
openapi-spec-validator 0.2.8
paho-mqtt 1.3.1
pip 18.0
pluggy 0.6.0
ply 3.11
psutil 5.7.3
py 1.6.0
pyasn1 0.4.4
PyAudio 0.2.11
pycparser 2.18
pygobject 3.28.3
pynfc 0.1.1
pyOpenSSL 18.0.0
PySocks 1.6.8
pytest 3.4.2
python-dateutil 2.6.0
python-engineio 3.12.1
python-socketio 4.5.1
PyYAML 5.1.2
randomize 0.14
requests 2.19.1
rfc3987 1.3.7
rpdb 0.1.6
setuptools 41.4.0
setuptools-scm 3.3.3
simple-pid 1.0.0
simplejson 3.16.0
six 1.11.0
smbus 1.1
smbus2 0.3.0
speedtest-cli 2.1.2
strict-rfc3339 0.7
swagger-ui-bundle 0.0.5
txtapi 6.0.8
urllib3 1.23
waitress 1.4.4
websockets 7.0
Werkzeug 0.16.1

Please wait a moment while I gather a list of all available modules...

CDROM ast http rpdb
DLFCN asynchat idlelib runpy
IN asyncio idna sched
OpenSSL asyncore imaplib select
TYPES atexit imghdr selectors
__future__ attr imp setuptools
_ast audioop importlib setuptools_scm
_bisect base64 imutils shelve
_bootlocale bdb inflection shlex
_bz2 binascii inspect shutil
_cffi_backend binhex io signal
_codecs bisect ipaddress simple_pid
_codecs_cn bme680 itertools simplejson
_codecs_hk builtins itsdangerous site
_codecs_iso2022 bz2 jinja2 sitecustomize
_codecs_jp cProfile json six
_codecs_kr calendar jsonschema smbus
_codecs_tw certifi keyword smbus2
_collections cffi lib2to3 smtpd
_collections_abc cgi linecache smtplib
_compat_pickle cgitb locale sndhdr
_compression chardet logging socket
_crypt chunk lzma socketio
_csv click macpath socketserver
_ctypes clickclick macurl2path socks
_ctypes_test cmath mailbox sockshandler
_curses cmd mailcap speedtest
_curses_panel code markupsafe spwd
_datetime codecs marshal sqlite3
_dbm codeop math sre_compile
_dbus_bindings collections mimetypes sre_constants
_dbus_glib_bindings colorsys mmap sre_parse
_decimal compileall modulefinder ssl
_dummy_thread concurrent multiprocessing stat
_elementtree configparser ndg statistics
_ft connexion netrc strict_rfc3339
_ftlock contextlib nntplib string
_functools copy nose stringprep
_hashlib copyreg ntpath struct
_heapq coverage nturl2path subprocess
_imp crypt numbers sunau
_io cryptography numpy swagger_ui_bundle
_json csv opcode symbol
_locale ctypes openapi_spec_validator symtable
_lsprof curses operator sys
_lzma cv2 optparse sysconfig
_markupbase datetime os syslog
_md5 dateutil ossaudiodev tabnanny
_multibytecodec dbm paho tarfile
_multiprocessing dbus parser telnetlib
_opcode decimal pathlib tempfile
_operator difflib pdb termios
_osx_support dis pickle textwrap
_pickle distutils pickletools this
_portaudio doctest pip threading
_posixsubprocess dummy_threading pipes time
_pydecimal easy_install pkg_resources timeit
_pyio email pkgutil tkinter
_pytest encodings platform token
_random engineio plistlib tokenize
_sha1 ensurepip pluggy trace
_sha256 enum ply traceback
_sha512 errno poplib tracemalloc
_signal faulthandler posix tty
_sitebuiltins fcntl posixpath turtle
_socket filecmp pprint turtledemo
_sqlite3 fileinput profile txtapi
_sre fischertechnik pstats types
_ssl flask psutil typing
_stat flask_cors pty unicodedata
_string flask_socketio pwd unittest
_strptime flask_testing py urllib
_struct fnmatch py_compile urllib3
_symtable formatter pyasn1 uu
_sysconfigdata fractions pyaudio uuid
_testbuffer ft pyclbr venv
_testcapi ftgui pycparser waitress
_testimportmultiple ftlock pydoc warnings
_testmultiphase ftplib pydoc_data wave
_thread functools pyexpat weakref
_threading_local gc pygtkcompat webbrowser
_tracemalloc genericpath pynfc websockets
_warnings getopt pytest werkzeug
_weakref getpass queue wsgiref
_weakrefset gettext quopri xdrlib
_yaml gi random xml
abc glob randomize xmlrpc
adafruit_bno055 gpiod re xxlimited
aifc grp readline xxsubtype
antigravity gzip reprlib yaml
apds9960 hashlib requests zipapp
argparse heapq resource zipfile
array hmac rfc3987 zipimport
asn1crypto html rlcompleter zlib
software enigineer/teacher/advisor
Google translate
http://tescaweb.nl/Carel/?p=713

Benutzeravatar
KarlKarlson
Beiträge: 10
Registriert: 29 Nov 2021, 17:22

Re: Robo Pro Coding und Python

Beitrag von KarlKarlson » 29 Dez 2021, 16:02

Techum hat geschrieben:
29 Dez 2021, 14:49

Dann sieht man z.B., dass es unter Camera eine Methode read() gibt, die den Kamera-Frame liefert, wenn die Kamera gestartet worden ist.
Also kann man das Kamerabild z.B. so auslesen und lokal speichern: (als stream senden fände ich ja cooler, das klappt aber noch nicht)

TXT_M_USB1_1_camera.start()
success, frame, pic = TXT_M_USB1_1_camera.read()
cv2. imwrite('/opt/ft/workspaces/test.jpg', frame)
Es scheint auch eine Klasse VideoStream.py zu geben. Vielleicht ist Dir ja damit geholfen.
Techum hat geschrieben:
29 Dez 2021, 14:49

...
- openapi
...
Die OpenAPI Spezifikation lässt sich übrigens so anschauen:

http://192.168.7.2/api/v1/ui/ [IP entsprechend anpassen]

Techum
Beiträge: 84
Registriert: 25 Dez 2014, 20:50
Kontaktdaten:

Re: Robo Pro Coding und Python

Beitrag von Techum » 29 Dez 2021, 19:29

Danke KarlKarlson,
KarlKarlson hat geschrieben:
29 Dez 2021, 16:02
Es scheint auch eine Klasse VideoStream.py zu geben. Vielleicht ist Dir ja damit geholfen
...
Die OpenAPI Spezifikation lässt sich übrigens so anschauen:

http://192.168.7.2/api/v1/ui/ [IP entsprechend anpassen]
VideoStream.py hätte ich gesehen, scheint mir aber lediglich das Kamerabild als Stream abzuholen und intern bereitzustellen.
Ich sende jetzt die Einzelbilder über socketio und bin mit diesem Test erst mal zufrieden - das läuft beeindruckend flüssig, geht aber sicher eleganter.

Zum API Hinweis. Habe eine einfache API im Browser und über Postman aufgerufen. Kapiert ihr das Konzept zur Authentifizierung? API key ist klar, aber je nach API wird noch ein Query Key oder ein Token verlangt.

Grüße, Techum

Rei Vilo
Beiträge: 95
Registriert: 19 Dez 2015, 15:39

Re: Robo Pro Coding und Python

Beitrag von Rei Vilo » 29 Dez 2021, 22:23

Also of interest:
with 192.168.7.2 being adapted to the specific address.

kräml
Beiträge: 275
Registriert: 14 Aug 2020, 06:47

Re: Robo Pro Coding und Python

Beitrag von kräml » 30 Dez 2021, 06:59

Node-RED and MQTT! Very cool.

Is there any special FT Node in Node RED?

THX Kraeml

Rei Vilo
Beiträge: 95
Registriert: 19 Dez 2015, 15:39

Re: Robo Pro Coding und Python

Beitrag von Rei Vilo » 30 Dez 2021, 10:55

No, but you can add nodes from the large library.
TXT 4.0 with Node-RED
TXT 4.0 with Node-RED
TXT-NodeRED.gif (337.57 KiB) 28176 mal betrachtet

Benutzeravatar
KarlKarlson
Beiträge: 10
Registriert: 29 Nov 2021, 17:22

Re: Robo Pro Coding und Python

Beitrag von KarlKarlson » 30 Dez 2021, 15:07

Techum hat geschrieben:
29 Dez 2021, 19:29


Zum API Hinweis. Habe eine einfache API im Browser und über Postman aufgerufen. Kapiert ihr das Konzept zur Authentifizierung? API key ist klar, aber je nach API wird noch ein Query Key oder ein Token verlangt.
Soweit ich das sehe, ist das beides mal der API-Key. Je nach Aufruf wird der im Header oder als Query-Parameter mitgegeben. Sonst sehe ich keine weiteren Authentifizierungsmechanismen.
Unbenannt.PNG
Unbenannt.PNG (48.88 KiB) 28118 mal betrachtet

Techum
Beiträge: 84
Registriert: 25 Dez 2014, 20:50
Kontaktdaten:

Re: Robo Pro Coding und Python

Beitrag von Techum » 30 Dez 2021, 21:36

Danke KarlKarlson,
das war zu einfach...!
KarlKarlson hat geschrieben:
30 Dez 2021, 15:07
Soweit ich das sehe, ist das beides mal der API-Key. Je nach Aufruf wird der im Header oder als Query-Parameter mitgegeben. Sonst sehe ich keine weiteren Authentifizierungsmechanismen.

Wenn man in der Robo Pro Coding APP das Kamerabild aktiviert hat ("an" neben dem Zahnrad unter Kamerakonfiguration) bekommt man im eigenen Netzwerk auf jedem Gerät in einem Browser mit dieser URL das Kamerabild:
http://[TXT4.0]/api/v1/controller/camera/image-stream?X-API-KEY=[TXT4.0 API KEY]
Allerdings geht das nicht, wenn sich das Programm in Ausführung befindet. Dann wird kein Bild übertragen.

Das ist nicht bei allen APIs so:
http://[TXT4.0]/api/v1/controller/discovery
z.B. gibt auch ein Ergebnis mit Inhalt, wenn das Programm läuft.

Viele Grüße
Techum

kräml
Beiträge: 275
Registriert: 14 Aug 2020, 06:47

Re: Robo Pro Coding und Python

Beitrag von kräml » 30 Dez 2021, 22:22

Rei Vilo hat geschrieben:
30 Dez 2021, 10:55
No, but you can add nodes from the large library.

TXT-NodeRED.gif
THX for the pictures. I know Node-RED. I like it since several years.

Kraeml

Antworten