Создать прерывание (ISR) для создания плавного движения манипулятора - PullRequest
0 голосов
/ 03 июля 2018

В моей школе есть роботизированная рука (UR-10), подключенная к некоторым кнопкам, и я хотел запрограммировать ее так, чтобы при нажатии на эти кнопки рука могла плавно перемещаться влево и вправо.

В настоящее время я обнаружил, что рука просто двигается, затем останавливается, затем двигается и останавливается рывками.

Я хотел реализовать прерывание, которое могло бы ощущаться, пока кнопка нажата, тогда рука будет непрерывно двигаться, повторяя цикл достаточно быстро, чтобы рука двигалась без остановки. То есть, пока кнопка не отпущена.

Если есть более простой способ реализовать это, я бы с удовольствием это услышал.

Спасибо!

Ниже мой код.

import urx #UR-10 library
from threading import Thread

class UR10(object):
def __init__(self):

    # Establishes connection to UR-10 via IP address
    print("establishing connection")
    Robot = urx.Robot("192.168.100.82")
    self.r = Robot
    print("Robot object is available as robot or r")

    CheckingDigital_Inputs = Thread(target=self.ThreadChecker)
    CheckingDigital_Inputs.setDaemon(True)
    CheckingDigital_Inputs.start()

    MoveThread = Thread(target = self.MoveThread)
    MoveThread.setDaemon(True)
    MoveThread.start()

def ThreadChecker(self):
    while True:
        self.TestingInputs()

def TestingInputs(self):
    #Values = self.r.get_digital_in()

    self.In_1 = self.r.get_digital_in(1)
    self.In_2 = self.r.get_digital_in(2)

    #print("Digital Input 1 is {},  Digital Input 2 is {}".format(Values1, Values2))

def MoveThread(self):
    while True:
        self.LinearMovement()

def LinearMovement(self):
    #print("linear move")
    #need to run at 125khz
    while self.In_1:
        print("move right linear")

        l = 0.05
        v = 0.05
        a = 0.05

        pose = self.r.getl()
        print(pose)
        pose[0] += .01
        self.r.movel(pose, acc=a, vel=v)

1 Ответ

0 голосов
/ 03 июля 2018

Код библиотеки, которую вы используете, говорит (в описании метода):

Этот метод полезен, так как любая новая команда от python до робота останавливает робота

https://github.com/SintefRaufossManufacturing/python-urx/blob/193577c0efed8a24d00bd12b3b6e0c7ffefb9dd9/urx/urrobot.py#L356-L357

Так что, возможно, невозможно заставить робота непрерывно двигаться, выполняя набор команд, так как он останавливается каждый раз, когда получает новую команду.

Вам нужно выяснить, куда дальше всего вы хотите переместить робота, введите команду, чтобы переместить его туда, когда кнопка нажата в первый раз (с wait=False, чтобы ваш код не сидел в ожидании чтобы робот закончил движение), а затем используйте self.r.stop(), чтобы остановить робота при каждом отпускании кнопки.

...