实验记录
宇树强化学习RL例程:使用 isaac_gym 仿真平台训练 G1 控制算法
参考官方开发文档https://support.unitree.com/home/zh/G1_developer/rl_control_routine


实验环境

我的环境:ubuntu22.04物理机,4090
训练必须使用物理机,本人经实验后发现wsl不支持isaac_gym可视化界面显示,虚拟机无法使用显卡。
官方文档建议系统使用 ubuntu18/20,但我在装ubuntu20系统时遇到无线网卡和有线网卡都不匹配的问题,ubuntu无法上网,手机usb共享热点失败。虽然isaac_gym平台官方已停止维护,但经过实验发现,isaac_gym能在ubuntu22上正常使用。
虽然宇树机器人G1 edu的开发板系统是ubuntu20,但在ubuntu22上训练好的模型可以迁移至宇树机器人G1 edu上。

我的CUDA与显卡驱动版本如下在这里插入图片描述

安装对应的显卡驱动

如果之前安装了不适配的版本或安装失败,手动卸载干净

sudo apt purge nvidia*
sudo apt autoremove

首先确认显卡型号以及系统推荐安装的驱动版本

ubuntu-drivers devices

自动安装推荐版本驱动

sudo ubuntu-drivers autoinstall

手动安装特定版本

sudo apt update
sudo apt install nvidia-driver-535

驱动安装完成后,必须重启才能生效。

sudo reboot

验证安装是否成功,重启后,输入以下命令查看 GPU 状态:

nvidia-smi

注意:
1、Secure Boot 问题:如果主板开启了 Secure Boot,在安装驱动的过程中,可能终端会弹出一个蓝色的界面
重启按F12或Fn+F12(华硕是F8,戴尔是F2)进入BIOS界面,找到Secure Boot设置成disabled。这一步大部分是在用引导U盘装双系统的时候更改。
2、ubuntu终端是鼠标右键复制或者粘贴,不是ctrl c/v

虚拟环境配置

安装miniconda,依次运行

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
# 激活环境变量
source ~/.bashrc
# 配置镜像源,也可不配置,我主要用pip
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes

安装官方文档,依次运行

conda create -n rl-g1 python=3.8
conda activate rl-g1

torch版本不必使用过低的1.1,但numpy库版本不要太高,建议安装 1.23.5版本

pip install torch torchvision torchaudio

下载 Isaac Gym Preview 4 仿真平台到ubuntu22
在这里插入图片描述
勾选
在这里插入图片描述
勾选
在这里插入图片描述
解压后进入 python 目录,使用 pip 安装,并用镜像加速

# current directory: isaacgym/python
pip install -e . -i https://mirrors.aliyun.com/pypi/simple/

运行 python/examples 目录下的例程,验证安装是否成功

# current directory: isaacgym/python/examples
python 1080_balls_of_solitude.py

安装成功我的显示如图
在这里插入图片描述
问题:
运行python 1080_balls_of_solitude.py时报错,
ImportError:libpython3.8.so.1.0: cannot open shared object file: no such file or dictionary
在这里插入图片描述

运行

sudo find / -name "libpython3.8.so.1.0"

在这里插入图片描述

在minicoda3/envs/rl-g1/lib下找到了libpython3.8.so.1.0
发现libpython3.8.so.1.0文件上有个红色小×,链接失效
将/home/fly/miniconda3/pkgs/python-3.8.20-he870216_0/lib/libpython3.8.so.1.0这个文件复制替换掉
/home/fly/miniconda3/envs/rl-g1/lib/libpython3.8.so.1.0即可解决问题

接着安装rsl_rl库,依次运行

git clone https://github.com/leggedrobotics/rsl_rl
cd rsl_rl
git checkout v1.0.2
pip install -e . -i https://mirrors.aliyun.com/pypi/simple/

注意一定要严格git checkout v1.0.2!不要手动下载

训练

下载宇树官方示例代码

git clone https://github.com/unitreerobotics/unitree_rl_gym.git

修改 legged_gym/scripts/train.py , legged_gym/scripts/play.py 中的sys.path.append(“/home/unitree/h1/legged_gym”)为自己的路径

注意:
sys.path.append(“/home/…unitree_rl_gym/legged_gym”)后仍然报错ModuleNotFoundError: No module named 'legged_gym'
这是因为当执行train.py中的 from legged_gym.envs import * 时,Python 会在 sys.path 的每一个目录下寻找名为 legged_gym 的 文件夹。
目前的设置: 把 /home/.../unitree_rl_gym/legged_gym 加入了路径。Python 的行为: 它会去 /home/…/unitree_rl_gym/legged_gym 目录下找一个叫 legged_gym 的子文件夹。

解决:
应该将 legged_gym 的 父目录 加入 sys.path:sys.path.append("/home/.../unitree_rl_gym")

接着切换到 legged_gym/scripts 目录下,执行训练指令,开始训练。

python3  train.py --task=g1

初始训练次数是一万次,过于久,可在配置文件里修改
由于运行的是 --task=g1,需要找到 G1 机器人的训练配置。路径:legged_gym/envs/g1/g1_config.py
修改 max_iterations 参数,改为1000即可

开始训练后会出现如下 isaac_gym 界面
在这里插入图片描述

训练完成后,运行测试指令。

python play.py --task=g1

注意:
play.py 中的 sys.path.append(“/home/…/unitree_rl_gym”)需要放在from legged_gym import LEGGED_GYM_ROOT_DIR和from legged_gym import LEGGED_GYM_ROOT_DIR的前面,import sys的后面

我的测试效果如图,1000轮机器人已经能较好的行走
在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