关于matlab解机械臂正逆运动学,基于蒙特卡罗的工作空间算法的一些理解(适合初学者)希望对你有帮助。

这一篇文章,是作者前期学习的一个经验分享,看过很多文章,大同小异,讲得也不够细致,但是他们忽略了,看这种文章的人的绝大多数都是新手,那作者作为新手,迫不及待的跟大家分享一点经验,由于作者水平有限,如有错误,一定虚心求教。

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)的方法提取出来的,有些作者说不行,最可能的原因就是机器人工具箱的版本不同,所导致的差异。
关于matlab解机械臂正逆运动学,基于蒙特卡罗的工作空间算法的一些理解(适合初学者)希望对你有帮助。_第1张图片
关于matlab解机械臂正逆运动学,基于蒙特卡罗的工作空间算法的一些理解(适合初学者)希望对你有帮助。_第2张图片

你可能感兴趣的:(机械臂工作空间,蒙特卡罗)