Catalog

  • Obtain it by using Matlab
  • Calculate the Jacobian directly by using C++

The geometric jacobian shows relationship between velocities of joints and velocities in TCP coordinate frame.
v = J q ˙ \bm v=\bm J \bm {\dot q} v=Jq˙​

Obtain it by using Matlab

%% For UR robot arm
clc;clear all;
syms d1 a2 a3 d4 d5 d6
syms q1 q2 q3 q4 q5 q6
c1 = cos(q1);
s1 = sin(q1);
c2 = cos(q2);
s2 = sin(q2);
c3 = cos(q3);
s3 = sin(q3);
c4 = cos(q4);
s4 = sin(q4);
c5 = cos(q5);
s5 = sin(q5);
c6 = cos(q6);
s6= sin(q6);H01 = [c1 0 s1 0;s1 0 -c1 0;0 1 0 d1;0 0 0 1;];
H12 = [c2 -s2 0 a2*c2;s2 c2 0 a2*s2;0 0 1 0;0 0 0 1;];
H23 = [c3 -s3 0 a3*c3;s3 c3 0 a3*s3;0 0 1 0;0 0 0 1;];
H34 = [c4 0 s4 0;s4 0 -c4 0;0 1 0 d4;0 0 0 1;];
H45 = [c5 0 -s5 0;s5 0 c5 0;0 -1 0 d5;0 0 0 1;];
H56 = [c6 -s6 0 0;s6 c6 0 0;0 0 1 d6;0 0 0 1;];
Hstack = {H01,H12,H23,H34,H45,H56};
H = H01*H12*H23*H34*H45*H56;%H = simplify(H);
% Jpi = z_{i-1}×(pe-p_{i-1})
% z indicates the direction of each joint's Z axis.
% p indicates the position of each joint.
% the jacobian is [Jpi,Joi]' = [z_{i-1}×(pe-p_{i-1}), z_{i-1}]'
Z0 = [0; 0; 1;];
P0e = H(1:3,4);Ht = eye(4,4);
J = [];Z = Z0;
Ji = [cross(Z,P0e);Z];
J = [J, Ji];
for i=1:5Ht = Ht*Hstack{i};Z = Ht(1:3,3);Pie = P0e - Ht(1:3,4);Ji = [cross(Z,Pie);Z];J = [J, Ji];
endJ = simplify(J);
J = collect(J,d6);

The result is

