若需观看机器人系列相关博客,请劳驾至:足式机器人无死角系列之-【强化学习理论基础-通用】、【仿真及训练环境】、【强化学习】:isaac-gym 与 isaac-lab 从零开始
郑重声明:该系列博客为本人 ( W e n h a i Z h u ) 独家私有 , 禁止转载与抄袭 , 首次举报有谢 , 若有需请私信授权! \color{red}郑重声明:该系列博客为本人(WenhaiZhu)独家私有,禁止转载与抄袭,首次举报有谢,若有需请私信授权! 郑重声明:该系列博客为本人(WenhaiZhu)独家私有,禁止转载与抄袭,首次举报有谢,若有需请私信授权!
本栏目属于足式机器人无死角系列之【强化学习】系列,主要对 isaac-gym 从零开始进行环境搭建,及仿真模拟的讲解,该系列博客不经存在广度还具 备一定深度,主要包含如这几个部分: 1: 从零开始无死角讲解 isaac-gym 环境搭建过程; 2: 主要包含ubuntu20.04以及 docker 两种方式的搭建; 3: 包括但不限于双足,四足机器人 仿真模拟。 4: 工程落地,含 sim2sim 及 sim2real 过程。 有的朋友可能不太了解isaac-gym 与 isaac-sim 的关系,简单的说:isaac-gym 就是一个仿真模拟器(主要用于强化学习), isaacGymEnvs 就是对其封装了一套接口,便于更多类型机器人的强化学习开发。其和 isaac-sim(仿真模拟器) 与 isaac-lab(强化学习接口封装) 的关系比较类似的。简单说明,仅供参考。 |
本博客编写于: 20241019 ,台式机为 u b u n t u 20.04 , 3090 G e F o r c e R T X 显存 24 G { \color{purple} 本博客编写于:20241019,台式机为 ubuntu 20.04,3090 GeForce RTX 显存24G} 本博客编写于:20241019,台式机为ubuntu20.04,3090GeForceRTX显存24G:与你现在的代码,或者环境等存在一定差异也在情理之中,故切勿认为该系列博客绝对正确,且百密必有一疏,若发现错误处,恳请各位读者直接指出,本人会尽快进行整改,尽量使得后面的读者少踩坑,评论部分我会进行记录与感谢,只有这样,该系列博客才能成为精品,这里先拜谢各位朋友了。
有的朋友可能会纯在疑问,isaac-gym 不是已不再维护代码库,由 isaac gym 项目合并到 isaac sim项目(2022年开始停止维护),那么为什么还要学习 isaac-gym 呢?主要是因为本人现在这个时间点比较尴尬,目前开源的项目主要都是基于 isaac gym,即 isaac sim 与 isaac lab 的生态还不够成熟,为了把一些开源项目利用或者移植到 isaac lab,迫不得已才需要熟悉 isaac gym,另外,isaac lab 才是未来的方向,有兴趣的朋友可以参考该链接了解与学习 isaac lab,该系列依旧是从 0 开始,无死角讲解: |
文末正下方中心提供了本人 联系方式, 点击本人照片即可显示 W X → 官方认证 {\color{blue}{文末正下方中心}提供了本人 \color{red} 联系方式,\color{blue}点击本人照片即可显示WX→官方认证} 文末正下方中心提供了本人联系方式,点击本人照片即可显示WX→官方认证
关于 01.isaac-gym 强化学习,参考链接为:【04.isaac-gym】最新从零无死角系列-(00) 目录最新无死角源码讲解
一、开源代码与工程
前面已经提到 isaac-gym 已经停止维护了,其官方一直并没有在 github 上开源,只能通过官方网址 https://developer.nvidia.com/isaac-gym 获取到源码:
需要登录才能进行下载,下载后的压缩包名为:IsaacGym_Preview_4_Package.tar.gz。解压之后目录结构应该如下所示:
二、本地ubuntu20.04搭建gym环境
参考链接:https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/1.17.0/install-guide.html (懂的都懂,需要访问国外)。
https://github.com/NVIDIA/nvidia-container-toolkit/issues/89
Ign:3 https://nvidia.github.io/libnvidia-container/stable/deb/amd64 InRelease
Hit:1 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal InRelease
Hit:2 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates InRelease
Err:5 https://nvidia.github.io/libnvidia-container/stable/deb/amd64 Release
Could not handshake: Error in the pull function. [IP: 185.199.111.153 443]
Hit:4 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-backports InRelease
Hit:6 http://lenovo.archive.canonical.com focal InRelease
Hit:7 http://security.ubuntu.com/ubuntu focal-security InRelease
Reading package lists... Done
E: The repository 'https://nvidia.github.io/libnvidia-container/stable/deb/amd64 Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
暂时没有安装,本人使用的是 docker 模式,个人觉得在本地部署安装环境太污染本地的环境了,且后续换机器后还要重新搭建环境,确实太麻烦了,如何后续本人在本地进行环境部署,会详细记录 |
三、 docker 环境搭建
1.使用docker优点
个人还是十分推荐使用 docker 的方式进行环境部署,简单来说,你可以把其看做一个虚拟机的管理工具,利用其可以创建很多虚拟机(容器): 1: 多个虚拟机之间的环境是相互独立的,互不干扰 2: 可以创建多种系统的容器,如ubuntu20.04,ubuntu24.04,wind10 等 。 3: 哪怕两个工程要求的完全不一样的系统,你也可以在一塔数据机上运行这两个工程。 4: 可以记录快照,及对环境进行保存,直接转移到另外一台主机,直接使用。 本人在工作过程中,有时候会更换工作电脑,如果不使用 docker 的方式,则所有工程的环境都需要重新搭建,十分耗时,但是使用 docker 几个小时即可完成几年积累下来的环境迁移。 |
2.nvidia-docker2搭建
官方链接:https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/1.17.0/install-guide.html
上面本人给的链接链接为 1.17.0 版本,若你所在时间点与本人不一致,应该会出现更高的新版本,可适当的选择是否安装最新版本。若上链接 失效 \color{red} 失效 失效,可在:https://docs.nvidia.com/datacenter/cloud-native/ 搜索栏中搜索 container,应该也能导航到相关链接。
如果参考官方链接能够正常安装,那当然是最好的选择,但是有的时候,不知道是本人环境还是官方服务器,获取被国内被限制的原因,最终无法正常安装 nvidia-docker2。本人找到一个大佬编写离线安装的教材,超级哇塞,安装一路通顺,这里给出链接:https://blog.csdn.net/qq_43548590/article/details/143193208,怕那天这篇博客突然没有了,所以本人摘录一下:
①.查看版本号
# 查看当前系统版本号和名称
lsb_release -a
如本人:
需要注意其中的 Description: Ubuntu 20.04.6 LTS,以及 Codename:focal,后面下载文件时需一一对应。
②.离线安装 docker
下载地址:https://download.docker.com/linux/ubuntu/dists/
查找符合版本要求的文件,如我的系统对应:https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/
下载下方四个文件:
containerd.io_xxx_amd64.deb
docker-ce_xxx_amd64.deb
docker-ce-cli_xxx_amd64.deb
docker-ce-rootless-extras_xxx_amd64.deb
# 进入到下载目录执行如下指令安装
dpkg -i ./*deb
③.离线安装 NVIDIA-container-toolkit
链接:https://mirror.cs.uchicago.edu/nvidia-docker/libnvidia-container/stable/
选择对应系统版本后下载文件(没有ubuntu24我下载的最新的ubuntu20.04)上述链接不需要翻墙,文件包括:
libnvidia-container1_xxx_amd64.deb
libnvidia-container-tools_xxx_amd64.deb
nvidia-docker2_xxx_all.deb
nvidia-container-runtime_xxx_all.deb
nvidia-container-toolkit_xxx_amd64.deb
# 进入到下载目录执行如下指令安装
dpkg -i ./lib* ./nvidia*
④.验证docker
# 重新加载daemon文件和docker
systemctl daemon-reload
systemctl restart docker
# 查看nvidia-docker 版本
nvidia-docker -v #查看版本
nvidia-docker version
dpkg -l | grep nvidia-docker #是否已安装
⑤.配置daemon.json
修改/etc/docker/daemon.json文件内容
“default-runtime”: "nvidia"设置docker默认运行环境为nvidia
“registry-mirrors”:镜像源代理地址(可自行百度最新地址)
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
},
"registry-mirrors": [
"https://docker.1panel.live",
"https://hub.rat.dev/",
"https://docker.chenby.cn",
"https://docker.m.daocloud.io"
]
}
重新加载daemon文件和docker
# 重新加载daemon文件和docker
systemctl daemon-reload
systemctl restart docker
⑥.非root用户权限
sudo pkill -SIGHUP dockerd
sudo groupadd docker
sudo usermod -aG docker ${用户名}
sudo service docker restart
四、基于docker搭建gym环境
1.源码 Dockerfile 修改
本人对源码的 Dockerfile 文件进行了修改,即 isaacgym/docker/Dockerfile,修改的原因是本人希望后续拉起来的虚拟机(容器)默认为root用户,修改该内容如下:
左边为源码原文件中内容,右侧则是我修改过后的结果,这样后续生成镜像容器默认用户名即是root,有对应的 root 权限。
2.docker 镜像生成
# 执行如下指令
cd isaacgym/docker/
bash build.sh
执行之后,若一切正常,其会自动拉取镜像,完成后本人输出如下:
# 通过如下指令,进行镜像查看
nvidia-docker images
存在如下镜像说明镜像拉取成功:
3.容器创建
在拉取到了镜像之后,就是要创建容器了,可以通过源码中的 /opt/isaacgym/docker/run.sh 脚本直接创建且运行容器,但其是一次性的,即该容器再你退出终端时,会被销毁,下次又重新创建。不利于,我们搭建自己的 anconda 环境,因为我们希望容器一起存在,且每次进入保留上一次的环境,故可通过如下指令进行创建:
sudo docker run --runtime=nvidia --gpus all -dit --restart=always --privileged -v /tmp/.X11-unix:/tmp/.X11-unix -v /work:/work -v /dev:/dev --network host -e DISPLAY=$DISPLAY -e LANG=zh_CN.UTF-8 --name isaacgym -w /work isaacgym:latest /bin/bash
其中 -v /work:/work 与 -v /dev:/dev 为本地目录到容器内部目录的映射,–name isaacgym 为创建容器的名称,可适当进行调整。然后就可以通过如下指令进入到容器了:
docker exec -it isaacgym /bin/bash
五、gym环境验证
进入容器之后,首先我们需要验证的,就是环境是否搭建成功,gym 是否使用 GPU 正常运行。
# 首先进入到如下目录
/opt/isaacgym/python/examples
# 执行示例代码
python joint_monkey.py
显示如下界面,且机器人在进行摆动,就说明环境完全搭建成功了。