Robo Pro Coding 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
Jochen K.
Beiträge: 2
Registriert: 23 Nov 2023, 18:08

Robo Pro Coding Python

Beitrag von Jochen K. » 24 Nov 2023, 13:26

Hi, kann mir jemand sagen, wo ich eine Einführung in die Fischertechnik spezifischen Befehle für Robo Pro Coding mit Python finden kann?

matrix
Beiträge: 5
Registriert: 21 Nov 2023, 16:39

Re: Robo Pro Coding Python

Beitrag von matrix » 24 Nov 2023, 13:34

Hey Jochen,

leider hat fischertechnik bisher die Dokumentation nur für die grafische Programmierung erstellt. Mich persönlich ärgert das auch etwas, da ich so nicht wirklich programmieren kann und bereits Probleme beim Finden von Funktionen habe.
Du kannst dir aber mit der grafischen Programmierung in der rechten Seitenleiste den Python-Code für die entsprechenden Blöcke anzeigen lassen. So finde ich mich mittlerweile auch etwas zurecht.

Viele Grüße,
Matrix/Felix

Bastelklausi
Beiträge: 134
Registriert: 03 Jun 2020, 19:32

Re: Robo Pro Coding Python

Beitrag von Bastelklausi » 26 Nov 2023, 18:18

Moin zusammen,

vor diesem Problem stehe ich auch. Da hat FT ein tolles Robotics Programm mit u.a. den Kästen Hightech und Education Base SET mit Addons. Alle Erklärungen/Lehrpläne etc. beziehen sich auf Blockly. Mit Blockly erziele ich schnelle Erfolge, doch mit zunehmender Komplexität der Programme geht die Übersicht verloren. Die RPC (Robo Pro Coding) Hilfe bezieht sich bislang ausschließlich auf Blockly. Bezüglich Python wird nur erwähnt, dass RPC es unterstützt.
Auch erfahrene Python Programmierer (ich zähle eher zu den Anfängern) stehen vor dem Problem, wie die API Schnittstellen aussehen, um Ein- und Ausgaben nutzen zu können. Hier gibt es bislang nichts!!!
Das ist schwach von FT und unbefriedigend!!!

Parallel zu FT Robotics beschäftige ich mich mit dem Lego Spike Prime System. Das bietet Scratch als Block orientierte Sprache und Python als Text orientierte Sprache. Bezüglich Python bietet Lego eine online Hilfe um das Lego Python kennen zu lernen (Erste Schritte) und eine mehr oder weniger ausführliche Beschreibung aller unterstützten API Funktionen. Die Beschreibung ist teils sehr ausführlich mit Programmbeispielen und teils eine einfache Auflistung.
Der Lego Python Editor ist dem von RPC überlegen, da er eine Ausfüllhilfe anbietet, die Schritt für Schritt durch alle Funktionsaufrufe und deren Parameter führt. RPC hat auch eine Ausfüllhilfe, die aber nur sehr einfach gehalten ist und sich nur an dem aktuellen Programm orientiert.

Trotz intensiver Recherche im WWW habe ich zum Thema FT Python keine Hilfe finden zu können. So bleibt mir nur der mühsame Weg über die Beispielprogramme. Der führt jedoch durchaus zum Erfolg. Ich lade also z.B. ein Beispielprogramm in Python und kann es dann modifizieren. Zusätzlich speichere ich den Python Code in einer Textdatei, die ich mit Kommentaren füttere. Hierbei unterscheide ich die Controller Konfiguration (controller.py) und die eigentliche Programmdatei. Auf diese Weise komme ich dahinter, wie Sensoren und Aktoren eingebunden und benutzt werden. Ich stehe aber noch ganz am Anfang.

Meine aktuellen Versionen: RPC 6.2.0, TXT 4.0 Firmware 3.1.5

Meine bisherige Textdatei (beinhaltet NTC, Ultraschall, LED, Display):
# ==================================================
# NTC Widerstand
# ==================================================