>> JJ =[ (cos(q1)*cos(q5) + cos(q2 + q3 + q4)*sin(q1)*sin(q5))*d6 + d4*cos(q1) - a2*cos(q2)*sin(q1) - d5*sin(q2 + q3 + q4)*sin(q1) - a3*cos(q2)*cos(q3)*sin(q1) + a3*sin(q1)*sin(q2)*sin(q3), cos(q1)*sin(q5)*(cos(q2 + q3)*sin(q4) + sin(q2 + q3)*cos(q4))*d6 - cos(q1)*(a3*sin(q2 + q3) + a2*sin(q2) - d5*(cos(q2 + q3)*cos(q4) - sin(q2 + q3)*sin(q4))),           sin(q2 + q3 + q4)*cos(q1)*sin(q5)*d6 - cos(q1)*(a3*sin(q2 + q3) - d5*cos(q2 + q3 + q4)),             sin(q2 + q3 + q4)*cos(q1)*sin(q5)*d6 + d5*cos(q2 + q3 + q4)*cos(q1), (cos(q1)*cos(q2)*cos(q5)*sin(q3)*sin(q4) - cos(q1)*cos(q2)*cos(q3)*cos(q4)*cos(q5) - sin(q1)*sin(q5) + cos(q1)*cos(q3)*cos(q5)*sin(q2)*sin(q4) + cos(q1)*cos(q4)*cos(q5)*sin(q2)*sin(q3))*d6,                                                     0]
[ (cos(q5)*sin(q1) - cos(q2 + q3 + q4)*cos(q1)*sin(q5))*d6 + d4*sin(q1) + a2*cos(q1)*cos(q2) + d5*sin(q2 + q3 + q4)*cos(q1) + a3*cos(q1)*cos(q2)*cos(q3) - a3*cos(q1)*sin(q2)*sin(q3), sin(q1)*sin(q5)*(cos(q2 + q3)*sin(q4) + sin(q2 + q3)*cos(q4))*d6 - sin(q1)*(a3*sin(q2 + q3) + a2*sin(q2) - d5*(cos(q2 + q3)*cos(q4) - sin(q2 + q3)*sin(q4))),           sin(q2 + q3 + q4)*sin(q1)*sin(q5)*d6 - sin(q1)*(a3*sin(q2 + q3) - d5*cos(q2 + q3 + q4)),             sin(q2 + q3 + q4)*sin(q1)*sin(q5)*d6 + d5*cos(q2 + q3 + q4)*sin(q1), (cos(q1)*sin(q5) - cos(q2)*cos(q3)*cos(q4)*cos(q5)*sin(q1) + cos(q2)*cos(q5)*sin(q1)*sin(q3)*sin(q4) + cos(q3)*cos(q5)*sin(q1)*sin(q2)*sin(q4) + cos(q4)*cos(q5)*sin(q1)*sin(q2)*sin(q3))*d6,                                                     0]
[                                                                                                                                                                                   0,                                               (sin(q2 + q3 + q4 - q5)/2 - sin(q2 + q3 + q4 + q5)/2)*d6 + a3*cos(q2 + q3) + a2*cos(q2) + d5*sin(q2 + q3 + q4), (sin(q2 + q3 + q4 - q5)/2 - sin(q2 + q3 + q4 + q5)/2)*d6 + a3*cos(q2 + q3) + d5*sin(q2 + q3 + q4), (sin(q2 + q3 + q4 - q5)/2 - sin(q2 + q3 + q4 + q5)/2)*d6 + d5*sin(q2 + q3 + q4),                                                                                                                                   (- sin(q2 + q3 + q4 + q5)/2 - sin(q2 + q3 + q4 - q5)/2)*d6,                                                     0]
[                                                                                                                                                                                   0,                                                                                                                                                      sin(q1),                                                                                           sin(q1),                                                                         sin(q1),                                                                                                                                                                    sin(q2 + q3 + q4)*cos(q1),   cos(q5)*sin(q1) - cos(q2 + q3 + q4)*cos(q1)*sin(q5)]
[                                                                                                                                                                                   0,                                                                                                                                                     -cos(q1),                                                                                          -cos(q1),                                                                        -cos(q1),                                                                                                                                                                    sin(q2 + q3 + q4)*sin(q1), - cos(q1)*cos(q5) - cos(q2 + q3 + q4)*sin(q1)*sin(q5)]
[                                                                                                                                                                                   1,                                                                                                                                                            0,                                                                                                 0,                                                                               0,                                                                                                                                                                           -cos(q2 + q3 + q4),                            -sin(q2 + q3 + q4)*sin(q5)]

Calculate the Jacobian directly by using C++

Now we have got the expressions of jacobian. Then, use c++ to design a function that can calculate the jacobian directly so that the computation could be reduced greatly making the speed of processing faster.

