【ROS-Gazebo】平衡与舞蹈-pigot四足机器人姿态控制仿真

1493
0
2020年5月7日 17时30分

继续更新,这两天继续死磕Gazebo仿真。还是拿本人之前的公布的开源项目pigot四足机器人作为仿真对象,研究四足机器人的姿态控制算法仿真。将建模与仿真过程的经验教训和相关资料进行总结(如有兴趣,推荐看一看文末的参考资料)

 

这一阶段的工作如下:

1、 编写四足机器人的姿态控制算法。主要是运动学求解。

2、仿真模型的轨迹规划改进。目标点之间改为三次样条插值,让路径更加平滑。

3、搭建多机器人联合仿真模型。为了测试平衡控制算法,加入了一个实验台。

四足机器人的姿态控制

我采用如下思路控制机器人的姿态:

·   给定机器人的姿态欧拉角RPY

·   求出机器人姿态欧拉角与各腿位置间的关系。这里十分类似于并联机器人的逆解,求解一个向量方程即可[1]

·   将各腿位置代入机器人单腿的运动学逆解,即可得到各关节角。参考串联机器人的逆解求解思路[2]

 

留坑:我已经推导出了完整的姿态控制算法,包括单腿逆解和整体逆解。限于知乎编辑器对公式的支持不太好,可以直接看代码文件”kinematics_algorithm”中的leg_ikine()函数我将会在CSDN或者其它地方发布,之后再在此更新。

仿真模型的轨迹规划改进

这一块琢磨得不深。之前是直接在各个目标点之间进行线性插值,现在加入了一个样条插值函数[3],试验了一下,发现轨迹确实平滑得多。但四足轨迹规划最关键的步态算法还并没有涉及,看到一些步态规划的文章,比如摆线步态,准备看懂之后再改进改进。

Gazebo多机器人联合仿真

这一块是坑区。首先我想要搭建一个姿态仿真的测试平台,按道理来说应该是一个并联机器人。然而众所周知,ROS仿真所广泛使用的urdf格式是不支持闭链结构的。经过一系列探索,有如下两个解决方案:

 

1、利用Gazebo新版所推荐使用的sdf格式进行建模。

 

传统的urdf格式存在很多问题,例如不支持闭链结构、不包含世界模型等。而在Gazebo新版本中,正在推广sdf格式,解决了上述问题。但是,国内外所能找到的大多数教程、包括多数官方教程中能找到的参考资料太少。我做了一些尝试,发现利用sdf建立并联机器人(闭链结构)的模型没有问题。但ros_control控制插件只兼容了urdf格式,意味着要想控制sdf格式的机器人,必须自己编写插件。这方面现在还在扫盲过程中,只有以后再探索。以下资料值得参考,看最后一位网友给出的自己的代码文件:

 

闭链机器人的sdf格式建模方法​answers.gazebosim.org

 

2.论坛网友给出的方法,本人尚未测试是否可行。

在sdf中添加ros_control插件​answers.gazebosim.org

 

于是我只能搭建了一个串联型平台。串联平台的参数很难调,在文末视频中可以看到其刚度比较差,晃得厉害。

 

【ROS-Gazebo】平衡与舞蹈-pigot四足机器人姿态控制仿真插图

四足机器人姿态控制仿真平台

 

下面又遇到了如何将两个机器人加入同一个模型中的坑。最后的解决方法是采用不同的命名空间,论坛网友的解决方法经测试很好用(在最后一个回答中):

Gazebo多机器人联合仿真方法​answers.ros.org

 

仿真效果

利用姿态控制算法,可以更加精确地控制机器人的站立动作(例如站立舞蹈)。输入imu采集的姿态信号后,还可以做姿态补偿与校正。控制示例见视频:

 

ROS四足机器人姿态控制仿真

 

Github地址

XM522706601/pigot_project​github.com

 

后续计划

1、四足机器人步态算法改进与仿真环境改进

2、抗扰动平衡算法研究与实现

3、头部机械臂的实现

4、SLAM、自主导航等的实现

 

精选参考资料

[1] 四足机器人姿态控制(通过IMU)

[2] SCalf液压驱动四足机器人的机构设计与运动分析[D]. 山东大学, 2013.

[3] (数值分析)各种插值法的python实现

[4] ROS、Gazebo官方问答论坛

发表评论

后才能评论