# ----------------------------
# Controller.py
# ----------------------------
import fischertechnik.factories as txt_factory

txt_factory.init()
txt_factory.init_input_factory()

TXT_M = txt_factory.controller_factory.create_graphical_controller()
TXT_M_I1_ntc_resistor = txt_factory.input_factory.create_ntc_resistor(TXT_M, 1)

txt_factory.initialized()

# ----------------------------
# Program.py
# ----------------------------

import math
import time
from lib.controller import *
from lib.display import *

value = None

while True:
value = round(TXT_M_I1_ntc_resistor.get_temperature(), 1)
display.set_attr("temperature.text", str(''.join([str(x) for x in ['T = ', value, ' °C']])))
display.set_attr("temp_scale.value", str(value))
time.sleep(0.5)


# ==================================================
# Ultraschallsensor
# ==================================================

# ----------------------------
# Controller.py
# ----------------------------
import fischertechnik.factories as txt_factory

txt_factory.init()
txt_factory.init_input_factory()

TXT_M = txt_factory.controller_factory.create_graphical_controller()
TXT_M_I2_ultrasonic_distance_meter = txt_factory.input_factory.create_ultrasonic_distance_meter(TXT_M, 2)

txt_factory.initialized()

# ----------------------------
# Program.py
# ----------------------------

import time
from lib.controller import *
from lib.display import *

while True:
display.set_attr("distance.text", str(''.join([str(x) for x in ['D = ', TXT_M_I2_ultrasonic_distance_meter.get_distance(), ' cm']])))
time.sleep(0.25)


# ==================================================
# LED und Taster
# ==================================================
# ----------------------------
# Controller.py
# ----------------------------

import fischertechnik.factories as txt_factory

txt_factory.init()
txt_factory.init_input_factory()
txt_factory.init_output_factory()

TXT_M = txt_factory.controller_factory.create_graphical_controller()
TXT_M_I1_mini_switch = txt_factory.input_factory.create_mini_switch(TXT_M, 1)
TXT_M_O4_led = txt_factory.output_factory.create_led(TXT_M, 4)

txt_factory.initialized()

# ----------------------------
# Program.py
# ----------------------------

import time
from lib.controller import *

while True:
if TXT_M_I1_mini_switch.is_closed():
for count in range(5):
TXT_M_O4_led.set_brightness(512)
time.sleep(0.5)
TXT_M_O4_led.set_brightness(0)
time.sleep(0.5)


Schöne Grüße
Klaus

Bastelklausi
Beiträge: 134
Registriert: 03 Jun 2020, 19:32

Re: Robo Pro Coding Python

Beitrag von Bastelklausi » 26 Nov 2023, 18:49

Nachtrag: im Code wurden die Einrückungen nicht angezeigt. Hier die korrekte Darstellung:

Code: Alles auswählen

# ==================================================
# NTC Widerstand
# ==================================================

# ----------------------------
# Controller.py
# ----------------------------
import fischertechnik.factories as txt_factory

txt_factory.init()
txt_factory.init_input_factory()

TXT_M = txt_factory.controller_factory.create_graphical_controller()
TXT_M_I1_ntc_resistor = txt_factory.input_factory.create_ntc_resistor(TXT_M, 1)

txt_factory.initialized()

# ----------------------------
# Program.py
# ----------------------------

import math
import time
from lib.controller import *
from lib.display import *

value = None

while True:
    value = round(TXT_M_I1_ntc_resistor.get_temperature(), 1)
    display.set_attr("temperature.text", str(''.join([str(x) for x in ['T = ', value, ' °C']])))
    display.set_attr("temp_scale.value", str(value))
    time.sleep(0.5)


# ==================================================
# Ultraschallsensor
# ==================================================

# ----------------------------
# Controller.py
# ----------------------------
import fischertechnik.factories as txt_factory

txt_factory.init()
txt_factory.init_input_factory()

