[GO] Aktualisierte Software für Rubik Cube Robot 5. Maschinenbedienung (Python)

Was ist dieser Artikel?

Ich entwickle gerade einen Roboter, der einen 2x2x2 Rubikwürfel löst. Dies ist eine Sammlung von Kommentaren zum Roboterprogramm. soltvvo3.jpg Ich habe einmal eine Sammlung von Artikeln geschrieben, die durch den Artikel [hier] repräsentiert werden (https://qiita.com/Nyanyan_Cube/items/60f3699db96dba4a4bf5), aber seitdem wurde die Software erheblich aktualisiert, sodass ich ein neues Programm einführen werde. Überlegen.

Der entsprechende Code ist hier verfügbar [https://github.com/Nyanyan/soltvvo/tree/master/Soltvvo3.2].

Zum Thema passende Artikel

"Lass uns einen Roboter bauen, der den Zauberwürfel löst!"

  1. Übersicht
  2. Algorithmus
  3. Software
  4. Hardware

Aktualisierte Software für Rubik Cube Robot

  1. Grundfunktion
  2. Vorberechnung
  3. Lösungssuche
  4. Statuserkennung
  5. Maschinenbedienung (Python) (dieser Artikel)
  6. Maschinenbetrieb (Arduino)
  7. Hauptverarbeitung

Dieses Mal werde ich `` `controller.py``` als Python-Edition (Machine Operation) einführen.

Grundeinstellungen usw.

Richten Sie zunächst die serielle Kommunikation und GPIO ein.

ser_motor = [None, None]

GPIO.setmode(GPIO.BCM)
GPIO.setup(21,GPIO.IN)
ser_motor[0] = serial.Serial('/dev/ttyUSB0', 115200, timeout=0.01, write_timeout=0)
ser_motor[1] = serial.Serial('/dev/ttyUSB1', 115200, timeout=0.01, write_timeout=0)

Senden Sie einen Befehl zum Bewegen des Stellantriebs

Ein Aktuator ist hier ein Motor. Der Motor ist mit einer selbst hergestellten Arduino-kompatiblen Maschine verbunden, und der Aktuator wird durch Senden eines Befehls an Arduino betätigt. Hier stellen wir eine Funktion vor, die Befehle sendet.

'''Senden Sie einen Befehl zum Bewegen des Stellantriebs'''
''' Send commands to move actuators '''
def move_actuator(num, arg1, arg2, arg3=None):
    if arg3 == None:
        com = str(arg1) + ' ' + str(arg2)
    else:
        com = str(arg1) + ' ' + str(arg2) + ' ' + str(arg3)
    ser_motor[num].write((com + '\n').encode())

Es gibt zwei Arten von Befehlen zum Bewegen des Aktuators, die sich in der Anzahl der Argumente unterscheiden. Also schrieb ich eine `if``` Anweisung mit` arg3 == None``` (obwohl es eine Geschichte ist, dass die Funktionen getrennt werden sollten).

Schnapp dir das Rätsel

Mit der vorherigen Funktion habe ich eine Funktion zum Greifen des Puzzles und eine Funktion zum Lösen des Puzzles erstellt. Dies ist eine Funktion für gelegentliche Aktionen.

'''Nimm den Würfel'''
''' Grab arms '''
def grab_p():
    for i in range(2):
        for j in range(2):
            move_actuator(j, i, 1000)
        sleep(3)

'''Lassen Sie den Würfel los'''
''' Release arms '''
def release_p():
    for i in range(2):
        for j in range(2):
            move_actuator(i, j, 2000)

Lassen Sie für zwei Arduino `` i``` die beiden Motoren `j``` laufen, die jeweils miteinander verbunden sind.

1000 und 2000 bedeutet, dass Sie das Puzzle greifen, wenn Sie 1000 senden, und wenn Sie 2000 senden, werden Sie es freigeben.

Armkalibrierung

Da der Arm von einem Schrittmotor angetrieben wird, muss die Position entsprechend eingestellt werden. Der Arduino hat einen Hallsensor (Magnetsensor) und der Arm hat einen Magneten. Auf diese Weise wird die Position automatisch angepasst. In Python können Sie die Position anpassen, indem Sie einen Befehl senden.

'''Armkalibrierung'''
''' Calibration arms '''
def calibration():
    release_p()
    sleep(0.1)
    for i in range(2):
        for j in range(2):
            move_actuator(j, i, 0, 500)

Bewegen Sie den Roboter tatsächlich entsprechend der Lösung

Diese Funktion bewegt den Roboter, wenn Sie eine Lösung und andere Konstanten eingeben.

Der Roboter verfügt über einen Not-Aus-Taster, der zuerst verarbeitet wird. Übrigens ist der Not-Aus-Schalter ein Klimmzug. Selbst wenn der Stecker abgezogen wird, wird der Betrieb gestoppt.

Und wenn Sie eine andere als die erste Bewegung drehen, ändern Sie das Puzzle, drehen Sie den Motor nacheinander und ruhen Sie sich eine Zeit aus, die proportional zur maximalen Anzahl von Umdrehungen ist. Gibt die Zeit zurück, die zum endgültigen Lösen benötigt wurde.

'''Bewegen Sie den Roboter tatsächlich'''
''' Control robot '''
def controller(slp1, slp2, rpm, ratio, solution):
    strt_solv = time()
    for i, twist in enumerate(solution):
        #Drücken Sie die Not-Aus-Taste, um anzuhalten
        if GPIO.input(21) == GPIO.LOW:
            if bluetoothmode:
                client_socket.send('emergency\n')
            solvingtimevar.set('emergency stop')
            print('emergency stop')
            return
        #Rätsel wechseln
        if i != 0:
            grab = twist[0][0] % 2
            for j in range(2):
                move_actuator(j, grab, 1000)
            sleep(slp1)
            for j in range(2):
                move_actuator(j, (grab + 1) % 2, 2000)
            sleep(slp2)
        max_turn = 0
        for each_twist in twist:
            move_actuator(each_twist[0] // 2, each_twist[0] % 2, each_twist[1] * 90, rpm)
            max_turn = max(max_turn, abs(each_twist[1]))
        #Warten Sie, bis sich das Puzzle dreht
        slptim = 2 * 60 / rpm * max_turn * 90 / 360 * ratio
        sleep(slptim)
    solv_time = str(int((time() - strt_solv) * 1000) / 1000).ljust(5, '0')
    return solv_time

Zusammenfassung

Dieses Mal erklärte ich die Funktion, die den Roboter tatsächlich bewegt (obwohl ich nur Befehle sende). Als nächstes werde ich erklären, wie der Motor betrieben wird, nachdem der Befehl auf der Arduino-Seite empfangen wurde.

Recommended Posts

Aktualisierte Software für Rubik Cube Robot 5. Maschinenbedienung (Python)
Aktualisierte Software für Rubik Cube Robot 6. Maschinenbetrieb (Arduino)
Aktualisierte Software für Rubik Cube Robot 7. Schlüsseloperationen
Aktualisierte Software für Rubik Cube Robot 2. Vorberechnung
Aktualisierte Software für Rubik Cube Robot 3. Lösungssuche
Aktualisierte Software für Rubik Cube Robot 4. Statuserkennung
Lassen Sie uns einen Roboter bauen, der den Zauberwürfel löst! 3 Software
Aktualisierte Software für Rubik Cube Robot 7. Schlüsseloperationen
Aktualisierte Software für Rubik Cube Robot 2. Vorberechnung
Aktualisierte Software für Rubik Cube Robot 3. Lösungssuche
Aktualisierte Software für Rubik Cube Robot 4. Statuserkennung
Aktualisierte Software für Rubik Cube Robot 6. Maschinenbetrieb (Arduino)
Aktualisierte Software für Rubik Cube Robot 5. Maschinenbedienung (Python)
Lassen Sie uns einen Roboter bauen, der den Zauberwürfel löst! 3 Software
Python-Grundkurs (12 Funktionen)
Lassen Sie uns einen Roboter bauen, der den Zauberwürfel löst! 2 Algorithmus
Lassen Sie uns einen Roboter bauen, der den Zauberwürfel löst! 1. Übersicht
Auf Python 2.7.9 aktualisiert
[Python] Vektoroperation
Python-Betriebssystembetrieb
[Python] Matrixoperation