嗨,伙计们,
我用离线编程使用键盘来控制机器人。这只是一个基地,我工作在一个更大的项目。我试图移动机器人开式一组位置到达奇点。我的代码是:
我得到的值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价值?类似下面的代码(不工作和错误的语法只是告诉你我的意思):
我用离线编程使用键盘来控制机器人。这只是一个基地,我工作在一个更大的项目。我试图移动机器人开式一组位置到达奇点。我的代码是:
代码:
#这个宏允许移动机器人使用键盘
# 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)
我也理解代码,以及它如何移动机器人末端执行器在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)