void jacobian(const double* q, double* J){double s1 = sin(*q), c1 = cos(*q); q++;double q23 = *q, q234 = *q, s2 = sin(*q), c2 = cos(*q); q++;double s3 = sin(*q), c3 = cos(*q); q23 += *q; q234 += *q; q++;double s4 = sin(*q), c4 = cos(*q); q234 += *q; q++;double s5 = sin(*q), c5 = cos(*q), q2345 = q234 + *q,q234_5 = q234 - *q; q++;double s6 = sin(*q), c6 = cos(*q);double s23 = sin(q23), c23 = cos(q23);double s234 = sin(q234), c234 = cos(q234);double s2345 = sin(q2345), s234_5 = sin(q234_5);*J = (c1*c5 + c234*s1*s5)*d6 + d4*c1 - a2*c2*s1 - d5*s234*s1 - a3*c2*c3*s1 + a3*s1*s2*s3;J++;*J = c1*s5*(c23*s4 + s23*c4)*d6 - c1*(a3*s23 + a2*s2 - d5*(c23*c4 - s23*s4)); J++;*J = s234*c1*s5*d6 - c1*(a3*s23 - d5*c234); J++;*J = s234*c1*s5*d6 + d5*c234*c1; J++;*J = (c1*c2*c5*s3*s4 - c1*c2*c3*c4*c5 - s1*s5 + c1*c3*c5*s2*s4 + c1*c4*c5*s2*s3)*d6; J++;*J = 0; J++;*J = (c5*s1 - c234*c1*s5)*d6 + d4*s1 + a2*c1*c2 + d5*s234*c1 + a3*c1*c2*c3 - a3*c1*s2*s3;J++;*J = s1*s5*(c23*s4 + s23*c4)*d6 - s1*(a3*s23 + a2*s2 - d5*(c23*c4 - s23*s4)); J++;*J = s234*s1*s5*d6 - s1*(a3*s23 - d5*c234); J++;*J = s234*s1*s5*d6 + d5*c234*s1; J++;*J = (c1*s5 - c2*c3*c4*c5*s1 + c2*c5*s1*s3*s4 + c3*c5*s1*s2*s4 + c4*c5*s1*s2*s3)*d6; J++;*J = 0; J++;*J = 0;J++;*J = (s234_5/2 - s2345/2)*d6 + a3*c23 + a2*c2 + d5*s234; J++;*J = (s234_5/2 - s2345/2)*d6 + a3*c23 + d5*s234; J++;*J = (s234_5/2 - s2345/2)*d6 + d5*s234; J++;*J = (- s2345/2 - s234_5/2)*d6; J++;*J = 0; J++;*J = 0; J++;*J = s1; J++;*J = s1; J++;*J = s1; J++;*J = s234 * c1; J++;*J = c5*s1 - c234*c1*s5; J++;*J = 0; J++;*J = -c1; J++;*J = -c1; J++;*J = -c1; J++;*J = s234 * s1; J++;*J = - c1*c5 - c234*s1*s5; J++;*J = 1; J++;*J = 0; J++;*J = 0; J++;*J = 0; J++;*J = -c234; J++;*J = -s234 * s5; J++;}

q q q represents the robot joints’ states, and J J J is the geometric jacobian matrix.

Example of utilizing:

#define ROBOT_DOF 6
...
//get joint states from ros topic
...
double Jr[ROBOT_DOF*ROBOT_DOF] = {0};
//calculate the jacobian in real-time.
jacobian(q,Jr);
//print the elements of jacobian.
for(int i=0;i<ROBOT_DOF;i++)printf("%1.6f %1.6f %1.6f %1.6f %1.6f %1.6f \n",Jr[i*6+0],Jr[i*6+1],Jr[i*6+2],Jr[i*6+3],Jr[i*6+4],Jr[i*6+5]);

