线程评级:
约束机器人的运动,控制末端执行器的方向
# 1
嗨,伙计们,

我使用离线编程,使用键盘来控制ayx官方机器人。这只是我正在进行的一个更大项目的基础。我试图移动机器人到一个设定的位置,以防它达到奇点。我尝试的代码是:
代码:
#这个宏允许使用键盘移动机器人
更多关于RoboDK API的信息:
# //www.x7093.com/doc/en/RoboDK-API.html
输入help("robolink")或help("robodk")查看更多信息
#按F5运行脚本
#注意:你不需要保留这个文件的副本,你的python脚本会和站点一起保存
从robolink导入* # API与RoboDK通信
从robodk导入* #基本矩阵操作
RDK = Robolink()

#方向键程序示例

#买个机器人
机器人= RDK。项目(ITEM_TYPE_ROBOT”)
如果不是robot.Valid():
打印(“车站里没有机器人。首先加载一个机器人,然后运行这个程序。”)
暂停(5)
抛出异常(“车站里没有机器人!”)

print('使用机器人:%s' % robot. name ())
打印('使用箭头(左,右,上,下),Q和A键来移动机器人')
打印('注意:这只适用于控制台模式,你必须单独运行PY文件')

#定义移动增量
Move_speed = 10
Robot_joints1 = [8.805, -13.848, 0.000, -97.620, 0.849, 90.965, 145.752]
打印(robot_joints1)

从MSVCRT导入getch
而真正的:
RDK.Render(真正的)
Key = (ord(getch()))
Move_direction = [0,0,0]
#打印(键)
如果key == 75:
print('箭头向左(Y-)')
Move_direction = [0,-1,0]
Elif键== 77:
print('箭头向右(Y+)')
Move_direction = [0,1,0]
Elif键== 72:
print('箭头向上(X-)')
Move_direction = [-1,0,0]
Elif键== 80:
print('箭头向下(X+)')
Move_direction = [1,0,0]
Elif键== 113:
print (Q (Z +))
Move_direction = [0,0,1]
Elif键== 97:
打印(“(Z)”)
Move_direction = [0,0,-1]

#确保指定了移动方向
如果norm(move_direction) <= 0:
继续

#根据移动速度计算以mm为单位的移动
Xyz_move = mult3(move_direction, move_speed)

#得到机器人关节
robot_关节= robot.关节()

#从关节获取机器人位置(计算正运动学)
robot_position = robot.SolveFK(robot_关节)

#获取机器人配置(机器人关节状态)
robot_config = robot.JointsConfig(robot_joint)

#计算新的机器人位置
New_robot_position = transl(xyz_move)*robot_position
打印(new_robot_position)

#计算新的机器人关节
new_robot_关节= robot.SolveIK(new_robot_position)

如果len(new_robot_关节.tolist()) < 6:
#print(“没有机器人解决方案!!新位置太远、够不到或接近奇点”)
new_robot_config = robot.JointsConfig(robot_joints1)
# robot.MoveJ (robot_joints1)
#继续
其他:
#计算新关节的机器人配置
new_robot_config = robot.JointsConfig(new_robot_joint)



如果robot_config[0] != new_robot_config[0]或robot_config[1] != new_robot_config[1]或robot_config[2] != new_robot_config[2]:
打印(“警告! !机器人配置改变!!这将导致意想不到的运动!”)
#打印(robot_config)
#打印(new_robot_config)
其他:

#移动机器人关节到新位置
robot.MoveJ (new_robot_joints)
# robot.MoveL (new_robot_joints)


我得到的值robot_joints1,的值robot.joints 我的目标的位置。在代码中,我试着输入这些关节值给机器人,以防它达到奇点。我没有得到错误,但机器人没有移动到设置的关节值(机器人根本没有移动)。我试图让机器人在遇到奇点时移动到目标位置。

此外,我了解代码以及它如何在x,y,z轴上移动机器人末端执行器,但我也想知道是否可以使用键盘控制末端执行器的旋转或末端执行器的方向?我打印了new_robot_position,看到只有x,y,z发生了变化,而角度是恒定的0,90,0。我想知道我是否可以用键盘来控制角度。

我想开始姿势是-姿势(490.000,0.000,780.000,0.000,90.000,0.000),而不是移动xyz如示例所示,有没有一种方法来操纵姿势,如添加或从上面的姿势值减去?类似于下面的代码(没有工作和错误的语法,但只是告诉你我的意思):


