1.坐标系介绍 一般应用场景为右手坐标系
详细了解可参考:计算机视觉基础——欧拉角,旋转向量,四元数与旋转矩阵
文章图片
2.DH建模 建模顺序:
文章图片
变换矩阵求解:
文章图片
转角矩阵构建形式(变换矩阵则按照以上公式相乘即可):
//在右手系中绕X轴旋转p° 对应的矩阵Rx
| 100 |
Rx=| 0cosp-sinp|
| 0sinpcosp|
//在右手系中绕Y轴旋转h° 对应的矩阵Ry
| cosh0sinh|
Ry=|010 |
|-sinh0cosh|
//在右手系中绕Z轴旋转b° 对应的矩阵Rz
|cosb-sinb0 |
Rz=|sinbcosb0 |
|001 |//右手系中x,y,z的平移矩阵形式:
T = [txtytz]'(转置)
由旋转矩阵转为欧拉角:
文章图片
//假设旋转矩阵为R:
x = atan2( R(3,2), R(3,3));
y = atan2(-R(3,1), aqrt(R(3,2)^2 + R(3,3)^2));
z = atan2(R(2,1),R(1,1));
angle = [x,y,z];
//获得三个方向上的角度
关于DH建模求解并进行正逆运行学仿真详细方法参考:用matlab实现机械臂正逆运动学控制3.matlab工具箱仿真
clc
close all
clear all%*****************************建立机械臂的仿真模型*********************************
%theta:Z轴旋转角度
%d:沿Z轴平移距离
%alpha:沿x轴旋转角度
%a:沿x轴平移距离%参数的设定
h0=80;
l1=2500;
l2=2000;
l3=2500;
%转角
t0=0;
t1= pi/4;
t2=-pi/4;
t3=-pi/2;
%使用Link类函数,基于DH法建模(先绕z轴旋转,再沿x轴移动,再沿x轴旋转,再沿z轴平移)L(1)=Link('revolute','d',h0,'a',0,'alpha',pi/2,'offset',0);
L(2)=Link('revolute','d',0,'a',l1,'alpha',0,'offset',t1);
L(3)=Link('revolute','d',0,'a',l2,'alpha',0,'offset',t2);
L(4)=Link('revolute','d',0,'a',l3,'alpha',0,'offset',t3);
% %thetadaalpha
% L1=Link([0h0h0pi/2 ], 'modified');
% [四个DH参数], options
% L2=Link([00l10], 'modified');
% L3=Link([00l20], 'modified');
% L4=Link([00l30], 'modified');
%
%
%使用Seriallink类函数把我们上面使用Link函数建立的连杆连成一个整体,生成一个串联机械臂模型
robot=SerialLink (L,'name','4-robot');
%使用.plot绘制出某组关节变量的机械臂三维模型
%Three_Link.plot([0,0,0])
robot.display
robot.teach
robot类属性详见下图,比较主要的是:DH参数、变换矩阵、点集、角度限制等
文章图片
文章图片
% ***************************绘制直线***********************************
T1=transl(2000,1800,1000);
%提取平移成分
T2=transl(2000,6500,1000);
%提取平移成分
T=ctraj(T1,T2,50) %生成一条卡尔路径,50个平移矩阵
Tj=transl(T);
%提取平移分量,其实是相对于原点的坐标,即x,y,z轴各个方向的偏移
plot3(Tj(:,1),Tj(:,2),Tj(:,3));
%绘制蓝色直线
zlim([-10000,10000]);
xlabel('x'),ylabel('y'),zlabel('z');
grid on;
q=robot.ikine(T,'q0',[0 0 0 0], 'mask',[1 1 1 0 0 0]);
hold on
robot.plot(q);
%动画演示q_=q/pi*180;
生成的笛卡尔路径转为角度,然后通过正运动学实现移动
文章图片
文章图片
%*****************************正运动学**********************************
%输入由三维坐标点变成各轴转角,然后先通过正运动学获取起始与末端位姿,再生成路径进行运动
%不过此处由正运动学计算出的结果不是单纯的一个点,而是一个结构体属性
% 初始值及目标值
init_ang=[0 0 0 0];
targ_ang=[0, -pi/6, -pi/5, pi/6];
step=200;
[q,qd,qdd]=jtraj(init_ang,targ_ang,step);
%关节空间规划轨迹,得到机器人末端运动的[位置,速度,加速度]
T0=robot.fkine(init_ang);
% 正运动学解算,求出来T0,Tf是一个SE3类,包含位姿属性
Tf=robot.fkine(targ_ang);
figure;
subplot(2,4,3);
i=1:4;
plot(q(:,i));
title("位置");
grid on;
subplot(2,4,4);
i=1:4;
plot(qd(:,i));
title("速度");
grid on;
subplot(2,4,7);
i=1:4;
plot(qdd(:,i));
title("加速度");
grid on;
Tc=ctraj(T0,Tf,step);
% 笛卡尔空间规划轨迹,得到机器人末端运动的变换矩阵
Tjtraj=transl(Tc);
%提取平移分量,其实是相对于原点的坐标,即x,y,z轴各个方向的偏移
subplot(2,4,8);
plot2(Tjtraj, 'r');
title('p1到p2直线轨迹');
grid on;
subplot(2,4,[1,2,5,6]);
plot3(Tjtraj(:,1),Tjtraj(:,2),Tjtraj(:,3),"b");
grid on;
%绘制末端点
zlim([-10000,10000]);
hold on;
view(3);
% 解决robot.teach()和plot的索引超出报错
qq=robot.ikine(Tc, 'q0',[0 0 0 0], 'mask',[1 1 1 0 0 0]);
% 逆运动学求角度
robot.plot(qq);
%控制机械臂运动
此处不同于上个直线运动,这次的话输入变成了初始各轴转角与末端位置对应的各轴夹角,然后首先通过 robot.fkine() 得到末端点的位姿矩阵,再用ctraj() 生成中间过程离散点的位姿矩阵,再通过逆运动学 robot.ikine() 求出针对每个位姿的各轴夹角,最后就可以直接控制机械臂转动相应的夹角到达每个位置,组成一个运动过程。
当然,也可以直接通过transl() 求出每个位姿矩阵对应的末端点坐标
文章图片
文章图片
4.运动学函数解析
机械臂运动过程流程总结如下:
常规方式时通过起点与终点位姿生成中间的插值位姿矩阵,然后逆运动学求角度,直接控制运动
位姿通过正运动学获得!
文章图片
文章图片
4.1 正运动学
【机器人控制算法|机器人控制算法二之matlab工具箱机械臂运动学正逆矩阵解具体分析】Forward kinematics
文章图片
文章图片
文章图片
4.2 逆运动学
文章图片
文章图片
4.3 空间变换及其他函数
% Creace - cracional 3t(3)矩阵::T= transl (X, Y, Z)是一个SE(3)齐次变换(4x4),表示X, Y和Z的纯平移。
% ***************提取平移分量,其实是相对于原点的坐标,即x,y,z轴各个方向的偏移*************************
T1=transl(2000,1800,1000);
%生成一个纯平移矩阵
T2=transl(2000,6500,1000);
%
文章图片
T=ctraj(T1,T2,50) %生成一条笛卡尔路径,50个位姿矩阵
Tj=transl(T);
%%提取平移分量,其实是相对于原点的坐标,即x,y,z轴各个方向的便宜
文章图片
init_ang=[0 0 0 0];
targ_ang=[0, -pi/6, -pi/5, pi/6];
T0=robot.fkine(init_ang);
%生成的时末端点的位姿
Tf=robot.fkine(targ_ang);
文章图片
推荐阅读
- matlab|matlab 二维高斯滤波 傅里叶_基于相关滤波的目标跟踪算法
- matlab图像处理|matlab数字图像处理常用操作
- 数字图像MATLAB|TIT 数字图像处理 原理与实践(MATLAB) 入门教学 实验一 常用的MATLAB图像处理命令与图像基本操作
- 路标识别|路标识别 matlab 聚类算法,基于卷积神经网络的交通路标检测v1.doc
- 数学建模算法与应用|主成分分析;主成分回归分析——Hald水泥问题;主成分分析案例——各地区普通高等教育发展水平综合评价;matlab
- 数学建模算法与应用|人口模型(Malthus模型、阻滞增长模型、美国人口的预报模型(例题,matlab工具箱求解))
- 数学建模算法与应用|最短路问题 、迪克斯特拉(Dijkstra)算法、Floyd算法、matlab、python
- 数学建模算法与应用|插值方法(一维插值、三次样条插值、二维插值的matlab自带函数,python实现/作图)
- 数学建模算法与应用|整数规划,背包问题、指派问题、钢管切割问题的Matlab和python实现