嗨,伙计们,
我使用离线编程,使用键盘来控制ayx官方机器人。这只是我正在进行的一个更大项目的基础。我试图移动机器人到一个设定的位置,以防它达到奇点。我尝试的代码是:
我得到的值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如示例所示,有没有一种方法来操纵姿势,如添加或从上面的姿势值减去?类似于下面的代码(没有工作和错误的语法,但只是告诉你我的意思):
我使用离线编程,使用键盘来控制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)
此外,我了解代码以及它如何在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)