这一篇文章,是作者前期学习的一个经验分享,看过很多文章,大同小异,讲得也不够细致,但是他们忽略了,看这种文章的人的绝大多数都是新手,那作者作为新手,迫不及待的跟大家分享一点经验,由于作者水平有限,如有错误,一定虚心求教。
clear
%Link([theta d a apha M],'Q'),这里的Q是指的你建立的d-h模型时标准型还是改进型,默认是standard(标准型)。
前面中括号里面就是每个连杆的参数,M取0时表示这是转动关节,非0表示移动关节,默认为0。
L1=Link([0 0 0 0 0],'modified');
L2=Link([-pi/2 0 70 -pi/2 0],'modified');
L3=Link([0 20 100 0],'modified');
L4=Link([pi 70 0 -pi/2],'modified');
L5=Link([0 0 0 -pi/2 0],'modified');
L6=Link([0 50 0 pi/2 0],'modified');
%SerialLink是将各个杆件连接起来,并且命名为robot(这里可以随便取,不一定非得叫robot,
格式如下,这个比较固定,有几个杆件,就写几个在中括号里面)
robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','robot')
%name.plot就是matlab自带的一个画图函数,很多资料都有详细的讲解,中括号里面的是1~6关节的转动弧度,依次带入就好。
robot.plot([0 pi/4 0 pi/4 0 0]);
%正运动学,fkine(robot,[])=robot.fkine([]),robot就是你前面为你的机械臂所起的名字,
说白了就是告诉这个函数解哪个矩阵,中括号里面也是各个关节的转动弧度,1~6依次带入就好。
TR=fkine(robot,[0 pi/2 pi/2 0 pi/2 0]);
%逆运动学,robot.ikine(TR,Q0,M)格式和fkine很类似,TR就是你给出的末端执行器的位姿,也就是4*4的一个矩阵,合理即可。
Q0就是机械臂的初始位姿,也就是六个theta,M则是关节忽略,1表示不忽略,0表示忽略,六自由度的是不用忽略,
如果小于六自由度,就得根据实际情况忽略了。
qi=robot.ikine(TR,[0 pi/2 pi/2 0 pi/2 0],[1 1 1 1 1 1]);
hold on; %hold on,就是保留之前的plot画图空间,后面的可达空间的图也会画在上面
N=30000; %循环次数,相当于,做几次下面的那个for循环,也就是正解几次,一次会画出一个点
t1=-pi+(pi+pi)*rand(N,1);
(%设置关节的范围,t1对应的就是L1的范围,
这个每个机械臂的参数不一样,原理就是theta_min+(theta_max-theta_min)*rand(N,1);
theta_min就是这个关节的最小关节弧度,这个一般由厂家提供,当然自己学习的话,也可以随便设设,
作者的这个模型就是随便设置的rand(N,1);N次数,是产生0-1的随机数,
说白了这一步就是为了获得一个符合机器人参数的随机关节弧度,这也是蒙特卡罗思想的应用。)
t2=0+0.73*pi*rand(N,1);
t3=0+0.78*pi*rand(N,1);
t4=-0.92*pi+(0.92*pi+0.92*pi)*rand(N,1);
t5=0+1.02*pi*rand(N,1);
t6=-pi+(pi+pi)*rand(N,1);
%下面这个循环,具体就得自己查资料学习,其中我把我当时学习的难点,以及现在很多文章里面没有的解释说一下,n=1:1:N,
就是在从1到N,每次加1(中间那个1),photo这一排,就是做一次运动学正解,然后plot3也是matlab自带的画图函数,
做一次正解,就把他的解标记下来,这样随机循环N次就可以得到机械臂的可达空间了,
plot3的具体用法matlab有关书的基本上都会有,photo解出来是一个4*4的矩阵,而photo(1,4)就是讲这个矩阵的第一行,第四列的那个元素提取出来,
学过机器人学这本书的朋友们应该知道这就是Px,后面的Py,Pz,也就是末端执行器的x,y,z三个坐标,就可以确定一个点了。
for n=1:1:N
photo=robot.fkine([t1(n),t2(n),t3(n),t4(n),t5(n),t6(n)]);
plot3(photo(1,4),photo(2,4),photo(3,4),'b.','MarkerSize',0.5);
end
作者的机器人工具箱是9.10版本的,测试是可以通过photo(1,4)的方法提取出来的,有些作者说不行,最可能的原因就是机器人工具箱的版本不同,所导致的差异。