当前位置:   article > 正文

ros 机械臂复位_五自由度机械臂建模(matlab C)

机械臂回原位代码

55503edc-1313-eb11-8da9-e4434bdf6706.png

五自由度机械臂建模

学习代码都记录在个人github上,欢迎关注~

Matlab机器人工具箱版本9.10

机械臂还是原来的机械臂,之前用ROS做底层驱动,不需要写正逆运动学和相关算法就能得到一些简单的仿真轨迹,详情可见我之前的博客:
六自由度机械臂ROS+Rviz+Arbotix控制器仿真
使用MoveIt!+Arbotix控制六自由度机械臂
MoveIt!入门:RobotModel、RobotState
MoveIt!五自由度机械臂pick_and_place抓取规划演示
使用ROS MoveIt!控制真实五自由度机械臂
下面我搞一搞这个底层部分:

标准D-H法建模

由于该机械臂只有五个自由度,并且D-H法只能实现绕Z轴的旋转和沿X轴的位移,而该臂第四个关节和第五个关节坐标系必须先绕着Z轴旋转90度,然后再绕X轴旋转90度,这是常规D-H法无法实现的。这里可以在第四个关节和第五个关节中设置一个虚拟关节,以此来过渡一下,解决上述问题。建模如下:

57503edc-1313-eb11-8da9-e4434bdf6706.png
i αi ai di θi

正运动学Matlab

  1. % Standard DH
  2. % five_dof robot
  3. % 在关节4和关节5之间增加一个虚拟关节,便于逆运动学计算
  4. clear;
  5. clc;
  6. th(1) = 0; d(1) = 0; a(1) = 0; alp(1) = pi/2;
  7. th(2) = 0; d(2) = 0; a(2) = 0.104;alp(2) = 0;
  8. th(3) = 0; d(3) = 0; a(3) = 0.096; alp(3) = 0;
  9. th(4) = 0; d(4) = 0; a(4) = 0; alp(4) = 0;
  10. th(5) = pi/2; d(5) = 0; a(5) = 0; alp(5) = pi/2;
  11. th(6) = 0; d(6) = 0; a(6) = 0; alp(6) = 0;
  12. th(7) = 0; d(7) = 0.163; a(7) = 0.028; alp(7) = 0;
  13. % DH parameters th d a alpha sigma
  14. L1 = Link([th(1), d(1), a(1), alp(1), 0]);
  15. L2 = Link([th(2), d(2), a(2), alp(2), 0]);
  16. L3 = Link([th(3), d(3), a(3), alp(3), 0]);
  17. L4 = Link([th(4), d(4), a(4), alp(4), 0]);
  18. L5 = Link([th(5), d(5), a(5), alp(5), 0]);
  19. L6 = Link([th(6), d(6), a(6), alp(6), 0]);
  20. L7 = Link([th(7), d(7), a(7), alp(7), 0]);
  21. robot = SerialLink([L1, L2, L3, L4, L5, L6, L7]);
  22. robot.name='MyRobot-5-dof';
  23. robot.display()
  24. theta = [0 0 0 0 90 0 0]*pi/180;
  25. robot.teach();
  26. robot.plot(theta);
  27. t = robot.fkine(theta) %末端执行器位姿
  28. ik_T = five_dof_ikine(t)

5a503edc-1313-eb11-8da9-e4434bdf6706.png

逆运动学推导

60503edc-1313-eb11-8da9-e4434bdf6706.png

64503edc-1313-eb11-8da9-e4434bdf6706.png

65503edc-1313-eb11-8da9-e4434bdf6706.png

68503edc-1313-eb11-8da9-e4434bdf6706.png

逆运动学Matlab

  1. function ik_T = five_dof_ikine(fk_T)
  2. a2 = 0.104; a3 = 0.096; ae = 0.028; de = 0.163; % ae和de即为a7、d7
  3. nx = fk_T(1, 1); ox = fk_T(1, 2); ax = fk_T(1, 3); px = fk_T(1, 4);
  4. ny = fk_T(2, 1); oy = fk_T(2, 2); ay = fk_T(2, 3); py = fk_T(2, 4);
  5. nz = fk_T(3, 1); oz = fk_T(3, 2); az = fk_T(3, 3); pz = fk_T(3, 4);
  6. % theta1
  7. theta1 = atan2(py - ny*ae - ay*de, px - nx*ae - ax*de);
  8. % theta5
  9. theta5 = atan2(sin(theta1)*nx - cos(theta1)*ny, sin(theta
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/96759
推荐阅读
相关标签
  

闽ICP备14008679号