强化学习仿真器Raisim进行深度强化学习的初步尝试
强化学习仿真器Raisim进行深度强化学习的初步尝试
本文主要结合Raisim官方实例,介绍如何使用Raisim进行深度强化学习。本文主要参考了Raisim官方文档,以及Raisim的github仓库中的一些例子。部分内容使用AI辅助生成。
raisimGymTorch是raisim的Gym环境示例。还提供了一个简单的基于pytorch的RL框架,但它应该可以很好地与任何其他RL框架配合使用。该项目使用pybind11作为python接口,这样的好处是将矢量化环境包装在C++中,以便使用OpenMP在C++中完成并行化,这极大地提高了仿真速度。这里直接上官方的图。
如图所示,该框架定义了Environment
类型,在该类中完成环境的定义。然后VectorizedEnvronment
将Environment
进行矢量化,以便在C++中进行并行化。最后riasim_gym.cpp
和RaisimVecEnv.py
使用pybind11将上述C++环境封装成python包供其他RL框架调用。并行化的过程是在C++中完成的,因此可以大大提高仿真速度。
RaisimGymTorch的使用可以参考官方文档,但事实上该文档写的并不是很详细,因此本文将对其进行补充。也可以结合示例来进一步研究。
RaisimGymTorch的目录结构
RaisimGymTorch位于raisimGymTorch文件夹下,目录结构如下:
1 | C:. |
核心文件定义
本部分介绍raisimGymTorch的核心文件,了解这些文件的结构有助于理解raisimGymTorch的工作原理,也有助于自己定义环境。核心文件的调用关系如下图所示,该图中RaisimGymEnv
需要自行继承修改,其他文件不需要修改,但是可以了解其作用。
RaisimGymEnv.hpp
该文件是定义环境的基类,所有自定义的环境需要继承该类来定义。该类定义了环境的基本接口,包括了初始化,重置,step,以及其他一些接口。该类的定义如下:
1 | class RaisimGymEnv { |
编译raisimGymTorch与定制化自己的环境
raisimGymTorch框架编译使用pybind11库将c++文件编译为python包,因此有必要了解一些pybind11的基本用法。pybind11的使用可以参考官方文档,这里主要介绍一下如何编译raisimGymTorch,以及如何自定义环境。
使用 python setup.py develop
命令即可编译raisimGymTorch,编译完成后会在raisimGymTorch文件夹下生成build
文件夹,该文件夹下包含了编译出来的python包,在raisimGymTorch/raisimGymTorch/env/bin
目录下会生成最终编译的包。编译完成后,可以在python中使用import raisimGymTorch
来导入raisimGymTorch包。(在安装raisim到/usr/local
后无需如官方教程所示指定--CMAKE_PREFIX_PATH
路径)。
该编译脚本将会调用CMakeLists.txt
文件完成编译,因此修改这个文件可以自定义编译内容。具体自定义路径的方法如下。
- 修改包名称:您可以在 setup.py 中找到它(name=’raisim_gym_torch’)。这是您将在 anaconda 环境的目录中找到的名称site_packages。
- 修改目录名称:这是您可以在顶部raisimGymTorch目录中找到的目录名称。默认名称也是 raisimGymTorch 目录。如有必要,请对其进行修改。然后,您必须修改 runner.py 和 CMakeLists.txt 标头中的目录。
- 修改二进制名称:这是环境目录的名称。默认名称为 rsg_anymal。如果更改目录名称,则必须重命名 runner.py 文件中的rsg_anymal。
- 修改环境名称:这是将从 Environment.hpp 文件生成的二进制文件的名称。默认名称是RaisimGymVecEnv。您可以在raisim_gym.cpp文件中找到它。如果更改它,您还必须更改文件名 runner.py 文件。
结语
本文简要介绍了RaisimGymTorch的使用,对官方文档做了一些补充说明,以及对核心文件进行了简要介绍。方便后续查阅。Raisim也提供RaisimPy接口可以更方便的与python进行交互,但是由于RaisimPy是单线程的,因此在强化学习中使用的话速度会比较慢。此外Raisim还提供Matlab接口,但由于强化学习多使用python,因此这里不做介绍,有兴趣的可以自行研究。
EOF