Erste Schritte mit BT Control Set server mit TXT und CFW

Hallo Kids, hier ist eine Ecke extra für euch!
Ihr könnt hier Fragen aller Art stellen, die wir euch gerne so schnell wie möglich beantworten.
Ihr dürft hier aber auch gerne eure Modelle einfach mal anderen Fischertechnikern vorstellen.
Antworten
Mahlzeit
Beiträge: 6
Registriert: 06 Sep 2020, 10:40

Erste Schritte mit BT Control Set server mit TXT und CFW

Beitrag von Mahlzeit » 09 Sep 2020, 19:11

Hallo zusammen!

Ich habe meinen TXT seit heute mit der CFW ausgerüstet. Ich habe jetzt mal den BT Control Set server gestartet und dann mit dem Iphone verbunden. Wie kann ich denn nun damit meine Motoren steuern? Mit Robo Pro wird das wohl nicht gehen oder? Bleibt dann nur ein Python Programm zu schreiben? (Noch nie gemacht)

Viele Grüße
Dennis

Mahlzeit
Beiträge: 6
Registriert: 06 Sep 2020, 10:40

BT Control Server + BT Remote + Python

Beitrag von Mahlzeit » 14 Sep 2020, 14:54

Da hier ja bisher keine Antwort gekommen ist, vermute ich mal, dass es nicht möglich ist, über robopro. Ich habe mir daher jetzt Python besorgt und ein Youtube Video dazu angesehen.

Zum Üben wollte ich dann erstmal die Beispielprogramme durcharbeiten, leider ist die Dokumentation auf der CFW Website nicht mehr ganz aktuell und verweist auf QT4, während die Touchstyle.py die ich mir irgendwo aus dem CFW Github gezogen haben mittlerweile scheinbar QT5 benötigt, sodass ich bei der Umsetzung der Beispielprogramme auf der Website daran eine Weile festhing (und weil pip3 unter meinem Win10 nicht laufen wollte). Egal, das läuft jetzt alles und ich komme über PyCharm auf den TXT Controller und ich kann online Programme ausführen lassen.

Der BT Control Set server auf Github enthält ja leider keine genaue Dokumentation was zu tun ist damit es z.B so läuft wie bei MOG im Youtube Video. bei ftrobopy im Github gibt es aber eine demo Datei https://github.com/ftrobopy/ftrobopy/bl ... control.py und in der manual.pdf von Robopy steht, dass es nur offline geht.

Also habe ich die o.g. Demo Datei auf meinem CFW installiert, die läuft jetzt und zeigt endlos

Code: Alles auswählen

0.0.0.0 False 
0.0.0.0 False 
0.0.0.0 False 
0.0.0.0 False 
0.0.0.0 False 
Leider weiß ich nicht genau was das bedeutet. Kann mir jemand einen Tipp geben?


Ein paar Tipps habe ich in https://github.com/ftrobopy/ftrobopy/bl ... trobopy.py ab Zeile 3xxx gefunden und damit folgendes versucht:

Code: Alles auswählen

import ftrobopy

txt = ftrobopy.ftrobopy('192.168.178.51', 65000)
# Start reading the infrared data from the controller

joy1 = txt.joystick(0, 0, 1)  # 1=BT Joystick
if joy1.isConnected():
    print('Ein Bluetooth Joystick ist verbunden.')
geschaut, da sagt er mir auf dem Display: "Connected to TXT direct firmware version not detected. Ein Bluetooth Joystick ist verbunden".

Da dachte ich dann das sieht ja gut aus. Doch mit:

Code: Alles auswählen

from __future__ import print_function
import ftrobopy

txt = ftrobopy.ftrobopy('auto')


joystick1 = txt.joystick(0, 0, 1)  # linker Joystick 
print("Links-Rechts-Stellung=", joystick1.leftright(), " Hoch-Runter-Stellung=", joystick1.updown())

joystick2 = txt.joystick(0, 0, 2)  # rechter Joystick 
print("Links-Rechts-Stellung=", joystick2.leftright(), " Hoch-Runter-Stellung=", joystick2.updown())

