DeepMimic环境配置
1. 前言
DeepMimic是一种基于深度强化学习的技术,用于生成高质量的人类样式角色动画。这项技术旨在让虚拟角色学会像人类一样执行各种动作,例如跑步、跳跃、跌倒等。通过深度强化学习算法,虚拟角色可以从试错中学习,逐渐改进其动作的流畅性和逼真度。
DeepMimic的核心思想是借助深度神经网络来学习动作控制策略,使得虚拟角色能够在仿真环境中执行各种复杂的动作。这种技术在游戏开发、动画制作以及机器人控制等领域具有广泛的应用前景。
总的来说,DeepMimic代表了深度学习在动作生成和控制方面的前沿应用,为虚拟角色赋予了更加逼真和智能的行为表现能力。
DeepMimic
基于Tensorflow
框架- 物理仿真与可视化部分基于
Bullet
引擎 Python
&C++
自身环境SWIG
,C++
&Python
两种语言接口通信MPI
是一个跨语言的通讯协议,用于实现高性能计算;MPI4py
是一个构建在MPI
之上的Python
库。
本篇记录一下DeepMimic环境配置踩的一些坑。
2. 环境配置(Win10)
2.1. Python相关
2.1.1. Conda
Conda下载并安装, 以下三者选其一
- Anaconda
- Miniconda
- Miniforge
因涉及商业性质, geren 使用的Miniforge
2.1.2. Python
conda create -n test_deepmimic python=3.7
conda activate test_deepmimic
Deepmimic
用到的是tensorflow-1.13.0
,对应的Python版本为3.5-3.7
2.1.3. PyOpenGL
- PyOpenGL‑3.1.6‑cp37‑cp37m‑win_amd64.whl
- PyOpenGL_accelerate‑3.1.6‑cp37‑cp37m‑win_amd64.whl
原作者cgohlke的下载站点已不维护, 寻到的一个下载方法, 更换成了新的类似下载站点, 若需下载其他版本whl文件, 后缀改成对应要下载的版本文件夹&文件名即可。
// PyOpenGL‑3.1.6‑cp37‑cp37m‑win_amd64.whl对应的下载站点
// https://download.lfd.uci.edu/pythonlibs/archived/cp37/PyOpenGL‑3.1.6‑cp37‑cp37m‑win_amd64.whl
// PyOpenGL_accelerate‑3.1.6‑cp37‑cp37m‑win_amd64.whl对应的下载站点
// https://download.lfd.uci.edu/pythonlibs/archived/cp37/PyOpenGL_accelerate‑3.1.6‑cp37‑cp37m‑win_amd64.whl
进入test_deepmimic
环境
pip install PyOpenGL-3.1.6-cp37-cp37m-win_amd64.whl
pip install PyOpenGL_accelerate-3.1.6-cp37-cp37m-win_amd64.whl
2.1.4. 其他相关依赖
- tensorflow
- mpi4py
- numpy
pip install tensorflow==1.13.1
pip install mpi4py
pip install numpy
2.2. C++相关
2.2.1. Bullet
下载Bullet 2.88,打开 build_visual_studio_vr_pybullet_double.bat,修改myvar
为conda
里的Python路径目录。

该项目用的是单精度,所以需将 premake4 这句里面的 –double 删掉,表示使用单精度编译,不删掉的话之后编译一定会出现链接错误。

双击 build_visual_studio_vr_pybullet_double.bat,在 build3/vs2010/ 下会生成文件,使用对应Visual Studio版本打开0_Bullet3Solution.sln,解决方案默认版本为2019, 个人用的是2019, 做了重定向。
打开之后,选择 Release x64,可以直接点击生成解决方案构建整个项目,但其实只会用到其中三个,Bullet3Collision、Bullet3Dynamics、LinearMath。
构建好之后,在 bin 目录找到 BulletDynamics_vs2010_x64_release.lib、BulletCollision_vs2010_x64_release.lib、LinearMath_vs2010_x64_release.lib,把它们名字里的 _vs2010_x64_release 去掉,即改名为 BulletDynamics.lib、BulletCollision.lib、LinearMath.lib.
为什么要改名?
DeepMimic 链接库引用的库名配置如此, 或直接更改 DeepMimic 引用的库名也可。
2.2.2. OpenGL
OpenGL 一般电脑自带了,版本需要 >= 3.2.
2.2.3. 其他相关依赖
- Eigen 3.3.7, 解压即可
- freeglut 3.0.0
- glew 2.1.0, 解压即可
- swig 4.0.0, 解压即可
- MS-MPI 10.1.2, 直接安装
其中仅freeglut
需源码编译, 借助CMake工具构建Visual Studio解决方案, 选择Release x64来编译

编译完成后, 根据本地生成或安装目录, 配置如下环境变量

