线程评级:
  • 0 (s) - 0平均投票
  • 1
  • 2
  • 3
  • 4
  • 5
绑定的移动机器人末端执行器和控制的方向
# 1
嗨,伙计们,

我用离线编程使用键盘来控制机器人。这只是一个基地,我工作在一个更大的项目。我试图移动机器人开式一组位置到达奇点。我的代码是:
代码:
#这个宏允许移动机器人使用键盘
# RoboDK API的更多信息:
# //www.w5838.com/doc/en/RoboDK-API.html
#类型帮助(“robolink”)或(“robodk”)的更多信息
#按F5运行脚本
#注意:您不需要保持此文件的一个副本,您的python脚本保存与车站
从robolink进口* # API与RoboDK沟通
从robodk进口* #基本矩阵运算
RDK = Robolink ()

#箭头键程序的例子

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

打印(使用机器人:% s的% robot.Name ())
print(使用箭头(左,右,上,下)、Q和一个键来移动机器人”)
打印(注:这是在控制台模式,你必须单独运行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(真正的)
关键=(奥德(getch ()))
move_direction = (0, 0, 0)
#打印(键)
如果键= = 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]

#确保指定运动的方向
如果规范(move_direction) < = 0:
继续

#计算运动毫米根据移动速度
xyz_move = mult3 (move_direction move_speed)

#获取机器人关节
robot_joints = robot.Joints ()

#从关节得到机器人的位置(正运动学计算)
robot_position = robot.SolveFK (robot_joints)

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

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

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

如果len (new_robot_joints.tolist ()) < 6:
#打印(“没有机器人的解决方案! !新位置太远,达到或接近一个奇点”)
new_robot_config = robot.JointsConfig (robot_joints1)
# robot.MoveJ (robot_joints1)
#继续
其他:
#计算新的关节的机器人配置
new_robot_config = robot.JointsConfig (new_robot_joints)



如果robot_config [0] ! = new_robot_config[0]或robot_config [1] ! = new_robot_config[1]或robot_config [2] ! = new_robot_config [2]:
打印(“警告! !机器人配置改变! !这将导致unextected动作!”)
#打印(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的例子所示,有办法操作姿势,如添加或从上面的姿势subracting价值?类似下面的代码(不工作和错误的语法只是告诉你我的意思):


代码:
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(真正的)
关键=(奥德(getch ()))
# move_direction = (0, 0, 0)
#打印(键)
如果键= = 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

#确保指定运动的方向
#如果规范(move_direction) < = 0:
#继续

#计算运动毫米根据移动速度
# xyz_move = mult3 (move_direction move_speed)
#打印(xyz_move)

#获取机器人关节
robot_joints = robot.Joints ()

#从关节得到机器人的位置(正运动学计算)
robot_position = robot.SolveFK (robot_joints)
#打印(robot_position)

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

#计算新机器人的位置
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_joints = robot.SolveIK (new_robot_position)

如果len (new_robot_joints.tolist ()) < 6:
#打印(“没有机器人的解决方案! !新位置太远,达到或接近一个奇点”)
new_robot_config = robot.JointsConfig (robot_joints)
# robot.MoveJ (robot_joints1)
继续
其他:
#计算新的关节的机器人配置
new_robot_config = robot.JointsConfig (new_robot_joints)



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

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

任何意见或建议吗?
# 3
嗨avpai1992,

抱歉延误,这个从我们的指缝里溜掉了。
不幸的是我不是那个人回答这个问题,我的经验与API是有限的目前和艾伯特离开办公室一个星期访问有限的电子邮件和论坛。
如果他不回答,他不在,我让他注意到这个线程就回来了。

我真的希望你理解。
杰里米
# 4
谢谢你,没有问题。请让他知道这个线程。我将非常感谢所有的帮助。
# 5
我不确定我理解你想做什么。它看起来像两个部分的代码是等价的。第一个版本使用运动作为一个向量(x, y, z)(我假设的基础上例子),第二个版本的代码只是增加了一个改变X, Y, Z坐标。

之前运行联合或线性运动你可以测试,如果通过调用:运动是可行的
MoveJ_Test或MoveL_Test
如果运动不是可行的,你可以把机器人回到一个没有奇异点的位置。

更多信息:
//www.w5838.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
在这种情况下,我建议你这样做:

构成= robot.Pose() #或:构成= KUKA_2_Pose (xyzabc)
体式= * transl (dX, dY, dZ) * rotz (dA) * roty (dB) * rotx (dC)
robot.MoveL(构成)

dX, dY, dZ,哒,dB特区是转移到相应的值(X, Y, Z, A, B, C);。我以为你会修改一次。




用户浏览这个线程:
1客人(年代)