ergibt leider alles immer 0.0 als Stellung aller 4 Achsen. Hat jemand einen Tipp für mich was ich falsch mache?

VG, Dennis

Mahlzeit
Beiträge: 6
Registriert: 06 Sep 2020, 10:40

Re: Erste Schritte mit BT Control Set server mit TXT und CFW

Beitrag von Mahlzeit » 14 Sep 2020, 17:06

Das Problem war wohl, dass ich nicht verstanden habe und immer noch nicht richtig verstehe was die Nummern hinter den Joysticks bedeuten. Mit
joystick1 = txt.joystick(0,1,1)
joystick2 = txt.joystick(1,1,1)

funktioniert es.

Das Programm darf auch nicht zu schnell starten, als ich mit

N = 2
for _ in itertools.repeat(None, N)

einen zweiten Durchlauf angestoßen habe, passte es dann beim zweiten Durchlauf, während im ersten noch alles 0.0 hatte.

Jetzt muss noch rausfinden wie ich das jetzt nutze um die Motoren anzusteuern.

.. okay das war leichter als gedacht mit

Code: Alles auswählen

    Motor1 = txt.motor(1)
    Motor1.setSpeed(joystick1.leftright() * 512)
Mal gucken wie es weitergeht...
Dateianhänge
screenshot.png
screenshot.png (10.39 KiB) 319 mal betrachtet

Benutzeravatar
PHabermehl
Beiträge: 1856
Registriert: 20 Dez 2014, 22:59
Wohnort: Bad Hersfeld

Re: Erste Schritte mit BT Control Set server mit TXT und CFW

Beitrag von PHabermehl » 14 Sep 2020, 21:54

Hallo Dennis,

großen Respekt für Deinen Fortschritt. Leider habe ich keine Erfahrung mit BT. Deshalb bin ich schon recht beeindruckt, was Du so schnell auf die Beine gestellt hast.
Schön, dass Du das Wissen hier teilst, ich denke, da können Viele von lernen.

Gruß
Peter
Viele Grüße
Peter

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

Re: Erste Schritte mit BT Control Set server mit TXT und CFW

Beitrag von MasterOfGizmo » 15 Sep 2020, 15:22

Der Server für die BR-Remote, den ich damals geschrieben habe, bildet nur einen regulären Joystick unter Linux nach. Von daher gibt es da an der Stelle keine weitere Dokumentation zu.

Deine Frage ist daher eher, wie du generell unter der CFW einen Joystick ansprichst. Dazu gibt es in meinem Repository z.B. eine (alte und lange nicht mehr getestete) Joystick-Demo-App.

Du scheinst ja aber auch so recht weit gekommen zu sein. Daher die Bitte: Schreib irgendwo auf, was Du wie gemacht hast. Der nächste, der vor dem gleichen Problem steht wird's Dir danken. So funktioniert es hier generell. Die Dokumentationen schreiben wir ja auch während wir irgendetwas bauen oder testen.
Für fischertechnik: Arduino ftDuino http://ftduino.de, Raspberry-Pi ft-HAT http://tx-pi.de/hat

Mahlzeit
Beiträge: 6
Registriert: 06 Sep 2020, 10:40

Re: Erste Schritte mit BT Control Set server mit TXT und CFW

Beitrag von Mahlzeit » 15 Sep 2020, 16:47

Hallo! Danke für eure Rückmeldungen. Wenn ich hier echt schon etwas beitragen kann freue ich mich.

Die Fernsteuerung läuft soweit. (Kommentiertes Programm unten) Für heute war das Ziel aus dem Encodermotor die RPM zu messen. Meine kleine Schwester hat ein fahrbares Mehrgang Getriebe gebaut und ich möchte für sie damit drehzahlgesteuert eine Automatikschaltung realisieren (hoch-/runterschalten) während sie das Modell mit der Remote fahren kann.

