En esta publicación veremos cómo la Raspberry Pi Pico puede hablar de forma nativa con un gráfico ROS2 usando micro-ROS. Configuraremos un proyecto en VSCode, lo compilaremos y lo subiremos al microcontrolador. Por lo tanto, asumimos que está algo familiarizado con Desarrollo ROS2 y VSCode.
¿Qué es todo esto?
Ejecutando ROS2 en microcontroladores.
El Raspberry Pi Pico
El Raspberry Pi Pico, anunciado a finales de enero de 2021, es la versión más reciente de la Raspberry Pi Foundation que recibió mucha atención (una búsqueda rápida en Google y / o Youtube lo convencerá). Y eso es por una buena razón. En comparación con sus conocidos predecesores, esta nueva placa se diferencia en dos aspectos principales: es un en casa hardware abierto diseñado microcontrolador! Sí, el chip en sí está diseñado por los ingenieros de Pi y es completamente de hardware abierto. Como es habitual con la base Pi, es increíblemente asequible a solo 4 $.
Los detalles sobre la placa en sí, las diferencias entre microprocesador y microcontrolador, el 101 para comenzar o qué puede hacer el Pi Pico; todo eso está más allá del alcance de esta publicación. Pero te recomiendo encarecidamente que le eche un vistazo, ya sea que esté familiarizado con los microcontroladores o no.
micro-ROS
En el ámbito ROS (1), los microcontroladores siempre han sido ciudadanos de segunda clase. No pueden interactuar directamente con el gráfico ROS y los desarrolladores deben confiar en bibliotecas como rosserial. Pero ROS2 es un mundo completamente nuevo y las cosas están cambiando.
> micro-ROS coloca ROS 2 en microcontroladores, convirtiéndolos en participantes de primera clase del entorno ROS 2.
los micro-ROS proyecto es un esfuerzo liderado por grandes nombres industriales como Bosch, eProsima, Fiware Foundation, en particular a través de la OFERA Proyecto H2020, y una gran cantidad de socios y colaboradores, incluidos, por ejemplo, Amazon y Canonical.
¿Así que qué es lo? Es esencialmente una envoltura fina (ver su documento de diseño) en la parte superior de ‘DDS para entornos con restricciones de recursos eXtremely’ (DDS-XRCE), que se ejecuta en un sistema operativo en tiempo real y permite a los microcontroladores ‘hablar’ con un gráfico ROS2 (el hablante / oyente habitual) utilizando un subconjunto optimizado del protocolo DDS. Un bocado. Se basa en una arquitectura de comunicación ‘puenteada’ con un ‘intermediario’ llamado ‘Agente micro-ROS‘. El agente está a cargo de la interfaz entre el gráfico ROS2 y uno o varios dispositivos micro-ROS.
Se pueden encontrar más detalles en el sitio web de micro-ROS incluyendo cómo se compara / difiere de rosserial (ver aquí y aquí).
Empezando
Muy bien, ahora que hemos aclarado un par de términos, comencemos, paso a paso, con el micro-ROS oficial en Raspberry Pi Pico. ejemplo disponible en github. Tenga en cuenta que para este tutorial estoy ejecutando Ubuntu 20.04 con el Ajuste de VSCode.
Si aún no está ejecutando Ubuntu 20.04, podría considerar usar un contenedor LXD. Puede consultar nuestra publicación anterior ‘Desarrollo ROS con LXC’ para ayudarlo a comenzar a configurar el contenedor.
Instalación de dependencias
Comencemos simplemente instalando las dependencias necesarias,
sudo apt install build-essential cmake gcc-arm-none-eabi libnewlib-arm-none-eabi doxygen git python3
Obteniendo las fuentes
Ahora crearemos un espacio de trabajo y buscaremos todas las fuentes,
mkdir -p ~/micro_ros_ws/src
cd ~/micro_ros_ws/src
git clone --recurse-submodules https://github.com/raspberrypi/pico-sdk.git
git clone https://github.com/micro-ROS/micro_ros_raspberrypi_pico_sdk.git
El primer repositorio es el Pi Pico SDK proporcionado por la fundación Pi. El segundo contiene una pila micro-ROS precompilada junto con un ejemplo similar a un hola mundo.
Configuración de VSCode
Abramos ahora el ejemplo en VSCode y configurémoslo. Para seguir adelante, necesitará dos extensiones de VSCode que son bastante comunes para el desarrollo de C ++. Estas extensiones son las Extensión C ++ y Herramientas de CMake para VSCode. Después de instalarlos, crearemos un archivo de configuración para las herramientas de CMake y estableceremos una variable para que nuestro proyecto sepa dónde encontrar el Pi Pico SDK. Para hacerlo, simplemente escriba,
cd ~/micro_ros_ws/src/micro_ros_raspberrypi_pico_sdk
mkdir .vscode
touch .vscode/settings.json
Abra el archivo recién creado con su editor favorito,
vi .vscode/settings.json
y agregue lo siguiente,
{
"cmake.configureEnvironment": {
"PICO_SDK_PATH": "/home/$USER/micro_ros_ws/src/pico-sdk",
},
}
Esta variable es una variable de entorno que solo se pasa a CMake en el momento de la configuración. Ver el Documentación de CMake-Tools para más información.
Abramos ahora el proyecto,
code .
Antes de ejecutar la configuración de CMake y construirla, debemos seleccionar el ‘kit’ apropiado (tal vez VSCode ya le haya pedido que lo haga). Abra la paleta (ctrl + shift + p) y busque CMake: Scan for Kits
y luego CMake: Select a Kit
y asegúrese de seleccionar el compilador que hemos instalado arriba, es decir GCC for arm-non-eabi
.
Estamos listos, ¡construyamos el ejemplo! Abre la paleta de nuevo y pulsa. CMake: Build
.
Ejecutando el ejemplo
Espera un minuto. ¿Qué hace?
Bien, analicemos muy brevemente lo que hace el ejemplo. Configura un nodo llamado pico_node
, luego un editor que publica un std_msgs/msg/int32.h
mensaje sobre el tema pico_publisher
, un temporizador recurrente y un ejecutor para orquestar todo. Cada 0,1 segundo, el ejecutor gira. Pero solo cada segundo, el temporizador hará que el editor publique un mensaje y aumente los datos del mensaje en 1. Simple. Así que probémoslo.
Subiendo al Pi Pico
Si todo salió bien durante la compilación, debería ver un nuevo build
carpeta en la vista de su proyecto. En esta carpeta, encontrará el archivo que ahora debemos cargar en el Pi Pico, se llama aquí pico_micro_ros_example.uf2
.
Para cargarlo, simplemente conecte la placa con un cable USB mientras presiona el pequeño botón blanco etiquetado BOOTSEL
. Al hacerlo, el Pi Pico se montará de manera similar a una unidad flash, lo que nos permitirá copiar / pegar muy fácilmente el .uf2
expediente. Dirígete a una terminal y escribe,
cp build/pico_micro_ros_example.uf2 /media/$USER/RPI-RP2
Una vez que se copia el archivo, la placa se reiniciará automáticamente y comenzará a ejecutar el ejemplo.
Pan comido.
Instalación del micro-ros-agent
Hemos visto en la introducción que micro-ROS tiene una arquitectura de comunicación en puente. Por tanto, tenemos que construir ese puente. Bueno, afortunadamente el equipo de desarrollo ya lo ha construido y lo distribuye tanto como un Quebrar o un Imagen de Docker. Aquí haremos uso del primero.
Si está utilizando Ubuntu 16.04 o posterior, snap ya está preinstalado y listo para funcionar. Si está ejecutando otro sistema operativo, puede instalar snap o hacer uso de la imagen de Docker. Para instalar el micro-ros-agent
chasquear, escribir,
sudo snap install micro-ros-agent
Después de instalarlo, y debido a que estamos usando una conexión serial, necesitamos configurar un par de cosas. Primero necesitamos habilitar el hotplug
característica,
sudo snap set core experimental.hotplug=true
y reinicie el demonio instantáneo para que surta efecto,
sudo systemctl restart snapd
Después de asegurarse de que el Pi Pico esté enchufado, ejecute,
$ snap interface serial-port
name: serial-port
summary: allows accessing a specific serial port
plugs:
- micro-ros-agent
slots:
- snapd:pico (allows accessing a specific serial port)
Lo que vemos aquí es que el micro-ros-agent
snap tiene una serie plug
mientras que un pico
slot
apareció mágicamente. Según la semántica, probablemente deberíamos conectarlos. Para hacerlo, corre
snap connect micro-ros-agent:serial-port snapd:pico
Ahora estamos listos para ejecutar finalmente nuestro ejemplo.
Realmente ejecutando el ejemplo
Con el Pi Pico enchufado mediante USB, iniciaremos el micro-ros-agent
como sigue,
micro-ros-agent serial --dev /dev/ttyACM0 baudrate=115200
Espere un par de segundos a que se encienda el LED del Pi Pico, lo que indica que el bucle principal se está ejecutando. En caso de que no se encienda después de unos segundos largos (cuente hasta 10 mississippi), es posible que desees desconectar / volver a conectar la placa para reiniciarla. El procedimiento de inicialización del ejemplo carece de algunas comprobaciones de errores … Oye, podría mejorar eso. tu primer proyecto?
Así que ahora el LED debería brillar en verde brillante. Eso es genial. ¿Sabes qué es más genial? Ejecutando en su máquina host,
$ source /opt/ros/dashing/setup.bash
$ ros2 topic echo /pico_publisher
data: 41
---
data: 42
---
¡Increíble! Y golpeando un
$ ros2 node list
/pico_node
demuestra que el nodo micro-ROS que se ejecuta en Raspberry Pi Pico es visible para ROS2 en la máquina host. ¡Yatta! #VictoriaDanza
¿Que sigue?
Durante mucho tiempo no fue conveniente mezclar microcontroladores y ROS. Pero esto está a punto de cambiar seriamente como acabamos de ver. No hay duda de que tanto micro-ROS como Raspberry Pi Pico reforzarán excelentes aplicaciones de robótica (¡y más!).
En este tutorial, hemos llegado a un gran punto de partida con un proyecto basado en ROS2 listo para girar en la suppa-cool suppa-asequible Raspberry Pi Pico.
Por supuesto, esto no hubiera sido posible sin el equipo de desarrollo de micro-ROS y el ingeniero de Cyberbotics Darko Lukić (@lukicdarkoo) que reunió el ejemplo inicial que acabamos de usar. Como a menudo, hay personas súper inteligentes que hacen que las cosas complicadas sean muy accesibles, grítales.
Personalmente voy a seguir jugando con micro-ROS en Pi Pico, primero porque es divertido y segundo porque tengo un par de ideas bajo la manga. Asegúrese de estar atento a este blog para saber todo sobre ellos.
¿Y usted? ¿Tienes ya algunos proyectos interesantes en mente?
Esta publicación apareció por primera vez en artivis.github.io