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

技术文章

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

作者 郭文彦、MathWorks


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

机器人动力学建模

实现机器人的控制,先要建立动力学模型。这是我们设计的基础。MATLAB中提供了强大动力学仿真功能,同学们可以自己推导微分方程,通过基本模块搭建模型,也可以将机器人的CAD模型及装配关系通过MATLAB相关工具箱提供插件的或自己开发的工具转为Simscape支持的xml格式,也可以直接导入urdf文件。MATLAB提供三种CAD软件的导入,大家可以自行查阅Simscape Multibody相关的介绍。

关于机器人的构型模型,我们可以从GitHub上搜索并下载。以下两个链接是两个开源的机器狗模型,anymal Blaikago

这里面包含了机器人描述文件,对开发动力学来说,我们只需要urdf文件,和对应的mesh文件夹下的三维模型。

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

Image1
修改后的urdf文件部分

修改后的urdf文件部分

接下来,导入机器人模型到Simulink中,只需如下一行命令。一个机器人模型便创建出来。

Image3

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

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

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

建立地面模型

建立地面模型

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

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

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

此外,同学们还需设置一下躯干相对地面的初始位置和姿态,保证机器人及足部一开始在地面的上方很近的地方,如果不设置,机器人如出现在地面下方,会一直自由落体。此外还需设置各个关节的刚度和阻尼,使机器人的运动和实际情况更接近一些。

下面我们看一下运行结果。由于没有施加任何关节力矩,机器人在关节阻尼下完全瘫倒,运动过程和我们预期一致。当然,如果大家有真的机器人,还需进一步辨识及调节关节及足部与地面的接触参数,使得整个过程与实际情况匹配。

机器人运动设计

有了机器人的动力学模型,我们就可以进行机器人的运动设计了。

四足机器人是一种比较特别的机器人,它既有多轴机器人的特点,因为它是通过关节运动进行控制的,也有小车类机器人的特点,因为它最终是要向小车一样运动。

为了达到向小车一样前后运动,那我们需要进行步态设计。步态设计更接近运动学范畴,我们需要根据四足类动物的行走方式,设计一个基本的步态,以控制四足相对本体的位置变化。

为了设计这个步态,我们观察了一些猫狗的走路方式,出于简化考虑,我们仅设计了一个初级步态。总的来说,这个步态需要给定一个步态频率,并设计一个足部终端运动的位置轨迹,通过调整四足的相位变化,来实现机器人的行走。

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

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

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

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

步态与动力学模型

步态与动力学模型

下面是这个模型的运动效果,可以看到机器人已经按照我们的设想成功走起来了。

仿真结束后,我们可以查看各个点的运动和受力情况,本模型中,我们给定了关节运动,可以获取到各关节的受力情况,其实是一个逆动力学分析,据此,我们可根据关节的运动和受力状态提出关节电机选型的指标。

接下来,我们可以在动力学模型上,给定力矩,输出关节位置,在根据电机特性搭建电机模型,从而进行正向动力学仿真。查看并分析系统集成后的效果,并对控制和步态进行改进。

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

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

逆向运动学的的查表模型

逆向运动学的的查表模型

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

进一步考虑

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

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

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

2022 年发布

查看文章,了解相关功能

查看文章,了解相关行业