代码:
x = 0
y = 0
z = 0
一个= 0
b = 0
c = 0
Robot_position = (490.000, 0.000, 780.000, 0.000, 90.000, 0.000)

从MSVCRT导入getch
而真正的:
RDK.Render(真正的)
Key = (ord(getch()))
#move_direction = [0,0,0]
#打印(键)
如果key == 75:
print('箭头向左(Y-)')
y = y - 5
Elif键== 77:
print('箭头向右(Y+)')
y = y + 5
Elif键== 72:
print('箭头向上(X-)')
x = x 5
Elif键== 80:
print('箭头向下(X+)')
x = x + 5
Elif键== 113:
print (Q (Z +))
z = z + 5
Elif键== 97:
打印(“(Z)”)
z = z-5

#确保指定了移动方向
#if norm(move_direction) <= 0:
#继续

#根据移动速度计算以mm为单位的移动
#xyz_move = mult3(move_direction, move_speed)
#打印(xyz_move)

#得到机器人关节
robot_关节= robot.关节()

#从关节获取机器人位置(计算正运动学)
robot_position = robot.SolveFK(robot_关节)
#打印(robot_position)

#获取机器人配置(机器人关节状态)
robot_config = robot.JointsConfig(robot_joint)

#计算新的机器人位置
new_robot_position。姿态= (490.000+x, 0.000+y, 780.000+z, 0.000, 90.000, 0.000)#transl(xyz_move)*robot_position
#打印(new_robot_position)

#计算新的机器人关节
new_robot_关节= robot.SolveIK(new_robot_position)

如果len(new_robot_关节.tolist()) < 6:
#print(“没有机器人解决方案!!新位置太远、够不到或接近奇点”)
new_robot_config = robot.JointsConfig(robot_joint)
# robot.MoveJ (robot_joints1)
继续
其他:
#计算新关节的机器人配置
new_robot_config = robot.JointsConfig(new_robot_joint)



如果robot_config[0] != new_robot_config[0]或robot_config[1] != new_robot_config[1]或robot_config[2] != new_robot_config[2]:
打印(“警告! !机器人配置改变!!这将导致意想不到的运动!”)
#打印(robot_config)
#打印(new_robot_config)
其他:

#移动机器人关节到新位置
robot.MoveJ (new_robot_joints)
# robot.MoveL (new_robot_joints)
你好@艾伯特和@杰里米

有什么建议吗?
# 3
嗨avpai1992,

抱歉耽搁了,这个从指缝间溜走了。
不幸的是,我不是回答这个问题的人,我对API的经验目前是有限的,而且Albert已经离开办公室一周了,无法访问电子邮件和论坛。
如果他不在的时候没有回复,他一回来我就把这条线索告诉他。

我真的希望你能理解。
杰里米
# 4
谢谢,没问题。请让他知道这条线索。非常感谢你们的帮助。
# 5
我不太明白你想做什么。看起来这两段代码是等价的。第一个版本使用移动作为向量[x,y,z](我假设基于示例),代码的第二个版本只是沿着X,Y,Z坐标添加了一个移位。

在运行关节或线性运动之前,您可以通过调用以下命令来测试运动是否可行:
MoveJ_Test或move_test
如果移动是不可行的,你可以把机器人带回一个没有奇点的位置。

更多信息请点击这里:
//www.x7093.com/doc/en/PythonAPI/robo...MoveL_Test
# 6
你好@艾伯特

谢谢你的回复。所给出的键盘示例控制机器人的方向。我正在尝试做的事情与之类似。我想用键盘控制机器人的笛卡尔姿态。我试图分配一个键来控制笛卡儿姿态的每6个元素- X,Y,Z和方向角a,B,C。例如:
如果机器人姿态为:

robot_position = (490.000, 0.000, 780.000, 0.000, 90.000, 0.000) # (x, y, z, a, b, c);

我想用键盘分别改变它们。我希望我现在明白了。抱歉造成了混乱
# 7
在这种情况下,我建议你这样做:

pose = robot.Pose() #或:pose = KUKA_2_Pose(xyzabc)
姿态=姿态*平移(dX,dY,dZ)*rotz(dA)*roty(dB)*rotx(dC)
robot.MoveL(构成)

其中,dX,dY,dZ,dA,dB,dC是它们对应值(X,Y,Z,A,B,C)的移位。我想你会一次修改一个。




浏览此线程的用户:
1客人(年代)