MD-H模型运动学正解、逆解及姿态角的解算验证

本文详细介绍了MD-H模型的正运动学验证,通过MATLAB代码展示了如何计算杆件位置和姿态;接着进行了RPY姿态角的解算,并与MATLAB工具箱结果对比;最后进行逆运动学计算,确保初始设定角度与计算结果一致。
摘要由CSDN通过智能技术生成


前言

记录修正D-H模型正运动学、RPY、逆运动学解算的验证过程


一、MD-H模型正运动学验证

%% 正运动学验证
clear;clc;close all;
%
%杆长参数设置
L1=160;L2=449.5;L3=580;L4=200;L5=640;L6=228;
d1=L2;a2=L1;a3=L3;a4=L4;d4=L5;d6=L6;
%初始角设置
theta1=10;theta2=20;theta3=30;theta4=40;theta5=50;theta6=60;
T1=[cosd(theta1) -sind(theta1) 0 0; sind(theta1) cosd(theta1) 0 0; 0 0 1 d1; 0 0 0 1]*...
  [sind(theta2) cosd(theta2) 0 a2; 0 0 1 0; cosd(theta2) -sind(theta2) 0 0; 0 0 0 1]*...
  [cosd(theta3) -sind(theta3) 0 a3; sind(theta3) cosd(theta3) 0 0; 0 0 1 0; 0 0 0 1]*...
  [cosd(theta4) -sind(theta4) 0 a4; 0 0 1 d4; -sind(theta4) -cosd(theta4) 0 0; 0 0 0 1]*...
  [cosd(theta5) -sind(theta5) 0 0; 0 0 -1 0; sind(theta5) cosd(theta5) 0 0;0 0 0 1]*...
  [cosd(theta6) -sind(theta6) 0 0; 0 0 1 d6; -sind(theta6) -cosd(theta6) 0 0; 0 0 0 1]

s1=sind(theta1);s2=sind(theta2);s3=sind(theta3);s4=sind(theta4);s5=sind(theta5);s6=sind(theta6);
c1=cosd(theta1);c2=cosd(theta2);c3=cosd(theta3);c4=cosd(theta4);c5=cosd(theta5);c6=cosd(theta6);
s23=s2*c3+c2*s3;c23=c2*c3-s2*s3;
nx=c1*(s23*(c4*c5*c6-s4*s6)+c23*s5*c6)-s1*(-s4*c5*c6-c4*s6);
ny=s1*(s23*(c4*c5*c6-s4*s6)+c23*s5*c6)+c1*(-s4*c5*c6-c4*s6);
nz=c23*(c4*c5*c6-s4*s6)-s23*s5*c6;
ox=c1*(s23*(-c4*c5*s6-s4*c6)-c23*s5*s6)-s1*(s4*c5*s6-c4*c6);
oy=s1*(s23*(-c4*c5*s6-s4*c6)-c23*s5*s6)+c1*(s4*c5*s6-c4*c6);
oz=c23*(-c4*c5*s6-s4*c6)+s23*s5*s6;
ax=c1*(-s23*c4*s5+c23*c5)-s1*s4*s5;
ay=s1*(-s23*c4*s5+c23*c5)+c1*s4*s5;
az=-c23*c4*s5-s23*c5;
px=c1*(s23*(-d6*c4*s5+a4)+c23*(d6*c5+d4)+a3*s2+a2)-s1*d6*s4*s5;
py=s1*(s23*(-d6*c4*s5+a4)+c23*(d6*c5+d4)+a3*s2+a2)+c1*d6*s4*s5;
pz=c23*(-d6*c4*s5+a4)-s23*(d6*c5+d4)+a3*c2+d1;
T2=[nx ox ax px;...
   ny oy ay py;...
   nz oz az pz;...
   0  0  0  1 ]

验证结果:矩阵计算结果T1与代码公式计算结果T2相同
在这里插入图片描述

