Go1 仿真到实际环境运动启动套件
目录
概述
本仓库提供了以下论文的实现:
以多种方式行走:通过行为多样性调整机器人控制以实现泛化Gabriel B. Margolis 和 Pulkit Agrawal
机器人学习会议,2022年
论文 / 项目页面
如果您在工作中使用了本仓库,请考虑引用:
@article{margolis2022walktheseways,
title={Walk These Ways: Tuning Robot Control for Generalization with Multiplicity of Behavior},
author={Margolis, Gabriel B and Agrawal, Pulkit},
journal={Conference on Robot Learning},
year={2022}
}
本环境基于苏黎世联邦理工学院机器人系统实验室的Nikita Rudin开发的legged gym环境(论文:https://arxiv.org/abs/2109.11978)和NVIDIA的Isaac Gym模拟器(论文:https://arxiv.org/abs/2108.10470)。训练代码基于同样由苏黎世联邦理工学院机器人系统实验室的Nikita Rudin开发的rsl_rl仓库。所有重新分发的代码均保留其原始许可证。
我们的初始版本提供以下功能:
- 使用PPO、IsaacGym、域随机化和行为多样性(MoB)为Go1机器人训练强化学习策略。
- 在模拟环境中评估预训练的MoB策略。
- 使用
unitree_legged_sdk
在Go1上部署学习到的策略。
系统要求
模拟训练和评估:Isaac Gym需要NVIDIA GPU。要在默认配置下进行训练,我们建议使用至少10GB显存的GPU。如果您减少并行环境的数量(Cfg.env.num_envs
),代码可以在较小的GPU上运行。但是,使用较少的环境会使训练速度变慢。
硬件部署:我们为Unitree Go1 Edu机器人提供部署代码。这款相对低成本的商用四足机器人可以在这里购买:https://shop.unitree.com/。您需要机器人的Edu版本来运行和自定义您的运动控制器。
训练模型
安装
安装支持cuda-11.3的pytorch 1.10:
pip3 install torch==1.10.0+cu113 torchvision==0.11.1+cu113 torchaudio==0.10.0+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html
安装Isaac Gym
- 从 https://developer.nvidia.com/isaac-gym 下载并安装Isaac Gym Preview 4
- 通过以下命令解压文件:
tar -xf IsaacGym_Preview_4_Package.tar.gz
- 现在安装Python包
cd isaacgym/python && pip install -e .
- 通过运行示例来验证安装
python examples/1080_balls_of_solitude.py
- 如需故障排除,请查看文档
isaacgym/docs/index.html
安装 go1_gym
包
在此仓库中,运行 pip install -e .
验证安装
如果一切安装正确,你应该能够运行测试脚本:
python scripts/test.py
脚本应该打印 Simulating step {i}
。
默认情况下GUI是关闭的。要打开它,在 test.py
的main函数调用中设置 headless=False
。
环境和模型配置
代码结构 用于模拟腿式机器人的主要环境在 legged_robot.py 中。默认配置参数(包括奖励权重)在 legged_robot_config.py::Cfg 中定义。
scripts 目录中有三个脚本:
scripts
├── __init__.py
├── play.py
├── test.py
└── train.py
你可以运行 test.py
脚本来验证你的环境设置。如果它能运行,说明你已正确安装了gym环境。要训练代理,运行 train.py
。要评估预训练的代理,运行 play.py
。我们在 ./runs/pretrain-v0 目录中提供了一个预训练的代理检查点。
训练和日志记录
要训练来自 Walk these Ways 的Go1控制器,运行:
python scripts/train.py
初始化模拟器后,脚本将每十次训练迭代打印出一系列指标。
使用默认配置进行训练需要约12GB的GPU内存。如果你可用的内存较少,你仍然可以通过减少模拟中使用的并行环境数量来进行训练(默认为 Cfg.env.num_envs = 4000
)。
要可视化训练进度,首先启动ml_dash前端应用:
python -m ml_dash.app
然后在 runs
文件夹的父目录中运行此命令来启动ml_dash后端服务器:
python -m ml_dash.server .
最后,使用网络浏览器访问应用IP(默认为 localhost:3001
)
并使用以下凭据创建新配置文件:
用户名:runs
API:[服务器IP](默认为 localhost:8081
)
访问令牌:[留空]
现在,点击配置文件应该会显示一个仪表板界面,可视化训练运行情况。
分析策略
要评估最近训练的模型,运行:
python scripts/play.py
机器人被命令以3m/s的速度向前跑5秒。完成模拟后,脚本会绘制机器人的速度和关节角度。
默认情况下GUI是开启的。
如果它没有出现,且你在docker中工作,确保你没有忘记运行 bash docker/visualize_access.bash
。
部署模型
安全建议
建议用户在低级控制模式下使用Go1时遵循Unitree的安全建议。
- 这意味着悬挂机器人,并使其远离人和障碍物。
- 实践中,我们发现重要的安全考虑是在初始校准或测试新策略时不要将任何东西插入机器人的背部(以太网电缆、USB),因为在跌倒时可能会损坏机器人。
- 我们的代码实现了Unitree的
unitree_legged_sdk
中的安全层,PowerProtect级别为9。如果关节扭矩过高(在快速奔跑时可能发生),这将切断电机的电源。 - 这是研究代码;使用风险自负;我们不对任何损坏负责。
安装部署工具
第一步是使用以太网将开发机连接到机器人。您应该ping机器人以验证连接:ping 192.168.123.15
应返回x个数据包已传输,x个已接收,0%数据包丢失
。
确认机器人已连接后,在您的计算机上运行以下命令将文件传输到机器人。首次运行时,脚本将下载并传输用于机器人开发的压缩Docker镜像(deployment_image.tar
)。该文件相当大(3.5GB),但只需下载和传输一次。
cd go1_gym_deploy/scripts && ./send_to_unitree.sh
接下来,您将登录机器人的板载计算机并安装Docker环境。进入板载计算机的命令是:
ssh unitree@192.168.123.15
现在,在机器人的板载计算机上运行以下命令:
chmod +x installer/install_deployment_code.sh
cd ~/go1_gym/go1_gym_deploy/scripts
sudo ../installer/install_deployment_code.sh
安装程序将自动解压并安装包含部署环境的Docker镜像。
运行控制器
将机器人置于阻尼模式。控制序列是:[L2+A],[L2+B],[L1+L2+START]。之后,机器人应该坐在地上,关节应该可以自由移动。
现在,ssh到unitree@192.168.123.15
并运行以下两个命令来启动控制器。这将使机器人在低级控制模式下运行。确保您的Go1被悬挂起来。
首先:
cd ~/go1_gym/go1_gym_deploy/autostart
./start_unitree_sdk.sh
其次:
cd ~/go1_gym/go1_gym_deploy/docker
sudo make autostart
机器人将等待您按下[R2],然后校准,再等待第二次按下[R2]后才开始运行控制循环。
遥控器映射
上图描述了遥控器的映射。
部署自定义模型
训练自定义模型后,它将保存在runs
文件夹中。注意您自定义模型相对于train
文件夹的位置(对于默认策略),它是gait-conditioned-agility/pretrain-v0/train
。我们将其表示为$PDIR
。
要先在模拟中播放自定义模型,将https://github.com/Improbable-AI/walk-these-ways/blob/master/scripts/play.py#L97 这一行替换为label = "$PDIR"
。
要在机器人上部署,将https://github.com/Improbable-AI/walk-these-ways/blob/master/go1_gym_deploy/scripts/deploy_policy.py#L73 这一行替换为label = "$PDIR"
。然后重新运行send_to_unitree.sh
脚本以更新机器人上的文件。
日志和调试
即将推出
分析真实世界性能
即将推出
调试常见错误
错误 | 解决方案 | 首次报告 |
---|---|---|
磁盘空间不足 | 如果在运行 cd ~/go1_gym/go1_gym_deploy/installer && ./install_deployment_code.sh 时磁盘空间不足,请考虑将脚本中的IP地址改为 192.168.123.13 (至少在我的三个Jetson nano的Go1 Edu中,只有 192.168.123.13 有足够的磁盘空间来复制tar文件并解压镜像)。或者,考虑在外部PC上部署。 | https://github.com/Improbable-AI/walk-these-ways/issues/7 |
lcm_position 语法错误 | 在外部PC/NUC上使用 sudo ./start_unitree_sdk.sh 部署时,如果遇到以下错误:./lcm_position: 1: Syntax error: word unexpected (expecting ")") ,很可能是因为 ./lcm_position 是为ARM aarch64架构(在Jetson上运行)编译的。请使用 https://github.com/Improbable-AI/unitree_legged_sdk 为您的架构(外部PC/NUC)重新编译它。 | https://github.com/Improbable-AI/walk-these-ways/issues/7 |