TXT_M = txt_factory.controller_factory.create_graphical_controller()
TXT_M_I2_ultrasonic_distance_meter = txt_factory.input_factory.create_ultrasonic_distance_meter(TXT_M, 2)

txt_factory.initialized()

# ----------------------------
# Program.py
# ----------------------------

import time
from lib.controller import *
from lib.display import *

while True:
    display.set_attr("distance.text", str(''.join([str(x) for x in ['D = ', TXT_M_I2_ultrasonic_distance_meter.get_distance(), ' cm']])))
    time.sleep(0.25)


# ==================================================
# LED und Taster
# ==================================================
# ----------------------------
# Controller.py
# ----------------------------

import fischertechnik.factories as txt_factory

txt_factory.init()
txt_factory.init_input_factory()
txt_factory.init_output_factory()

TXT_M = txt_factory.controller_factory.create_graphical_controller()
TXT_M_I1_mini_switch = txt_factory.input_factory.create_mini_switch(TXT_M, 1)
TXT_M_O4_led = txt_factory.output_factory.create_led(TXT_M, 4)

txt_factory.initialized()

# ----------------------------
# Program.py
# ----------------------------

import time
from lib.controller import *

while True:
    if TXT_M_I1_mini_switch.is_closed():
        for count in range(5):
            TXT_M_O4_led.set_brightness(512)
            time.sleep(0.5)
            TXT_M_O4_led.set_brightness(0)
            time.sleep(0.5)



Bastelklausi
Beiträge: 134
Registriert: 03 Jun 2020, 19:32

Re: Robo Pro Coding Python

Beitrag von Bastelklausi » 02 Dez 2023, 22:40

Moin,

ich habe mich näher mit dem Python im Robo Pro Coding (RPC) befasst. Es gibt schon Möglichkeiten, heraus zu finden, wie man die FT Sensoren und Aktoren ansprechen kann.
Eine gute Möglichkeit: im Blockly "programmieren", welche Sensoren man auslesen will und welche Aktoren man ansprechen möchte. Dann das Blockly Programm in Python umwandeln. Das macht man unter Projektkonfiguration. Der Umwandlungsvorgang geht nur vom Blockly in Python. Das ist aber auch logisch, da RPC nur ein Subset von Python verwendet. Ich habe diese Möglichkeit unter RPC 6.2.0 entdeckt. Keine Ahnung, ob das vorher schon ging. Hatte ich nicht drauf geachtet.
Eine weitere Möglichkeit: Die Beispielprogramme laden und analysieren. Mit dem FT Lernmaterial abgleichen, damit man weiß, was das Programm machen soll.

Ich hab dann mal angefangen, eine Doku zusammenzustellen. Das ist erstmal nur ein kleiner Anfang für ein paar Standard Sensoren und Aktoren. Damit kann man LEDs bedienen, Encodermotoren steuern, Mini Switches auslesen, Phototransistoren, NTC-Sensor und Distanzsensor. Und ein paar Basics für das Display des TXT4.0. Im Laufe der Zeit wird die Doku (hoffentlich) weiter wachsen.

Eigentlich wollte ich den TXT4.0 schon in die hinterste Schublade verbannen. Das Blockly mag ich nicht, und die fehlende Doku hat mich verärgert. Da ich aber nicht gerne aufgebe, habe ich mich dann doch mal an das Thema begeben und habe ein paar Fortschritte gemacht. So kann ich z.B. die Parkhausschranke aus dem Basic Set wunderbar mit Python steuern. Das ist viel übersichtlicher als mit Blockly.

Okay, nun zur Doku:

Code: Alles auswählen

# ==================================================
# Documentation TXT 4.0 Python Functions
# 2023-12-02 by Klaus Janssen
# Just a begin with some essential definitions
# and functions
# ==================================================

# ==================================================
# Controller Definitions
# ==================================================

import fischertechnik.factories as txt_factory

txt_factory.init()
txt_factory.init_input_factory()  # sensors at I1 to I8
txt_factory.init_output_factory() # outputs at O1 to O8
txt_factory.init_motor_factory()  # motor control at M1 to M4

