文章目录

  • 【机器人学、机器人控视觉与控制】四足机器人MATLAB仿真
    • 1 创建一条机器人腿
    • 2 单腿运动
    • 3 四腿运动

【机器人学、机器人控视觉与控制】四足机器人MATLAB仿真

我们的目标是创建一个四足步行机器人。首先,我们创建一个三轴机器臂,将其作为步行机器人的一条腿,并为其规划一个适合步行的轨迹,然后将四条腿组合以完成最后的步行机器人。

1 创建一条机器人腿

首先要确定我们的坐标系。如上图所示是机器人腿在零角度位姿时的坐标系设置。我们选择使用航空坐标体系,其xxx轴指向前,zzz轴指向下,因而yyy轴就指向右侧。

腿的第一个关节将实现髋关节的前后摆动,它绕zzz轴旋转,或(Rz(q1)R_{z}(q_1)Rz​(q1​))。第二关节是实现髋关节的上下摆动,它绕x轴旋转(Rx(q1)R_{x}(q_1)Rx​(q1​))。因为上述两个旋转轴相交,它们就形成了一个球髋关节。

膝盖位于沿着yyy轴方向平移LLL的位置,或Ty(L1)T_y(L_1)Ty​(L1​)。第三个关节实现靠近和远离机体的膝关节运动,即Rx(q3)R_x(q_3)Rx​(q3​)。脚尖位于沿着zzz轴方向平移LLL的位置,或Tz(L2)T_z(L_2)Tz​(L2​)。因此该机器人从髋部到脚尖的变换顺序为Rz(q1)Rx(q2)Ty(L1)Tz(L2)R_z(q_1)R_x(q_2)T_y(L_1)T_z(L_2)Rz​(q1​)Rx​(q2​)Ty​(L1​)Tz​(L2​)

Rz(q1)Rx(q2)R_z(q_1)R_x(q_2)Rz​(q1​)Rx​(q2​)使得yyy沿杠方向。
我们用工具箱确定D-H参数:

s='Rz(q1) Rx(q2) Ty(L1) Rx(q3) Tz(L2)';
dh=DHFactor(s);
dh.display

工具变换:

dh.tool

它改变了脚部坐标系的方向。然而,在这个问题中脚与地面只是一个简单的点接触,所以我们并不关注它的方向。方法dh .command生成一个工具箱命令字符串,用以创建一个 serialLink对象:

dh.command('leg')

结果:

SerialLink([0, 0, 0, pi/2, 0; 0, 0, L1, 0, 0; 0, 0, -L2, 0, 0; ], 'name', 'leg', 'base', eye(4,4), 'tool', trotz(pi/2)*trotx(-pi/2)*trotz(-pi/2), 'offset', [pi/2 0 -pi/2 ])

在MATLAB工作区里将腿的各个部分长度都设置为100毫米之后,将SerialLink对象输入MATLAB的eval命令中:

L1=0.1;L2=0.1;
leg=eval(dh.command('leg'))

在零关节角度时,脚尖处于我们所设计的位置上:

transl(leg.fkine([0,0,0]))

我们可以绘制出机器人的零角度位姿:

transl(leg.fkine([0,0,0]))
leg.plot([0,0,0],'nobase','noshadow')
set(gca,'Zdir','reverse');view(137,48);

现在,我们测试各个关节是否能产生期望的运动:

transl(leg.fkine([0.2,0,0]))'
transl(leg.fkine([0,0.2,0]))'
transl(leg.fkine([0,0,0.2]))'


至此,我们已经创建并验证了一个简单的机器人腿。

2 单腿运动

下一步是定义的腿的末端执行器(即它的脚)将运行的路径。首先考虑的是:所有的脚都在地面上以相同的速度向后移动,其作用是在脚实际上没有相对地面滑动的情况下推动机器人身体向前运动。由于每条腿的运动范围有限,因此它不能后退很长的距离。在某个点我们必须复位机器人腿——抬起脚,向前移动,再放在地面上。第二个考虑是静态稳定性—任何时候机器人必须至少有三只脚同时站在地面上,所以每条腿必须按顺序依次复位。这就要求在一个周期内每条腿有3/4的时间与地面接触,而另外1/4的时间在复位。其结果是,腿在复位期间必须加快移动,因为它要用相对少的时间来完成一段更长的路径。

