蒙特卡洛法的七自由度机械臂工作空间分析

MATLAB R2014a
1.蒙特卡洛法:
i.确定机械臂各关节变量的变化范围(θ_min,θ_max)
ii.确定末端执行器的位姿矩阵T=
蒙特卡洛法的七自由度机械臂工作空间分析
文章图片

位置向量为[px,py,pz)]’。
iii.利用随机函数rand生成N个 0-1的随机点,以(θ_max-θ_min)?rand为随机步长,得各关节变量的随机值,θ_i=θ_(i,min)+(θ_(i,max)-θ_(i,min))?rand
iv. 把以上生成的所有关节变量的随机值,代入到位置向量,
v.收集这些坐标点,并绘制。
【蒙特卡洛法的七自由度机械臂工作空间分析】2.利用robotics toolbox 10.2(版本不同,结果可能不 同),首先

startup_rvc %启动工具箱
L(1)= Link('revolute', 'd', 0, 'a', 0, 'alpha', pi/2); L(2)= Link('revolute', 'd', 147, 'a', 0, 'alpha', pi/2); L(3)= Link('revolute', 'd', 600, 'a', 0, 'alpha', pi/2); L(4)= Link('revolute', 'd', 147, 'a', 0, 'alpha', -pi/2); L(5)= Link('revolute', 'd', 600, 'a', 0, 'alpha', pi/2); L(6)= Link('revolute', 'd', 0, 'a', 0, 'alpha', -pi/2); L(7)= Link('revolute', 'd', 160, 'a', 0, 'alpha', pi/2); sevenlink=SerialLink(L,'name','7R') %建立7R的模型 N=1000; %随机值数量,一般取大,这里取1000,运算快 R1=unifrnd(-pi,pi,[1,N]); %7个连杆的各关节随机值,蒙特卡洛法要求 R2=unifrnd(pi/3,5*pi/3,[1,N]); R3=unifrnd(-pi,pi,[1,N]); R4=unifrnd(-pi/2,pi/2,[1,N]); R5=unifrnd(-pi,pi,[1,N]); R6=unifrnd(-5*pi/6,5*pi/6,[1,N]); R7=unifrnd(-pi,pi,[1,N]); A= cell(N, 7); %定义一个元胞组,用于储存以上7个连杆关节变量随机值 for i = 1:N A{i} =[R1(i) R2(i) R3(i) R4(i) R5(i) R6(i) R7(i)]; end B=cell2mat(A); %转换为矩阵 T07=double(sevenlink.fkine(B)); %末端位姿矩阵 %以下分别输入,得两个图 scatter3(squeeze(T07(1,4,:)),squeeze(T07(2,4,:)),squeeze(T07(3,4,:))) %xyz三维图 plot(squeeze(T07(1,4,:)),squeeze(T07(2,4,:)),'o') %xy二维图

生成的二维如上蒙特卡洛法的七自由度机械臂工作空间分析
文章图片

3.说明
a.参考https://blog.csdn.net/weixin_43606771/article/details/83861878的方法,并添加了说明,连杆更多了。
b.N取大效果更好,比如50000;
c.关于矩阵超过维度的说明:
工具箱中,fkine方法,求得后:size(fkine)=1,而不是4x4,
故用 double(fkine),此时size(double(fkine)),为4x4。
d.有什么问题,可以留言,学识有限,望诸位同僚批评指正。

    推荐阅读