TXT_M = txt_factory.controller_factory.create_graphical_controller()

# Inputs
#
# Mini Switch at i.e. I1
TXT_M_I1_mini_switch = txt_factory.input_factory.create_mini_switch(TXT_M, 1)
# NTC resistor at i.e. I2
TXT_M_I2_ntc_resistor = txt_factory.input_factory.create_ntc_resistor(TXT_M, 2)
# Ultra Sonic sensor at i.e. I3
TXT_M_I3_ultrasonic_distance_meter = txt_factory.input_factory.create_ultrasonic_distance_meter(TXT_M, 3)
# Photo Transistor at i.e. I4
TXT_M_I4_photo_transistor = txt_factory.input_factory.create_photo_transistor(TXT_M, 4)

# Outputs
#
# LED at i.e. O3
TXT_M_O3_led = txt_factory.output_factory.create_led(TXT_M, 3)
# Encoder Motor at i.e. M1
TXT_M_M1_encodermotor = txt_factory.motor_factory.create_encodermotor(TXT_M, 1)


txt_factory.initialized()



# ==================================================
# Basic Functions in Program
# ==================================================

# some essential imports
import math			# math functions
import time			# time functions
from lib.controller import *
from lib.display import *	# display functions
from fischertechnik.controller.Motor import Motor # motor functions

# time delay
time.sleep(5)		# sleep 5 s
time.sleep(0.05)	# sleep 50 ms

# Get Status of Mini Switch at I1
if TXT_M_I1_mini_switch.is_closed():	# Switch closed
if TXT_M_I1_mini_switch.is_open():	# Switch open

# Get Temperature of NTC at I2
value = TXT_M_I2_ntc_resistor.get_temperature()
# Get Resistor value of NTC at I2
value = TXT_M_I1_ntc_resistor.get_resistor()

# Get Ultrasonic Distance from Sensor at I3
distance = TXT_M_I3_ultrasonic_distance_meter.get_distance()

# Get Status of Photo Transistor at I4
# i.e. as part of a light barrier:
if (TXT_M_I4_photo_transistor.is_bright()):	# Barrier intact
if (TXT_M_I3_photo_transistor.is_dark()):	# Barrier interrupted


# Led Functions for LED at O3
# Values 0 .. 512
TXT_M_O3_led.set_brightness(0)		# LED OFF
TXT_M_O3_led.set_brightness(64)		# LED ON dimmed
TXT_M_O3_led.set_brightness(512)	# LED ON max bright

# Encoder Motor functions at M1
#
# Set Speed and Turn Clock Wise (CW)
# Speed in range 0 to 512
TXT_M_M1_encodermotor.set_speed(int(speed), Motor.CW)
# Set Speed and Turn Counter Clock Wise (CCW)
TXT_M_M1_encodermotor.set_speed(int(speed), Motor.CCW)
#
# Start Motor
TXT_M_M1_encodermotor.start_sync()
# Stop Motor
TXT_M_M1_encodermotor.stop_sync()
#
# Run Motor for Number of Steps
# 63.9 steps for one full resolution
TXT_M_M1_encodermotor.set_distance(int(64))

# Some Display Functions
#
# Write Text "Hello" in Field "status" (defined in display.xml)
display.set_attr("status.text", str('Hello'))
#
# Set Indicator "red" to active (defined in display.xml)
display.set_attr("rot.active", str(True).lower())
# Set Indicator "red" to not active 
display.set_attr("rot.active", str(False).lower())
#
# React on Button Click
# Toggle Variable "los" 
def on_button_clicked(event):
    global los
    if los == 0:
        los = 1
    else:
        los = 0

display.button_clicked("button", on_button_clicked)

Für die Funktionsfähigkeit kann ich nicht garantieren. Aber ich hoffe, es ist für manche von euch eine Einstiegshilfe. Solltet ihr einen Fehler feststellen, bitte Nachricht an mich. Danke, und nun viel Spaß beim Programmieren mit Python unter RPC.

