Ravens es una colección de tareas simuladas en PyBullet para aprender manipulación robótica basada en la visión, con énfasis en escoger y colocar. Cuenta con una API similar a un gimnasio con 10 tareas de reordenamiento de mesa, cada una con (i) un oráculo escrito que proporciona demostraciones de expertos (para el aprendizaje por imitación) y (ii) funciones de recompensa que brindan crédito parcial (para el aprendizaje por refuerzo).
(a) inserción de bloque : levante el bloque rojo en forma de L y colóquelo en el dispositivo en forma de L.
(b) colocar rojo en verde : recoge los bloques rojos y colócalos en los cuencos verdes, entre otros objetos.
(c) torres de hanoi : mueva secuencialmente los discos de una torre a otra; solo los discos más pequeños pueden estar encima de los más grandes.
(d) alinear la esquina de la caja : levante la caja de tamaño aleatorio y alinee una de sus esquinas con el marcador en forma de L en la mesa.
(e) pila-bloque-pirámide : apile secuencialmente 6 bloques en una pirámide de 3-2-1 con el orden de los colores del arco iris.
f) cajas-paletizadoras : recoger cajas homogéneas de tamaño fijo y apilarlas en capas transpuestas sobre el palet.
(g) kits de montaje : recoger diferentes objetos y organizarlos en un tablero marcado con las siluetas correspondientes.
(h) cajas de embalaje : recoja cajas de tamaños aleatorios y colóquelas herméticamente en un contenedor.
(i) manipulación de cuerda : reorganizar una cuerda deformable de manera que conecte los dos extremos de un cuadrado de 3 lados.
(j) pilas de barrido : empujar pilas de objetos pequeños hacia una zona de gol marcada en la superficie de la mesa.
Algunas tareas requieren generalizar a objetos invisibles (d,g,h) o secuenciación de varios pasos con retroalimentación de circuito cerrado (c,e,f,h,i,j).
Equipo: este repositorio es desarrollado y mantenido por Andy Zeng, Pete Florence, Daniel Seita, Jonathan Tompson y Ayzaan Wahid. Este es el repositorio de referencia del artículo:
Sitio web del proyecto • PDF • Conferencia sobre aprendizaje de robots (CoRL) 2020
Andy Zeng, Pete Florence, Jonathan Tompson, Stefan Welker, Jonathan Chien, Maria Attarian, Travis Armstrong,
Ivan Krasin, Dan Duong, Vikas Sindhwani, Johnny Lee
Abstracto. La manipulación robótica se puede formular como la inducción de una secuencia de desplazamientos espaciales: donde el espacio que se mueve puede abarcar un objeto, parte de un objeto o un efector final. En este trabajo, proponemos Transporter Network, una arquitectura de modelo simple que reorganiza características profundas para inferir desplazamientos espaciales a partir de información visual, que puede parametrizar las acciones del robot. No hace suposiciones de objetividad (por ejemplo, posturas canónicas, modelos o puntos clave), explota las simetrías espaciales y es mucho más eficiente que nuestras alternativas comparadas en el aprendizaje de tareas de manipulación basadas en la visión: desde apilar una pirámide de bloques hasta armar kits con objetos invisibles; desde manipular cuerdas deformables hasta empujar montones de objetos pequeños con retroalimentación de circuito cerrado. Nuestro método puede representar distribuciones de políticas multimodales complejas y se generaliza a tareas secuenciales de varios pasos, así como a 6DoF de selección y colocación. Los experimentos en 10 tareas simuladas muestran que aprende más rápido y se generaliza mejor que una variedad de líneas de base de un extremo a otro, incluidas políticas que utilizan poses de objetos reales. Validamos nuestros métodos con hardware en el mundo real.
Paso 1. Recomendado: instale Miniconda con Python 3.7.
curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -u
echo $' n export PATH=~/miniconda3/bin:"${PATH}" n ' >> ~ /.profile # Add Conda to PATH.
source ~ /.profile
conda init
Paso 2. Cree y active el entorno Conda, luego instale los paquetes GCC y 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
Paso 3. Recomendado: instale la aceleración de GPU con NVIDIA CUDA 10.1 y cuDNN 7.6.5 para Tensorflow.
./oss_scripts/install_cuda.sh # For Ubuntu 16.04 and 18.04.
conda install cudatoolkit==10.1.243 -y
conda install cudnn==7.6.5 -y
pip
puraComo ejemplo para Ubuntu 18.04:
./oss_scipts/install_cuda.sh # For Ubuntu 16.04 and 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}
Paso 1. Genere datos de capacitación y pruebas (guardados localmente). Nota: elimine --disp
para el modo sin cabeza.
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
Para ejecutar con memoria compartida, abra una ventana de terminal separada y ejecute python3 -m pybullet_utils.runServer
. Luego agregue el indicador --shared_memory
al comando anterior.
Paso 2. Entrene un modelo, por ejemplo, el modelo Transporter Networks. Los puntos de control del modelo se guardan en el directorio de checkpoints
. Opcional: puede salir del entrenamiento prematuramente después de 1000 iteraciones para pasar al siguiente paso.
python ravens/train.py --task=block-insertion --agent=transporter --n_demos=10
Paso 3. Evaluar un agente de Transporter Networks utilizando el modelo entrenado para 1000 iteraciones. Los resultados se guardan localmente en archivos .pkl
.
python ravens/test.py --assets_root=./ravens/environments/assets/ --disp=True --task=block-insertion --agent=transporter --n_demos=10 --n_steps=1000
Paso 4. Trazar e imprimir los resultados.
python ravens/plot.py --disp=True --task=block-insertion --agent=transporter --n_demos=10
Opcional. Realice un seguimiento de las pérdidas de entrenamiento y validación con Tensorboard.
python -m tensorboard.main --logdir=logs # Open the browser to where it tells you to.
Descargue nuestros conjuntos de datos de prueba y entrenamiento generados y modelos previamente entrenados.
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
La formulación del MDP para cada tarea utiliza transiciones con la siguiente estructura:
Observaciones: imágenes RGB-D sin procesar y parámetros de la cámara (pose e intrínsecos).
Acciones: una función primitiva (que será llamada por el robot) y parámetros.
Recompensas: la suma total de recompensas por un episodio exitoso debe ser =1.
Información: poses, tamaños y colores de objetos 6D.