创建中断 (ISR) 以创建平滑的机械臂运动
Create interrupt (ISR) to create smooth robotic arm motion
我的学校有一个连接到一些按钮的机械臂 (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)
您正在使用的库代码说(在其对方法的描述中):
This method is usefull since any new command from python to robot make the robot stop
因此可能无法通过发出一堆命令让机器人连续移动,因为每次收到新命令时它都会停止。
您需要弄清楚要将机器人移动到的最远位置,在第一次按下按钮时发出命令将其移动到那里(使用 wait=False
,这样您的代码就不会不要坐等机器人完成移动),然后在释放按钮时使用 self.r.stop()
停止机器人。
我的学校有一个连接到一些按钮的机械臂 (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)
您正在使用的库代码说(在其对方法的描述中):
This method is usefull since any new command from python to robot make the robot stop
因此可能无法通过发出一堆命令让机器人连续移动,因为每次收到新命令时它都会停止。
您需要弄清楚要将机器人移动到的最远位置,在第一次按下按钮时发出命令将其移动到那里(使用 wait=False
,这样您的代码就不会不要坐等机器人完成移动),然后在释放按钮时使用 self.r.stop()
停止机器人。