Beste Grüße
Klaus

phg-berlin
Beiträge: 15
Registriert: 12 Mär 2024, 20:22

Re: Robo Pro Coding Python

Beitrag von phg-berlin » 28 Apr 2024, 14:08

Hallo Klaus,

mir geht es fast wie Dir, allerdings bin ich sowohl in ROBO PRO Coding als auch in Python ein sehr blutiger Anfänger. Und habe auch keinen UNIX/LINUX-Hintergrund.

Umfangreiche Programmiererfahrung habe ich in Delphi, VBA und PHP.

Tief einsteigen möchte ich nicht in Python sondern aus BLOCKLY heraus einzelne Möglichkeiten über die Python-Schnittstelle nutzen, die sicher vorhanden sind aber nicht bis zu BLOCKLY durchgereicht werden.

Beispiel: Im Display ist es sicher möglich, die Schriftfarbe eines labels zu bestimmen. Aber wo finde ich heraus, wie die genaue Syntax hierzu ist? Für die Buttons geht es ja in BLOCKLY.

Ich suche nach einer Lösung für 12-jährige bzw. für Dummies wie mich. Meine Befürchtung ist allerdings, dass es dies nicht gibt. Und das "AGE 10+" auf den Kartons eine reine Werbelüge ist...

Horst (Frustriert)

mario
Beiträge: 7
Registriert: 17 Aug 2016, 19:24

Re: Robo Pro Coding Python

Beitrag von mario » 07 Mai 2024, 19:51

hallo TXT 4.0 Controller Users

Wie can ich auf RoboPro Coding (python).ft programs (downloaded) on
the TXT4.0 Controller (wieder) importieren ???

mfr Grusse

Rien van Harmelen (NL)

Benutzeravatar
fishfriend
Beiträge: 1839
Registriert: 26 Nov 2010, 11:45

Re: Robo Pro Coding Python

Beitrag von fishfriend » 07 Mai 2024, 20:58

Hallo...
Im Browser die IP Adresse vom TXT 4.0 eingeben. (Am TXT 4.0 : Info/WLAN/IP)
Password/User:
ft
fischertechnik
Warten :-)
In das Verzeichnis gehen, was man haben möchte.
Ganz Rechts in der Zeile auf die Wolke mit dem Pfeil drücken und downloaden.
Achtung! Es ist nur das Python-Program (.py) nicht das Robo Pro Coding Programm (.ft)!

Die .ft werden -nur- auf dem PC gespeichert.
Es ist die Frage, wo auf dem PC die Dateien gespeichert sind.
Meist unter Downloads oder unter User (Username).
Achtung.
Es kann sein, das die Programme ohne .ft gespeichert sind.
Wenn du den Namen auf dem TXT 4.0 gefunden hast, such ihn auf dem PC.
Man kann die Textdatei auch ohne .ft Endung in Robo Pro Coding öffnen.
Mit freundlichen Grüßen
Holger
ft Riesenräder PDF: ftcommunity.de/knowhow/bauanleitungen
TX-Light: Arduino und ftduino mit RoboPro

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

Re: Robo Pro Coding Python

Beitrag von vleeuwen » 07 Mai 2024, 23:15

