在MATLAB中利用符号函数功能,通过手动输入DH参数符号矩阵 or Excel文件导入DH参数表从而获得DH符号矩阵公式
1.前言
由于自己的专业方向,现在正在开始学习机器人相关知识。在机器人领域中(特别是机械臂之类的工业机器人),如果需要对机器人进行运动学分析,我们常常需要用到D-H矩阵(即Denavit-Hartenberg矩阵)。
然而求过DH矩阵的小伙伴都知道,我们目前基本都是通过对应的DH参数表以及DH矩阵计算公式手动计算出各个DH转换矩阵。特别是在获得DH矩阵之后一般还需进行多个DH转换矩阵的相乘等操作,从而获得我们所需的变换关系。如果我们自己手动去计算这些矩阵,实在是恶心…
考虑到人工手动计算DH矩阵的麻烦,我便想“能不能利用工具,只要我输入DH参数就能自动算出对应的DH矩阵?”
今天,我在这里将要分享给大家的是一个自己写的 matlab 函数,这个函数便是用来求DH矩阵的。函数部分介绍如下:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 符号矩阵计算 DH 转换矩阵公式
% 1、函数功能:[Dof,A] = m_SigalMesu(DH_table_or_excelname,sheetname,range)
% 利用符号矩阵 or excel文件导入 D-H 参数表,自动获得转换矩阵
% DH_table_or_excelname —— DH参数符号矩阵 or 具有DH参数便表的excel文件名
% sheetname —— 只有在excel导入时候才有作用,它表示导入数据在excel文件的sheetname sheet中
% range —— 只有在excel导入时候才有作用,它表示DH参数表范围
% Dof —— 转换矩阵个数
% A —— 转换矩阵,三维数据。A(:,:,i)为求得的第i个DH矩阵
%
% 2、D-H参数输入格式:
% [连杆1长度a1 连杆1扭角aerf1 关节1偏移量d1 关节1角度theta1;
% 连杆2长度a2 连杆2扭角aerf2 关节2偏移量d2 关节2角度theta2;
% .... ]
% 符号矩阵直接创建方法:
% 1)M = sym('[a,2*b;3*a,0]');
% 2) M = str2sym('[a,2*b;3*a,0]');
% 注:sym函数可能不再适用
%
% 3、从excel导入输入格式:
% [Dof,A] = m_SigalMesu('excelname','sheetname','range')
% 如:[Dof,A] = m_SigalMesu('dh_test.xlsx','sheet1','B2:E8')
%
% 注:该函数如果输入一个参数,则表示输入为DH参数符号矩阵;
% 如果需要从excel导入,则需要根据自己建立的参数表输入:
% excel文件名、sheet名、甚至对应DH参数范围
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [Dof,A] = m_SigalMesu(DH_table_or_excelname,sheetname,range);
函数部分截图如下:

并且这样求得的矩阵还有个好处:利用matlab的符号运算功能,将获得的DH矩阵,能够直接通过matlab用于计算我们所需的变换矩阵!!!——从而不再需要我们自己手动计算 ~~~
由于创作不易,具体函数代码,大家如果需要,则到我主页下载;或留言邮箱~~~
下载网址:https://download.youkuaiyun.com/download/binheon/11180873
2.废话不多说,上代码演示效果
1. 函数使用方法一:通过excel直接导入DH参数获得DH矩阵
1)、建立一个excel文件,并将自己的DH参数按照固定格式(由于我在建这个函数时将格式给固定了,因此使用这函数时输入格式要按照固定格式来)输入到excel表中。如下例子:

2)、直接调用函数,输入excel名、sheet名、表格范围
%%%% 从excel文件中导入数据,并求得DH矩阵
>>[Dof,A] = m_SigalMesu('dh_test.xlsx','sheet1','B2:E8') % 输入参数为:excel文件名、文件中对应的sheet名、表范围
Dof =
7 % DH矩阵个数
A(:,:,1) =
[ cos(theta10), -sin(theta10), 0, 0]
[ sin(theta10), cos(theta10), 0, 0]
[ 0, 0, 1, 0]
[ 0, 0, 0, 1] % 第1个DH矩阵函数
A(:,:,2) =
[ cos(90), -sin(90), 0, l12*cos(90)]
[ sin(90), cos(90), 0, l12*sin(90)]
[ 0, 0, 1, 0]
[ 0, 0, 0, 1] % 第2个DH矩阵函数
A(:,:,3) =
[ cos(theta32), -sin(theta32), 0, l2*cos(theta32)]
[ sin(theta32), cos(theta32), 0, l2*sin(theta32)]
[ 0, 0, 1, 0]
[ 0, 0, 0, 1] % 第3个DH矩阵函数
A(:,:,

最低0.47元/天 解锁文章
1万+





