【机器人学】1-3.六自由度机器人工作空间 【附MATLAB代码】

前言      

六自由度机器人正解中,我们已得到六自由度机械臂的正运动学方程,将关节变量代入该方程即可求得机械臂末端的位姿。

实际生活中,机器人的每个关节是有限制的,也就意味着可以得到机械臂末端所能到达的所有位置,我们将这个可能到达的位置的集合称为可达工作空间,而这也是机械臂的一个重要参数指标。

 分析机械臂工作空间的方法有以下三种:几何构建法、解析法和数值计算法。

 蒙特卡洛法就是数值计算法的其中一种,该方法是随机选取大量的采样点,来尽可能构建出机器人完整的工作空间。

蒙特卡洛法

机械臂工作空间的求解方法主要有图解法、解析法和数值法。而图解法和解析法都受关节数目的限制,对于有些机械臂无法准确描述,数值法计算量太大,对于有些边界曲面可靠性得不到保证。因此采用从数值法衍生发展出来的基于随机概率的算法:蒙特卡洛法。

其计算思想如下:

  • 机械臂的各关节是在其相应取值范围内工作;
  • 所有关节在相应取值范围内随机遍历取值;
  • 末端点的所有随机值的集合就构成了机械臂的工作空间

机器人工作空间

机器人的工作空间(workspace)是指当机器人执行所有可能动作时,其末端执行器扫过的总体空间体积。工作空间受限于机器人的几何结构以及各关节上的机械限位。例如六自由度机器人的每个关节都受不同的角度和关节长度的限制,如matlab机器人工具箱中:建立机器人模型的 qlim 函数,对机器人的不同的关节都进行了不同程度上的限位。

机械臂末端执行器以一种以上的方向到达的目标点的集合为可达工作空间。机械臂能以任意方向到达的目标点的集合为灵活工作空间,灵活工作空间是可达工作空间的子集

废话少说,知道你们喜欢什么,直接上代码。

% 求齐次变换矩阵
function T = DHTrans(alpha, a, d, theta)
T= [cos(theta)             -sin(theta)            0            a;
    sin(theta)*cos(alpha)  cos(theta)*cos(alpha)  -sin(alpha)  -sin(alpha)*d;
    sin(theta)*sin(alpha)  cos(theta)*sin(alpha)  cos(alpha)   cos(alpha)*d;
    0                      0                      0            1];
end

function Rxyz=RotMat_AxisAngle(R)
    theta = acos((R(1,1)+R(2,2)+R(3,3)-1)/2);
    r = 1/2/sin(theta)*[R(3,2)-R(2,3);R(1,3)-R(3,1);R(2,1)-R(1,2)];
    Rxyz=theta*r;
end
% 输入机器人q1,q2,q3,q4,q5,q6的角度
% 输出末端位姿的轴线表示
function position = modelRobot(theta)
th(1) = theta(1); d(1) = 0.1607; a(1) = 0; alp(1) = 0;
th(2) = theta(2); d(2) = 0; a(2) = 0; alp(2) = pi/2;   
th(3) = theta(3); d(3) = 0; a(3) = 0.425; alp(3) = 0;
th(4) = theta(4); d(4) = 0.1133; a(4) = 0.393; alp(4) = 0;
th(5) = theta(5); d(5) = 0.099; a(5) = 0; alp(5) = -pi/2;
th(6) = theta(6); d(6) = 0.0936; a(6) = 0; alp(6) = pi/2;

T01 = DHTrans(alp(1), a(1), d(1), th(1));
T12 = DHTrans(alp(2), a(2), d(2), th(2)+pi/2);
T23 = DHTrans(alp(3), a(3), d(3), th(3));
T34 = DHTrans(alp(4), a(4), d(4), th(4)-pi/2);
T45 = DHTrans(alp(5), a(5), d(5), th(5));
T56 = DHTrans(alp(6), a(6), d(6), th(6));

T06=T01*T12*T23*T34*T45*T56;
axis = RotMat_AxisAngle(T06)/pi*180;
position = [T06(1:3,4:4),axis];
end

clc;clear;
theta1min = -360;theta1max = 360;
theta2min = -360 ;theta2max = 360 ;
theta3min = -360 ;theta3max = 360 ;
theta4min = -360;theta4max = 360;
theta5min = -360;theta5max = 360;
theta6min = -360;theta6max = 360;
% 
n = 300000;
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;
    theta4 = theta4min*(pi/180) + (theta4max-theta4min)*(pi/180)*rand;
    theta5 = theta5min*(pi/180) + (theta5max-theta5min)*(pi/180)*rand;
    theta6 = theta6min*(pi/180) + (theta6max-theta6min)*(pi/180)*rand;

    Tws = modelRobot([theta1,theta2,theta3,theta4,theta5,theta6]);
    x(i) = Tws(1,1);
    y(i) = Tws(2,1);
    z(i) = Tws(3,1);
end
figure('color',[1 1 1]);
plot3(x,y,z,'b.','MarkerSize',0.5)
hold on
xlabel('x轴(millimeter)','color','r','fontsize',15);
ylabel('y轴(millimeter)','color','r','fontsize',15);
zlabel('z轴(millimeter)','color','r','fontsize',15);
grid on

以上4个文件依次运行就可以得到机器人的工作空间啦。

更新: 2024-07-29:感谢评论区小伙伴,x、y、z赋值有误,现已修改。

### 使用 MATLAB 计算和可视化六轴机械工作空间 为了计算并可视化六轴机械工作空间,可以采用数值法来模拟不同关节角度下的末端执行器位置。这种方法虽然简单但计算量较大[^1]。 #### 创建机器人模型 首先,在 MATLAB 中定义机器人的 DH 参数(Denavit-Hartenberg 参数),这些参数描述了各连杆之间的相对位姿关系: ```matlab robot = robotics.RigidBodyTree; % 添加各个刚体及其对应的变换矩阵... ``` 对于具体的六自由度工业机器人,通常会预先知道其结构尺寸以及运动学方程形式。 #### 生成样本数据集 通过遍历所有可能的关节角组合范围内的离散点,记录下每次迭代时工具中心点 (TCP) 的坐标值形成一个三维点云集合表示可达区域边界上的采样点。 ```matlab q_samples = linspace(-pi, pi, n); % 假设n=50作为例子中的分段数 points = []; for q1=q_samples for q2=q_samples ... tcp_pos = forwardKinematics(robot,[q1,q2,...]); points(end+1,:) = tcp_pos(1:3); end end ``` 此过程可能会非常耗时取决于所选分辨率大小。 #### 数据处理与边界提取 由于直接得到的结果往往比较杂乱无章,因此还需要对原始采集到的数据进行滤波平滑化操作去除噪声干扰项;另外就是识别出有效轮廓线以便后续绘图展示更加直观清晰。 #### 可视化工作空间 最后一步则是调用 plot 或 scatter 函数绘制上述获得的空间分布图形,并设置合适的视角观察角度以更好地理解整体形态特征。 ```matlab scatter3(points(:,1), points(:,2), points(:,3)); xlabel('X'); ylabel('Y'); zlabel('Z'); title('Six-Axis Robot Workspace Visualization'); grid on; box on; view([90 0]); % 设置初始查看方向为正前方 rotate3d on;% 启动交互旋转模式方便用户调整观看方位 ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值