在 MATLAB & Simulink 环境中开发机器狗控制算法

2021-3-24 18:00| 发布者: MsM18| 查看: 619| 评论: 0|原作者: 郭文彦

摘要: 最近几年,足类机器人越来越火了,频频出现在各大展会上,相信从事这方面研究的同学也很多,今天我们以四足机器人为例介绍一下 MATLAB 在其中的强大作用。 ... ... ...

最近几年,足类机器人越来越火了,频频出现在各大展会上,相信从事这方面研究的同学也很多,今天我们以四足机器人为例介绍一下 MATLAB 在其中的强大作用
◆  ◆  ◆  ◆
机器人动力学建模
实现机器人的控制,先要建立动力学模型。这是我们设计的基础。MATLAB 中提供了强大动力学仿真功能,同学们可以自己推导微分方程,通过基本模块搭建模型,也可以将机器人的 CAD 模型及装配关系通过MATLAB 相关工具箱提供的插件或自己开发的工具转为 Simscape 支持的 xml 格式,也可以直接导入 urdf 文件。MATLAB 提供三种 CAD 软件的导入,大家可以自行查阅 Simscape Multibody 相关的介绍。
关于机器人的构型模型,我们可以从 github 上搜索并下载。以下两个链接是两个开源的机器狗模型,anymal B 和 laikago。链接如下:
这里面包含了机器人描述文件,对开发动力学来说,我们只需要 urdf 文件,和对应的 mesh 文件夹下的三维模型。

由于下载的 mesh 文件均为 .dae 文件,我们需要做一个转换将其转成 .stl 或 .step 格式以便于 MATLAB 能够正确识别。关于转换格式,有很多开源工具及网站可以直接提供转格式服务,我们这里就不详细介绍了。格式转换完成后,需在 urdf 文件中手工查找并替换其中引用 .dae 文件的部分。

图:修改后的 urdf 文件部分
接下来,导入机器人模型到 Simulink 中,只需如下一行命令。一个机器人模型便创建出来。

当然,同学们运行模型的时候会发现 3d 结构似乎没有完全匹配,这是因为这个 CAD 模型里采用的是 mm 单位,大家需要手动修改模型 visual 模块下的属性单位为 mm。这样,我们的机器狗 anymalB 模型就出来了。


同学们可能已经注意到,这个模型的世界坐标系建立在机器狗躯干上,机器狗的四肢在重力作用下呈现无阻尼摆动。显然,这不是我们期望的最终目标,我们的预期是建立一个在地面行走的机器狗。

看来我们还得继续工作,接下来我们先建立一个地面模型,并将它与世界坐标系相连。

图:建立地面模型

然后,建立接触力模型,我们需要根据四足终端的位置,创建一个几何体,这里是球体,并使用接触力模块与地面相连。可以看到,接触力部分为虚线。同学们可以在上面设定法向力与摩擦力的参数,如果需要也可以引出传感器信号,获取接地时受到的力。

图:建立四足与地面接触力模型

此外,同学们还需设置一下躯干相对地面的初始位置和姿态,保证机器人及足部一开始在地面的上方很近的地方,如果不设置,机器人如出现在地面下方,会一直自由落体。此外还需设置各个关节的刚度和阻尼,使机器人的运动和实际情况更接近一些。
下面我们看一下运行结果。由于没有施加任何关节力矩,机器人在关节阻尼下完全瘫倒,运动过程和我们预期一致。当然,如果大家有真的机器人,还需进一步辨识及调节关节及足部与地面的接触参数,使得整个过程与实际情况匹配。


◆  ◆  ◆  ◆
机器人运动设计
有了机器人的动力学模型,我们就可以进行机器人的运动设计了。
四足机器人是一种比较特别的机器人,它既有多轴机器人的特点,因为它是通过关节运动进行控制的,也有小车类机器人的特点,因为它最终是要向小车一样运动。

为了达到向小车一样前后运动,那我们需要进行步态设计。步态设计更接近运动学范畴,我们需要根据四足类动物的行走方式,设计一个基本的步态,以控制四足相对本体的位置变化。
为了设计这个步态,我们观察了一些猫狗的走路方式,出于简化考虑,我们仅设计了一个初级步态。总的来说,这个步态需要给定一个步态频率,并设计一个足部终端运动的位置轨迹,通过调整四足的相位变化,来实现机器人的行走。

下面我们开始进行步态设计,首先我们需要定义终端足部的运动轨迹,并根据终端足部轨迹逆算出各个关节的角度。这里可以使用我们的机器人系统工具箱。通过逆向运动学进行求解。同样,我们首先导入机器人描述文件 urdf,得到一个机器人对象,这样,求解器就可以根据这个机器人对象计算出各个关节的位置。

