DH 参数 DH 参数
Denavit-Hartenberg (DH) 提供各种修改版和标准版。 修改后的约定中的连杆和关节参数如下图所示:

DH参数根据下表确定。

The algorithm of the modified DH convention:

两个附加参数是 Sigma 和 Offset。

链接 [THETA, D ,A ,ALPHA ,SIGMA ,OFFSET]

OFFSET 是用户关节角度矢量和真实运动学解之间的恒定位移。 SIGMA=0 表示旋转接头,1 表示棱柱接头。

结构体

结果

MATLAB 教学工具箱中的最终模型

Denavit-Hartenberg 参数
平台


left arm


right arm

left leg

right leg

​我的中文水平不是很好,所以我用翻译软件来写这篇文章。 希望它派上用场。

My chinese level is not that good, so I used a translate app to write this article. Hope it comes handy.

Code: GitHub - MikeHarris-AHAM/Humanoid-Kinematics-Simulation: Humanoid Robot Kinematics Simulation Using MATLAB Teach Toolbox.

%% ------------------------------------------------------------------------
%                      Kinematic Model of Humanoid Robot
%
%                                     Mike
%
%                               Date: 15/7/2022
%
%% ------------------------------- Init Env -------------------------------
clear;
close all;
clc;
pi = 3.14;
%% Link [THETA D A ALPHA SIGMA OFFSET]
%%  OFFSET is a constant displacement between the user joint angle vector
%   and the true kinematic solution.
%% SIGMA SIGMA=0 for a revolute and 1 for a prismatic joint.
%% ------------------------------ platform  -------------------------------
platform=SerialLink([0 0 0 0],'name','platform','modified');
platform.base=[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1;];
platform.qlim = [0,0]; %Platform
%% ------------------------------ Right Arm -------------------------------
RA(1)=Link([0        0.49077   0         0         0     0],'modified');
RA(2)=Link([0        0.283     0         pi/2     0     -pi/2],'modified');
RA(3)=Link([0        0         0         pi/2      0     0],'modified');
RA(4)=Link([0        0         0.287     pi/2      0     0],'modified');
RA(5)=Link([0        0         0.287     pi/2         0     0],'modified');
Humanoid_Robot_RA=SerialLink(RA,'name','RIGHTARM');
RA(1).qlim = [0,0]; % Base for Upper body
RA(2).qlim = [deg2rad(-50),deg2rad(50)]; % Shoulder Pitch
RA(3).qlim = [0,deg2rad(60)]; % Shoulder Roll
RA(4).qlim = [0,deg2rad(140)]; % Elbow Pitch
RA(5).qlim = [0,0];%end-effector
%% -------------------------- Assembly Right Arm --------------------------
pRA=SerialLink([platform,Humanoid_Robot_RA],'name','RA');
view(3)
hold on
grid on
len_RA = length(RA);
init_RA = [];
for i=1:len_RA+1init_RA(i) = 0;
end
pRA.plot([init_RA],'scale',.5)
% pRA.teach
hold on
%% ------------------------------ Left Arm --------------------------------
LA(1)=Link([0        0.49077   0         0         0     0],'modified');
LA(2)=Link([0        -0.283     0         pi/2     0     -pi/2],'modified');
LA(3)=Link([0        0         0         pi/2      0     0],'modified');
LA(4)=Link([0        0         0.287     pi/2      0     0],'modified');
LA(5)=Link([0        0         0.287     pi/2         0     0],'modified');
Humanoid_Robot_LA=SerialLink(LA,'name','LEFTARM');
LA(1).qlim = [0,0]; % Base for Upper body
LA(2).qlim = [deg2rad(-50),deg2rad(50)]; % Shoulder Pitch
LA(3).qlim = [0,deg2rad(60)]; % Shoulder Roll
LA(4).qlim = [0,deg2rad(140)]; % Elbow Pitch
LA(5).qlim = [0,0]; %end-effector
%% -------------------------- Assembly Left Arm ---------------------------
pLA=SerialLink([platform,Humanoid_Robot_LA],'name','LA');
view(3)
hold on
grid on
axis([-1, 1, -1, 1, -1, 1]*0.9)
len_LA = length(LA);
init_LA = [];
for i=1:len_LA+1init_LA(i) = 0;
end
pLA.plot([init_LA],'scale',.5)
% pLA.teach
hold on
%% ------------------------------ Left Leg --------------------------------
LL(1)=Link([0       -0.120       0            pi/2        0     0  ],'modified');
LL(2)=Link([0       0              0            pi/2        0    -pi/2  ],'modified');
LL(3)=Link([0       0              0            -pi/2        0    -pi/2 ],'modified');
LL(4)=Link([0       0              0.42       pi/2         0    0 ],'modified');
LL(5)=Link([0       0        0.42            0        0     0],'modified');
LL(6)=Link([0       0.0772              0           -pi/2            0   0],'modified');
LL(7)=Link([0       0              0          0            0   0],'modified');
Humanoid_Robot_LL=SerialLink(LL,'name','LEFTLEG');
LL(1).qlim = [deg2rad(-50),deg2rad(50)]; %Hip Pitch -50 to 50
LL(2).qlim = [deg2rad(-50.15923567),deg2rad(50.15923567)]; %Hip yaw -50.15923567 to 50.15923567
LL(3).qlim = [deg2rad(-5),deg2rad(5)]; %Hip roll -5 to 5
LL(4).qlim = [0,deg2rad(90)]; %knee 0 to 90
LL(5).qlim = [deg2rad(-45),deg2rad(45)]; %Ankle Pitch -45 to 45
LL(6).qlim = [deg2rad(-20),deg2rad(20)]; %Ankle Roll -20 to 20
LL(7).qlim = [0,0]; %end-effector
%% -------------------------- Assembly Left Arm ---------------------------
pLL=SerialLink([platform,Humanoid_Robot_LL],'name','LL');
view(3)
hold on
grid on
axis([-1, 1, -1, 1, -1, 1]*0.9)
len_LL = length(LL);
init_LL = [];
for i=1:len_LL+1init_LL(i) = 0;
end
pLL.plot([init_LL],'scale',.5)
pLL.teach
hold on
%% ------------------------------ Right Leg --------------------------------
RL(1)=Link([0       0.120       0            pi/2        0     0  ],'modified');
RL(2)=Link([0       0              0            pi/2        0    -pi/2  ],'modified');
RL(3)=Link([0       0              0            -pi/2        0    -pi/2 ],'modified');
RL(4)=Link([0       0              0.42       pi/2         0    0 ],'modified');
RL(5)=Link([0       0        0.42            0        0     0],'modified');
RL(6)=Link([0       0.0772              0           -pi/2            0   0],'modified');
RL(7)=Link([0       0              0           0            0   0],'modified');
Humanoid_Robot_RL=SerialLink(RL,'name','RightLEG');
RL(1).qlim = [deg2rad(-50),deg2rad(50)]; %Hip Pitch -50 to 50
RL(2).qlim = [deg2rad(-50.15923567),deg2rad(50.15923567)]; %Hip yaw -50.15923567 to 50.15923567
RL(3).qlim = [deg2rad(-5),deg2rad(5)]; %Hip roll -5 to 5
RL(4).qlim = [0,deg2rad(90)]; %knee 0 to 90
RL(5).qlim = [deg2rad(-45),deg2rad(45)]; %Ankle Pitch -45 to 45
RL(6).qlim = [deg2rad(-20),deg2rad(20)]; %Ankle Roll -20 to 20
RL(7).qlim = [0,0]; %end-effector
%% -------------------------- Assembly Right Arm --------------------------
pRL=SerialLink([platform,Humanoid_Robot_RL],'name','RL');
view(3)
hold on
grid on
axis([-1, 1, -1, 1, -1, 1]*0.9)
len_RL = length(RL);
init_RL = [];
for i=1:len_RL+1init_RL(i) = 0;
end
pRL.plot([init_RL],'scale',.5)
pRL.teach
hold on
%% -------------------------------- Jacobian ------------------------------
Q = zeros(7,len_LL);
Jacob_LL = pLL.jacobe(Q);
Q = zeros(7,len_RL);
Jacob_RL = pRL.jacobe(Q);
Q = zeros(7,len_LA);
Jacob_LA = pLA.jacobe(Q);
Q = zeros(7,len_RA);
Jacob_RA = pRA.jacobe(Q);
%% -------------------------------------------------------------------------

