200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 基于Matlab Robotics Toolbox的Dobot机械臂运动规划(2)

基于Matlab Robotics Toolbox的Dobot机械臂运动规划(2)

时间:2023-12-13 06:38:21

相关推荐

基于Matlab Robotics Toolbox的Dobot机械臂运动规划(2)

【基于Matlab Robotics Toolbox的Dobot机械臂运动规划】系列文章是我在学习robotics toolbox中所做工作的记录,方便自己后面复习、改进。

基于Matlab Rb 9.5; Peter Corke的Robotics Toolbox 10.3.1

(2)主要介绍了基于App Designer做图形界面、用joystick实现手柄与Matlab通讯。

1.图形界面

1.1正运动学部分

Matlab宣称将来会取消guide,以后仅保留app designer。所以我选择使用app designer做一个图形界面。

首先做正运动学部分。

在设计视图里把组件拖入画布后,进入代码视图。右键选择组件浏览器里面的app.UIFigure,创建一个StartupFcn回调,这里我命名为mainFcn。

%定义连杆%% theta d a alphaL1 = Link([0 138 0 pi/2]);L2 = Link([0 0 135 0]);L3 = Link([0 0 147 0]);%定义关节角范围%L1.qlim = [deg2rad(-90) deg2rad(90)];L2.qlim = [deg2rad(0) deg2rad(85)];L3.qlim = [deg2rad(-90) deg2rad(10)];L = [L1 L2 L3];%连接连杆%dobot = SerialLink(L,'name','Dobot');%用num2str显示滑块值%app.theta1.Text = num2str(app.Slider1.Value);app.theta2.Text = num2str(app.Slider2.Value);app.theta3.Text = num2str(app.Slider3.Value);%滑块值转换为弧度%T1 = deg2rad(app.Slider1.Value);T2 = deg2rad(app.Slider2.Value);T3 = deg2rad(app.Slider3.Value);T = [T1 T2 T3];%显示机器人%dobot.plot(T,'tilesize',300)%正运动学求解并显示%f = dobot.fkine(T);app.Labelx.Text = num2str(f.t(1));app.Labely.Text = num2str(f.t(2));app.Labelz.Text = num2str(f.t(3));

在设计视图中添加slider时,我手动设置了slider的limits,使其与关节角范围一致。

然后右键选择app.Slider1,创建一个ValueChanged回调。

当slider的值发生变化,就重新进入main函数。

runStartupFcn(app, @mainFcn)

Slider2、Slider3采取同样的操作。

正运动学app如下:

1.2加入逆运动学

在设计时,考虑到加入逆运动学后,当正运动学滑块移动时,逆运动学滑块也应跟随移动。

为实现以下功能,优化代码结构,将各部分写成单独的函数。

app启动时,默认以初始θ数据进行正解操作,显示机器人所有信息;正运动学操作面板中θ滑块移动,进行正解操作;逆运动学操作面板中x/y/z滑块移动,进行逆解操作。

其中,正解操作流程如图所示:

逆解操作流程同理,其中逆运动学计算部分代码如下:

%由位置滑块给app.T赋值,逆解得到app.q%function inverse(app)%直接调用机器人初始化函数%Robot_Initialization(app);%Slider4、5、6分别为x、y、z%app.T1 = app.Slider4.Value;app.T2 = app.Slider5.Value;app.T3 = app.Slider6.Value;%用transl()将坐标转成transformation matrix%app.T = transl(app.T1,app.T2,app.T3);app.q = app.dobot.ikine(app.T,'mask',[1 1 1 0 0 0]);end

机械臂正向运动学的解是唯一确定的,即各个关节变量给定之后,末端执行器的位姿是唯一确定的;而逆向运动学往往具有多重解,也可能解不存在。

所以有时候滑动逆运动学操作面板中的x/y/z滑块,不一定会有解,Matlab会报错。因为我在这里的程序中并没有校验输入的(x,y,z)是否有解,而是直接进行求解。忽略逆解报错就行

2.用手柄控制机器人

主要思路是Matlab接收来自手柄硬件的信号,然后改编机器人关节变量q,实现由正运动学驱动机器人。

参考/help/sl3d/vrjoystick.html.

使用vrjoystick(id)函数创建joystick对象,并用axis(joy, n)函数调用手柄各输入轴的参数,去控制机器人。

主要代码如下:

%连接手柄%joy = vrjoystick(1);%注:axis函数参数硬件对应表%% 按键 方向 正负 axis number%L右 + 1%L左 - 1%L下 + 2%L上 - 2%R右 + 4%R左 - 4%R下 + 5%R上 - 5%LTpush + 3%RTpush - 3%机器人初始化, 这部分与系列文章(1)中相同,此处省略%%正运动学控制%q = [0 0 0];dobot.plot(q,'tilesize',300);view(121,41);%手柄控制%for i = 1:1:100000q(1) = q(1) + 0.1 * axis(joy,3); % [LT/RT]控制底座旋转q(2) = q(2) + -0.1 * axis(joy,2); % L的[上/下]控制大臂q(3) = q(3) + -0.1 * axis(joy,5); % R的[上/下]控制小臂dobot.plot(q,'tilesize',300);end

展示视频如下

【建议改成】建 议 改 成

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。