matlab如何看机器人末端坐标,关于RobotStudio中机器人末端位置的MATLAB仿真验证

关于RobotStudio中机器人末端位置的MATLAB仿真验证

最近事情贼多,感觉有点乏力。

48cd88db5b5e15392aac5449d56af384.png

主要是最近在着手写一篇关于机器人轨迹规划的文章。随之而来的,当然是一堆的仿真,以及实验平台的搭建,还要想到一种合适的工况,太难了!!!

今天呢,遇到点有点讨厌的困难,让我调试了好久好久。

74c5ed9c874993aee613834f7da9de85.png

话不多说,我觉得我遇到的问题大家多多少少也能起一个借鉴的作用啊。

问题就是:

在RobotStudio和MATLAB两个软件中,初始姿态相同的两个机器人,输入相同的角度,最后达到的位置竟然不同!!!

换句话说,就是在RobotStudio里,任意给定机器人一个位姿,通过示教器得到了各个关节角度以及末端的位置,然后将角度信息输入MATLAB中用机器人工具箱建立的连杆模型,发现计算出来的齐次矩阵里的位置信息和示教器里的不一样。

啥也不说了,先上MATLAB机器人工具箱建立连杆模型的代码:

L(1)=Link([0 290 0 pi/2]);

L(2)=Link([0 0 270 0]);

L(3)=Link([0 0 70 pi/2]);

L(4)=Link([0 302 0 -pi/2]);

L(5)=Link([0 0 0 pi/2]);

L(6)=Link([0 72 0 0]);

ABB120=SerialLink(L,'name','sixlink');

ABB120.plot([0 0 0 0 0 0]);

运行出来后其实姿态有点奇怪,但没所谓啊,每个人建立的DH坐标系都可以是不同的。下面是该姿态的连杆模型和实际姿态:

df6e7fdc5250434eca673aa0cca17888.png

84e24e74b11355f43dd961f706713125.png

为了解决上面所说的问题,其实很明显,就是我的DH坐标系里,肯定有几个关节的坐标系是和RobotStudio里是不一样的。这样很好办,我们只用将连杆模型里关节运动情况和RobotStudio里的关节运动情况相比较,就能知道是哪几个关节有问题。具体过程就不说了,直接上结果:

e134875a68a55de2fc0a1d3aab27fe5d.png

de5796e1c25082fb80e7bff10b8fc71f.png

b54fcb0f77d5240e22c1968ba7e321d1.png

f6d1172d43be0aa700bf383aa651469f.png

ca9d8f5779cb1d608497efcc92b7f288.png

633eabc1f61327e6a855183e8a2da3df.png

最后,就得到了我们的结论:

校验结果:

第一关节:准确无误!

第二关节:关节转动方向彻底相反!

第三关节:关节转动方向彻底相反!

第四关节:准确无误!

第五关节:关节转动方向彻底相反!

第六关节:准确无误!

坐标系指向恰好相反,对位置影响问题不大。

每个人建立DH坐标的方式不同,仅供参考哇!

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,有两个问题需要解决。 问题一是文件名有问题,导致.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的维度不正确导致的。在这种情况下,需要确保关节角度q是一个3列的矩阵。你可以检查一下你的关节角度q的维度是否正确。 关于matlab机器人末端画圆的问题,可以使用matlabRobotics System Toolbox来实现。下面是一个示例代码,演示了如何使用matlab机器人模型和运动学函数来控制机器人末端画圆: ```matlab % 创建机器人模型 robot = loadrobot('dobot'); % 设置机器人的关节角度 q = [0, pi/4, 0, pi/2, 0]; % 创建一个圆的路径 radius = 0.1; % 圆的半径 theta = linspace(0, 2*pi, 100); % 角度范围 x = radius * cos(theta); % x坐标 y = radius * sin(theta); % y坐标 z = zeros(size(theta)); % z坐标 % 将路径转换为机器人末端的位姿 poses = zeros(4, 4, length(theta)); for i = 1:length(theta) T = transl(x(i), y(i), z(i)); poses(:, :, i) = robot.fkine(q) * T; end % 控制机器人末端画圆 for i = 1:length(theta) robot.animate(poses(:, :, i)); drawnow; end ``` 这段代码首先创建了一个dobot机器人模型,然后设置了机器人的关节角度。接下来,创建了一个圆的路径,并将路径转换为机器人末端的位姿。最后,通过循环控制机器人末端沿着圆形路径移动,并使用`robot.animate`函数实时显示机器人的运动。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值