线程评级:
  • 0 (s) - 0平均投票
  • 1
  • 2
  • 3
  • 4
  • 5
Matlab API:没有“addMoveC”功能?
# 1
大家好,

我是新到这个论坛,所以我将介绍一下我自己。我主在巴黎蒙特利尔和我发那科机器人,工作模型M-20iB / 25。我使用RoboDK发展轨迹进行3 d印刷项目。

我一直试图用Matlab实现一些脚本API RoboDK,发现没有librairy“addMoveC”功能。是正常的吗?我可以添加线性和联合行动,但没有循环动作。

有没有可能,我安装了一个旧版本的API或者我遗漏了什么东西?

我已经搜查了这个论坛,但没有发现相关的线程。

谢谢你的帮助,

让-
# 2
嗨,让,

我们只是添加了支持循环运动通过Matlab API。我推荐你使用MoveC代替addMoveC。在移动机器人的项目可以使用MoveC圆形或程序项添加一个圆形移动指令。

你可以从我们的GitHub库的最新版本:
https://github.com/RoboDK/RoboDK-API/tree/master/Matlab

代码:
% %的例子使用圆周运动
RDK = Robolink ();
机器人= RDK.Item (“RDK.ITEM_TYPE_ROBOT);

%获取当前机器人构成:
pose0 = robot.Pose ();

%添加一个新项目:
学监= 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)


艾伯特
# 3
大家好!我想我已经找到了解决方案,所以在这里如果你感兴趣。

好的,我发现的确没有定义函数添加一个圆形移动通过Matlab程序API。

在第607行RobolinkItem类中,我们可以发现这代码为线性和关节运动:
代码:
函数addMoveJ(这技能)
%增加了一个新的“联合”指令程序。
% 1:项目- >目标移动
this.link.check_connection ();
命令=“Add_INSMOVE”;
this.link.send_line(命令);
this.link.send_item(技能);
this.link.send_item(这个);
this.link.send_int (1);
this.link.check_status ();
结束
函数addMoveL(这技能)
%添加了一个新的“线性”指令程序。
% 1:项目- >目标移动
this.link.check_connection ();
命令=“Add_INSMOVE”;
this.link.send_line(命令);
this.link.send_item(技能);
this.link.send_item(这个);
this.link.send_int (2);
this.link.check_status ();
结束

我要做的是实现另一个函数,我叫addMoveC。唯一改变的行是“命令”变量的初始化(设置为Add_INSMOVEC代替Add_INSMOVE)和发送通过价值send_int ();然后,我们需要添加第二个目标发送通过send_item ()。这是功能:

代码:
函数addMoveC (itemtarget1, itemtarget2)
%添加了一个新的“圆形”指令程序。
% 1:项目- >第一个目标去
% 2:项目- >第二目标移动
this.link.check_connection ();
命令=“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圆形或程序项添加一个圆形移动指令。

你可以从我们的GitHub库的最新版本:
https://github.com/RoboDK/RoboDK-API/tree/master/Matlab

代码:
% %的例子使用圆周运动
RDK = Robolink ();
机器人= RDK.Item (“RDK.ITEM_TYPE_ROBOT);

%获取当前机器人构成:
pose0 = robot.Pose ();

%添加一个新项目:
学监= 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)


艾伯特


艾伯特,

谢谢你的信息,我没有看到它之前回复我自己的解决方案。我一定会去你的解决方案。

谢谢你!

让-




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