创建中断(ISR)以创建平稳的机械手臂动作

时间:2018-07-03 19:40:41

标签: python multithreading robotics isr

我的学校有一个机械臂(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 :(得分:1)

您正在使用的库代码说(在方法说明中):

  

此方法很有用,因为从python到机器人的任何新命令都会使机器人停止

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

因此,由于机器人每次获取新命令都会停止,因此可能无法通过发出一堆命令来使其连续移动。

您需要弄清楚要将机器人移动到的最远的位置,在第一次按下按钮时发出命令将其移动到那里(使用wait=False,以使代码不会停留在(等待机器人完成移动),然后在每次释放按钮时使用self.r.stop()停止机器人。