基于Matlab|基于Matlab Robotics Toolbox的Dobot机械臂运动规划(2)
【基于Matlab Robotics Toolbox的Dobot机械臂运动规划】系列文章是我在学习robotics toolbox中所做工作的记录,方便自己后面复习、改进。
基于Matlab R2018b 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。
%定义连杆%
%thetadaalpha
L1 = Link([0138 0pi/2]);
L2 = Link([00 1350]);
L3 = Link([00 1470]);
%定义关节角范围%
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滑块移动,进行逆解操作。
Created with Rapha?l 2.2.0 开始正解操作 正向θ滑块移动,同时显示角度 以θ进行正运动学计算得到(x,y,z)坐标 将(x,y,z)赋值给逆向操作面板滑块 显示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,实现由正运动学驱动机器人。
参考https://www.mathworks.com/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
% LT push+3
% RT push-3%机器人初始化, 这部分与系列文章(1)中相同,此处省略%%正运动学控制%
q = [0 0 0];
dobot.plot(q,'tilesize',300);
view(121,41);
%手柄控制%
for i = 1:1:100000
q(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
【基于Matlab|基于Matlab Robotics Toolbox的Dobot机械臂运动规划(2)】展示视频如下
【建议改成】建 议 改 成
推荐阅读
- 基于微信小程序带后端ssm接口小区物业管理平台设计
- 基于|基于 antd 风格的 element-table + pagination 的二次封装
- 基于爱,才会有“愿望”当“要求”。2017.8.12
- javaweb|基于Servlet+jsp+mysql开发javaWeb学生成绩管理系统
- JavaScript|vue 基于axios封装request接口请求——request.js文件
- hough变换检测的matlab程序
- 韵达基于云原生的业务中台建设 | 实战派
- EasyOA|EasyOA 基于SSM的实现 未完成总结与自我批判
- 基于stm32智能风扇|基于stm32智能风扇_一款基于STM32的智能灭火机器人设计
- stm32|基于STM32和freeRTOS智能门锁设计方案