Por razones que serán explicadas más adelante en este tutorial, no es requerida una instalación base de ROS en tu sistema, salvo que se lo pida expresamente. Para que entiendas rápido como esto es posible con Docker, se recomienda que lo utilices en este tutorial online.
Instalando Docker
Antes de comenzar con este tutorial completa la instalación descrita en las instrucciones de instalación de Docker. Las instrucciones de instalación están disponibles para múltiples sistemas operativos, incluyendo Ubuntu, Mac OS x, Debian, Fedora y hasta Microsoft Windows. ¯\_(ツ)_/¯ . siendo esta la mejor forma de usar ROS en W10.
Nota que para las distros más recientes la instalación se reduce a un comando wget. Deberias tambien agregar tu usuario al grupo de docker en tu sistema para así evitar tener que usar sudo cuando ejecutas el comando docker.
Instalando Docker en Ubuntu
Recomendación
Les recomendamos seguir el tutorial que esta en la página oficial de Docker, que seguramente se encuentre mas actualizado y el presente es una traducción del mismo al 10/02/21.
Requisitos
Para instalar Docker es necesario como mínimo 4 GB de memoria, 10 GB de disco, procesador 64 bits y alguna de estas versiones:
Ubuntu Groovy 20.10 Ubuntu Focal 20.04 (LTS) Ubuntu Bionic 18.04 (LTS) Ubuntu Xenial 16.04 (LTS)
Docker es soportado por las siguientes arquitecturas x86_64 (o amd64), armhf y arm64.
Proceso
Desinstale versiones viejas
$ sudo apt-get remove docker docker-engine docker.io containerd runc
Actualice
sudo apt-get update
Configure el repositorio
sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common
Agregue la llave oficial de Docker
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Mediante la búsqueda de los últimos ocho caracteres de la huella verifique que ahora tiene la llave con la huella 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 .
$ sudo apt-key fingerprint 0EBFCD88
Instalación
$ sudo apt-get update $ sudo apt-get install docker-ce docker-ce-cli containerd.io
Verificación
Verificamos que Docker este instalado de forma correcta corriendo la imagen de hello-world.
$ sudo docker run hello-world
Instalando Docker en W10
Partimos desde aquí que es una configuración bastante al límite..
Configuración previa
Paso 1
Abrimos la powershell como administrador y ejecutamos..
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
Paso 2
En la misma powershell
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
Paso 3
En la misma powershell
wsl --set-default-version 2
Paso 4
Y ahora vamos y descargamos la imagen de ubuntu 16.04 que en la tienda de apps de W10 esta simplemente como ubuntu..
Instalando docker en w10
Descargamos [https://hub.docker.com/editions/community/docker-ce-desktop-windows/ | Docker para windows]
Usando las imágenes de ROS en Docker
Pulling (jalar) imágenes ROS
AHora que tienes Docker instalado, hagamos un pull down de una imagen de un contenedor ROS:
docker pull ros
Esto jala o descarga o pulea la última imagen etiquetada de ROS desde Docker Hub a tu maquina local. Especificamente, la imagen llamada "ros" está registrada en las Imagenes del Repositorio oficial de ROS en Docker.
Observa que en el repositorio oficial encontrarás otras imágenes etiquetadas que te permitirán seleccionar paquetes y entornos específicos para la situación que necesites. Las etiquetas se construyen entre sí como los respectivos dependencias entrelazan los metapaquetes ROS. Si tu haces un pull de:
docker pull ros:noetic-robot
Tu localmente también poseerás la imágenes etiquetadas "noetic-ros-core" y "noetic-ros-base".
Corriendo contenedores ROS
Ahora que tiene la imágen ROS descargada, tu puede hacer correr el contenedor mediante::
docker run -it ros
Esto te llevara a una sesion interactiva de la CLI donde el contenedor estará corriendo.. Desde aquí es básicamente como si corrieras una terminal en una máquina separada de tu maquina base. Ahora puede correr el comando roscore y tu rosmaster se iniciara.
En una nueva terminal en tu máquina base encontrarás el nombre del contenedor que estas corriendo mediente:
$ docker ps -l
Usando el nombre del contenedor como ID, que cuando escribimos este tutorial a Docker se le ocurrió asignar el string "nostalgic_morse", podemos llamar una sesion adicional de bash del mismo contenedor corriendo:
docker exec -it nostalgic_morse bash
Una vez dentro, deberemos configurar nuestro entorno. La mejor forma de realizar esto es usando la secuencia de código entrypoint incluida en la imágen docker:
source ros_entrypoint.sh
Si corres el comando docker pull ros, obtendrás una instalación ROS 2 (dashing, foxy, etc.), prueba:
ros2 topic list
Si descargaste un contenedor ROS1 Docker etiquetado (noetic, kinetic, etc.) prueba:
roscore
Deteniendo contenedores ROS
Para detener los contenedores solo debes detener el proceso original creado por el comando docker run que ejecutaste en un principio y podremos volver a la terminal donde está corriendo el roscore y mediante un ctrl-c detener el proceso ROS y entonces salir a laesta terminal bash. Tambien puedes usar la interfaz de línea de comando de Docker para comunicarle al demonio para o remover el contenedor de forma directa. En los documentos stop y rm encontraras mas detalles.