OpenAI Gym + ROS + Gazebo: entrenando un robot independiente en casa. Parte 1

En los últimos años, hemos sido testigos de la introducción de tecnologías de inteligencia artificial en nuestra vida cotidiana, desde aspiradoras robóticas hasta drones no tripulados. Todos ellos, controlados por inteligencia artificial, ya son comunes para nosotros. Pero a pesar de esto, el proceso de desarrollo, desde el diseño hasta la implementación, lleva años y no es barato. Además, los algoritmos de aprendizaje automático requieren grandes datos y no hay garantía de que todo funcione a la larga.

Tarde o temprano, cada desarrollador llega a la conclusión de que antes de crear un robot real, debe probar el concepto en una simulación, depurar todos los sistemas y, al final, comprender si se ha elegido la ruta de desarrollo.

El Dr. Andrew Howard tuvo pensamientos similares cuando él, con su estudiante Nathon Koenig, comenzó en 2002 el desarrollo de un simulador 3D Gazebo en la Universidad del Sur de California. El concepto de un simulador de alta precisión surgió debido a la necesidad de probar robots en varias condiciones exteriores difíciles. En las primeras etapas de desarrollo, este enfoque ahorra tiempo y dinero en la compra del equipo necesario.

En esta serie de artículos, me gustaría compartir mi experiencia en simular y entrenar un vehículo no tripulado con una sola cámara ordinaria como sensor.



Hola a todos Soy un Master of Science (Computer Science, MS) en Informática Aplicada en la Universidad de Ciencias Aplicadas de Berlín (HTW-Berlin).

Como parte de mi curso, trabajo en métodos para entrenar robots autónomos en un entorno simulado usando ROS [1], Gazebo [2] y OpenAI Gym [3]. El trabajo de este curso se divide en dos partes.

La primera parte está dedicada al desarrollo de un marco que simplificaría la prueba de los algoritmos de aprendizaje por refuerzo (entrenamiento con refuerzo) en varios robots autónomos dentro de la simulación Gazebo.

En la segunda parte, me concentraré en la implementación del algoritmo para la conducción autónoma. Estaré trabajando en esto para el próximo semestre, por lo que este y los próximos artículos se centrarán principalmente en la implementación del entorno OpenAI Gym para Gazebo. El aprendizaje de refuerzo (RL) en sí mismo se verá afectado superficialmente.

El código completo del proyecto se puede encontrar aquí .

Requisitos del sistema


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

Utilizaremos la versión ROS de Melodic. Esta versión tiene varias limitaciones y la más importante de ellas es Ubuntu 18 (también es posible instalar ROS en Windows WSL y Ubuntu Headless, pero más sobre eso en otro momento). Además, ROS todavía no es compatible con Python 3.

Primera parte: Introducción


En esta parte piloto, hablaré brevemente sobre las tecnologías que se utilizarán para crear el entorno. También describiré el proceso de instalación y al final lanzaremos una simulación completa, que se puede controlar a través de la API de Gym.

ROS: "no reinventes la rueda"


Robot Operating System (ROS) es un marco para la programación de robots. ROS es un "pegamento de software" que permite a los desarrolladores centrarse en su tarea específica. Aunque ROS no es un sistema operativo, proporciona servicios como abstracción de hardware, administración de dispositivos de bajo nivel, implementación de funciones de uso común, transmisión de mensajes entre procesos y administración de paquetes (complementos).

ROS está diseñado como un sistema débilmente acoplado en el que un proceso llamado nodo debe ser responsable de una tarea. Los nodos se comunican entre sí mediante mensajes que pasan a través de canales lógicos llamados temas. Cada nodo puede enviar o recibir datos de otro nodo utilizando el patrón de publicación - suscripción

Para ROS, ya se han implementado controladores que permiten trabajar de una sola manera con muchos dispositivos, como controladores, GPS, cámaras, telémetros láser, etc.

