当前位置:   article > 正文

【个人简记】基于MDH,6R机器人运动学逆解_运动学逆解 matlab代码

运动学逆解 matlab代码

【个人理解,有错请指出,谢谢】

求解方法为解析法(满足pieper原则)

以下是我做找逆解公式的时候,matlab的测试代码

  1. clear;%清楚空间(base)变量;clear all清除全局(global)变量
  2. clc;%清除命令行
  3. close all%关闭所有的figure窗口
  4. format long g;% short为四个字节,long为八个字节:保留四位小数, g :取消科学计数法
  5. pi = 3.14159265;
  6. %%
  7. %代入具体数值运算
  8. d1 = 445.2; d4 = -748; a2 = 50; a3 = 750;
  9. a1 = 0; a4 = 0; a5 = 0; a6 = 0; d2 = 0; d3 = 0; d5 = 0; d6 = 0;
  10. %theta值
  11. offset = [pi/2 pi/2 0 0 0 0];
  12. theta_in = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6];
  13. theta_in = theta_in + offset
  14. theta1 = theta_in(1); theta2 = theta_in(2); theta3 = theta_in(3); theta4 = theta_in(4); theta5 = theta_in(5); theta6 = theta_in(6);
  15. s1 = sin(theta1); s2 = sin(theta2); s3 = sin(theta3); s4 = sin(theta4); s5 = sin(theta5); s6 = sin(theta6);
  16. c1 = cos(theta1); c2 = cos(theta2); c3 = cos(theta3); c4 = cos(theta4); c5 = cos(theta5); c6 = cos(theta6);
  17. %%
  18. %进行确切的alpha计算,不然会导致参数过大
  19. s_a1 = 0; s_a2 = 1; s_a3 = 0; s_a4 = -1; s_a5 = 1; s_a6 = -1;
  20. c_a1 = 1; c_a2 = 0; c_a3 = 1; c_a4 = 0; c_a5 = 0; c_a6 = 0;
  21. %%
  22. % 符号运算
  23. % 测试使用需要注释这里
  24. % syms ('s1', 's2', 's3', 's4', 's5', 's6', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 's23', 'c23')
  25. % syms ('a2', 'a3', 'd1', 'd4')
  26. %%
  27. %MDH变换
  28. T01 = [ c1 -s1 0 a1
  29. s1*c_a1 c1*c_a1 -s_a1 -d1*s_a1
  30. s1*s_a1 c1*s_a1 c_a1 d1*c_a1
  31. 0 0 0 1];
  32. T12 = [ c2 -s2 0 a2
  33. s2*c_a2 c2*c_a2 -s_a2 -d2*s_a2
  34. s2*s_a2 c2*s_a2 c_a2 d2*c_a2
  35. 0 0 0 1];
  36. T23 = [ c3 -s3 0 a3
  37. s3*c_a3 c3*c_a3 -s_a3 -d3*s_a3
  38. s3*s_a3 c3*s_a3 c_a3 d3*c_a3
  39. 0 0 0 1];
  40. T34 = [ c4 -s4 0 a4
  41. s4*c_a4 c4*c_a4 -s_a4 -d4*s_a4
  42. s4*s_a4 c4*s_a4 c_a4 d4*c_a4
  43. 0 0 0 1];
  44. T45 = [ c5 -s5 0 a5
  45. s5*c_a5 c5*c_a5 -s_a5 -d5*s_a5
  46. s5*s_a5 c5*s_a5 c_a5 d5*c_a5
  47. 0 0 0 1];
  48. T56 = [ c6 -s6 0 a6
  49. s6*c_a6 c6*c_a6 -s_a6 -d6*s_a6
  50. s6*s_a6 c6*s_a6 c_a6 d6*c_a6
  51. 0 0 0 1];
  52. EndPosture = T01 * T12 * T23 * T34 * T45 * T56;
  53. nx = EndPosture(1,1); ox = EndPosture(1,2); ax = EndPosture(1,3); rx = EndPosture(1,4);
  54. ny = EndPosture(2,1); oy = EndPosture(2,2); ay = EndPosture(2,3); ry = EndPosture(2,4);
  55. nz = EndPosture(3,1); oz = EndPosture(3,2); az = EndPosture(3,3); rz = EndPosture(3,4);
  56. %%
  57. %逆解算法测试
  58. %theta1
  59. %theta2
  60. %theta3
  61. %theta4
  62. %theta5
  63. %theta6
  64. %%
  65. %逆运动学测试
  66. format short g
  67. syms ('nx', 'ny', 'nz', 'ox', 'oy', 'oz', 'ax', 'ay', 'az', 'rx', 'ry', 'rz');%假设已知上述值
  68. MT01 = (T01)^(-1); %求逆
  69. MT12 = (T12)^(-1);
  70. MT23 = (T23)^(-1);
  71. MT34 = (T34)^(-1);
  72. MT45 = (T45)^(-1);
  73. MT56 = (T56)^(-1);
  74. T06 = [nx, ox, ax, rx
  75. ny, oy, ay, ry
  76. nz, oz, az, rz
  77. 0, 0, 0, 1]; %已知末端位姿
  78. % T06 = T01 * T12 * T23 * T34 * T45 * T56
  79. %解1(2,4); 解2(1,4)(3,4); 解23; 解3
  80. T16 = T12 * T23 * T34 * T45 * T56;
  81. ert1 = MT01 * T06;
  82. %不能用同一行
  83. %解4(1,3)(3,3);解5(2,3);
  84. T36 = T34 * T45 * T56;
  85. ert3 = MT23 * MT12 * MT01 * T06;
  86. %测试使用矩阵
  87. left = T36
  88. right = ert3
  89. A = simplify(left(1,3))
  90. B = simplify(right(1,3))
  91. C = simplify(left(2,3))
  92. D = simplify(right(2,3))
  93. E = simplify(left(3,2))
  94. F = simplify(right(3,2))

逆解万能公式,遇到这样的情况就说明有两个解

补充一张MDH机器人建模图

 可以发现建模满足pieper原则,后三轴交于一点(或者后三轴互相平行)

根据运动学正推可以发现,位置矩阵(3x1)只和θ1、θ2、θ3有关,姿态矩阵(3x3)影响权重较大的是θ4、θ5、θ6。

8组解的由来:

θ1有两种解,如下图。因此利用“atan2()”求解出θ1的第一种解,那么第二种解就是和第一种解相差pi

 θ2有两种解,如下图

我的逆推流程中θ2遇到了万能公式的情况。

θ1、θ2、θ3这三个角求解就有四组解。

θ4、θ5、θ6的求解公式没有遇见万能公式的情况,那么就是对应的4组解,剩下的456角仅有一一对应的情况。

那么对应的最后一种情况就θ4和θ6变化pi,θ5取负即可完成最后一种情况,示意图如下。

原理是姿态可由一个角取负,剩下两组角变化pi即可。

姿态反转的情况,也就是剩下的四组解

验证每一组有效解是否正确

将每一组解带入正解算法验证。末端位姿矩阵唯一性,每一组解的姿态矩阵都应一样

 matalb算法的逆解思路

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/945510
推荐阅读
相关标签
  

闽ICP备14008679号