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