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

利用 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 的時候,沒有對機器人上肢運動進行約束和優化,只關注了下肢的移動,最終訓練的結果有點辣眼睛,我們可以看到一段魔性囂張的步伐

 python3 RoboschoolAtlasForwardWalk_v1_2017jul.py  

仿真圖

  • 鼠標左鍵 : 旋轉鏡頭
  • 鼠標右鍵 : 鏡頭平移
  • 按鍵 F1 : 開/關 慢動作
  • 按鍵 F2 : 隱藏/顯示 仿真步數和累積 Rewards
  • 按鍵 F3 : 隱藏/顯示 Action 和 Observation

機器人強化學習之使用 OpenAI Gym 教程與筆記 中介紹過使用導入 Gym 模型和查看 Observation 和 Action 的相關參數,對於 Atlas 也同樣適用:

import roboschool
import gym
env = gym.make("RoboschoolAtlasForwardWalk-v1")
print('action_space = ', env.action_space)
print('observation_space = ', env.observation_space)

輸出

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 源碼來使用。

作者:神奇的戰士
Blog: http://thinkhard.tech/
知乎: https://zhuanlan.zhihu.com/p/45029552

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章