Ravens - 转运网络
Ravens 是一个基于 PyBullet 的模拟任务集合,用于学习基于视觉的机器人操作,特别强调抓取和放置。它具有类似 Gym 的 API,包含 10 个桌面重排任务,每个任务都有:(i) 提供专家演示的脚本化预言机(用于模仿学习),以及 (ii) 提供部分奖励的奖励函数(用于强化学习)。
(a) 方块插入:拾取 L 形红色方块并将其放入 L 形固定装置中。
(b) 将红色放入绿色:在其他物体中拾取红色方块并将它们放入绿色碗中。
(c) 汉诺塔:依次将圆盘从一个塔移动到另一个塔 —— 只有较小的圆盘可以放在较大的圆盘上。
(d) 对齐盒子角落:拾取随机大小的盒子,将其一个角对齐到桌面上的 L 形标记。
(e) 堆叠方块金字塔:按彩虹色顺序依次堆叠 6 个方块,形成 3-2-1 的金字塔。
(f) 码垛箱子:拾取同质固定大小的箱子,在托盘上以交错层叠放。
(g) 组装套件:拾取不同物体并将它们放置在标有相应轮廓的板上。
(h) 装箱:拾取随机大小的箱子并将它们紧密放入容器中。
(i) 操纵绳索:重新排列可变形绳索,使其连接三边形方框的两个端点。
(j) 清扫堆积物:将小物体堆推入桌面上标记的目标区域。
一些任务需要泛化到未见过的物体(d、g、h),或需要多步序列与闭环反馈(c、e、f、h、i、j)。
团队:本仓库由 Andy Zeng、Pete Florence、Daniel Seita、Jonathan Tompson 和 Ayzaan Wahid 开发和维护。这是以下论文的参考仓库:
转运网络:重排视觉世界以进行机器人操作
项目网站 • PDF • 2020年机器人学习会议(CoRL)
Andy Zeng, Pete Florence, Jonathan Tompson, Stefan Welker, Jonathan Chien, Maria Attarian, Travis Armstrong,
Ivan Krasin, Dan Duong, Vikas Sindhwani, Johnny Lee
摘要:机器人操作可以被表述为引导一系列空间位移:被移动的空间可以包括一个物体、物体的一部分或末端执行器。在这项工作中,我们提出了转运网络,这是一种简单的模型架构,它重新排列深度特征以从视觉输入中推断空间位移 —— 这可以参数化机器人动作。它不假设物体性(例如规范姿势、模型或关键点),利用空间对称性,并且在学习基于视觉的操作任务方面比我们对比的替代方案高效几个数量级:从堆叠方块金字塔到组装未见过物体的套件;从操纵可变形绳索到用闭环反馈推动小物体堆。我们的方法可以表示复杂的多模态策略分布,并可推广到多步顺序任务以及 6 自由度的抓取和放置。在 10 个模拟任务上的实验表明,它比各种端到端基线(包括使用真实物体姿势的策略)学习更快、泛化更好。我们在现实世界的硬件上验证了我们的方法。
安装
步骤 1. 推荐:安装 Python 3.7 版本的 Miniconda。
curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -u
echo $'\nexport PATH=~/miniconda3/bin:"${PATH}"\n' >> ~/.profile # 将 Conda 添加到 PATH。
source ~/.profile
conda init
步骤 2. 创建并激活 Conda 环境,然后安装 GCC 和 Python 包。
cd ~/ravens
conda create --name ravens python=3.7 -y
conda activate ravens
sudo apt-get update
sudo apt-get -y install gcc libgl1-mesa-dev
pip install -r requirements.txt
python setup.py install --user
步骤 3. 推荐:为 Tensorflow 安装 NVIDIA CUDA 10.1 和 cuDNN 7.6.5 的 GPU 加速。
./oss_scripts/install_cuda.sh # 适用于 Ubuntu 16.04 和 18.04。
conda install cudatoolkit==10.1.243 -y
conda install cudnn==7.6.5 -y
替代方案:纯 pip
以 Ubuntu 18.04 为例:
./oss_scipts/install_cuda.sh # 适用于 Ubuntu 16.04 和 18.04。
sudo apt install gcc libgl1-mesa-dev python3.8-venv
python3.8 -m venv ./venv
source ./venv/bin/activate
pip install -U pip
pip install scikit-build
pip install -r ./requirements.txt
export PYTHONPATH=${PWD}
入门
步骤 1. 生成训练和测试数据(本地保存)。注意:去掉 --disp
可以启用无头模式。
python ravens/demos.py --assets_root=./ravens/environments/assets/ --disp=True --task=block-insertion --mode=train --n=10
python ravens/demos.py --assets_root=./ravens/environments/assets/ --disp=True --task=block-insertion --mode=test --n=100
要使用共享内存运行,请打开单独的终端窗口并运行 python3 -m pybullet_utils.runServer
。然后在上述命令中添加 --shared_memory
标志。
步骤 2. 训练模型,例如转运网络模型。模型检查点保存到 checkpoints
目录。可选:你可以在 1000 次迭代后提前退出训练,以跳到下一步。
python ravens/train.py --task=block-insertion --agent=transporter --n_demos=10
步骤 3. 使用训练 1000 次迭代的模型评估转运网络代理。结果以 .pkl
文件格式本地保存。
python ravens/test.py --assets_root=./ravens/environments/assets/ --disp=True --task=block-insertion --agent=transporter --n_demos=10 --n_steps=1000
步骤 4. 绘制并打印结果。
python ravens/plot.py --disp=True --task=block-insertion --agent=transporter --n_demos=10
可选. 使用 Tensorboard 跟踪训练和验证损失。
python -m tensorboard.main --logdir=logs # 在浏览器中打开它告诉你的地址。
数据集和预训练模型
下载我们生成的训练和测试数据集以及预训练模型。
wget https://storage.googleapis.com/ravens-assets/checkpoints.zip
wget https://storage.googleapis.com/ravens-assets/block-insertion.zip
wget https://storage.googleapis.com/ravens-assets/place-red-in-green.zip
wget https://storage.googleapis.com/ravens-assets/towers-of-hanoi.zip
wget https://storage.googleapis.com/ravens-assets/align-box-corner.zip
wget https://storage.googleapis.com/ravens-assets/stack-block-pyramid.zip
wget https://storage.googleapis.com/ravens-assets/palletizing-boxes.zip
wget https://storage.googleapis.com/ravens-assets/assembling-kits.zip
wget https://storage.googleapis.com/ravens-assets/packing-boxes.zip
wget https://storage.googleapis.com/ravens-assets/manipulating-rope.zip
wget https://storage.googleapis.com/ravens-assets/sweeping-piles.zip
每个任务的 MDP 公式使用具有以下结构的转换:
观察:原始 RGB-D 图像和相机参数(姿势和内参)。
动作:原语函数(由机器人调用)和参数。
奖励:成功回合的总奖励和应为 1。
信息:物体的 6D 姿势、尺寸和颜色。