利用 Python 在 OpenAI 的 roboschool 中控制 Atlas 机器人

作者:神奇的战士 Blog: http://thinkhard.tech/

背景介绍

  • Atlas: Atlas 机器人是一个双足人形机器人,由鼎鼎大名的美国波士顿动力公司为主开发,身高 1.75 米,体重 82kg,它的出现将人形机器人的发展带到了更高的高度。目前可以完成行走、跑步和翻跟头等一系列复杂的动作。作为机器人当中的贵族,价格自然不菲 T_T (更何况还买不到…)。所以只能通过仿真软件在里面过下干瘾。
  • Roboschool: Roboschool 是基于 OpenAI Gym 强化学习仿真包的物理仿真引擎。由于 MuJuCo 不开源且收费,所以 OpenAI 的大佬们将 Roboschool 作为 MuJuCo 的替代品。可以在一个场景当中训练多个 Agent 并且完成一挑战任务。

软件环境安装

示例代码

在 2017 年 7 月 17 号,Roboschool 发布了 Version 1.1 版本,其中导入了 Atlat 机器人模型,相关新闻可见 NEWS

所以在安装好环境后,可以从 RoboschoolAtlasForwardWalk_v1_2017jul.py 中找到控制 Atlas 前进走路的源码。

仿真

Python 运行代码,由于在 Train 的时候,没有对机器人上肢运动进行约束和优化,只关注了下肢的移动,最终训练的结果有点辣眼睛,我们可以看到一段魔性嚣张的步伐

1
python3 RoboschoolAtlasForwardWalk_v1_2017jul.py
  • 鼠标左键 : 旋转镜头
  • 鼠标右键 : 镜头平移
  • 按键 F1 : 开/关 慢动作
  • 按键 F2 : 隐藏/显示 仿真步数和累积 Rewards
  • 按键 F3 : 隐藏/显示 Action 和 Observation

机器人强化学习之使用 OpenAI Gym 教程与笔记 中介绍过使用导入 Gym 模型和查看 Observation 和 Action 的相关参数,对于 Atlas 也同样适用:

1
2
3
4
5
import roboschool
import gym
env = gym.make("RoboschoolAtlasForwardWalk-v1")
print('action_space = ', env.action_space)
print('observation_space = ', env.observation_space)

输出

1
2
action_space = Box(30,)
observation_space = Box(70,)

env.action_spaceenv.observation_space 可知 Action 维度为 30,Observation 维度为 70。

  • Action 可以理解为机器人有 30 个自由度,可以通过 PD 控制器控制关节角度;
  • Observation 为当前环境的观测向量;

至于Atlas 机器人 Action 和 Observation 详细解释,在 Roboschool 的 Wiki 中没有相关说明,OpenAI 的开发者建议用户靠的方式来确定 :)。 确定方式为

  1. 修改 Roboschool 源码,将 gym_atlas.py 重力修改为 0
  2. 按照排除法,控制变量 Action,然后 env.step(action) ,分别记下向量每个元素对应的自由度关节。

代码说明

Roboschool 开发者解释到由于强化学习训练 Atlas 走路的代码太杂乱了,所以暂时没有 Train 的代码,所以求人不如求己,后面得自己撸代码 ~ 总体思路是获得 weight 矩阵,即最佳 Policy,输入当前观测向量 Observation 获得下一步的 Action 向量来控制 Atlas 行走。

总结

  • Roboschool 这个项目适合验证一些简单的强化学习任务,对于新引入的模型支持得还不太友好。
  • 基本上没有什么成体系的说明文档,所以需要靠多阅读 Roboschool 和 Gym 的 Python 源码来使用。