搜索
bottom↓
回复: 6
打印 上一主题 下一主题

发六自由度机器手臂Inverse Kinematic 的Matlab代码

[复制链接]

出0入0汤圆

跳转到指定楼层
1
发表于 2015-11-28 21:08:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

1. 首先由DH参数和各个关节角度q向量算出Transform Matrix  T(q) 并得到末端在世界坐标系中的坐标X(q)。

2. 给q加一个少量的扰动得到q_ist,算出此时的雅克布矩阵 J(q_ist),Transform Matrix T(q_ist) 得到末端在世界坐标系中的坐标X(q_ist)。

3. 计算X(q)和X(q_ist)的差值 为err。 最后根据梯度下降发不断减小差值err使q_ist逐渐走向q。

Matlab的main函数片段:
  1. %% q: Gelenkwinkel
  2. %q=sym('q',[6,1]);
  3. %assume(q, 'real');

  4. clear;
  5. q=[180.0;270.0;90.0;180.0;180.0;0.0];
  6. %% Jacobian test
  7. q3=[180.1;   269.9;   90.0;   180.0;   180.0;   0.0]; % Tn+1
  8. q2=[179.9;   270.1;   90.0;   180.0;   180.0;   0.0]; % Tn
  9. delta_q=[-0.2*pi/180;
  10.     -0.2*pi/180; 0; 0; 0; 0]; %speed
  11. %%offset generation
  12. q_rand=4*rand(6,1)-2;
  13. q_ist=q+q_rand;
  14. %% Robot parameter
  15. D = [0.2755; 0.41; 0.2073; 0.0741; 0.0741; 0.16];
  16. e2 = 0.0098;
  17. aa = deg2rad(30);
  18. ca = cos(aa);
  19. sa = sin(aa);
  20. c2a = cos(2*aa);
  21. s2a = sin(2*aa);
  22. d4b = D(3)+sa/s2a*D(4);
  23. d5b = sa/s2a*D(4)+sa/s2a*D(5);
  24. d6b = sa/s2a*D(5)+D(6);

  25. %% DH parameter: [theta d a alpha] . Winkel sind in RAD und Positionen in Meter


  26. DH_Parameter = [ -q(1)*pi/180      D(1)  0    pi/2;...
  27.                  (q(2)-90)*pi/180  0     D(2) pi;...
  28.                  (q(3)+90)*pi/180  -e2   0    pi/2;...
  29.                   q(4)*pi/180      -d4b  0    2*aa;...
  30.                  (q(5)-180)*pi/180 -d5b  0    2*aa;...
  31.                  (q(6)+90)*pi/180  -d6b  0    pi ];

  32. %% Erzeuge Transformationsmatrizen

  33. T1 = DH(DH_Parameter(1,:));
  34. T2 = DH(DH_Parameter(2,:));
  35. T3 = DH(DH_Parameter(3,:));
  36. T4 = DH(DH_Parameter(4,:));
  37. T5 = DH(DH_Parameter(5,:));
  38. T6 = DH(DH_Parameter(6,:));

  39. %debug=T6(3,4);
  40. %% Transformation Hand-Roboter ( Tipp: Anschlie脽end mit matlabFunction in eine Funktion umwandeln f眉r Inverse Kinematik)
  41. %T(q) = ...
  42. T_q=T1*T2*T3*T4*T5*T6;
  43. %% Jacbobi-Matrix
  44. %J(q) = ...
  45. %J=zeros(4,4,6);
  46. %n=3;
  47. %J(:,:,n)=T1;
  48. A=zeros(4,4,6);
  49. A(:,:,1)=T1;
  50. A(:,:,2)=T2;
  51. A(:,:,3)=T3;
  52. A(:,:,4)=T4;
  53. A(:,:,5)=T5;
  54. A(:,:,6)=T6;
  55. J_q=Jacobian_calu(A);


  56. J_test=Jacobi_Matrix(q);



  57. %% when velocity == diff(tx ty tz) Jacobian correct
  58. diff=Transformations_Matrix(q3)-Transformations_Matrix(q2);
  59. velocity= J_test*delta_q;



  60. %matlabFunction(J,'File','Jacobi_Matrix.m');
  61. %% Inverse Kinematik

  62. % q_soll_Transp = IK_Transp(q_ist,[0.41;0.25951;0.084028]);

  63. %q_soll_Pseudo = IK_Transp(q,[x y z]);
  64. q_soll_Pseudo = IK_Pseudo(q_ist,[0.41;0.25951;0.084028]);

  65. a=0;
复制代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

2
发表于 2016-1-30 09:31:15 | 只看该作者
学习,谢谢!!!

出0入0汤圆

3
发表于 2016-1-30 11:07:55 来自手机 | 只看该作者
谢谢分享!!!!

出0入0汤圆

4
发表于 2018-3-30 08:08:44 | 只看该作者
学习,谢谢!!!

出0入0汤圆

5
发表于 2018-6-3 12:21:06 | 只看该作者
学习了,谢谢楼主

出0入4汤圆

6
发表于 2018-6-3 17:57:39 来自手机 | 只看该作者
这个看上去好复杂,谢谢分享

出0入0汤圆

7
发表于 2018-6-3 18:21:52 | 只看该作者
谢谢楼主分享
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 23:58

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表