OpenAI Gym + ROS + Gazebo: treinando um robô autônomo em casa. Parte 1

Nos últimos anos, testemunhamos a introdução de tecnologias de inteligência artificial em nossas vidas diárias - de aspiradores de pó robóticos a drones não tripulados. Todos eles, controlados pela inteligência artificial, já são comuns para nós. Mas, apesar disso, o processo de desenvolvimento, do design à implementação, leva anos e não é barato. Além disso, os algoritmos de aprendizado de máquina exigem big data e não há garantia de que tudo funcione a longo prazo.

Mais cedo ou mais tarde, todo desenvolvedor chega à conclusão de que, antes de criar um robô real, é necessário testar o conceito em uma simulação, depurar todos os sistemas e, no final, entender se o caminho de desenvolvimento foi escolhido.

O Dr. Andrew Howard também teve pensamentos semelhantes quando, com sua aluna Nathon Koenig, iniciou em 2002 o desenvolvimento do simulador 3D Gazebo na Universidade do Sul da Califórnia. O conceito de um simulador de alta precisão surgiu devido à necessidade de testar robôs em várias condições externas difíceis. Nos primeiros estágios de desenvolvimento, essa abordagem economiza tempo e dinheiro na compra do equipamento necessário.

Nesta série de artigos, gostaria de compartilhar minha experiência em simular e treinar um veículo não tripulado com apenas uma câmera comum como sensor.



Olá pessoal. Sou mestre em Ciência da Computação na Universidade de Ciências Aplicadas de Berlim (HTW-Berlim).

Como parte do meu curso, trabalho em métodos para treinar robôs autônomos em um ambiente simulado usando ROS [1], Gazebo [2] e OpenAI Gym [3]. Este trabalho do curso está dividido em duas partes.

A primeira parte é dedicada ao desenvolvimento de uma estrutura que simplificaria o teste dos algoritmos de Aprendizado por Reforço (treinamento com reforço) em vários robôs autônomos dentro da simulação do Gazebo.

Na segunda parte, vou me concentrar na implementação do algoritmo para direção autônoma. Vou trabalhar nisso no próximo semestre, portanto, este e os próximos artigos se concentrarão principalmente na implementação do ambiente OpenAI Gym para o Gazebo. A aprendizagem por reforço (PR) será afetada superficialmente.

O código completo do projeto pode ser encontrado aqui .

Requisitos de sistema


  • Ubuntu 18.04 ou Windows WSL Ubuntu 18.04
  • Python 2.7
  • pip
  • CPU ou GPU Tenserflow

Usaremos a versão ROS do Melodic. Esta versão possui várias limitações e a mais significativa delas é o Ubuntu 18 (também é possível instalar o ROS no Windows WSL e no Ubuntu Headless, mas mais nessa outra hora). Além disso, o ROS ainda não suporta Python 3.

Parte Um: Introdução


Nesta parte piloto, falarei brevemente sobre as tecnologias que serão usadas para criar o ambiente. Também descreverei o processo de instalação e, no final, lançaremos uma simulação completa, que pode ser controlada pela API do Gym.

ROS: "não reinvente a roda"


O Robot Operating System (ROS) é uma estrutura para programação de robôs. ROS é uma "cola de software" que permite que os desenvolvedores se concentrem em suas tarefas específicas. Embora o ROS não seja um sistema operacional, ele fornece serviços como abstração de hardware, gerenciamento de dispositivos de baixo nível, implementação de funções comumente usadas, passagem de mensagens entre processos e gerenciamento de pacotes (plug-ins).

O ROS foi projetado como um sistema fracamente acoplado no qual um processo chamado nó deve ser responsável por uma tarefa. Os nós se comunicam usando mensagens que passam por canais lógicos chamados tópicos. Cada nó pode enviar ou receber dados de outro nó usando o padrão de publicação - assinatura

Para o ROS, já foram implementados drivers que permitem trabalhar de maneira única com muitos dispositivos, como controladores, GPS, câmeras, telémetros a laser, etc.

E assim, instale o ROS Melodic ( instruções completas )

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116 sudo apt update sudo apt install ros-melodic-desktop-full sudo rosdep init rosdep update echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc source /opt/ros/melodic/setup.bash 

Por alguma razão, o pacote de instalação completo não inclui alguns pacotes necessários. Instale-os separadamente:

 sudo apt install ros-melodic-ackermann-msgs sudo apt install ros-melodic-effort-controllers sudo apt install ros-melodic-joy sudo apt install ros-melodic-tf2-sensor-msgs 

Não vamos nos deter neles em detalhes. Eles são necessários para controlar nosso robô, que será discutido mais adiante.

Gazebo


O Gazebo é um simulador 3D dinâmico de código aberto desenvolvido pela Open Source Robotic Foundation e interage bastante com o ROS. O Gazebo permite simular com precisão e eficiência os robôs em condições internas e externas difíceis.

