当前位置:   article > 正文

四足机器狗建模——单腿matlab 建模(示教,三维)_用matlab画一个小狗

用matlab画一个小狗

matlab 2023

坐标系: B,0,1,2,3 ,4

4 为足端坐标系。

自由度,可计算但不考虑末端姿态。


轨迹规划非严格

  1. clear
  2. clc
  3. %注:以右前腿为例,电机ID分别为0,1,2
  4. %设定初始化参数
  5. m_l1 = 200;m_l2 = 200; %大腿长。小腿长。旋转轴到旋转轴,旋转轴到足心
  6. m_d1 = 100; %关节2的连杆偏距
  7. %角度转弧度? deg2rad(30)
  8. m_theta_init_1 = -30/ 180 * pi; %负的,电机1.2在初始零位时朝内侧的旋转角度,相对于水平
  9. m_theta_init_2 = -60/ 180 * pi; %负的,大腿杆线方向与重力方向夹角
  10. m_theta_init_3 = 150/ 180 * pi; %正的,大腿杆线方向与小腿杆线方向的夹角,取外侧夹角,一般为钝角
  11. theta1 = m_theta_init_1;
  12. theta2 = m_theta_init_2;
  13. theta3 = m_theta_init_3;
  14. theta4 = 0;%不考虑足端姿态
  15. theta1 = deg2rad(-45);
  16. theta2 = deg2rad(45);
  17. theta3 = deg2rad(45);
  18. theta4 = 0;%不考虑足端姿态
  19. %建立DH参数
  20. L1 = Link('d', 0, 'a', 0, 'alpha', 0 ,'modified'); %髋关节俯仰
  21. L2 = Link( 'd', m_d1, 'a', 0, 'alpha', 90/180*pi ,'modified'); %髋关节横滚
  22. L3 = Link( 'd', 0, 'a', m_l1, 'alpha', 0 ,'modified'); %膝关节横滚
  23. L4 = Link( 'd', 0, 'a', m_l2, 'alpha', 0 ,'modified'); %足关节
  24. % %关节限制
  25. L(1).qlim=[-pi/6/pi*180,pi/3/pi*180];
  26. L(2).qlim=[-pi*4/3/pi*180,pi/1.3/pi*180];
  27. L(3).qlim=[pi/6/pi*180,pi*(5/6)/pi*180];
  28. L(4).qlim=[-pi/pi*180,pi/pi*180];
  29. %连成机器人
  30. leg = SerialLink([L1 L2 L3 L4], 'name', 'Leg');
  31. %leg = SerialLink([L1 L2 L3 ], 'name', 'Leg');
  32. % 打印mod_DH机器人模型
  33. leg.display();
  34. % 设置关节初始位置
  35. init_pos = [theta1,theta2,theta3,theta4];
  36. syms q1 q2 q3 q4 real;
  37. init_pos1 = [theta1,theta2,theta3,];
  38. %输出三维
  39. leg.plot(init_pos);
  40. %示教
  41. leg.teach();
  42. %获取机器人关节角
  43. theta1 = L1.theta;
  44. %机器人运动学
  45. T = leg.fkine(init_pos);
  46. disp("末端执行器位姿:");
  47. disp(T);
  48. % 计算雅可比矩阵
  49. J0 = leg.jacob0(init_pos);%关节速度映射到笛卡尔
  50. disp("雅可比矩阵0:");
  51. disp(J0);
  52. Je= leg.jacobe(init_pos);%关节速度映射到笛卡尔
  53. disp("雅可比矩阵e:");
  54. %disp(Je)
  55. init_pos_car = [
  56. 0 , 0 , 1 , -12.11;
  57. 0 , 1 , 0 , -108.5;
  58. 1 , 0 , 0, 93.83;
  59. 0 , 0 , 0 , 1;
  60. ];
  61. %init_pos_car = transl(12,12,12)
  62. %机器人逆运动学
  63. % Ti = leg.ikine(init_pos_car);
  64. % disp("逆运动学:");
  65. % disp(Ti);
  66. % R40 = [ 0 , 43.7527, -153.2089;
  67. % -12.1091 , 46.9139 , 64.2788;
  68. % -108.4789 , 81.2573, 111.3341;];
  69. % R40J = [ 0 , 43.7527, -153.2089,0,0,0;
  70. % -12.1091 , 46.9139 , 64.2788,0,0,0;
  71. % -108.4789 , 81.2573, 111.3341,0,0,0;
  72. % 0,0,0, 0 , 43.7527, -153.2089;
  73. % 0,0,0, -12.1091 , 46.9139 , 64.2788;
  74. % 0,0,0, -108.4789 , 81.2573, 111.3341;
  75. % ];
  76. % J2 = R40J*Je;
  77. % disp(J2)
  78. %t = linspace(0,2,51); %等价于==0:0.04:2 %0-2s,进行51次插值
  79. %[P,dP,ddP]=tpoly(0,3,t);
  80. % 指定初末速度
  81. %[P,dP,ddP]=tpoly(0,3,51,0.02,0.01);
  82. % 0-3s内进行51次插值
  83. %%
  84. P1=[50,50,50];
  85. P2=[250,-50,-50];
  86. t=linspace(0,2,51);
  87. Traj = mtraj(@tpoly,P1,P2,t);
  88. n = size(Traj,1);
  89. T = zeros(4,4,n);
  90. for i=1:n
  91. T(:,:,i) = transl(Traj(i,:))*trotx(0);
  92. end
  93. Qtraj = leg.ikunc(T);
  94. %leg.plot(Qtraj); %只运动,不显示轨迹
  95. leg.plot(Qtraj,'trail','b'); %录制轨迹
  96. % % Five_dof.plot(Qtraj,'trail','b','movie','trail.gif'); %保存录像
  97. %%
  98. hold on
  99. plot(t,Traj(:,1),'.-',LineWidth=1)
  100. plot(t,Traj(:,2),'.-',LineWidth=1)
  101. plot(t,Traj(:,3),'.-',LineWidth=1)
  102. grid on
  103. legend('x','y','z');
  104. xlabel('time');
  105. ylabel('position');
  106. % %B站
  107. % T1 = transl(100,100,100)*trotx(150);
  108. % T2 = transl(-100,100,100)*trotx(150);
  109. %
  110. % q1 = leg.ikunc(T1);
  111. % q2 = leg.ikunc(T2);
  112. %
  113. % leg.plot(q1);
  114. % pause;
  115. % leg.plot(q2);

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

闽ICP备14008679号