DH参数法建立机器人的运动学正解

运用DH参数法时坐标系建立的两个约定:

(1)x_i与z_(i-1)垂直

(2)x_i与z_(i-1)相交

坐标系i与坐标系i-1的其次变换矩阵为:

a为两z轴的距离,d为两x轴的距离。

alpha与theta的正方向约定为:

下面举三个例子:

a、平面二自由度机器人

clear;

clc;

syms theta1 alpha1 a1 d1 theta2 alpha2 a2 d2 a b theta d;

A1=[cos(theta1),-sin(theta1)*cos(alpha1),sin(theta1)*sin(alpha1),a1*cos(theta1);...

sin(theta1),cos(theta1)*cos(alpha1),-cos(theta1)*sin(alpha1),a1*sin(theta1);...

0,sin(alpha1),cos(alpha1),d1;...

0,0,0,1];

A2=[cos(theta2),-sin(theta2)*cos(alpha2),sin(theta2)*sin(alpha2),a2*cos(theta2);...

sin(theta2),cos(theta2)*cos(alpha2),-cos(theta2)*sin(alpha2),a2*sin(theta2);...

0,sin(alpha2),cos(alpha2),d2;...

0,0,0,1];

L=sqrt(a^2+b^2);

beta=atan(b/a);

a1=L;

alpha1=sym(0);

d1=sym(0);

theta1=theta;

a2=d;

alpha2=sym(0);

d2=sym(0);

theta2=-beta;

T=eval_r(A1*A2)

求得运动学正解为:

b、平面三自由度机器人

clear;

clc;

syms theta1 alpha1 a1 d1 theta2 alpha2 a2 d2 theta3 alpha3 a3 d3 d;

A1=[cos(theta1),-sin(theta1)*cos(alpha1),sin(theta1)*sin(alpha1),a1*cos(theta1);...

sin(theta1),cos(theta1)*cos(alpha1),-cos(theta1)*sin(alpha1),a1*sin(theta1);...

0,sin(alpha1),cos(alpha1),d1;...

0,0,0,1];

A2=[cos(theta2),-sin(theta2)*cos(alpha2),sin(theta2)*sin(alpha2),a2*cos(theta2);...

sin(theta2),cos(theta2)*cos(alpha2),-cos(theta2)*sin(alpha2),a2*sin(theta2);...

0,sin(alpha2),cos(alpha2),d2;...

0,0,0,1];

A3=[cos(theta3),-sin(theta3)*cos(alpha3),sin(theta3)*sin(alpha3),a3*cos(theta3);...

sin(theta3),cos(theta3)*cos(alpha3),-cos(theta3)*sin(alpha3),a3*sin(theta3);...

0,sin(alpha3),cos(alpha3),d3;...

0,0,0,1];

alpha1=sym(0);

d1=sym(0);

a2=d;

alpha2=sym(0);

d2=sym(0);

theta2=sym(0);

alpha3=sym(0);

d3=sym(0);

theta3=-theta3;

T=eval_r(A1*A2*A3)

求得运动学正解为:

c、六自由度机器人

clear;

clc;

syms theta1 alpha1 a1 d1 theta2 alpha2 a2 d2 theta3 alpha3 a3 d3 ...

theta4 alpha4 a4 d4 theta5 alpha5 a5 d5 theta6 alpha6 a6 d6;

A1=[cos(theta1),-sin(theta1)*cos(alpha1),sin(theta1)*sin(alpha1),a1*cos(theta1);...

sin(theta1),cos(theta1)*cos(alpha1),-cos(theta1)*sin(alpha1),a1*sin(theta1);...

0,sin(alpha1),cos(alpha1),d1;...

0,0,0,1];

A2=[cos(theta2),-sin(theta2)*cos(alpha2),sin(theta2)*sin(alpha2),a2*cos(theta2);...

sin(theta2),cos(theta2)*cos(alpha2),-cos(theta2)*sin(alpha2),a2*sin(theta2);...

0,sin(alpha2),cos(alpha2),d2;...

0,0,0,1];

A3=[cos(theta3),-sin(theta3)*cos(alpha3),sin(theta3)*sin(alpha3),a3*cos(theta3);...

sin(theta3),cos(theta3)*cos(alpha3),-cos(theta3)*sin(alpha3),a3*sin(theta3);...

0,sin(alpha3),cos(alpha3),d3;...

0,0,0,1];

A4=[cos(theta4),-sin(theta4)*cos(alpha4),sin(theta4)*sin(alpha4),a4*cos(theta4);...

sin(theta4),cos(theta4)*cos(alpha4),-cos(theta4)*sin(alpha4),a4*sin(theta4);...

0,sin(alpha4),cos(alpha4),d4;...

0,0,0,1];

A5=[cos(theta5),-sin(theta5)*cos(alpha5),sin(theta5)*sin(alpha5),a5*cos(theta5);...

sin(theta5),cos(theta5)*cos(alpha5),-cos(theta5)*sin(alpha5),a5*sin(theta5);...

0,sin(alpha5),cos(alpha5),d5;...

0,0,0,1];

A6=[cos(theta6),-sin(theta6)*cos(alpha6),sin(theta6)*sin(alpha6),a6*cos(theta6);...

sin(theta6),cos(theta6)*cos(alpha6),-cos(theta6)*sin(alpha6),a6*sin(theta6);...

0,sin(alpha6),cos(alpha6),d6;...

0,0,0,1];

a1=sym(0);

alpha1=sym(-pi/2);

alpha2=sym(0);

