Matlab API:没有“addMoveC”函数可用?-JFCh-06-20-2019
大家好,
我是这个论坛的新手,所以我要简单介绍一下我自己。我是蒙特利尔理工大学的一名研究生,我正在使用发那科机器人M-20iB/25型。我正在使用RoboDK为我的3D打印项目开发轨迹。
我一直在尝试用RoboDK的Matlab API实现一些脚本,并注意到库中没有“addMoveC”函数。这正常吗?我可以添加线性和关节动作,但不能添加圆形动作。
是否有可能是我安装了一个较旧版本的API,还是我遗漏了一些东西?
我已经搜索了这个论坛,但没有找到相关的主题。
谢谢你的帮助,
让-
RE: Matlab API:没有“addMoveC”功能可用?-艾伯特-06-20-2019
嗨,让,
我们刚刚通过Matlab API添加了对圆周运动的支持。我建议你用MoveC代替addMoveC。您可以在机器人项目上使用MoveC来移动圆形,也可以在程序项目上使用MoveC来添加圆形移动指令。
你可以从我们的GitHub存储库中获取最新版本: https://github.com/RoboDK/RoboDK-API/tree/master/Matlab
代码:
使用圆周运动的示例 RDK = Robolink(); robot = RDK.Item(",RDK.ITEM_TYPE_ROBOT);
%获取当前机器人姿态: pose0 = robot.Pose();
添加一个新程序: prog = RDK.AddProgram('TestProgram');
创建一个到当前机器人位置的线性移动 % (MoveC由3个点定义,第一个点是机器人当前的位置,所以我们对第一个位置添加一个线性移动) target0 = RDK。AddTarget(“第一点”); target0.setAsCartesianTarget ();%默认行为 target0.setPose (pose0); prog.MoveL (target0);
计算相对于前一个目标的循环移动: Pose1 = pose0*transl(50,0,0); Pose2 = pose0*transl(50,50,0);
为循环移动添加第一个目标 target1 = RDK。AddTarget(“第二点”); target1.setAsCartesianTarget (); target1.setPose (pose1);
为循环移动添加第二个目标 target2 = RDK。AddTarget(“第三点”); target2.setAsCartesianTarget (); target2.setPose (pose2);
添加循环移动指令: 掠夺。MoveC (target1 target2)
艾伯特
RE: Matlab API:没有“addMoveC”功能可用?-JFCh-06-20-2019
大家好!我想我已经找到了解决方案,如果你感兴趣的话,这就是。
好的,我发现确实没有定义函数通过Matlab API向程序添加循环移动。
在RobolinkItem类的第607行中,我们可以找到用于线性和关节运动的代码:
代码:
函数addMoveJ(this, itemtarget) 向程序中添加一个新的“移动关节”指令。 % 1: item ->目标移动到 this.link.check_connection (); command = 'Add_INSMOVE'; this.link.send_line(命令); this.link.send_item(技能); this.link.send_item(这个); this.link.send_int (1); this.link.check_status (); 结束 函数addMoveL(这个,itemtarget) 添加一个新的“移动线性”指令到程序中。 % 1: item ->目标移动到 this.link.check_connection (); command = 'Add_INSMOVE'; this.link.send_line(命令); this.link.send_item(技能); this.link.send_item(这个); this.link.send_int (2); this.link.check_status (); 结束
我所要做的就是实现另一个函数,我称之为addMoveC。唯一需要改变的行是“command”变量的初始化(设置为Add_INSMOVEC而不是Add_INSMOVE)和通过send_int()发送的值;然后,我们需要添加第二个目标,通过send_item()发送。这是函数:
代码:
函数addMoveC(this, itemtarget1, itemtarget2) 向程序中添加一个新的“循环移动”指令。 % In 1: item ->第一个移动的目标 2: item ->第二个要移动的目标 this.link.check_connection (); command = 'Add_INSMOVEC'; this.link.send_line(命令); this.link.send_item (itemtarget1); this.link.send_item (itemtarget2); this.link.send_item(这个); this.link.send_int (3); this.link.check_status () 结束
函数调用应该是这样的:
代码:
program.addMoveC (target1 target2)
我希望这能帮助那些寻找答案的可怜人。如果我忘了什么请告诉我。
JFCh
(06-20-2019, 02:07 pm)艾伯特写道:嗨,让,
我们刚刚通过Matlab API添加了对圆周运动的支持。我建议你用MoveC代替addMoveC。您可以在机器人项目上使用MoveC来移动圆形,也可以在程序项目上使用MoveC来添加圆形移动指令。
你可以从我们的GitHub存储库中获取最新版本:
https://github.com/RoboDK/RoboDK-API/tree/master/Matlab
代码:
使用圆周运动的示例 RDK = Robolink(); robot = RDK.Item(",RDK.ITEM_TYPE_ROBOT);
%获取当前机器人姿态: pose0 = robot.Pose();
添加一个新程序: prog = RDK.AddProgram('TestProgram');
创建一个到当前机器人位置的线性移动 % (MoveC由3个点定义,第一个点是机器人当前的位置,所以我们对第一个位置添加一个线性移动) target0 = RDK。AddTarget(“第一点”); target0.setAsCartesianTarget ();%默认行为 target0.setPose (pose0); prog.MoveL (target0);
计算相对于前一个目标的循环移动: Pose1 = pose0*transl(50,0,0); Pose2 = pose0*transl(50,50,0);
为循环移动添加第一个目标 target1 = RDK。AddTarget(“第二点”); target1.setAsCartesianTarget (); target1.setPose (pose1);
为循环移动添加第二个目标 target2 = RDK。AddTarget(“第三点”); target2.setAsCartesianTarget (); target2.setPose (pose2);
添加循环移动指令: 掠夺。MoveC (target1 target2)
艾伯特
艾伯特,
谢谢你的留言,我没有看到,就回复了我自己的解决方案。我肯定会采纳你的解决方案。
谢谢你!
让-
|