线程评级:
  • 0 (s) - 0平均投票
  • 1
  • 2
  • 3
  • 4
  • 5
外部铁路与Python API编写程序
# 1
你好,

我和robodk经验问题而编程的道路。我的站就像instation png。我的代码是这样的:

代码:
”“”
控制机器人通过RoboDK Python API

参数
- - - - - - - - - - -
htm = (n, 4, 4)
齐次变换矩阵的每个职位的刀柄
速度:(n - 1)浮动
速度之间的位置
”“”

RDK = Robolink ()
拷贝文件(“. . \资源\ RDKFiles \ CTTLab。rdk”、“. . \资源\ RDKFiles \ Test.rdk”)
RDK.AddFile(“. . \资源\ RDKFiles \ Test.rdk”)
机器人= RDK。项目(100 - 2 P库卡KR, ITEM_TYPE_ROBOT)
如果不是robot.Valid ():
提高异常(没有机器人选择或可用)

.Parent参考= robot.Parent () ()

#创建一个新的项目
程序= RDK。AddProgram(“测试”,机器人)

#关掉自动呈现
RDK.Render(假)

#指定您想要使用的参考系
program.setPoseFrame(参考)

#定义一个参考姿势
targetname = '目标回家'
target_home = RDK。AddTarget (targetname,参考,机器人)
target_home.setJoints (robot.SolveFK (robot.JointsHome ()))
program.MoveJ (target_home)

targetname = '目标0 '
目标= RDK。AddTarget (targetname,参考,机器人)
target.setAsCartesianTarget ()
target.setPose (htm [0])
program.MoveJ(目标)

因为我在范围(htm。形状[0]- 1):
targetname = '目标%我% (i + 1)
目标= RDK。AddTarget (targetname,参考,机器人)
target.setPose (htm (i + 1))
program.setSpeed(速度[我])
program.MoveJ(目标)

program.RunProgram ()
我得到一个错误:AttributeError:“numpy。ndarray”对象没有属性“isHomogeneous”
我克服这个remplacing htm[我]KUKA_2_Pose (Pose_2_KUKA (htm (I + 1)))。但它不似乎是适当的。
修正程序运行时,我得到一个错误的目标是遥不可及。附上的图片所示。

你有一个想法,它可以从何而来?

我试着另一个解决方案。事实上,我添加了以下几点:
target.setAsJointTarget ()
铁路终于搬到达到目标但多恩不到合适的目标。

谢谢你!


附加文件 缩略图(s)

# 2
我相信你是RoboDK API提供numpy矩阵。RoboDK预计4 x4矩阵将垫对象。这个矩阵中定义的对象是robodk模块:
//www.w5838.com/doc/en/PythonAPI/robo...robodk.Mat

你可以做一些类似:
参考= KUKA_2_Pose(列表(xyzabc))

xyzabc是1 d numpy数组X, Y, Z, a, B, C值。函数将它转换为列表的列表6价值观和KUKA_2_Pose将创建一个垫构成,可以提供RoboDK构成。
# 3
你好,
谢谢你的回答。
不幸的是,它不能解决的“目标遥不可及”的问题。什么呢?

我应该精确获得目标。只是说他们遥不可及而显然不是。


附加文件 缩略图(s)

# 4
你能分享RoboDK项目(RDK文件)?
您可能需要设置一个值为外部轴目标可以达到。
# 5
实际上,我自己回答了我的问题。我这样解决:
代码:
target_name = '目标%我% (i + 1)
robot.MoveJ (robot.SolveIK (KUKA_2_Pose (Pose_2_KUKA (htm (i + 1))),工具= RDK。(“工具1”,ITEM_TYPE_TOOL)项.PoseTool ()))
目标= RDK。AddTarget (target_name,参考,机器人)
program.setSpeed(速度[我])
program.MoveL(目标)
RDK.Update ()

谢谢你!

马克
# 6
你好,

我将回答这个问题。

事实上我做的然而使用前面的代码解决这个问题。我有很多点和使用这意味着生成需要很长时间。我使用的MacOS版本RoboDK和直接的方法来创建目标使用API的工作方式。然而当windows版本,它仍然不工作。

我使用的直接代码是这个:

代码:
RDK = Robolink ()

机器人= RDK。项目(库卡基米-雷克南100公顷,ITEM_TYPE_ROBOT)
如果不是robot.Valid ():
提高异常(没有机器人选择或可用)

world_base = RDK。(“世界基地”,ITEM_TYPE_FRAME)项
camera_base = RDK。(“相机基地”,ITEM_TYPE_FRAME)项
= RDK工具。(“工具1”,ITEM_TYPE_TOOL)项