Zuerst dachte ich, ich bräuchte scipy um die jeweils gesammelten Werte des Schrittzählers (getCurrentDistance()) zu integrieren. Das war aber quatsch und scheiterte schon daran, dass auf der CFW kein scipy importiert werden kann. Ich darf leider auch kein Linux installieren, sodass es nicht in Frage kam einen neuen build mit der Firmware zu versuchen wie im Beitrag mit der Lernfabrik4.0 beschrieben.

Die Lösung sieht jetzt so aus

Code: Alles auswählen

from __future__ import print_function
import time
import ftrobopy
import threading



txt=ftrobopy.ftrobopy('auto')

joystick1 = txt.joystick(0,1,1)
joystick2 = txt.joystick(1,1,1)
Motor1 = txt.motor(1)
Motor1.setDistance(0)
txt.updateWait()

def infiniteloop1():  # this controls Motor1 via a L-BT-Remote
    while True:
        Motor1.setSpeed(joystick1.leftright() * 512)


def infiniteloop2():  # RPM-Meter
    while True:
        Motor1 = txt.motor(1)
        curRev = Motor1.getCurrentDistance()
        t0 = time.time()
        lastRev = 0
        

        while (curRev == Motor1.getCurrentDistance()):
            txt.updateWait()
            t1 = time.time()
            try:
                getriRev = (curRev - lastRev / (t1 - t0))
                rpm = getriRev / 3.18  # 1.59 * (duration of measurement interval in s) returns sensible results for red encoder motor
                print("RPM: " + "%.1f" % rpm)

            except ZeroDivisionError:
                pass
            time.sleep(2)  # this sets length of measurement interval
            t0 = t1
            lastRev = curRev 


thread1 = threading.Thread(target=infiniteloop1)
thread1.start()

thread2 = threading.Thread(target=infiniteloop2)
thread2.start()



Wichtig ist am Anfang Motor1.setDistance(0) zu setzen, sonst resettet sich der Schrittzählerstand ständig. Warum habe ich nicht wirklich verstanden, aber es steht hier viewtopic.php?t=4834 und durch txt.updateWait() wird das Programm etwas robuster. Ich glaube mein TXT oder die Schrittausgabe hängen sonst manchmal ganz minimal.

Der erste Thread ermöglicht die Steuerung per BT und der zweite ermittelt die RPM in den letzten 2 Sekunden als gleitenden Mittelwert (denk ich).
rpm enthält jetzt Werte zwischen ca. 15 und 110 Umdrehungen, das passt zu den angegebenen Werten von ft. Der rote Motor dreht ja nicht so schnell.

Ob man das auch mit nested loops hinbekommen kann um es pythonischer zu machen weiß ich noch nicht. Als nächstes möchte ich aber versuchen das hoch und runterschalten des Getriebes damit zu automatisieren. Entweder direkt ab einer Schwellendrehzahl oder über die Ableitung als Zunahme/Abnahme der Drehzahl. Ich muss jetzt aber ein Eis essen gehen.

Benutzeravatar
EstherM
Beiträge: 830
Registriert: 11 Dez 2011, 21:24

Re: Erste Schritte mit BT Control Set server mit TXT und CFW

Beitrag von EstherM » 16 Sep 2020, 17:28

Lieber Dennis,
dass Du sowenig Antworten auf Deine Fragen bekommst, liegt wohl auch daran, dass "nach oben die Luft dünner wird". Für mich liest sich das alles schon sehr fortgeschritten.

Vielleicht könntest Du Dir einen Account bei Github besorgen und Deine Programme und die Dokumentation (was soll das Programm machen? Wie arbeitet man damit? Wie hast Du es programmiert? Wie kann man es wo installieren?) dort ablegen.
Wir könnten auch gerne das fertige Programm auf der Website ablegen. Besser wäre es aber, Du würdest auch die Zwischenstände veröffentlichen. Und dafür wäre Github (oder auch Gitlab) der richtige Ort.
Weiterhin viel Spaß und viel Erfolg,
Gruß
Esther

Antworten