@mario, Rien van Harmelen
It is also possible to use the quite powerful MS-VS code.
This gives the opportunity to develop a Python or C++ program remotely on the TXT40 with fairly good support for Python, including a remote debugger. It is then necessary to expand the memory/file system of the TXT40 with an SD card. The installation files of MS-VS code will then be located there; Together they are just too big for the in memory. In the beginning it works with in memory, but as the program becomes larger it causes problems.
Coding directly in Python via RoboPro is a disaster, there is no program development support.
Integrating your own modules into Blockly is not possible.
Blockly is a text generator that uses only a limited subset of Python.
====================================================
Es ist auch möglich, den recht leistungsfähigen MS-VS-Code zu verwenden.
Dies bietet die Möglichkeit, ein Python- oder C++-Programm remote auf dem TXT40 mit ziemlich guter Python-Unterstützung, einschließlich eines Remote-Debuggers, zu entwickeln.
Anschließend ist es notwendig, den Speicher/Dateisystem des TXT40 mit einer SD-Karte zu erweitern. Dort befinden sich dann die Installationsdateien des MS-VS-Codes; Zusammen sind sie einfach zu groß für die Erinnerung. Am Anfang funktioniert es noch im Speicher, aber wenn das Programm größer wird, kommt es zu Problemen.
====================================================
Het is ook mogelijk om van de vrij krachtige MS-VS code gebruik te maken.
Dit geeft de mogelijkheid om remote op de TXT40 een Python of C++ programma te ontwikkelen met daarbij een vrij goede ondersteuning voor Python, inclusief remote debugger.
Het is dan wel nodig om het geheugen/file systeem van de TXT40 uit te breiden met een SD kaartje. Daar komen dan de installatiebestanden van MS-VS code te staan; ze zijn bij elkaar net te groot voor het in memory geheugen. In het begin werkt het met in memory maar als het programma groter wordt dan geeft het problemen.
Direct in Python via RoboPro coding is een ramp, er is geen ondersteuning van de programmaontwikkeling.
Eigen modulen integreren in de Blockly is niet mogelijk.
Blockly is een tekstgenerator die maar een beperkte subset van Python gebruikt.
software enigineer/teacher/advisor
Google translate
http://tescaweb.nl/Carel/?p=713

mario
Beiträge: 7
Registriert: 17 Aug 2016, 19:24

Re: Robo Pro Coding Python

Beitrag von mario » 08 Mai 2024, 13:33

Thank you both for the prompt answer

Still I have a question for mr Holger:

How to delete a file: doing this ...... I get as answer: an unknown server error occurred !!!

kind regards Rien van Harmelen

Benutzeravatar
fishfriend
Beiträge: 1839
Registriert: 26 Nov 2010, 11:45

Re: Robo Pro Coding Python

Beitrag von fishfriend » 08 Mai 2024, 17:11

Hallo...
Mal wieder was Neues... :?

I havend do this or test it, until now.
It do not work.

The only way is on the display from the TXT 4.0 -> Datei /press (Programm-Name that you want to delete) tow times / Projekt löschen (Projekt delete)
Than. are you shure / realy? / realy shure? / realy realy shure... :-)
OK, only "aply" and then the hole Bits and Bytes are gone in the Data Heaven :-)
kind regards from the Münsterland
Holger

PS Ich vermute es gibt da noch eine andere Möglichkeit. Z.B. über Putty. Hab ich jedoch nicht getestet.
I think there is a other solution over Putty, but i havent tested it.
ft Riesenräder PDF: ftcommunity.de/knowhow/bauanleitungen
TX-Light: Arduino und ftduino mit RoboPro

phg-berlin
Beiträge: 15
Registriert: 12 Mär 2024, 20:22

Re: Robo Pro Coding Python

Beitrag von phg-berlin » 08 Mai 2024, 18:38

Hallo,

ich habe es ausprobiert: Nach erfolgreicher Anmeldung am TXT 4.0 (über WinSCP) sehe ich alle Verzeichnisse. Auch das, das ich löschen will und in dem die entsprechende .py - Datei liegt. Wenn ich mir die Dateieigenschaften ansehe, sehe ich, dass der Eigentümer ftui ist. Nur er hat die Schreibberechtigung. Folgerichtig kann dort nur von ihm etwas gelöscht werden: Fehler 3 Permission denied. Das ist auch so, wenn ich als Windows-Administrator angemeldet bin.

Da auf dem TXT 4.0 ja wohl LINUX läuft, könnte ich mir vorstellen, dass ein LINUX-Kenner weiß, was hier zu machen ist.

Horst

Antworten