SLAM--Geometric jacobian of UR series.相关推荐

  1. 傅里叶级数(Fourier Series)

    1.傅里叶级数 笔记来源: 1.Intro to FOURIER SERIES: The Big Idea 2.How to Compute a FOURIER SERIES 3.The beauti ...

  2. MATLAB Robotics System Toolbox学习笔记(一):一步一步建造一个机械臂

    本文参考 MathWorks 中 Help Center 的 Build a Robot Step by Step ,并加以自己的理解 原网址:https://ww2.mathworks.cn/hel ...

  3. 机械臂中的四元素转为旋转矩阵_机器臂的运动学

    机器人在这两年莫名其妙就成了热门话题了.在人们的想象之中,机器人智慧聪颖,无所不能,仿佛今天就要抢我饭碗,明天就要灭绝人类了.胡思乱想固然容易,不过想让机器人真的做到这些事,可就真是为难了我们这帮工程 ...

  4. Rigid Manipulators--Modelling建模--Kinematics运动学

    一.Direct Kinematics正运动学 实质:关节空间->任务空间 方法: D-H方法: 四个参数中,lilil_{i}与αiαi\alpha_{i}的值是固定的,而didid_{i}与 ...

  5. 趣味三角——第9章——Zeno错失无穷小

    第9章 如果Zeno仅需再认识到这一点  (Had Zeno Only Known This!) --无限多的数字之和可能具有有限的值 One, Two, Three-Infinity (1,2,3- ...

  6. First Estimate Jacobian (FEJ) 如何理解SLAM中的First Estimate Jacobian

    First Estimate Jacobian (FEJ) 如何理解SLAM中的First Estimate Jacobian First Estimate Jacobian是Visual Inert ...

  7. 史上最简SLAM零基础解读(7) - Jacobian matrix(雅可比矩阵) → 理论分析与应用详解(Bundle Adjustment)

    本人讲解关于slam一系列文章汇总链接:史上最全slam从零开始   文末正下方中心提供了本人联系方式,点击本人照片即可显示WX→官方认证{\color{blue}{文末正下方中心}提供了本人 \co ...

  8. ICRA2021 SLAM方向论文汇总

    ICRA 2021会议也已经开完了, 所以对原来总结SLAM方向相关的文章进行了重新整理和补全,由于总结比较广泛,大约有200多篇,本文对论文进行了分类,并给出了下载地址和开源代码地址,希望对一起做S ...

  9. ICRA2022 SLAM相关论文整理

    目录 视觉SLAM相关 线.面.3Dfeature 多相机系统 VIO+GPS 其他 数据集 三维重建 语义SLAM Special sensor Lidar相关 视觉SLAM相关 线.面.3Dfea ...

最新文章

  1. javascript与浏览器学习(一)
  2. 德鲁克管理思想:管理的7大理论、43条原则,每一条都是精华
  3. Linux系统调用的实现机制分析
  4. android状态栏半透明灰色,Android7.0沉浸式状态栏蒙灰问题完美解决
  5. 为什么 RestTemplate 那么棒,看这篇就够了!
  6. 最简单易懂的对拍讲解
  7. nullnulle-人事管理系统-人事档案-变更管理-人员合同变更
  8. Cell.reuseIdentifier 指什么
  9. CCF-CSP 稀疏向量问题(2020-6)
  10. 11年瑞纳手动挡值多少钱_1个本科学历,值多少钱?
  11. excel 常用快捷键及小技巧
  12. 从薛定谔方程到K-S方程
  13. c语言写流水灯程序,用汇编和C语言 写流水灯程序
  14. 见信如晤::‘卷福’读信:我全心全意去拥抱您
  15. Nacos @RefreshScope 配置不生效问题
  16. 超级好用easyexcel插件
  17. 银行理财子公司蓄力布局A股;现金管理类理财产品整改加速
  18. 【AP】Robust multi-period portfolio selection(3)
  19. macbook air 单独安装纯净win7OS
  20. Spring4:AOP

热门文章

  1. windows录屏html文件,win7系统自带的屏幕录制工具如何打开使用
  2. Java基础面试题1:面向对象的思想
  3. NameNode堆内存估算
  4. 在windows7下农业银行网银(金e顺)不能使用
  5. 企业官网小程序搭建教程
  6. journalctl中文手册
  7. sql 创建表,批量插入数据
  8. Java web后端框架
  9. LabVIEW编程LabVIEW开发 研华PCIE-1751更改DIO方向 例程与相关资料
  10. 手机酷派4G5316 5313s 黑砖 求转成功 9008端口 9006端口 少走弯路选对镜像...