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.有什么问题,可以留言,学识有限,望诸位同僚批评指正。