【Matlab 六自由度机器人】关于灵活工作空间与可达工作空间的理解(附MATLAB推导代码)

往期回顾

【Matlab 六自由度机器人】
1. 建立机器人模型
2. 运动学正解
3. 基于蒙特卡洛法(Monte Carlo Method)构建工作空间

前言

本篇介绍机器人关于灵活工作空间可达工作空间,如何理解灵活工作空间与可达工作空间,并利用文中的实例辅助理解。


以下是本篇文章正文内容,包含对灵活工作空间与可达工作空间的图文理解和代码的辅助理解。

正文

一、两种工作空间的定义及区别

定义:工作空间分析是设计机器人操作器的首要环节。机器人的工作空间是机器人操作器的工作区域,是衡量机器人性能的重要指标。根据操作器工作时的位姿特点,工作空间可分为可达工作空间和灵活工作空间。

1. 可达工作空间

可达工作空间表示的是,对于一个自由度大于1的机械结构来说,它无论是平动关节结构或是旋转关节结构(除开球关节),都会有一个工作范围。这个关节在运动的过程当中,其末端的坐标系能扫到的点都可以看作该机械机构能够到达的位置。不到达的姿态,这些所有能够到达的位置的点的集合,就是可达工作空间的含义。

2. 灵活工作空间

灵活工作空间表示的是,对于一个自由度大于2的机械结构,而且是处于同一平面内的旋转关节大于2的结构,都可以以不同的姿态(姿势)到达某一个位置点。旋转关节在运动的过程当中,其末端的坐标系原点都该点上,但是是以不同的姿态到达。相同的位置,以不同的姿态,即不同的位姿。而这些所有能够任意点到达的位姿的点的集合,就是灵活工作空间的含义。

小结:可达工作空间表示的是位置,灵活工作空间表示的是位姿。正是位置和位姿的两种不同表达方式将可达工作空间与灵活工作空间区分开。
因此我们也能看出,对于可达工作空间,实现灵活工作空间的条件更为苛刻。但这两种工作空间都含有位置的点的集合,而灵活工作空间的点的集合由于条件的苛刻,显然是可达工作空间的点的集合的子集
灵 活 空 间 的 点 的 集 合 ⊆ 可 达 空 间 的 点 的 集 合 灵活空间的点的集合⊆可达空间的点的集合

二、辅助理解工作空间的代码

以平面连杆结构为例,加深理解工作空间。以下是平面连杆机构,其第一根连杆长度为120mm,第二根连杆长度为60mm
请添加图片描述
代码如下:

%连杆偏移
d1 = 0;d2 = 0;d3 = 0;
%连杆长度
a1 = 0;a2 = 120;a3 = 60;
%连杆扭角
alpha1 = 0;alpha2 = 0;alpha3 = 0;
%建立机器人模型
%       theta  d        a        alpha     offset(关节变量偏移量)
L1=Link([0     d1       a1       alpha1    0     ],'modified');
L2=Link([0     d2       a2       alpha2    0     ],'modified');
L3=Link([0     d3       a3       alpha3    0     ],'modified');
%限制机器人的关节空间
L1.qlim = [(-165/180)*pi,(165/180)*pi];
L2.qlim = [(-95/180)*pi, (70/180) *pi];
L3.qlim = [(-85/180)*pi, (95/180) *pi];
%连接连杆,机器人取名平面连杆
robot=SerialLink([L1 L2 L3],'name','平面连杆');
robot.plot([0,0,0]);
%输出机器人模型,后面的三个角为输出时的theta姿态
robot.teach()

1. 可达工作空间的代码表示

可达工作空间表达的是给定一个位置的集合,机械臂末端至少有一个方向(解)可以到达该集合中的位置,那么该集合就是机械臂的可达空间。

对于上述的平面连杆机构,其可达工作空间如下:可达工作空间
代码如下:

theta1min = -165;theta1max = 165;
theta2min = -95 ;theta2max = 70 ;
theta3min = -85 ;theta3max = 95 ;
n = 3000;
x = zeros;y = zeros;z = zeros;
for i = 1:n

    theta1 = theta1min*(pi/180) + (theta1max-theta1min)*(pi/180)*rand;
    theta2 = theta2min*(pi/180) + (theta2max-theta2min)*(pi/180)*rand;
    theta3 = theta3min*(pi/180) + (theta3max-theta3min)*(pi/180)*rand;
        
    Tws = robot.fkine([theta1,theta2,theta3]);
    x(i) = Tws.t(1,1);
    y(i) = Tws.t(2,1);
    z(i) = Tws.t(3,1);
end
figure('color',[1 1 1]);
plot3(x,y,z,'b.','MarkerSize',0.5)
hold on
xlabel('x轴(millimeter)','color','k','fontsize',15);
ylabel('y轴(millimeter)','color','k','fontsize',15);
zlabel('z轴(millimeter)','color','k','fontsize',15);
grid on

2. 灵活工作空间的代码表示

灵活工作空间表达的是给定一个位置的集合,机械臂末端有任意个方向(解)可以到达该集合中的位置,那么该集合就是机械臂的次要工作空间。

对于上述的平面连杆机构,对于某个位置点 [ x , y ] [x,y] [x,y]的灵活工作空间公式推导如下:
注意: 该位置点 [ x , y ] [x,y] [x,y]为已知条件
{ L 1 = 120 L 2 = 60 x = L 1 c o s Θ 1 + L 2 c o s ( Θ 1 + Θ 2 ) y = L 1 s i n Θ 1 + L 2 s i n ( Θ 1 + Θ 2 ) \left\{ \begin{aligned} L_1&=120\\ L_2&=60\\ x&=L_1cos\Theta_1+L_2cos(\Theta_1+\Theta_2)\\ y&=L_1sin\Theta_1+L_2sin(\Theta_1+\Theta_2) \end{aligned} \right. L1L2xy=120=60=L1cosΘ1+L2cos(Θ1+Θ2)=L1sinΘ1+L2sin(Θ1+Θ2)
对上述公式使用 solve 函数进行求解,解得theta1,theta2对应的值
代码如下:

syms theta1 theta2
l1 = 120;
l2 = 60;
eq1 = x == l1*cos(theta1)+l2*cos(theta1+theta2);
eq2 = y == l1*sin(theta1)+l2*sin(theta1+theta2);
s = solve(eq1,eq2,[theta1,theta2]);
s1 = [s.theta1(1) s.theta2(1)];
s2 = [s.theta1(2) s.theta2(2)];

解得:
s 1 = { t h e t a 1 = 2 ∗ a t a n ( ( 240 ∗ y − ( 3600 ∗ ( − ( x 2 + y 2 − 3600 ) ∗ ( x 2 + y 2 − 32400 ) ) ( 1 / 2 ) ) / ( x 2 + y 2 − 3600 ) + ( x 2 ∗ ( − ( x 2 + y 2 − 3600 ) ∗ ( x 2 + y 2 − 32400 ) ) ( 1 / 2 ) ) / ( x 2 + y 2 − 3600 ) + ( y 2 ∗ ( − ( x 2 + y 2 − 3600 ) ∗ ( x 2 + y 2 − 32400 ) ) ( 1 / 2 ) ) / ( x 2 + y 2 − 3600 ) ) / ( x 2 + 240 ∗ x + y 2 + 10800 ) ) t h e t a 2 = − 2 ∗ a t a n ( ( − ( x 2 + y 2 − 3600 ) ∗ ( x 2 + y 2 − 32400 ) ) ( 1 / 2 ) / ( x 2 + y 2 − 3600 ) ) s1=\left\{ \begin{aligned} theta1&=2*atan((240*y - (3600*(-(x^2 + y^2 - 3600)*(x^2 + y^2 - 32400))^(1/2))/(x^2 + y^2 - 3600) + (x^2*(-(x^2 + y^2 - 3600)*(x^2 + y^2 - 32400))^(1/2))/(x^2 + y^2 - 3600) + (y^2*(-(x^2 + y^2 - 3600)*(x^2 + y^2 - 32400))^(1/2))/(x^2 + y^2 - 3600))/(x^2 + 240*x + y^2 + 10800)) \\ theta2&=-2*atan((-(x^2 + y^2 - 3600)*(x^2 + y^2 - 32400))^(1/2)/(x^2 + y^2 - 3600)) \end{aligned} \right. s1={theta1theta2=2atan((240y(3600((x2+y23600)(x2+y232400))(1/2))/(x2+y23600)+(x2((x2+y23600)(x2+y232400))(1/2))/(x2+y23600)+(y2((x2+y23600)(x2+y232400))(1/2))/(x2+y23600))/(x2+240x+y2+10800))=2atan(((x2+y23600)(x2+y232400))(1/2)/(x2+y23600))
s 2 = { t h e t a 1 = 2 ∗ a t a n ( ( 240 ∗ y + ( 3600 ∗ ( − ( x 2 + y 2 − 3600 ) ∗ ( x 2 + y 2 − 32400 ) ) ( 1 / 2 ) ) / ( x 2 + y 2 − 3600 ) − ( x 2 ∗ ( − ( x 2 + y 2 − 3600 ) ∗ ( x 2 + y 2 − 32400 ) ) ( 1 / 2 ) ) / ( x 2 + y 2 − 3600 ) − ( y 2 ∗ ( − ( x 2 + y 2 − 3600 ) ∗ ( x 2 + y 2 − 32400 ) ) ( 1 / 2 ) ) / ( x 2 + y 2 − 3600 ) ) / ( x 2 + 240 ∗ x + y 2 + 10800 ) ) t h e t a 2 = 2 ∗ a t a n ( ( − ( x 2 + y 2 − 3600 ) ∗ ( x 2 + y 2 − 32400 ) ) ( 1 / 2 ) / ( x 2 + y 2 − 3600 ) ) s2=\left\{ \begin{aligned} theta1&=2*atan((240*y + (3600*(-(x^2 + y^2 - 3600)*(x^2 + y^2 - 32400))^(1/2))/(x^2 + y^2 - 3600) - (x^2*(-(x^2 + y^2 - 3600)*(x^2 + y^2 - 32400))^(1/2))/(x^2 + y^2 - 3600) - (y^2*(-(x^2 + y^2 - 3600)*(x^2 + y^2 - 32400))^(1/2))/(x^2 + y^2 - 3600))/(x^2 + 240*x + y^2 + 10800)) \\ theta2&=2*atan((-(x^2 + y^2 - 3600)*(x^2 + y^2 - 32400))^(1/2)/(x^2 + y^2 - 3600)) \end{aligned} \right. s2={theta1theta2=2atan((240y+(3600((x2+y23600)(x2+y232400))(1/2))/(x2+y23600)(x2((x2+y23600)(x2+y232400))(1/2))/(x2+y23600)(y2((x2+y23600)(x2+y232400))(1/2))/(x2+y23600))/(x2+240x+y2+10800))=2atan(((x2+y23600)(x2+y232400))(1/2)/(x2+y23600))


总结

以上就是关于灵活工作空间与可达工作空间的的内容,本文详细介绍了如何理解工作空间定义及区别,并以图文及代码进行辅助理解。

参考文献

  1. 工作空间分析
  2. 机械臂主要工作空间和灵活工作空间 Primary WorkSpace and Secondary WorkSpace
  3. 机械臂的两种工作空间理解
  4. Matlab解方程组solve
  • 14
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Albert_Lsk

今天又能喝柠檬茶啦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值