Matlab人形机器人建模与仿真相关推荐

  1. Matlab - Solidworks 机器人建模(5)—— 给模型添加摩擦力

    Matlab - Solidworks 机器人建模(5)-- 给模型添加摩擦力 0. 前言 建好模型并成功进行一次仿真之后,我们发现虽然模型可以像模像样的产生由重力带来的运动,但是也发现零件可以穿过其 ...

  2. thetae_1在MATLAB中的意思,无刷直流电机在Matlab中的建模与仿真研究_荣军

    第25卷 第2期 湖南理工学院学报(自然科学版) Vol.25 No.22012年6月 Journal of Hunan Institute of Science and Technology (Na ...

  3. tcsc工作原理matlab仿真,基于Matlab的TCSC建模与仿真研究.doc

    基于Matlab的TCSC建模与仿真研究 基于Matlab的TCSC建模与仿真研究 第17卷第5期 2006年1O月 巾原T学院 JOURNALOFZHONGYUANINSTIT[ITEOFTECHN ...

  4. Matlab - Solidworks 机器人建模(4)—— 如何把SolidWorks模型导入到Matlab (Simscape模型)

    Matlab - Solidworks 机器人建模(4)-- 如何把SolidWorks模型导入到Matlab (Simscape模型) 1.说在前面 本文会介绍怎么直接把solidworks的模型转 ...

  5. matlab link offset,基于MATLAB教学型机器人空间轨迹仿真

    基于MATLAB教学型机器人空间轨迹仿真 robotic toolbox for matlab工具箱 1. PUMA560的MATLAB仿真 要建立PUMA560的机器人对象,首先我们要了解PUMA5 ...

  6. matlab电路建模,单相桥式整流电路在MATLAB中的建模与仿真

    摘要:阐述了单相桥式全控整流电路的工作原理,并且详细研究了在MATLAB/Simulink中的单相桥式全控整流电路的建模方法;最后给出了详细的仿真结果,仿真结果和理论分析一致,为单相桥式全控整流电路的 ...

  7. matlab四足仿真,基于MATLAB的四足机器人建模与仿真.docx

    摘要:本课题讨论了一种利用MATLAB中Robotics Toolbox对机器人进行的仿真建模的技术,对四足机器人进行行仿真建模.通过设计确定主要研究对象为哺乳类四足机器人.确定了机器人的腿部关节结构 ...

  8. 如何给目标机器人建模并仿真【数学/控制意义】

    前言 在上一节的机器人学习中,我们已经了解到当下热门的机器人研究方向,从视觉.人工智能到多机通讯.人机协同,机器人的研究有着广阔的前景,而想要学好机器人,第一步就是要首先建立模型,本节的标题是数学意义 ...

  9. sepic电路MATLAB,Sepic电路建模、仿真设计(最终版)

    <Sepic电路建模.仿真设计.doc>由会员分享,可免费在线阅读全文,更多与<Sepic电路建模.仿真设计(最终版)>相关文档资源请在帮帮文库(www.woc88.com)数 ...

最新文章

  1. Windows 7 with SP1中英文原版MSDN下载汇总(全版本收录完毕)
  2. [扫盲] Salesforce.com: 业界云计算(Cloud Computing)的主要倡导者之一
  3. IDEA Tips:Debug跳转任意行
  4. MyBatis超详细介绍——SQL语句构建器类
  5. linux一键优化脚本1.0
  6. Spring.NET学习笔记(4)-对象作用域和类型转换
  7. OpenSessionInViewFilter作用及配置
  8. js程序中美元符号$是什么
  9. Android 音视频深入 十四 FFmpeg与OpenSL ES 播放mp3音乐,能暂停(附源码
  10. 关于 pip安装的可能错误的排除
  11. 凸包, 圆角矩阵凸包, 点的旋转,任意多边形外角和为360度, 绕着某点进行旋转
  12. “双一流”高校,整体搬迁!
  13. Dockerfile中ADD文件用法
  14. C语言 写一个函数求两个数的较大值
  15. 电脑用户名被删除了 登录不了,进不了界面怎么办。
  16. 前端性能优化学习 03 Web 性能测试
  17. dns 解析,一个域名解析到多个ip地址
  18. 华数机器人旋转编程_用户手册-华数机器人.PDF
  19. Java使用Calender类实现打印日历(指定月份和年)
  20. vba和vb的小区别

热门文章

  1. 【笔记1-1】基于对话的问答系统CoQA (Conversational Question Answering)
  2. 浏览器打开服务器上的图片无法显示,网页中的图片打不开怎么办?原因与解决办法...
  3. 常见的字符编码(ASCII码,unicode,utf-8,gbk)
  4. 使用Python连接阿里云盘
  5. bootstrap 轮播插件
  6. 根号2计算机代码,根号 2 的程序计算方法
  7. 【MySql】SQL语句DDL类
  8. html密码域的type属性,查看网页黑点密码 将type=password中password修改成为text
  9. python打开文件写入内容_python-11 文件的打开和写入
  10. 微端更新慢、甚至不更新是怎么回事?