Ravens é uma coleção de tarefas simuladas em PyBullet para aprender manipulação robótica baseada em visão, com ênfase em escolher e posicionar. Ele apresenta uma API semelhante a uma academia com 10 tarefas de reorganização de mesa, cada uma com (i) um oráculo com script que fornece demonstrações especializadas (para aprendizagem por imitação) e (ii) funções de recompensa que fornecem crédito parcial (para aprendizagem por reforço).
(a) inserção do bloco : pegue o bloco vermelho em forma de L e coloque-o no acessório em forma de L.
(b) coloque vermelho em verde : pegue os blocos vermelhos e coloque-os nas tigelas verdes entre outros objetos.
(c) torres de Hanói : mover discos sequencialmente de uma torre para outra - apenas discos menores podem ficar em cima dos maiores.
(d) alinhar-caixa-canto : pegue a caixa de tamanho aleatório e alinhe um de seus cantos com o marcador em forma de L no tampo da mesa.
(e) pilha-blocos-pirâmide : empilhe sequencialmente 6 blocos em uma pirâmide de 3-2-1 com ordem das cores do arco-íris.
(f) caixas-paletização : pegar caixas homogêneas de tamanho fixo e empilhá-las em camadas transpostas sobre o palete.
(g) kits de montagem : pegar diversos objetos e arrumá-los em um tabuleiro marcado com as silhuetas correspondentes.
(h) caixas de embalagem : pegue caixas de tamanhos aleatórios e coloque-as firmemente em um recipiente.
(i) corda de manipulação : reorganize uma corda deformável de modo que ela conecte as duas extremidades de um quadrado de 3 lados.
(j) varrer pilhas : empurrar pilhas de pequenos objetos para uma zona alvo marcada no tampo da mesa.
Algumas tarefas requerem generalização para objetos invisíveis (d,g,h) ou sequenciamento de várias etapas com feedback de circuito fechado (c,e,f,h,i,j).
Equipe: este repositório é desenvolvido e mantido por Andy Zeng, Pete Florence, Daniel Seita, Jonathan Tompson e Ayzaan Wahid. Este é o repositório de referência do artigo:
Site do Projeto • PDF • Conferência sobre Aprendizagem de Robôs (CoRL) 2020
Andy Zeng, Pete Florence, Jonathan Tompson, Stefan Welker, Jonathan Chien, Maria Attarian, Travis Armstrong,
Ivan Krasin, Dan Duong, Vikas Sindhwani, Johnny Lee
Resumo. A manipulação robótica pode ser formulada como induzindo uma sequência de deslocamentos espaciais: onde o espaço que está sendo movido pode abranger um objeto, parte de um objeto ou efetor final. Neste trabalho, propomos a Rede Transporter, uma arquitetura de modelo simples que reorganiza características profundas para inferir deslocamentos espaciais a partir de informações visuais – o que pode parametrizar as ações do robô. Ele não faz suposições de objetividade (por exemplo, poses canônicas, modelos ou pontos-chave), explora simetrias espaciais e é muito mais eficiente em termos de amostragem do que nossas alternativas de referência no aprendizado de tarefas de manipulação baseadas na visão: desde empilhar uma pirâmide de blocos até montagem de kits com objetos invisíveis; desde a manipulação de cordas deformáveis até o empurrar pilhas de pequenos objetos com feedback de circuito fechado. Nosso método pode representar distribuições de políticas multimodais complexas e generalizar para tarefas sequenciais de várias etapas, bem como pick-and-place 6DoF. Experimentos em 10 tarefas simuladas mostram que ele aprende mais rápido e generaliza melhor do que uma variedade de linhas de base de ponta a ponta, incluindo políticas que usam poses de objetos reais. Validamos nossos métodos com hardware no mundo real.
Passo 1. Recomendado: instale o Miniconda com 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
Etapa 2. Crie e ative o ambiente Conda e instale os pacotes GCC e 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
Etapa 3. Recomendado: instale a aceleração de GPU com NVIDIA CUDA 10.1 e 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
puroComo exemplo 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}
Etapa 1. Gere dados de treinamento e teste (salvos localmente). Nota: remova --disp
para o modo sem cabeça.
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 executar com memória compartilhada, abra uma janela de terminal separada e execute python3 -m pybullet_utils.runServer
. Em seguida, adicione o sinalizador --shared_memory
ao comando acima.
Etapa 2. Treine um modelo, por exemplo, modelo Transporter Networks. Os pontos de verificação do modelo são salvos no diretório checkpoints
. Opcional: você pode sair do treinamento prematuramente após 1.000 iterações para pular para a próxima etapa.
python ravens/train.py --task=block-insertion --agent=transporter --n_demos=10
Etapa 3. Avalie um agente da Transporter Networks usando o modelo treinado para 1.000 iterações. Os resultados são salvos localmente em arquivos .pkl
.
python ravens/test.py --assets_root=./ravens/environments/assets/ --disp=True --task=block-insertion --agent=transporter --n_demos=10 --n_steps=1000
Etapa 4. Plote e imprima os resultados.
python ravens/plot.py --disp=True --task=block-insertion --agent=transporter --n_demos=10
Opcional. Acompanhe perdas de treinamento e validação com o Tensorboard.
python -m tensorboard.main --logdir=logs # Open the browser to where it tells you to.
Baixe nossos conjuntos de dados de treinamento e teste gerados e modelos pré-treinados.
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
A formulação do MDP para cada tarefa utiliza transições com a seguinte estrutura:
Observações: imagens RGB-D brutas e parâmetros de câmera (pose e intrínsecos).
Ações: uma função primitiva (a ser chamada pelo robô) e parâmetros.
Recompensas: a soma total das recompensas por um episódio de sucesso deve ser =1.
Informações: poses 6D, tamanhos e cores de objetos.