图:通过脚本导入机器人模型并逆解求取关节角度

在程序中,我们成功的让四足机器人足部按照预定轨迹运动。下面我们转到 Simulink 环境下。这里面包含了足部轨迹,逆解,关节指令和动力学。

图:步态与动力学模型

下面是这个模型的运动效果,可以看到机器人已经按照我们的设想成功走起来了。
仿真结束后,我们可以查看各个点的运动和受力情况,本模型中,我们给定了关节运动,可以获取到各关节的受力情况,其实是一个逆动力学分析,据此,我们可根据关节的运动和受力状态提出关节电机选型的指标。
接下来,我们可以在动力学模型上,给定力矩,输出关节位置,在根据电机特性搭建电机模型,从而进行正向动力学仿真。查看并分析系统集成后的效果,并对控制和步态进行改进。


我们在导出视频过程中,已经将视频加速了 30 倍,实际上这个 2s 多的仿真,耗时大概 7 分多,这是因为求逆解的过程涉及大量迭代因此极大的影响了运行速度,这样的效果从仿真上也是比较耗时的,更不用说将来我们打算把步态生成放到机器狗的运动控制器里了。

为了解决这个问题,我们可以考虑将这部分算法模型替代,根据算法的输入输出特点,这样复杂的关联关系用多项式或查表的效果较好,查表又通常比多项式速度更好一些,当然查表也会占用更多的动力学控制器存储资源。下面将各个相位和步幅进行采样后转为查表后的运行结果,现在的运行速度比之前提高了大约 5 倍,限制速度的地方来自于动力学仿真部分。而作为步态生成部分由于变成查表,速度影响非常小,完全满足实时性能。同学们如果需要将机器人算法此部分部署,则需先转成 Model Reference,并进行数据定义,将其它部分模型一起,通过使用 Embedded Coder,并做相应的代码生成配置,则可生成适用于运动控制器的代码。当然如果是做产品级设计,还需要进行相应的模型测试验证。

图:逆向运动学的的查表模型


我们以这个为基础,还可以开发其他步态,如横移,转弯,当然这需要同学们仔细观察四足动物步态进行设计。在设计了如横移步态后,还可以根据躯干的姿态和姿态角速度及地面接触力等信息作为反馈,开发受到侧面力干扰(模拟脚踢)时抗倾倒算法,驱动机器狗向倾倒的方向以不同速度横移以抵消倾倒趋势。

◆  ◆  ◆  ◆
进一步考虑
与之类似,我们也可以将 laikago 模型设计成如上所示,相信感兴趣的读者应该很快可以在 MATLAB 环境中搭建好自己的四足模型。


另外,近年来,有很多更新的算法出现,如采用强化学习进行机器狗控制,如果读者想从事类似的研究, MATLAB 也提供了强化学习工具箱可用于训练机器狗行走算法,参考案例请见如下链接:

此外,当我们解决了动力学与控制问题后,接下来则面临着如何让机器狗更加智能化这个问题。不用担心,在 MATLAB 中,已经提供了一系列机器学习,深度学习,图像处理等工具箱,更重要的是你可以将这些智能算法集成在 Simulink 环境中并通过 ROS 工具箱与 ROS 直接通讯,在调试成功后,可以直接生成节点。我们下次可以就机器狗智能算法设计,ROS 节点仿真与生成,与 Gazebo 联合仿真这个话题与大家继续做一些探讨。

点击此处,查看示例,获取 ROS 工具箱 软件试用!
ROS 工具箱为 MATLAB® 和 Simulink® 与机器人操作系统(ROS 和 ROS 2)相互连接提供了一个接口,以便您能够创建一个 ROS 节点网络。该工具箱包含 MATLAB 的各种功能以及用于导入、分析和回放 rosbag 文件中记录的 ROS 数据的 Simulink 模块。您还可以连接到实时 ROS 网络以访问 ROS 消息。
1

鲜花

握手

雷人

路过

鸡蛋

刚表态过的朋友 (1 人)

最新评论

引用 Monster_Rain 2021-5-1 13:28
很详细

在 MATLAB & Simulink 环境中开发机器狗控制算法

最近几年,足类机器人越来越火了,频频出现在各大展会上,相信从事这方面研究的同学也很多,今天我们以四足机器人为例介绍一下 MATLAB 在其中的强大作用。 ... ... ...

在 MATLAB & Simulink 环境中开发机器狗控制算法

最近几年,足类机器人越来越火了,频频出现在各大展会上,相信从事这方面研究的同学也很多,今天我们以四足机器人为例介绍一下 MATLAB 在其中的强大作用。 ... ... ...
关闭

站长推荐上一条 /5 下一条

返回顶部