• 大小: 10KB
    文件类型: .7z
    金币: 1
    下载: 0 次
    发布日期: 2021-05-21
  • 语言: Matlab
  • 标签:

资源简介

这是一个利用MATLAB符号函数功能,通过手动输入DH参数符号矩阵 or Excel文件导入DH参数表从而获得DH矩阵的函数代码。通过该代码获得的DH矩阵不仅能够再次利用matlab计算所需变化矩阵,甚至还能将具体数值带入求得的转换矩阵中求得DH矩阵具体值。

资源截图

代码片段和文件信息

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                     符号矩阵计算DH转换矩阵公式
% 1、函数功能:[DofA] = m_SigalMesu(DH_table_or_excelnamesheetnamerange)
%    利用符号矩阵 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(‘[a2*b;3*a0]‘);
%    2) M = str2sym(‘[a2*b;3*a0]‘);
%  注:sym函数可能不再适用
%
% 3、从excel导入输入格式:
%    [DofA] = m_SigalMesu(‘excelname‘‘sheetname‘‘range‘)
%  如:[DofA] = m_SigalMesu(‘dh_test.xlsx‘‘sheet1‘‘B2:E8‘)
%
%
%
%  注:该函数如果输入一个参数,则表示输入为DH参数符号矩阵;
%      如果需要从excel导入,则需要根据自己建立的参数表输入:
%      excel文件名、sheet名、甚至对应DH参数范围
%
% 2019年5月15日
% csdn博客名:BinHeon
%           https://blog.csdn.net/BinHeon/article/details/90245890
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [DofA] = m_SigalMesu(DH_table_or_excelnamesheetnamerange)

%%%% %%%% %%%% 输入参数处理
if nargin == 1       %%%% 输入一个参数则默认该参数为DH参数字符矩阵
    DH_table = DH_table_or_excelname;
end
if nargin == 3       %%%% 输入三个参数则默认第一参数为excel名、第二为sheet名、第三为表范围
% 读取excel文件中的数据方法:
% 方法1:[datatext] = xlsread(FileName SheetName Range);
% data保存的是数据单元格的值, text保存的是字符串单元格的内容
% 方法2:[~~dh_table] = xlsread(FileName SheetName Range);
    [~~dh_table] = xlsread(DH_table_or_excelnamesheetnamerange); % 导入excel中参数表
    DH_table = sym(dh_table); % 将导入参数表字符化
end

%%%% %%%% %%%% 获得D-H参数表中 转换矩阵数目
[mn] = size(DH_table); % m为数目
Dof = m;
%%%% %%%% %%%% 计算每个转换矩阵
%%%% 定义符号变量
% syms c_theta s_theta c_aerf s_aerf a d; % 定义符号变量
% %%%% 定义d-h转换矩阵公式 
% dh_A = [c_theta  -s_theta*c_aerf  s_theta*s_aerf  a*c_theta ;
%         s_theta   c_theta*c_aerf  -c_theta*s_aerf a*s_theta ;
%         0            s_aerf           c_aerf          d     ;
%         0              0                 0            1      ];% D-H计算公式

syms a aerf d theta; % 定义符号变量:a连杆长度 aerf连杆扭角 d关节偏移 theta关节转角
%%%% 定义d-h转换矩阵公式 
dh_A = [cos(theta)  -sin(theta)*cos(aerf)  sin(theta)*sin(aerf)  a*cos(theta) ;
        sin(theta)   cos(theta)*cos(aerf)  -cos(theta)*sin(aerf) a*sin(theta) ;
           0              sin(aerf)              cos(aerf)             d      ;
           0                   0                      0                1      ];% D-H计算公式

%%%% 计算每个转换矩阵 Ai 并将 Ai 组成三维矩阵 A 保存;从而方便函数返回
for i=1:m % 总共有 m 个 转换矩阵

    % 根据D-H参数表初始化对应D-H参数
    t_a = DH_table(i1);    % 获得D-H参数表中第i个d-h参数的 连杆长度
    t_aerf = DH_table(i2); % 获得D-H参数表中第i个d-h参数的 连杆扭角
    t_d = DH_table(i3);    % 获得D-H参数表中第i个d-h参数的 关节偏移
    t_theta = DH_table(i4);% 获得D-H参数表中第i个d-h参数的 关节偏角
    % 获得带入参数后的符号矩

评论

共有 条评论

相关资源