Y así, instale ROS Melodic ( instrucciones 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 alguna razón, el paquete de instalación completo no incluye algunos paquetes necesarios. Instalarlos por separado:

 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 

No nos detendremos en ellos en detalle. Son necesarios para controlar nuestro robot, que se discutirá más adelante.

Gazebo


Gazebo es un simulador 3D dinámico de código abierto desarrollado por Open Source Robotic Foundation e interactúa bastante estrechamente con ROS. Gazebo le permite simular robots de forma precisa y eficiente tanto en condiciones interiores como exteriores difíciles.

El simulador consiste en el servidor gzserver , que participa en el cálculo de la física, las colisiones y la simulación de sensores. Los clientes pueden conectarse al servidor, por ejemplo, gzclient (para el escritorio) y gzweb (para el navegador). Ellos son los que representan los modelos.

Todo esto hace posible probar sistemas robóticos complejos en el espacio virtual mucho más rápido y sin riesgo de dañar costosos robots reales.

Gazebo está incluido en el paquete completo de instalación de ROS, por lo que no necesita instalar nada más. Para la configuración sin cabeza se requiere gzweb . Hablaré de él en las siguientes partes.

Gimnasio OpenAI


OpenAI es una compañía de investigación de inteligencia artificial sin fines de lucro cofundada por Ilon Max.
OpenAI Gym es una biblioteca de Python que proporciona una API para desarrollar y comparar algoritmos RL con una gran cantidad de entornos virtuales y una API común. El gimnasio ya tiene muchos entornos preparados, incluidos los juegos de Atari.

openai_ros


Mi proyecto se basa en el paquete openai_ros . Este paquete implementa la arquitectura propuesta por el equipo de The Construct . Los chicos de Construct han desarrollado un marco común que implementa la API necesaria para administrar la simulación y describe una API para integrar Gazebo en Gym, que requiere una implementación mínima. La estructura propuesta consta de tres capas lógicas (en realidad puede usar cualquier número), la más baja de ellas es otro "pegamento" que conecta la API del gimnasio con Gazebo. Más sobre esto en la siguiente parte, cuando analizaremos el código.

Poniendo todo junto


Primero necesitamos crear un directorio de trabajo para catkin. catkin es un sistema de automatización de compilación como CMake, que se incluye por defecto en el paquete de instalación de ROS:

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

y clonar los paquetes ROS necesarios.

Mit racecar


Necesitamos un modelo de robot desarrollado por MIT con todos los 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


Bueno, en realidad, el proyecto en sí

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

Luego, necesita compilar todos estos paquetes

 cd ~/catkin_ws catkin_make 

También necesita instalar todas las bibliotecas de Python necesarias.

 pip install -U numpy tensorflow gym keras 

Simulación de carrera


Para ejecutar cualquier paquete ROS, primero debemos cargar en la sesión de terminal actual todos los paquetes ROS que compilamos:

 source ~/catkin_ws/devel/setup.bash 

Ahora podemos ejecutar la simulación del robot Racecar:

 roslaunch racecar_gazebo racecar_tunnel.launch 

Este comando lanzará el servidor maestro ROS, el servidor Gazebo junto con su interfaz de usuario (en el escritorio), cargará el robot y el mundo para ello.

Captura de pantalla

Encabezado de spoiler


Y lo mismo en el segundo terminal para nuestro algoritmo RL:

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

Este equipo lanzará nuestro paquete neuroracer_gym_rl , que implementa un algoritmo simple de Q-Learning en nuestro entorno de gimnasio. Lo analizaremos en la siguiente parte.

Aquellos que no pueden esperar pueden encontrar el código fuente aquí . Mirando hacia el futuro, diré que después de varios días de entrenamiento en un servidor con una tarjeta GeForce GTX 1080 Ti 11GB RAM, este algoritmo simple realmente no aprendió nada. En la siguiente parte enumeraré las posibles razones, pero ahora puedes experimentar con tu implementación.

Conclusión


Y así, tenemos una simulación completamente funcional de un automóvil autónomo y una plantilla de algoritmo RL lista para usar. En la siguiente parte, analizaremos openai_ros con más detalle y discutiremos los sensores instalados en el robot, luego mostraré cómo implementar mis algoritmos y qué problemas pueden surgir durante el entrenamiento.

PD: Esta es mi primera experiencia escribiendo un artículo. Por lo tanto, no dude en escribir si encuentra errores o si tiene ideas o críticas constructivas. Intentaré tener esto en cuenta en las siguientes partes.

Referencias


[1] (M. Quigley, K. Conley, B. Gerkey, J. Faust, T. Foote, J. Leibs, R. Wheeler y AY Ng. Ros: un sistema operativo de robot de código abierto. En el taller de ICRA sobre software de código abierto, volumen 3, página 5. Kobe, Japón, 2009.

[2] NP Koenig y A. Howard. Diseñe y use paradigmas para gazebo, un simulador multi-robot de código abierto. En IROS, volumen 4, páginas 2149–2154 . Citeseer, 2004.

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

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


All Articles