O simulador consiste no servidor gzserver , envolvido no cálculo da física, colisões e simulação de sensores. Os clientes podem se conectar ao servidor, por exemplo, gzclient (para a área de trabalho) e gzweb (para o navegador). Eles são os que renderizam os modelos.

Tudo isso torna possível testar sistemas robóticos complexos no espaço virtual muito mais rapidamente e sem risco de danificar robôs reais caros.

O Gazebo está incluído no pacote de instalação completo do ROS, portanto você não precisa instalar mais nada. Para configuração sem cabeça, é necessário o gzweb . Vou falar sobre ele nas seguintes partes.

OpenAI Gym


A OpenAI é uma empresa de pesquisa em inteligência artificial sem fins lucrativos, fundada por Ilon Max.
O OpenAI Gym é uma biblioteca Python que fornece uma API para desenvolver e comparar algoritmos de RL com um grande número de ambientes virtuais e uma API comum. A academia já possui muitos ambientes prontos, inclusive para os jogos da Atari.

openai_ros


Meu projeto é baseado no pacote openai_ros . Este pacote implementa a arquitetura proposta pela equipe do Construct . Os caras do Construct desenvolveram uma estrutura comum que implementa a API necessária para gerenciar a simulação e descreve uma API para integrar o Gazebo ao Gym, exigindo uma implementação mínima. A estrutura proposta consiste em três camadas lógicas (você pode realmente usar qualquer número), a menor delas é outra "cola" que conecta a API do Gym ao Gazebo. Mais sobre isso na próxima parte, quando analisaremos o código.

Juntando tudo


Primeiro, precisamos criar um diretório de trabalho para o catkin. catkin é um sistema de automação de construção como o CMake, que é incluído por padrão no pacote de instalação do ROS:

 cd ~ mkdir catkin_ws cd catkin_ws/ mkdir src cd src/ 

e clone os pacotes ROS necessários.

Mit racecar


Precisamos de um modelo de robô desenvolvido pelo MIT com todos os sensores.

 git clone https://github.com/mit-racecar/racecar.git git clone https://github.com/mit-racecar/racecar-simulator.git 

openai_ros


 git clone https://bitbucket.org/theconstructcore/openai_ros.git 

neuroracer


Bem, na verdade, o próprio projeto

 git clone https://github.com/karray/neuroracer.git 

Em seguida, você precisa compilar todos esses pacotes

 cd ~/catkin_ws catkin_make 

Você também precisa instalar todas as bibliotecas python necessárias.

 pip install -U numpy tensorflow gym keras 

Simulação em execução


Para executar qualquer pacote ROS, primeiro precisamos carregar na sessão atual do terminal todos os pacotes ROS que compilamos:

 source ~/catkin_ws/devel/setup.bash 

Agora podemos executar a simulação do robô Racecar:

 roslaunch racecar_gazebo racecar_tunnel.launch 

Este comando iniciará o servidor mestre do ROS, o servidor Gazebo, juntamente com sua interface do usuário (na área de trabalho), carregará o robô e o mundo para ele.

Captura de tela:

Título de spoiler


E a mesma coisa no segundo terminal do nosso algoritmo RL:

 source ~/catkin_ws/devel/setup.bash roslaunch neuroracer_gym_rl qlearning.launch 

Essa equipe lançará nosso pacote neuroracer_gym_rl , que implementa um algoritmo simples de Q-Learning em nosso ambiente de academia. Vamos analisá-lo na próxima parte.

Quem não pode esperar pode encontrar o código fonte aqui . Olhando para o futuro, direi que, após vários dias de treinamento em um servidor com uma placa de GeForce GTX 1080 Ti de 11 GB de RAM, esse algoritmo simples realmente não aprendeu nada. Na próxima parte, listarei os possíveis motivos, mas agora você pode experimentar sua implementação.

Conclusão


E assim, temos uma simulação totalmente funcional de um carro autônomo e um modelo de algoritmo RL pronto. Na próxima parte, analisaremos o openai_ros com mais detalhes e discutiremos os sensores instalados no robô.Depois disso, mostrarei como implementar meus algoritmos e quais problemas podem surgir durante o treinamento.

PS: Esta é minha primeira experiência escrevendo um artigo. Portanto, não hesite em escrever se encontrar erros ou se tiver idéias ou críticas construtivas. Vou tentar levar isso em consideração nas seguintes partes.

Referências


[1] (M. Quigley, K. Conley, B. Gerkey, J. Faust, T. Foote, J. Leibs, R. Wheeler e AY Ng. Ros: um sistema operacional de robô de código aberto. No workshop da ICRA sobre software de código aberto, volume 3, página 5. Kobe, Japão, 2009.

[2] NP Koenig e A. Howard. Projete e use paradigmas para o gazebo, um simulador de vários robôs de código aberto. No IROS, volume 4, páginas 2149-2154 . Citeseer, 2004.

[3] LPJSJSJTWZ, Greg Brockman, Vicki Cheung. Openai gym, 2016, arXiv: 1606.01540

Source: https://habr.com/ru/post/pt441218/


All Articles