6軸機械人運動學正解,逆解1

2021-09-24 19:20:17 字數 3185 閱讀 3316

正解 

給定機械人各關節的角度,計算出機械人末端的空間位置

逆解 已知機械人末端的位置和姿態,計算機械人各關節的角度值

常見的工業機械人 

正解與逆解的求解需要相應的機械人運動方程,其中關鍵的就是dh參數列 

dh參數列用來描述機械人各關節座標系之間的關係,有了dh參數列就可以在機械人各關節之間進行座標轉換 

求解正解就是從關節1到關節5的座標轉換 

基本知識 

關節:連線2個桿件的部分 

連桿長度 (a) :2個相鄰關節軸線之間的距離 

連桿扭角 (alpha α) :2個相鄰關節軸線之間的角度 

連桿偏距 (d) :2個關節座標系的x軸之間的距離 

關節角度 (theta θ) :關節變數 計算時需要加初始角度偏移

z軸: 關節軸線 

x軸: 從z(i)軸指向z(i+1)軸 與a重合 

alpha: z(i)軸繞x(i)軸旋轉到z(i+1)軸的角度 

a: 相鄰的2個關節軸線之間的距離是a z(i)軸到z(i+1)軸 

d: 2個相鄰的a之間的距離是d a(i-1)到a(i) 相鄰x軸之間的距離

關節角度 從z軸正向看原點 逆時針旋轉為正 

如果(a=0),x(i)與x(i-1)方向相同 

如果(a!=0),x(i)從z(i)指向z(i+1)

圖2 圖3 

dh參數列

關節    a    d    α

1    100    0    90

2    270    0    0

3    60    0    90

4    0    270    -90

5    0    0    90

6    0    0    0

dh引數有多種表示方式,與座標系及座標軸的設定有關

正解的計算方法 

機械人從關節1到關節6進行座標變換,結果就是末端的位置座標 

根據dh參數列以及關節變數的值,建立6個關節矩陣a1-a6,計算出轉換矩陣t1-t6,t1-t6相乘得出結果 

6軸機械人4,5,6軸相交於1點 正解計算只算到第5軸 

為簡化矩陣計算,關節1座標系原點設在z2軸的水平平面上,最終結果在z方向需要再加上乙個偏移值

/* 4階矩陣計算機械人正解 

* 關節角度在檔案 j1_j6中

* 機械人引數在檔案 param_table中

* 座標結果在螢幕輸出 */

#include #include #include #define xyz_f_j "./j1_j6"

#define design_dt "./param_table"

#define xyz_f_tool "./tool_xyz"

#define xyz_f_world "./world_xyz"

#define rad2ang (3.1415926535898/180.0)

#define is_zero(var) if(var < 0.0000000001 && var > -0.0000000001) 

#define matrix_1 1

#define matrix_n 4

#define def_toolxyz 0  

/* 0 沒有工具座標系 非零 有工具座標系 */

/*角度偏移*/

#define angle_offset_j2 90

#define angle_offset_j3 90

//#define angle_offset_j4 -90

typedef struct param_t;

double matrix_a1[matrix_n][matrix_n];

double matrix_a2[matrix_n][matrix_n];

double matrix_a3[matrix_n][matrix_n];

double matrix_a4[matrix_n][matrix_n];

double matrix_a5[matrix_n][matrix_n];

double matrix_a6[matrix_n][matrix_n];

double matrix_worldxyz[matrix_n][matrix_n];

double matrix_toolxyz[matrix_n][matrix_n];

void initmatrix_a(param_t *p_table);

void calculate_matrix_a(double matrix[matrix_n][matrix_n], param_t *p_param);

int matrix_mul(double matrix_a[matrix_n][matrix_n],

double matrix_b[matrix_n][matrix_n],

double matrix_result[matrix_n][matrix_n]);

int matrix_add(double matrix_a[matrix_n][matrix_n], 

double matrix_b[matrix_n][matrix_n], 

double matrix_sum[matrix_n][matrix_n], int m, int n);

void matrix_copy(double matrix_a[matrix_n][matrix_n], 

double matrix_b[matrix_n][matrix_n], int m, int n);

void initmatrix_tool(double toolx, double tooly, double toolz);

void printmatrix(double matrix[matrix_n][matrix_n], int m, int n)

void initmatrix_tool(double toolx, double tooly, double toolz)

else

}}int matrix_mul(double matrix_a[matrix_n][matrix_n], 

double matrix_b[matrix_n][matrix_n], 

double matrix_result[matrix_n][matrix_n])

;    /*巢狀迴圈計算結果矩陣(m*p)的每個元素*/

for(i=0;i

原文: 

UR機械人裝箱姿態 UR機械臂運動學正逆解方法

最近幾個月因為工作接觸到了機械臂的專案,突然對機械臂運動方法產生了興趣,也就是如何控制機械臂的位置和姿態。借用一張網上的,應該是ur5的尺寸。我用到的是ur3機械臂,除了尺寸不一樣,各關節結構和初始位置和ur5是一樣的。轉動關節 i是關節變數,連桿偏移di是常數。關節編號 繞x軸 a 沿x軸 繞z軸...

機械人運動學與動力學

運動學,從幾何的角度 指不涉及物體本身的物理性質和加在物體上的力 描述和研究物體位置隨時間的變化規律的力學分支。以研究質點和剛體這兩個簡化模型的運動為基礎,並進一步研究變形體 彈性體 流體等 的運動。研究後者的運動,須把變形體中微團的剛性位移和應變分開。點的運動學研究點的運動方程 軌跡 位移 速度 ...

機械人技術第二章運動學

degree of freedom自由度 manipulator操縱者 feedback反饋 orientation方向 rotation旋轉 arbitrary任意的 segment段,部分 parallel平行 perpendicular垂直線的 相似矩陣 a是線性變換 l 在基底下的表示矩陣 ...