matlab机器人画圆

您所在的位置:网站首页 abb机器人仿真画五角星 matlab机器人画圆

matlab机器人画圆

2024-06-19 04:12| 来源: 网络整理| 查看: 265

最近在学习机器人学导论,老师发来一个.m文件,构建了一个机器人,然后让这个机器人末端画圆。然而我遇到了很多问题。 先上代码

%定义连杆 % theta d a alpha L1 = 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)]; %连接连杆 dobot = SerialLink([L1 L2 L3],'name','Dobot'); %定义圆 N = (0:0.5:100)'; center = [175 0 5]; radius = 50; theta = ( N/N(end) )*2*pi; points = (center + radius*[cos(theta) sin(theta) zeros(size(theta))])'; plot3(points(1,:),points(2,:),points(3,:),'r'); %pionts矩阵是“横着”的,取其转置矩阵,进一步得到其齐次变换矩阵 T = transl(points'); %当反解的机器人对象的自由度少于6时,要用mask vector进行忽略某个关节自由度% q = dobot.ikine(T,'mask',[1 1 1 0 0 0]); hold on; dobot.plot(q,'tilesize',300)

问题一、 文件名有问题,导致.m文件无法执行 如图所示 文件名为 dobot+robot.m 其中有‘+’,无法正确执行启动的代码 解决办法: 重命名为dobot_robot.m 也可以选中所有代码,右键,执行所选内容

问题二、程序执行时报错

错误使用 SerialLink/fkine (line 85) q must have 3 columns 出错 SerialLink/jacob0 (line 61) Tn = fkine(robot, q); % end-effector transformation 出错 SerialLink/ikine (line 153) J0 = jacob0(robot, q); 出错 dobot_robot (line 25) q = dobot.ikine(T,'mask',[1 1 1 0 0 0]);

错误出现在这一行q = dobot.ikine(T,‘mask’,[1 1 1 0 0 0]); ikine函数用于逆运动学求解,使用help指令查看帮助,找到ikine的用法 Q = R.ikine(T, Q0, M, OPTIONS) 其中T表示位姿,Q0表示初始状态,M是指几轴运动 本例中T已经计算好了,是一个圆; Q0初始为0,这里应该为[0 0 0]; dobot为3轴机器人,这里M为[1 1 1 0 0 0]; 解决办法 修改这一行为q = dobot.ikine(T,[0 0 0],[1 1 1 0 0 0]); 修改后运行程序,正常运行,弹出画面,但是不完整,明显缺少上面一块 在这里插入图片描述 可能因为先画的圆,导致坐标系不完整,这里在画圆后加一行机器人的显示 dobot.plot([0 0 0]); 在这里插入图片描述 机器人果然动起来了 附上最后代码

%定义连杆 % theta d a alpha L1 = 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)]; %连接连杆 dobot = SerialLink([L1 L2 L3],'name','Dobot'); %定义圆 N = (0:0.5:100)'; center = [175 0 5]; radius = 50; theta = ( N/N(end) )*2*pi; points = (center + radius*[cos(theta) sin(theta) zeros(size(theta))])'; plot3(points(1,:),points(2,:),points(3,:),'r'); dobot.plot([0 0 0]);%显示机器人初始状态 %pionts矩阵是“横着”的,取其转置矩阵,进一步得到其齐次变换矩阵 T = transl(points'); %当反解的机器人对象的自由度少于6时,要用mask vector进行忽略某个关节自由度% q = dobot.ikine(T,[0 0 0],[1 1 1 0 0 0]); hold on; dobot.plot(q,'tilesize',300)

matlab版本2017a Robotics Toolbox 版本 9.10.0

说的有点啰嗦,以上是我解决这次问题的步骤,记录下来,希望能帮助到有相同问题的人。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3