RDK.Render(假)


#指定您想要使用的参考系
程序= RDK。AddProgram(“{}图片分析”.format (name_prog),机器人)
program.setPoseFrame (camera_base)
program.setPoseTool(工具)

程序。setSpeed(速度、200、10000、800)

target_name = '方法目标'
构成=垫(htm [0] .tolist ())
目标= RDK。AddTarget (target_name camera_base,工具)
target.setAsCartesianTarget ()
target.setPose(构成)
program.MoveJ(目标)



因为我在范围(htm。形状[0]- 1):
target_name = '目标{}' .format(我)
构成=垫(htm (i + 1) .tolist ())
目标= RDK。AddTarget (target_name camera_base,工具)
target.setAsCartesianTarget ()
target.setPose(构成)
program.MoveL(目标)


它生成我以下文件。

启动程序的时候说,目标是不可到达的。

这是文件


附加文件
.rdk M301_01.rdk(尺寸:1.86 MB /下载:557)
# 7
嗨,马克,

当你使用外部轴需要提供外部轴的位置在你的目标(使用setJoints)。如果目标是笛卡儿你不需要担心机器人轴。或者,您可以加载一个机器人加工文件如Gcode或APT和使用曲线遵循项目或机器人加工项目。你将能够优化工具外部轴。

我不能测试你的文件,因为它需要额外的输入数据,但这个小脚本将允许您更新外部轴的位置站中的所有目标(例如,5000毫米):

代码:
从robolink进口* # RoboDK API
从robodk进口* #机器人工具箱
RDK = Robolink ()

目标= RDK.ItemList (ITEM_TYPE_TARGET)

RDK.Render(假)
t的目标:
#设置外部轴的值
e1在毫米= 5000 #
t。setJoints ([0, 0, 0, 0, 0, 0, e1))

#计算关节位置基于外部轴的新职位
#机器人外部轴关节但不更新
t.setAsCartesianTarget ()
t.Joints ()

jnts = t.Joints ()
打印(t.Name() +“关节:“+ str (jnts.list ()))

如果你正在寻找更快的速度(我注意到你已经禁用渲染)我建议你使用c++ API(稍快)或插件接口来创建一个插件(更快)。API的几乎是在这两种情况下是相同的。

艾伯特


附加文件
.rdk M301_01.rdk(尺寸:1.86 MB /下载:478)
# 8
谢谢你的回答阿尔伯特。事实上,我不知道外部轨道位置,我希望robodk优化这个参数。我如何能管理它?

加什么奇怪的是,它完全MacOS这种方式工作。
# 9
嗨,马克,

你可以包装的更新外部轴在另一个循环测试不同位置的铁路(编程)。

程序的命令。更新会很快告诉你如果程序是可行的,这样你就可以继续找,直到你找到一个有效的解决方案。

我更新你的示例项目。

艾伯特

代码:
从robolink进口* # RoboDK API
从robodk进口* #机器人工具箱
RDK = Robolink ()

#检索所有目标
目标= RDK.ItemList (ITEM_TYPE_TARGET)

#选择一个程序(如果您只有一个程序自动选择)
程序= RDK。ItemUserPick(“选择一个程序来检查和更新目标”,ITEM_TYPE_PROGRAM)

#关掉渲染(快)
RDK.Render(假)

#列举一些候选人外部轴(E1, mm):
Test_E1 = (500, 1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500]
# test_E1 =范围(500、5000、500)

在Test_E1 e1:
打印(“测试项目可行性E1:”+ str (E1))

#更新所有目标所需的e1
t的目标:
#设置外部轴的值
# e1 = 5000 #在毫米
t。setJoints ([0, 0, 0, 0, 0, 0, e1))

#计算关节位置基于外部轴的新职位
#机器人外部轴关节但不更新
t.setAsCartesianTarget ()
t.Joints ()

jnts = t.Joints ()
打印(t.Name() +“关节:“+ str (jnts.list ()))

#测试程序,确保它100%是可行的
valid_ins、prog_time prog_len、valid_ratio error_msg = program.Update ()
如果valid_ratio < 1.0:
打印(“无法完成计划”)
打印(" + error_msg)

其他:
打印(“项目可行!”)
#停止寻找
打破

打印(“做!”)
program.RunProgram ()


附加文件
.rdk M301_01 v3.rdk(尺寸:1.86 MB /下载:430)
非常感谢你的帮助。它工作正常!




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