蒙特卡洛法的七自由度机械臂工作空间分析
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.有什么问题,可以留言,学识有限,望诸位同僚批评指正。
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量