线程评级:
Matlab API:没有“addMoveC”函数可用?
# 1
大家好,

我是这个论坛的新手,所以我要简单介绍一下我自己。我是蒙特利尔理工大学的一名研究生,我正在使用发那科机器人M-20iB/25型。我正在使用RoboDK为我的3D打印项目开发轨迹。

我一直在尝试用RoboDK的Matlab API实现一些脚本,并注意到库中没有“addMoveC”函数。这正常吗?我可以添加线性和关节动作,但不能添加圆形动作。

是否有可能是我安装了一个较旧版本的API,还是我遗漏了一些东西?

我已经搜索了这个论坛,但没有找到相关的主题。

谢谢你的帮助,

让-
嗨,让,

我们刚刚通过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)


艾伯特
# 3
大家好!我想我已经找到了解决方案,如果你感兴趣的话,这就是。

好的,我发现确实没有定义函数通过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)


艾伯特


艾伯特,

谢谢你的留言,我没有看到,就回复了我自己的解决方案。我肯定会采纳你的解决方案。

谢谢你!

让-




浏览此线程的用户:
1客人(年代)