二、RPY姿态角解算验证

%% RPY姿态角验证
clear;clc;close all;
%
%杆长参数设置
L1=160;L2=449.5;L3=580;L4=200;L5=640;L6=228;
d1=L2;a2=L1;a3=L3;a4=L4;d4=L5;d6=L6;
%初始角设置
theta1=10;theta2=20;theta3=30;theta4=40;theta5=50;theta6=60;

s1=sind(theta1);s2=sind(theta2);s3=sind(theta3);s4=sind(theta4);s5=sind(theta5);s6=sind(theta6);
c1=cosd(theta1);c2=cosd(theta2);c3=cosd(theta3);c4=cosd(theta4);c5=cosd(theta5);c6=cosd(theta6);
s23=s2*c3+c2*s3;c23=c2*c3-s2*s3;
nx=c1*(s23*(c4*c5*c6-s4*s6)+c23*s5*c6)-s1*(-s4*c5*c6-c4*s6);
ny=s1*(s23*(c4*c5*c6-s4*s6)+c23*s5*c6)+c1*(-s4*c5*c6-c4*s6);
nz=c23*(c4*c5*c6-s4*s6)-s23*s5*c6;
ox=c1*(s23*(-c4*c5*s6-s4*c6)-c23*s5*s6)-s1*(s4*c5*s6-c4*c6);
oy=s1*(s23*(-c4*c5*s6-s4*c6)-c23*s5*s6)+c1*(s4*c5*s6-c4*c6);
oz=c23*(-c4*c5*s6-s4*c6)+s23*s5*s6;
ax=c1*(-s23*c4*s5+c23*c5)-s1*s4*s5;
ay=s1*(-s23*c4*s5+c23*c5)+c1*s4*s5;
az=-c23*c4*s5-s23*c5;
px=c1*(s23*(-d6*c4*s5+a4)+c23*(d6*c5+d4)+a3*s2+a2)-s1*d6*s4*s5;
py=s1*(s23*(-d6*c4*s5+a4)+c23*(d6*c5+d4)+a3*s2+a2)+c1*d6*s4*s5;
pz=c23*(-d6*c4*s5+a4)-s23*(d6*c5+d4)+a3*c2+d1;
T2=[nx ox ax px;...
   ny oy ay py;...
   nz oz az pz;...
   0  0  0  1 ];
pitch=atan2(ax,sqrt(ay^2+az^2))*180/pi;
if pitch==90
   yaw=0;
   roll=atan2(ny,-nz)*180/pi;
elseif pitch==-90
   yaw=0;
   roll=atan2(-ny,nz)*180/pi;   
else
    roll=atan2(-ay/cosd(pitch),az/cosd(pitch))*180/pi;
    yaw=atan2(-ox/cosd(pitch),nx/cosd(pitch))*180/pi;
end

XYZ=[px py pz]
RPY=[roll pitch yaw]

验证结果:计算结果与MATLAB机器人工具箱的仿真结果相同
在这里插入图片描述
在这里插入图片描述

三、MD-H模型逆运动学验证

%% 逆运动学验证
clear;clc;close all;
L1=160;L2=449.5;L3=580;L4=200;L5=640;L6=228;
d1=L2;a2=L1;a3=L3;a4=L4;d4=L5;d6=L6;
%初始角设置
w1=60;w2=50;w3=40;w4=30;w5=20;w6=10;

T=[cosd(w1) -sind(w1) 0 0; sind(w1) cosd(w1) 0 0; 0 0 1 d1; 0 0 0 1]*...
  [sind(w2) cosd(w2) 0 a2; 0 0 1 0; cosd(w2) -sind(w2) 0 0; 0 0 0 1]*...
  [cosd(w3) -sind(w3) 0 a3; sind(w3) cosd(w3) 0 0; 0 0 1 0; 0 0 0 1]*...
  [cosd(w4) -sind(w4) 0 a4; 0 0 1 d4; -sind(w4) -cosd(w4) 0 0; 0 0 0 1]*...
  [cosd(w5) -sind(w5) 0 0; 0 0 -1 0; sind(w5) cosd(w5) 0 0;0 0 0 1]*...
  [cosd(w6) -sind(w6) 0 0; 0 0 1 d6; -sind(w6) -cosd(w6) 0 0; 0 0 0 1];
