前言: 之前在Unity3D中尝试训练四足机器人学习奔跑前进,只是做了简单的尝试。在19年的寒假里由于要写论文,所以基于强化学习提出一种分层学习算法,实现四足机器人在腿瘸后仍可以继续向前运动。这种是一种比较简单的,所以也就只发表在国内的核心期刊上面。这也是我第一次写论文。个人感觉还是相比国内许多论文来讲,还是有价值的。这里为大家介绍四足机器的案例。 以上是多只狗训练的截图,具体视频点击这里 视频1 视频2 首先在Unity3D中构建机器人,说到这里问题就是为什么选择Unity3D,那是因为我选择了半天也不知道那种开发更加快一些。由于我在国外的一些论文中看到,很多学者使用游戏环境来训练自己的机器人,试想下,机器人自主学习不就需要一个虚拟的环境吗?然而,我在投稿时,专家给的评论是,很少见到使用Unity3D来进行机器人仿真。我真的想说,国内没有人使用,难道就意味着不行?在国外刚开始使用Unity3D训练智能体的时候,我可是国内比较先得开拓者。现在DeepMind都在和Unity3D合作。或许是别人不相信我这个弱弱的本科生吧。 在Unity3D中构建机器人并不是件很困难的事情,主要还是使用HingeJoint组件加上一些控制脚本就可以完成,这方面很容易可以自己进行自我探索得到。 训练得主要算法还是基于PPO算法。其实对于强化学习来讲具体算法成熟后,真正有意思得是如何将具体的任务结合到相关算法,由于时间比较紧迫,所以我没有在具体核心算法上进行优化和创新。 这里的任务就很简单,说白了就是机器人自我向前运动这个目标。我之前看到国外OpenDog得老哥使用PPO算法训练四足机器人,道理和我这个一样。但是从视频中得效果来讲并不是很好,机器人总是摔倒什么的。迭代了很多次都不行。这点是非常正常的,本来维度就很高,机器人一直摔倒(这里指的是三维空间,不是二维空间的那种简单训练),是无法找到比较好的策略进行前进的。所以,本质上就是需要让机器人尽可能的去试探到具有较高奖励的行为,所以还是需要一定的辅助机制,这就像小孩刚开始学习自行车时总是摔倒,大人扶一下能让小孩更快体会到那种保持平衡的感觉,然而过渡帮扶则有是不可取的。我在论文中提的具体方法就是一定程度上限制自由度,在一定范围内(刚开始)。这点取得了比较好的效果。 训练机器人由于受到了硬件的限制,我是在CPU上进行训练。共有三个机器人进行训练,由于控制频率只有3Hz多,所以可以进行分时进行训练,每次以一定概率挑选奖励最好的batch进行训练。这里没有用A3C是嫌部署很麻烦,哈哈哈,我也是懒的。 很多小伙伴认为控制频率很低怎么跑,其实底层有自己的速度及位置控制器,神经网络只是给与一个目标而已,所以可以在低频率下实现控制。有很多的控制方面的都是要求计算机实现高频控制,精度和频率都要求极高,感觉这有点过于机械了。在以生物的角度来讲,真的自然界中生物行为控制频率和精度可以达到超高吗?实际我想可能不是这样的。另外机器人关节运动范围进行了限制,在我实现的机器人具体限制如下: 由于不能加速,所以训练的时间还是需要几个小时的。总的来说,从视频中都可以看出,训练的显著效果,快速奔跑甚至跳跃并且能自主的调节姿态。以下是奖励值迭代的曲线。其中包括了机器人瘸腿后训练前进的效果。还是正常运动能更早表现出比较强的前进能力。 这里向大家介绍初代机器人训练 这里 另外现在,我也在逐渐放弃Unity3D的训练环境,是因为前段时间Webots2019开源后收到了大家的广泛关注。但是综合的教程很少可能大家都不怎么在使用这个软件吧!通过自学,我在这个平台上重新实现了四足机器人自平衡算法等。webots最好的就是直接支持python,简直棒棒哒,这样机器学习训练机器人就极其方便。另外,还可以进行训练加速,有些公司在上面进行无人驾驶的模拟。 以下是在webots上实现自平衡算法的一个机器人,脚部有用力传感器。
强化学习训练机器人2 Unity3D环境
-
【ROS-Gazebo】SDF机器人描述格式解析 -
【ROS-Gazebo】仿真插件编写教程(1)——概述 -
【ROS-Gazebo】仿真插件编写教程(2)——编写位置控制插件 -
【ROS-Gazebo】为什么选择SDF?
- 【ROS-Gazebo】SDF规范文档与模型资源
- 【ROS-Gazebo】SDF的建模与使用
- 【ROS-Gazebo】ERB:模块化生成SDF模型
- 【ROS-Gazebo】SDF与URDF的相互转换
- 【ROS-Gazebo】基于SDF的多机器人仿真
- Webots建模指南2 – 机器人建模
- Webots常见传感器的使用(Python版)
- Webots建模指南3 -ROS控制篇(上)
- Webots建模指南3 -ROS控制篇(下)
- ros机器人编程实践(16.2)- 仿真SmartCar之模型“飞起来“
- 机器人动力学仿真——状态空间模型的离散化
- 机器人动力学建模之理解惯性张量
- 史上最通俗易懂的参数辨识教程!
- Webots 机器人仿真平台(四) 机器人基础控制器
- SDF模型生成方法: xacro4sdf
- gazebo入门教程(二)建立简单模型