所需的轨迹是由所有途径点所决定:

xf=50;xb=-xf;y=50;zu=20;zd=50;
path=[xf,y,zd;xb,y,zd;xb,y,zu;xf,y,zu;xf,y,zd]&1e-3;

其中,xfxb分别是xxx方向上腿部前进和后退运动的极限(以毫米为单位), yyy是yyy方向上脚到机体的距离,而zuzd分别是在zzz方向上脚抬起和放下时脚的高度。在这个示例中,脚是从髋部前面50毫米运动至后面50毫米。当脚部放下时,它位于髋部下方50毫米,而在复位期间脚提升到髋部下方20毫米处(注意:仿真中z轴设置为向下)。

在path中的点包含一个完整的周期,对应于站立的开始阶段、站立的结束阶段、脚尖抬起阶段、脚尖返回阶段、最后回到站立的开始,如图所示。

% 100HZ的频率对多段路径进行采样
path=mstraj(path,[],[0,3,0.25,0.5,0.25]',path(1,:),0.01,0);
plot3(path(:,1),path(:,2),path(:,3),'color','k','LineWidth',2)

此例中,我们已经指定了一个包含各段运动时间的向量,而不是最大的关节速度。最后3个参数分别是初始位置、采样间隔和加速时间。这个轨迹总的运行时间为4秒,因此它包含了400个点。

我们用逆运动学来确定脚尖路径所需的关节角度轨迹。这个机器人是欠驱动的,所以我们使用广义逆运动学ikine,并通过设置掩盖向量以求解末端执行器的平移:

qcycle=leg.ikine(transl(path),[],[1,1,1,0,0,0]);
% 动画
view(-pi,-pi/2)
leg.plot(qcycle,'loop')

以验证它是否如我们所愿:先沿着地面缓慢运动,然后快速提升、向前运动和放下脚。' loop '选项将使轨迹的显示一直循环不断,而你需要键人Control-C来停止它。

3 四腿运动

定义机器人的宽度和长度:

W=0.1;L=0.2;

通过复制先前生成的leg对象,就可以创建多条腿的机器人。但其中我们要提供不同的基座转换,以将腿连接到机体上不同的点:

legs(1) = SerialLink(leg, 'name', 'leg1');
legs(2) = SerialLink(leg, 'name', 'leg2', 'base', transl(-L, 0, 0));
legs(3) = SerialLink(leg, 'name', 'leg3', 'base', transl(-L, -W, 0)*trotz(pi));
legs(4) = SerialLink(leg, 'name', 'leg4', 'base', transl(0, -W, 0)*trotz(pi));

得到的结果是一个包含多个SerialLink对象的向量。请注意,机体左侧的第3条和第4条腿已经绕着z轴进行了旋转trotz(pi),使得它们都朝向身体外侧。

如前所述,每条腿必须按照各自的顺序进行复位。由于腿的轨迹是一个周期运动,我们可以通过使每个腿的运动轨迹有一个相位偏移来实现按顺序复位,该相移时间为总循环周期的1/4。由于总周期有400点,因此每条腿的相移为100个点。然后我们使用模运算来模拟每条腿的循环步态。

行走程序的核心是

k=1;
for i=1:500legs(1).animate( gait(qcycle, k, 0,   0));legs(2).animate( gait(qcycle, k, 100, 0));legs(3).animate( gait(qcycle, k, 200, 1));legs(4).animate( gait(qcycle, k, 300, 1));drawnowk = k+1;
end

其中的函数

gait(q,k, ph,. flip)

将通过模运算返回q的第k +ph个元素,而模运算将q看作一个周期。参数flip是将机器人左侧两条腿上关节1运动的符号取反(从动态图可以看到左右第一个关节的转向是相反的)。

clc;
clear
close all
s='Rz(q1) Rx(q2) Ty(L1) Rx(q3) Tz(L2)';
dh=DHFactor(s);
L1=0.1;L2=0.1;
leg=eval(dh.command('leg;'));
% 定义沿着x轴方向走的关键参数
xf = 5; xb = -xf;   % x方向上腿前进和后退运动的极限
y = 5;              % y方向上脚到机体的距离 运动时是固定的
zu = 2; zd = 5;     % z方向上脚抬起和放下时脚的高度。
% 定义方形轨迹
segments = [xf y zd; xb y zd; xb y zu; xf y zu] * 0.01;
segments = [segments; segments];        % 长度为8,两个运动周期分八段
% build the gait. the points are:
%   1 start of walking stroke
%   2 end of walking stroke
%   3 end of foot raise
%   4 foot raised and forward
%
% The segments times are :
%   1->2  3s
%   2->3  0.25s
%   3->4  0.5s
%   4->1  0.25s
tseg = [3 0.25 0.5 0.25]';
tseg = [1; tseg; tseg];                                       % 在开头增加一个1是为预加速
x = mstraj(segments, [], tseg, segments(1,:), 0.01, 0.1);     % 采样间隔为0.01,总的有400step
% 总的为1, 2, 3, 4, 1, 2, 3, 4,去掉加速部分(舍弃一些值),
% 其中的 2->3->4->1 is smooth cyclic motion so we "cut it out" and use it.
xcycle = x(100:500,:);
%=========================================================
% 运行以下程序即可知道"cut it out"的目的。
% figure(1)
% plot3(x(:,1),x(:,2),x(:,3))
% rotate3d on
% figure(2)
% plot3(xcycle(:,1),xcycle(:,2),xcycle(:,3),'color','r')
% rotate3d on
%=========================================================
qcycle = leg.ikine( transl(xcycle), [], [1 1 1 0 0 0], 'pinv' );
% 机器人长方形身体的宽和长
W = 0.1; L = 0.2;
% 创建4条腿的机器人。每条腿都是我们上面造的腿机器人的克隆,
% 通过'base'基变换将四条腿安装在身体的四个角
legs(1) = SerialLink(leg, 'name', 'leg1');
legs(2) = SerialLink(leg, 'name', 'leg2', 'base', transl(-L, 0, 0));
legs(3) = SerialLink(leg, 'name', 'leg3', 'base', transl(-L, -W, 0)*trotz(pi));
legs(4) = SerialLink(leg, 'name', 'leg4', 'base', transl(0, -W, 0)*trotz(pi));% create a fixed size axis for the robot, and set z positive downward
clf; axis([-0.3 0.1 -0.2 0.2 -0.15 0.05]); set(gca,'Zdir', 'reverse')
hold on
% draw the robot's body
patch([0 -L -L 0], [0 0 -W -W], [0 0 0 0], ...'FaceColor', 'r', 'FaceAlpha', 0.5);
% 初始化机器人
% 一点优化。我们使用了很多打印选项来快速制作动画:
% 关闭注释,如手腕轴、地面阴影、关节轴、无平滑着色。
% 我们不是在每个循环中解析开关,而是在这里预先将它们分解成plotopt结构。
plotopt = {'noraise', 'nobase', 'noshadow', 'nowrist', 'nojaxes', 'delay', 0};
for i=1:4legs(i).plot(qcycle(1,:), plotopt{:});
end
hold off
k = 1;
while 1legs(1).animate( gait(qcycle, k, 0,   0))legs(2).animate( gait(qcycle, k, 100, 0))legs(3).animate( gait(qcycle, k, 200, 1))legs(4).animate( gait(qcycle, k, 300, 1))drawnowk = k+1;
end

【机器人学、机器人控视觉与控制】四足机器人MATLAB仿真相关推荐

  1. 赤兔四足机器人的作用_国产四足机器人“赤兔”惊艳亮相《我是未来》

    "赤兔"机器人 你印象中的机器人是什么样的?动作平稳,行动缓慢,与四肢发达的生物还有一定差别?本周日,由湖南卫视.唯众传媒联合出品.中国科学院科学传播局特别支持的中国首档顶尖原创科 ...

  2. 赤兔四足机器人的作用_国产四足机器人“赤兔”亮相《我是未来》

    图集 你印象中的机器人是什么样的?动作平稳,行动缓慢,与四肢发达的生物还有一定差别?本周日,<我是未来>中,"赤兔"机器人的亮相将彻底打破你的这种刻板印象!这" ...

  3. 并联四足机器人项目开源教程(一)--- 机器人学导论的学习

    这个是本人在大三期间做的项目 ---- 基于MIT的Cheetah方案设计的十二自由度并联四足机器人,这个项目获得过两个国家级奖项和一个省级奖项.接下来我会将这个机器人的控制部分所有代码进行开源,并配 ...

  4. 四足机器人|机器狗|仿生机器人|多足机器人|Adams仿真|Simulink仿真|基于CPG的四足机器人Simulink与Adams虚拟样机|源码可直接执行|绝对干货!需要资料及指导的可以联系我!

    四足机器人|机器狗|仿生机器人|多足机器人|基于CPG的四足机器人Simulink与Adams虚拟样机|源码可直接执行|绝对干货!需要资料及指导的可以联系我!QQ:1096474659 基于CPG的四 ...

  5. 四足机器人技术及进展

    四足机器人技术及进展 摘  要:自然界中有许多地形无法使用传统轮式或履带式车辆到达,而哺乳动物却能够在这些地形行走自如,这充分展示出四足移动方式的优势.四足机器人已经成为当今移动机器人研究的热点,其研 ...

  6. 史上最全 2019 ICRA顶会四足机器人文献整理

    史上最全 2019 ICRA顶会四足机器人文献整理 一.ICRA论文集中相关文献对应subsession时间 二.文献整理内容 一.ICRA论文集中相关文献对应subsession时间 15:15-1 ...

  7. 技术分享 | 什么是Minitaur四足机器人?

    什么是Minitaur四足机器人? Minitaur是Ghost Robotics早期研制的一款高性能小型四足机器人,其虽然仅具有8个自由度但是却有着非比寻常的运动能力和不输于MIT猎豹的越障.空翻能 ...

  8. 相对全面的四足机器人驱动规划MATLAB和Simulink实现方式(足端摆线规划,Hopf-CPG,Kimura-CPG)

    许久没更新四足机器人相关的博客文章,由于去年一整年都在干各种各样的~活,终于把硕士毕业论文给写好,才有点时间更新自己的所学和感悟.步态规划和足端规划只是为了在运动学层面获取四足机器人各关节的期望角位移 ...

  9. 基于STM32与PCA9685制作四足机器人(代码开源)

            前言:本文为手把手教学基于STM32的四足机器人项目--JDY-31蓝牙控制,特别地,本次项目采用的是STM32作为MCU.四足机器人的支架为3D打印件,SG90舵机驱动机器人实现姿态 ...

最新文章

  1. Throwable是java.lang包中一个专门用来处理异常的类
  2. 使用ajax跨域withCredentials的作用
  3. 新一代蓝牙5标准开启 会成为物联网的最佳选择吗
  4. phpexcel常见问题的解决办法
  5. TypeScript 2019 路线图:更效率,更易用!
  6. Linux网络服务之DNS(2)
  7. mysql时间段查询语句_MySQL 如何查看慢查询语句
  8. [转载] Java的访问修饰符、非访问修饰符分类详细总结以及修饰符用途总结
  9. 苹果手机如何深度清理_手机应用 | 推荐5款深度清理手机内存的软件
  10. Excel:INDEX与MATCH函数
  11. 在材料技术方面的进步使游戏改变了MLCC的性能
  12. 【PHP】创蓝253云通信平台国际短信接口调用demo案例
  13. python虚拟数字人直播间带货
  14. SAP UI5 应用开发教程之八十二 - 采用 OPA5 开发支持页面跳转的 SAP UI5 集成测试用例试读版
  15. NIO核心设计与原理
  16. 记一次-更新win10版本到2004
  17. Windows10字符映射表的搜索功能
  18. 集成学习 Adaboost(python实现)
  19. 代码实现:圣诞树效果(易懂,必会)/用html实现圣诞树效果
  20. Mac如何安装:node的多版本管理工具(nvm 或 n)

热门文章

  1. Log4j for C++ 实用指南
  2. 微信小程序开发知识点
  3. 网站编辑与传统媒体编辑的区别及特点
  4. css3中-moz、-ms、-webkit、 - o -各什么意思
  5. HTPPS加密对网站有什么好处
  6. 「DLP-KDD 2021征文」及上届论文全集,包含深度学习推荐/广告系统、多目标、模型服务等
  7. JIRA上根据前置任务自动计算到期日之automation实现实例
  8. 关系抽取调研-工业界
  9. 如何把小程序游戏运行到自有app中?
  10. Lab3 Attack Lab