d2=sym(0);

a3=sym(0);

alpha3=sym(-pi/2);

d3=sym(0);

a4=sym(0);

alpha4=sym(-pi/2);

d4=sym(0);

a5=sym(0);

alpha5=sym(pi/2);

d5=sym(0);

a6=sym(0);

alpha6=sym(0);

T=simplify(eval_r(A1*A2*A3*A4*A5*A6))

注:以上的eval_r为eval(不知道为什么,保存后“eval”就变成“eval_r”了)

from:http://blog.sina.com.cn/u/2707887295

时间: 2024-10-25 10:19:21

DH参数法建立机器人的运动学正解的相关文章

UR机械臂运动学正逆解方法

最近几个月因为工作接触到了机械臂的项目,突然对机械臂运动方法产生了兴趣,也就是如何控制机械臂的位置和姿态.借用一张网上的图片,应该是ur5的尺寸.我用到的是ur3机械臂,除了尺寸不一样,各关节结构和初始位置和ur5是一样的. ur机械臂是六自由度机械臂,由D-H参数法确定它的运动学模型,连杆坐标系的建立如上图所示.我当时在这个地方的理解上走了不少弯路,后来找个一个视频,我觉得讲解地比较容易理解,可以参考一下Denavit-Hartenberg参数视频详解.ur机械臂DH参数表如下, 转动关节θi

V-rep学习笔记:机器人逆运动学解算

IK groups and IK elements VREP中使用IK groups和IK elements来进行正/逆运动学计算,一个IK group可以包含一个或者多个IK elements: IK groups: IK groups group one or more IK elements. To solve the kinematics of a simple kinematic chain, one IK group containing one IK element is need

C/C++,数据结构实现两个链表的合并(尾插法建立单链表,求链表长度,直接插入排序)

1题目 实现两个链表的合并 2基本功能要求: 1.建立两个链表A和B,链表元素个数分别为m和n个. 2.假设元素分别为(x1,x2,-xm),和(y1,y2, -yn).把它们合并成一个线性表C,使得: 当m>=n时,C=x1,y1,x2,y2,-xn,yn,-,xm 当n>m时,C=y1,x1,y2,x2,-ym,xm,-,yn 3.输出线性表C: 用直接插入排序法对C进行升序排序,生成链表D,并输出链表D. 3测试数据: (1)A表(30,41,15,12,56,80) B表(23,56,

采用头插插法和尾插法建立单项链表

PS: 来源2014年数据结构联考复习指导 Page27. #include <iostream> #include <stdio.h> #include <stdlib.h> using namespace std; const int END_INPUT = -1; typedef struct LNode { int data; struct LNode *next; }LNode, *LinkList; LinkList CreatList1(LinkList

博客第二天——头插法建立单链表

今天是第二天,今天遇到一个题:本题要求实现一个函数,求单链表L结点的阶乘和.这里默认所有结点的值非负,且题目保证结果在int范围内. 首先考虑这个题目本身不难,鉴于本人刚学习数据结构,题目中已给代码的单链表的创建值得我考虑.题目中给的是头插法代码如下:分析一下这段代码 int N, i; List L, p; scanf("%d", &N); L = NULL; for ( i=0; i<N; i++ ) { p = (List)malloc(sizeof(struct

大学实验4:利用数组表示法建立无向网

实验目的:深入理解图的邻接矩阵存储结构 实验内容: 已知某无向网如图所示,要求利用数组表示法建立该网. 基本思想:编写两个功能函数,一个负责建立无向网的邻接矩阵存储结构,另一个负责对无向网的打印输出. 步骤1:引入必要的函数库 1 #include <stdio.h> 2 #include <stdlib.h> 步骤2:定义常量 /*定义最大的顶点个数*/ #define MAX_VERTEX_NUM 100 /*定义常量INFINITY,该常量表示两个顶点间没有边相关联*/ #d

使用递归法建立二叉树

相关代码: include using namespace std; typedef struct node//创建节点结构 { char data;//数据元素 struct node Lchild;//指向左孩子结点 struct node Rchild;//指向右孩子结点 }BinNode,*BinTree; void CreateTree(BinTree &T);//递归法建立二叉树 void PreOrder(BinTree &T);//先序遍历 void InOrder(Bin

Linux学习之路之DNS的配置文件和正解区域文件、反解区域文件

DNS正解区域文件 在DNS中,我们知道有域和区域的概念,域的英文名称是domain,它是一种逻辑概念:而区域英文全称zone,它是一种物理概念.且zone分为正解区域和反解区域 正解区域:提供正向解析的服务,即FQDN-->IP的过程 反解区域:提供反向解析的服务,即IP-->FQDN的过程 不管好似正解区域还是反解区域,都通过了一个配置文件,这个文件中的每一个条目就是一个资源记录(Resource Record,RR). 资源记录的类型主要有这些,且这些资源记录的格式为: SOA:起始授权

linux_DNS服务器(正解/反解)的简单创建

什么是DNS? DNS(Domain Name System) 域名系统.它是如今互联网上能够相互通信的服务之一,对于现在的互联网特别特别重要的,因为在这个人们不能很好记忆数字IP地址的问题上,输入IP地址来访问其他的主机是很困难的,和不现实的,如果数字IP地址用我们所熟悉的各种名称(字符,例如:baidu taobao 等)就很好记忆啦.DNS就是来完成这个解析的功能的. DNS工作的原理: 首先,我们先了解一个内容,例如www.baidu.com, www.baidu.com 在DNS中是有