6轴机器人jacobian矩阵

jacobian矩阵
计算出的结果是4*6的矩阵
机器人关节参数和角度值 看之前的文章
程序验证用到matlab 显示的结果与matlab机器人工具箱的结果差大概0.1左右

/*计算机器人jacobian矩阵 
 *机器人关节参数在文件 param_table中
 *角度值在文件 dt_jacob中
 *在屏幕输出 jacobian矩阵 */

#include <stdio.h>
#include <math.h>
#include <string.h>

#include "matrix_opt.h"

#define JOINT_V "./dt_jacob"
#define DESIGN_DT "./param_table"

#define ANGLE_OFFSET_J2 90
#define ANGLE_OFFSET_J3 90



double jacobian[MATRIX_J][MATRIX_J];
double matrix_R[MATRIX_N][MATRIX_N];
double matrix_T[MATRIX_N][MATRIX_N];

int matrix_jacob(double mtx_R[MATRIX_N][MATRIX_N], 
            double mtx_Te[MATRIX_N][MATRIX_N], 
            double mtx_Ti[MATRIX_N][MATRIX_N]);

//int fun_calcu_vct(double matrix_A[MATRIX_N][MATRIX_N], 
int fun_calcu_vct(double (*p_matrix)[], 
                double matrix_vct[MATRIX_N][MATRIX_N], 
                double (*jacobian)[MATRIX_J], int sign);

//int fun_calcu_pos();

//int vector_mul_ex(double vct_a[VECTOR_N], double vct_b[VECTOR_N], 
//          double vct_ret[VECTOR_N]);
int vector_mul_ex(double (*jacobian)[MATRIX_J], double vct_b[VECTOR_N], 
            double (*ret)[MATRIX_J]); 

//int vector_sub(double vct_a[VECTOR_N], double vct_b[VECTOR_N], 
//          double vct_ret[VECTOR_N], int n);
int vector_sub(double vct_a[VECTOR_N], double (*jacobian)[MATRIX_J], 
            double vct_ret[VECTOR_N], int n);

double matrix_E[4][4] = {
  
  1, 0, 0, 0,
                        0, 1, 0, 0,
                        0, 0, 1, 0, 
                        0, 0, 0, 1 };


int main()
{
    /*
    */
    int i;
    param_t param_table[6] ={
  
  0};
    double z_offset=0;

    FILE * fp=NULL;
    fp=fopen(JOINT_V, "r");
    if(fp== NULL){
        perror("open dt_jacob file error\n");
        return 0;
    }
    fscanf(fp, "%lf%lf%lf%lf%lf%lf", 
                &param_table[0].joint_v, 
                &param_table[1].joint_v, 
                &param_table[2].joint_v, 
                &param_table[3].joint_v, 
                &param_table[4].joint_v, 
                &param_table[5].joint_v 
          );

    param_table[1].joint_v += ANGLE_OFFSET_J2;
    param_table[2].joint_v += ANGLE_OFFSET_J3;

    param_table[0].joint_v *= RAD2ANG;
    param_table[1].joint_v *= RAD2ANG;
    param_table[2].joint_v *= RAD2ANG;
    param_table[3].joint_v *= RAD2ANG;
    param_table[4].joint_v *= RAD2ANG;
    param_table[5].joint_v *= RAD2ANG;

    fclose(fp);

    fp=fopen(DESIGN_DT, "r");
    if( fp== NULL){
        perror("open param_table file error\n");
        return 0;
    }   

    for(i=0; i<6; i++){
        fscanf(fp, "%lf%lf%lf",
                    &param_table[i].length,
                    &param_table[i].d,
                    &param_table[i].alpha );
    }
    fscanf(fp, "%lf", &z_offset );
    fclose(fp);

    param_table[0].alpha *= RAD2ANG;
    param_table[1].alpha *= RAD2ANG;
    param_table[2].alpha *= RAD2ANG;
    param_table[3].alpha *= RAD2ANG;
    param_table[
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值