线程评级:
  • 0票(s) - 0平均
  • 1
  • 2
  • 3.
  • 4
  • 5
使用python实时控制的口吃和刷新延迟
# 1
你好,

我在尝试用太空鼠标控制库卡。我通过roboDK和Python来实现这个。
我的Python脚本和库卡之间有一个链接,我可以使用Python脚本实时控制库卡。但我现在出现了奇怪的延迟和口吃。

口吃:
当我在不连接kuka的情况下运行脚本时,roboDK模拟显示了相当平滑的运动。但当我连接到库卡时,它的动作很奇怪。它不断地暂停和加速。然后,模拟也会断断续续,准确地跟随库卡。

延迟:
我使用3D空间鼠标,并读取该鼠标的值。当我在没有roboDK链接的情况下读取spacemouse的值时,它工作得非常好。我的身体运动和程序变量之间没有延迟。但是,一旦连接到roboDK(即使没有连接到kuka),我的变量也无法正确更新。当我不触碰鼠标时,我的输入仍然是高的,而不是0。我试着把暂停,以防我刷新太快,但它只会导致奇怪的口吃暂停,仍然有读取延迟。

代码:
从robodk。robolink import robolink
从robolink导入*
从robodk导入*
进口pyspacemouse
导入的时间
导入numpy为np


RDK = Robolink()

库卡= RDK。项目(ITEM_TYPE_ROBOT”)
frame = RDK。项目(‘库卡KR 10 R1100-2基地’)
RPM = RDK.Item('RPM')

RDK.setSimulationSpeed (1)
库卡。setSpeed(speed_linear=10, speed_joint =10, acceler_joint =0.5, acceler_linear =0.5)

RDK.setRunMode (RUNMODE_RUN_ROBOT)


#打开太空老鼠
Success = pyspacemouse.open()

速度= 5
moveXYZ = np.array([0,0,0])

def move(moveXYZ, moveR):
new_pos = transl(moveXYZ) * kuka.Pose()# * rotx(moveR)
库卡。MoveJ (new_pos阻塞= False)
# kuka.Pause (1)



如果成功:
而1:
鼠标= pyspacemouse.read() #更新状态
moveXYZ = np.array([round(鼠标)。Y, 2), -1*圆(鼠标。X, 2), 0]) *速度
moveR = -1*round(mouse.yaw)/57 * speed

如果(moveXYZ[0]或moveXYZ[1]) > 0.3或(moveXYZ[0]或moveXYZ[1]) < -0.3: # or moveR > 0.3或moveR < -0.3:
“‘
framePoseAbs = kuka.Pose()
partPoseAbs = RPM.PoseAbs()
pose = framePoseAbs.inv() * partPoseAbs
“‘
#打印(mouse.yaw)

移动(moveXYZ, moveR)


它仍然是非常基础的,我计划在未来增加更多的计算功能。我无法想象这个软件没有足够强大的计算和更新速度,所以我一定是用错了。


spacemouse输出介于-1和1之间的变量。0是被动状态,它非常敏感,所以在-0.3和0.3之间的一切我都认为是偶然的运动。当我运行代码时,我点击鼠标,它立即显示正确的读数。当我释放鼠标时,它在很长一段时间内保持相同的值,即使它应该再次读取0。

使用:kuka kr10, kr c4控制器,python 3.11, pycharm IDE, roboDK, 3D spacemouse(连接),windows, kukaproxyvar作为roboDK与kuka之间的连接方法。
# 2
好项目!

当机器人移动时,你正在以高速率堆叠MoveJ命令(阻塞=False)。
与驾驶员再次调用MoveJ并不取消之前的运动命令,机器人将完成其运动。

您可以在单独的线程中检索鼠标位置并将其存储在队列中。
如果你想精确地跟踪空间鼠标的运动,那么使用非阻塞MoveJs清空队列(或者取一个并清空队列以获得最新的)。

这类似于我们的游戏控制器。虽然我们使用的是方向键,而操纵杆将更接近你想要做的事情,但你可能会从中发现一些见解:
https://github.com/RoboDK/Plug-In-Interf...troller.py
请阅读论坛的指导方针之前发帖!
有关RoboDK的有用信息,请访问我们的2022世界杯32强赛程表时间




浏览此主题的用户:
1客人(年代)