Motorsteuerung mit Coroutines

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
Foxi83
Beiträge: 16
Registriert: 01 Feb 2020, 16:12

Motorsteuerung mit Coroutines

Beitrag von Foxi83 » 08 Mär 2020, 09:39

Salut,

Ich habe mein eigenes python Modul on top auf ftrobopy gebaut und werde dort Zeug dass ich oft brauche abkapseln.

https://github.com/NathanSchmid/ftcontrol

Momentan ist es noch nicht viel aber es ist schon ziemlich nützlich wie ich finde da das Modul auf den asyncio coroutines aufbaut und es sich so recht angenehm damit arbeiten lässt. Das Grundprinzip ist das Positionable dass eine die Steuerung in einem Koordinatensystem übernimmt. Es gibt eine konkrete Implementierung für den Motor mit einem Initialisierungsschalter: PositionableMotor. Mehrere Positionables lassen sich zu einem Mehrdimensionalen Positionable zusammenschliessen. Die Navigation zu den neuen Koordinaten erfolgt dann parallel.

Im code sieht dass dann so aus:

Code: Alles auswählen

# Motor und Input zu gehören zu einer Einheit
self.motor_x = ftcontrol.PositionableMotor("x", self.txt.motor(1), self.txt.input(1))
self.motor_y = ftcontrol.PositionableMotor("y", self.txt.motor(2), self.txt.input(2))
# ...

Code: Alles auswählen

  async def init(self):
        # Mehrdimensionales positionable.
        dim = ftcontrol.MultiPositionable((self.motor_x, self.motor_y, self.motor_z, self.motor_w))
        await dim.initialize((300, 512, 512, 300))
        
        await dim.goto((800, 70, 1800, 0))
        await dim.goto((800, 70, 2200, 0))
        await dim.goto((800, 70, 2200, 10))
        await dim.goto((200, 20, 500, 10))
        await dim.goto((200, 20, 500, 0))
Die async Methoden kann man natürlich beliebig schachteln und die Methoden werden bei await geteilt: das ist alles standard aus asyncio und macht den Code meiner Meinung nach übersichtlicher als mit all den Callbacks.

Als PoC habe ich damit den 3-Achsen Roboter angesteuert:
https://youtu.be/I10mzi3wzg8

Es scheint zu funktionieren, wenn auch mit den üblichen Problemen des Counterbasierten Greifers.

Antworten