必须配置SWIG_DIR
该变量, 编译工程需要
可使用命令
PATH
查看系统环境变量是否生效
2.3. Build解决方案
2.3.1. DeepMimic仓库拉取
git clone https://github.com/xbpeng/DeepMimic.git
2.3.2. DeepMimicCore编译
- 打开DeepMimicCore目录下的DeepMimicCore.sln,设置为 Release_Swig x64
打开项目属性
- 在 C/C++ -> 常规,修改附加包含目录,将 bullet、freeglut、glew、python 的 include、eigen 添加进去

- 在 C/C++ -> 预处理器 添加一条预处理器定义 _USE_MATH_DEFINES

- 在 链接器->常规,修改附加库目录,将 bullet、freeglut、glew、python 的 lib 路径添加进去

配置完成后Build, 成功的话会生成一个_DeepMimicCore.pyd的python动态库.
2.3.3. DeepMimic编译
打开 DeepMimic.sln,配置Conda创建的 Python 环境

选择已准备好的Python环境或新建环境
在项目属性中配置一下脚本参数,随便选一个 args/ 下的配置文件

开始运行, 理论上可以看到小人的动作
3. 期间遇到的问题
3.1. ‘ImportError: No module named xxx’
可能是xxx.pyd所在路径不在sys.path中
解决方法: import之前用sys.path.append()方法加入xxx.pyd所在路径,确定当前路径推荐用os.path.realpath(‘.’)
3.2. ‘ImportError: DLL load failed: 找不到指定的程序’
使用Python import 模块时, 模块的搜索路径次序为(前面会覆盖之后出现的同名模块)
1>. 程序的主目录(交互模式下当前的工作目录或 脚本文件所在的目录)
2>. 环境变量 PYTHONPATH目录(如果已经进行了设置)
3>. 标准链接库目录(标准库模块所在目录 C:\Python27或C:\Python27\Lib\site-packages 目录中)
4>. 任何放在标准链接库目录中的.pth文件中记录的目录
出现 No module 错误时,说明无法找到对应的 .pyd 文件(Python中的动态链接库文件)
可能的原因是
a. 该 _DeepMimicCore.pyd 文件不在搜索目里。(需拷入到搜索目录下 或 将其目录设置到PYTHONPATH中)
b. 该 module的 名字有问题, 比如输错了或 应该为Debug版(如应该为 _DeepMimicCore_d.pyd, Debug版的都需在 Python_d.exe中执行,且都需加_d后缀)
参考CSDN上Python动态库导入问题.
3.3. Protobuf版本问题
在当前Conda环境下
pip uninstall protobuf
重新安装protobuf
pip install protobuf==3.19.0
参考CSDN上Descriptors cannot not be created directly.
3.4. glutInit未定义
Traceback (most recent call last): File "DeepMimic.py", line 314, in <module> main() File "DeepMimic.py", line 306, in main init_draw() File "DeepMimic.py", line 267, in init_draw glutInit() File "E:\ProgramData\miniforge-pypy3\envs\test_deepmimic\lib\python3.7\site-packages\OpenGL\GLUT\special.py", line 333, in glutInit _base_glutInit( ctypes.byref(count), holder ) File "E:\ProgramData\miniforge-pypy3\envs\test_deepmimic\lib\python3.7\site-packages\OpenGL\platform\baseplatform.py", line 425, in __call__ self.__name__, self.__name__, OpenGL.error.NullFunctionError: Attempt to call an undefined function glutInit, check for bool(glutInit) before calling
可能PyOpenGL库版本问题, 参照环境配置(Win10)指定安装对应的PyOpenGL Arm64版本
3.5. glew32的dll导入问题
Traceback (most recent call last): File "E:\Workspaces\dl\deepmimic\DeepMimic.py", line 9, in <module> from env.deepmimic_env import DeepMimicEnv File "E:\Workspaces\dl\deepmimic\env\deepmimic_env.py", line 3, in <module> from DeepMimicCore import DeepMimicCore File "E:\Workspaces\dl\deepmimic\DeepMimicCore\DeepMimicCore.py", line 13, in <module> from . import _DeepMimicCore ImportError: DLL load failed: The specified module could not be found
将glew32.dll添加进系统环境变量, 诸如变量值E:\Workspaces\dl\glew-2.1.0\bin\Release\x64\
, 参考Github上的Issure.
3.6. GL相关函数执行的问题
出现glutPostRedisplay相关函数问题

注释对应代码段, 如图所示, 可能会有其他隐患, 但这样尝试过目前可行, 参考Github上的Issure.
4. 示例演示
5. 参考
1.DeepMimic 实践 | Windows 下 DeepMimic 的环境配置
2.DeepMimic作者官方站点