Históricamente, ROS se ha desarrollado sobre Ubuntu, confiando en las distribuciones como una base estable para proporcionar herramientas (p. ej., GCC, CMake, Python, etc.) y bibliotecas (p. ej., Boost, Eigen, PCL) y siguiendo sus ciclos de lanzamiento (un Distributed anualmente, LTS cada dos años). Esta sinergia se ha desarrollado enormemente durante más de 15 años y ha visto crecer enormemente el proyecto y la comunidad detrás de él.
Sin embargo, estar atado a una distribución de Linux específica presenta varias dificultades. Desarrollar para múltiples distribuciones de ROS puede ser un desafío porque cada una de ellas está asociada con una distribución de Ubuntu. Este desafío aumenta especialmente para los novatos de ROS que ni siquiera están familiarizados con Linux. Del mismo modo, desarrollar para ROS en Windows o macOS nunca es una experiencia agradable.
En esta publicación de blog, describiremos cómo configurar un entorno de desarrollo de ROS independientemente del sistema operativo utilizado.usar paso múltiple, un administrador de máquinas virtuales de Ubuntu, hace que sea más fácil que nunca generar rápidamente una VM completa con Ubuntu. Lo hemos hecho tan fácil que generar una VM con ROS preinstalado requiere solo una línea de comando. ¿podemos?
Tabla de Contenidos
paso múltiple
El primer paso en nuestro viaje es instalar Multipass.Si bien resumimos las instrucciones de instalación a continuación linuxpuede encontrar instrucciones equivalentes para ventanas y sistema de manzana sobre la documentación.
En Linux, Multipass actúa como paquete instantáneo Permite su instalación en muchas distribuciones de Linux. Para instalarlo, presione el siguiente comando en la Terminal:
sudo snap install multipass
Eso es todo, hemos terminado.
$ multipass version
multipass 1.11.0
multipassd 1.11.0
Generar la primera máquina virtual
Ahora que Multipass está instalado, podemos iniciar nuestra primera VM. Si bien el proceso de instalación varía según el sistema operativo del host, los siguientes procedimientos deben ejecutarse sin importar dónde se encuentre.
Como ejemplo práctico, nos ponemos en el escenario de desarrollar para ROS 2 Humble, utilizando así Ubuntu 22.04. Para ello, ingresaremos:
multipass launch 22.04 --name humble-vm
Después de presionar enter, el comando girará un poco mientras configura la VM. Después de unos momentos, aparecerá un mensaje como «Iniciado: humilde-vm». Nuestra máquina virtual Ubuntu está lista, usémosla.
Para conectarse a nuestra nueva máquina virtual, nuevamente es muy simple. Escriba en la terminal:
$ multipass shell humble-vm
ubuntu@humble-vm:~$
¡Ahora mismo, aquí estamos!
ubuntu@humble-vm:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.2 LTS
Release: 22.04
Codename: jammy
Iniciamos una máquina virtual Ubuntu 22.04 después de solo tres líneas de comando. Sin embargo, tenga en cuenta que las máquinas virtuales multipaso están muy limitadas de forma predeterminada. Usan solo un núcleo junto con una memoria y cinco espacios en disco. Esto es muy limitado para un entorno de desarrollo ROS 2 adecuado.Por supuesto, podemos cambiar todo esto cuando iniciamos inicialmente la máquina virtual. Espectáculos de documentación O incluso ejecute el siguiente comando después del hecho:
$ multipass stop humble-vm
$ multipass set local.humble-vm.cpus=4
$ multipass set local.humble-vm.disk=50G
$ multipass set local.humble-vm.memory=8G
$ multipass start humble-vm
En este punto, podemos seguir el Guía de instalación humilde de ROS 2 Comience a desarrollar para ROS 2 como de costumbre. Pero si bien podemos seguir adelante y pasar por la molestia de instalar ROS 2 Humble, les prometo una sola línea para configurar un nuevo entorno de desarrollo de ROS, ¿no?
Primera línea del entorno de desarrollo de ROS
Multipass en sí mismo ya es muy conveniente. Tres líneas de comando y nos encontramos en una nueva máquina virtual Ubuntu. Pero vayamos un paso más allá, ¿de acuerdo? ¿Qué tal tres líneas de comando, nos encontramos en un nuevo entorno de desarrollo de ROS?
Blueprint multicanal
Para ello, desarrollamos un Blueprint multicanal Humilde sobre ROS 2. Un blueprint es un archivo de configuración que detalla un conjunto de parámetros e instrucciones que impulsan la configuración de un entorno personalizado. Todos los entornos Multipass se pueden enumerar de la siguiente manera:
$ multipass find
Image Aliases Version Description
…
core22 20230119 Ubuntu Core 22
…
22.04 jammy,lts 20230302 Ubuntu 22.04 LTS
…
docker 0.4 A Docker environment with Portainer and related tools
…
ros-noetic 0.1 A development and testing environment for ROS Noetic.
ros2-humble 0.1 A development and testing environment for ROS 2 Humble.
Entre otras cosas, encontraremos una imagen Core22, la imagen 22.04 que usamos anteriormente, y un entorno listo para Docker y los entornos que nos interesan ahora, un entorno ROS Noetic y ROS 2 Humble. Veamos cómo funciona esto.
Primero, aclaremos un poco las cosas. Pararemos, eliminaremos y limpiaremos nuestra máquina virtual anterior:
$ multipass stop humble-vm
$ multipass delete --purge humble-vm
plano de ROS
Comenzando desde cero, ahora iniciaremos nuestra Humble VM de ROS 2 utilizando el entorno predefinido:
multipass launch ros2-humble --name humble-vm
Una vez más, esto lleva algo de tiempo. A partir de ese momento, no solo generamos una VM de Ubuntu, sino que también instalamos automáticamente ROS 2 Humble.
Es posible que vea el siguiente mensaje,
Error al iniciar: Ocurrieron los siguientes errores:
Tiempo de espera a la espera de que se complete la inicializaciónSimplemente significa que el tiempo de espera interno multicanal ha expirado. La VM en realidad continuará con su configuración en segundo plano y podrá usarla. Para suprimir este mensaje, establezca un temporizador mayor, por ejemplo, `–timeout 600
Una vez hecho esto, podemos conectarnos a la VM como se mencionó anteriormente,
$ multipass shell humble-vm
ubuntu@humble-vm:~$
Inteligentemente, no solo está instalado ROS 2, sino que el entorno ROS 2 también está preconfigurado. Una vez conectado a la máquina virtual, podemos emitir por ejemplo:
ubuntu@humble-vm:~$ echo $ROS_DISTRO
humble
Instalé ROS 2 Humble, junto con las herramientas comunes de ROS 2, obtuve el entorno ROS 2, inicialicé y actualicé rosdep, habilité el autocompletado de colcon, etc. Además, la VM está configurada para usar 2 núcleos, 4 GB de memoria y 40 GB de espacio en disco. ¡Listo para ir!
Si aún no ha cambiado a ROS 2, hemos visto un entorno ROS Noetic en la lista de entornos personalizados disponibles. De manera similar a lo que acabamos de hacer, puede iniciar una máquina virtual ROS Noetic con una sola línea de comando y estar listo para el desarrollo en poco tiempo.
Consejos profesionales
Antes de permitirle explorar el nuevo flujo de trabajo de desarrollo, quiero compartir algunos consejos para que su manejo diario de VM sea fluido.
montar carpeta local
Como parte de nuestro flujo de trabajo de desarrollo, es posible que deseemos montar una carpeta local en nuestra máquina virtual. Para ello, no podría ser más sencillo:
multipass mount /some/local/path humble-vm:/some/remote/path
También podemos hacer esto directamente al inicio:
multipass launch ros2-humble --name humble-vm --mount /some/local/path:/some/instance/path
añadir clave ssh
El segundo truco es agregar nuestras claves SSH a la VM para que podamos acceder a ella mediante SSH. Para ello, copiaremos la clave pública a la VM:
multipass exec humble-vm -- bash -c "echo `cat ~/.ssh/.pub` >> ~/.ssh/authorized_keys"
Tenga en cuenta que también podemos recuperar la clave de GitHub:
multipass exec humble-vm -- bash -c “curl https://github.com/.keys | tee -a ~/.ssh/authorized_keys”
Para conectarnos de forma remota, primero averigüemos la dirección IP de la máquina virtual:
$ multipass info humble-vm
Name: humble-vm
State: Running
IPv4: 10.87.167.28
Release: Ubuntu 22.04.2 LTS
Image hash: 345fbbb6ec82 (Ubuntu 22.04 LTS)
CPU(s): 2
Load: 0.00 0.06 0.09
Disk usage: 6.5GiB out of 38.6GiB
Memory usage: 243.4MiB out of 3.8GiB
Mounts: --
Con esto, conectemos:
$ ssh [email protected]
ubuntu@humble-vm:~$
También podemos convertirlo en una sola línea:
$ ssh ubuntu@$(multipass list --format csv | awk -F, '$1=="humble-vm"{print $3}')
ubuntu@humble-vm:~$
Tenga en cuenta que habilitar SSH es la base para las siguientes indicaciones.
ejecutar la aplicación de gráficos
Dado que Linux y macOS ejecutan X de forma predeterminada, para iniciar una aplicación gráfica desde una máquina virtual, todo lo que tenemos que hacer es configurar una sesión SSH de reenvío de X:
ssh -X [email protected]
Vamos a intentarlo. Ejecute el siguiente comando:
ubuntu@humble-vm:~$ ign gazebo
(Encendido) Gazebo debe iniciar y mostrar el siguiente asistente:
Para lectores en Windows, deberá instalar un servidor X y exportar la variable de entorno «DISPLAY».todos estos estan en documentación en línea.
Ssh remoto de VSCode
Si su IDE de elección es vs código, estas de suerte. De hecho, entre los muchos complementos que proporciona, VSCode tiene un complemento «remote-ssh» que, como su nombre indica, nos permite, hacer algo de desarrollo remotoLuego podemos escribir código directamente en el entorno virtual desde la comodidad de nuestro IDE.
Primero, asegúrese de haber instalado el complemento desde la pestaña Extensiones de VSCode,
o use el siguiente comando en la terminal:
code --install-extension ms-vscode-remote.vscode-remote-extensionpack
Ahora podemos iniciar VSCode y abrir una conexión remota descrito en la documentación O haz ambas cosas directamente desde la terminal:
code --folder-uri vscode-remote://[email protected]/home/ubuntu
Deberíamos ver una ventana de VSCode abierta que apunta a $HOME de la VM,
en conclusión
Vimos en este blog que no importa qué sistema operativo esté ejecutando su máquina, puede instalar fácilmente Multipass y usarlo para iniciar no solo máquinas virtuales Ubuntu, sino también máquinas virtuales listas para ROS. Este flujo de trabajo de desarrollo brinda una gran flexibilidad, lo que le permite trabajar en múltiples distribuciones de ROS simultáneamente. También permite flujos de trabajo aislados y reproducibles, que son invaluables cuando se enfrentan a un desarrollo de software complejo.
Si está ejecutando Linux, es posible que también le interesen los contenedores en lugar de las máquinas virtuales completas.Consulte nuestra publicación anterior que detalla cómo configurar un contenedor de desarrollo ROS 2 usando Xinda larga: «Instalación de ROS 2 Humble en Ubuntu 20.04 o 18.04 usando contenedores LXD».
Y visite ubuntu.com/robotics para ver todas nuestras actividades de robótica.
Este artículo apareció originalmente en artivis.github.io.