nx=T(1,1);ox=T(1,2);ax=T(1,3);px=T(1,4);
ny=T(2,1);oy=T(2,2);ay=T(2,3);py=T(2,4);
nz=T(3,1);oz=T(3,2);az=T(3,3);pz=T(3,4);

%theta1
Theta1=atan2(-(d6*ay-py),-(d6*ax-px))*180/pi;
%theta3
s1=sind(Theta1);c1=cosd(Theta1);
f1=c1*ax+s1*ay;
f2=c1*px+s1*py-a2;
f3=pz-d1;
k1=2*a3*d4;
k2=-2*a3*a4;
k3=a4^2+d4^2+a3^2-(-f1*d6+f2)^2-(az*d6-f3)^2;
Theta3=(atan2(k3,sqrt(k1^2+k2^2-k3^2))-atan2(k2,k1))*180/pi;
%theta2
c3=cosd(Theta3);s3=sind(Theta3);
g1=f2-d6*f1;
g2=f3-d6*az;
g3=a4*c3-d4*s3+a3;
Theta2=(atan2(g3,sqrt(g1^2+g2^2-g3^2))-atan2(g2,g1))*180/pi;
%theta5
c2=cosd(Theta2);s2=sind(Theta2);
s23=s2*c3+c2*s3;c23=c2*c3-s2*s3;
Theta5=acosd(f1*c23-az*s23);
%theta4
s5=sind(Theta5);c5=cosd(Theta5);
Theta4=asind((-s1*ax+c1*ay)/s5);
%theta6
c4=cosd(Theta4);
h1=-s1*nx+c1*ny;
h2=-s1*ox+c1*oy;
h3=-c4;
Theta6=(atan2(h3,-sqrt(h1^2+h2^2-h3^2))-atan2(h2,h1))*180/pi;

THETA=[Theta1,Theta2,Theta3,Theta4,Theta5,Theta6]

验证结果:计算结果与初始设置的角度相同
在这里插入图片描述

机械臂的运动学求解可以使用MATLAB进行实现。首先,需要建立机械臂的DH参数表,并计算出各个关节的变换矩阵以及最终的变换矩阵。然后,可以推导出机械臂的运动学和逆运动学的数学模型。最后,使用MATLAB编写程序来实现机械臂的运动学求解和验证。 引用\[1\]中提到了以IRB6700为例进行运动学求解和验证。可以参考该例子来理解和实现机械臂的运动学。 引用\[2\]中提到了设计要求,包括建立机器人的坐标系和DH参数表,推导运动学,并编写MATLAB程序来完成给定图形的绘制。可以参考该要求来进行机械臂运动学的实现。 引用\[3\]中提到了作者个人在学习机械臂时的一些想法和实现方法。可以参考该文章中的解析法和数值法的实现,以及提供的MATLAB代码来进行机械臂运动学的实现。 综上所述,你可以使用MATLAB来实现机械臂的运动学求解。可以参考引用\[1\]、引用\[2\]和引用\[3\]中提供的内容和代码来进行实现。 #### 引用[.reference_title] - *1* [机械臂向与逆向运动学求解](https://blog.csdn.net/piginthesouth/article/details/127521366)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [用matlab实现机械臂运动学控制](https://blog.csdn.net/weixin_42159320/article/details/88877770)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【MATLAB】5DOFs机械臂运动学逆解MDH)-解析法实现](https://blog.csdn.net/qq_43557907/article/details/122707124)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Vittore Lee

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值