
En esta publicación veremos cómo la Raspberry Pi Pico puede dialogar de forma nativa con un manifiesto ROS2 usando micro-ROS. Configuraremos un tesina en VSCode, lo compilaremos y lo subiremos al microcontrolador. Por lo tanto, asumimos que está poco familiarizado con el progreso de ROS2 y VSCode.
¿Qué es todo esto?
Ejecutando ROS2 en microcontroladores.
El Raspberry Pi Pico
El Raspberry Pi Pico, anunciado a fines de enero de 2021, es el dispersión más fresco de la Fundación Raspberry Pi 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 descubierto diseñado microcontrolador! Sí, el chip en sí está diseñado por los ingenieros de Pi y es completamente de hardware descubierto. Como es habitual con la saco Pi, es increíblemente asequible a solo 4 $.
Los detalles sobre la placa en sí, las diferencias entre procesador y microcontrolador, el 101 para comenzar o qué puede hacer el Pi Pico; todo eso está más allá del talento de esta publicación. Pero le recomiendo insistentemente 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 manifiesto ROS y los desarrolladores deben fiarse 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.
El tesina micro-ROS es un esfuerzo liderado por grandes nombres industriales como Bosch, eProsima, Fiware Foundation, en particular a través del tesina OFERA H2020, y una gran cantidad de socios y colaboradores, incluidos, por ejemplo, Amazon y Canonical.
¿Así que qué es lo? Es esencialmente una superficie flaca (consulte su documento de diseño) encima de ‘DDS para entornos con restricciones de bienes eXtremely’ (DDS-XRCE), que se ejecuta en un sistema operante en tiempo verdadero y permite que los microcontroladores ‘hablen’ a un manifiesto ROS2 (el hablante / espectador habitual) utilizando un subconjunto optimizado del protocolo DDS. Un mordisco. Se podio en una cimentación de comunicación ‘puenteada’ con un ‘intermediario’ llamado ‘agente micro-ROS’. El agente está a cargo de la interfaz entre el manifiesto 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 adecuadamente, ahora que hemos aclarado un par de términos, comencemos, paso a paso, con el ejemplo oficial de micro-ROS en Raspberry Pi Pico acondicionado en github. Tenga en cuenta que para este tutorial estoy ejecutando Ubuntu 20.04 con el complemento VSCode.
Si aún no está ejecutando Ubuntu 20.04, podría considerar usar un contenedor LXD. Puede consultar nuestra publicación inicial ‘Explicación 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 adyacente con un ejemplo similar a un hola mundo.
Configuración de VSCode
Abramos ahora el ejemplo en VSCode y configurémoslo. Para seguir delante, necesitará dos extensiones de VSCode que son sobrado comunes para el progreso de C ++. Estas extensiones son la extensión C ++ y las herramientas CMake para VSCode. A posteriori de instalarlos, crearemos un archivo de configuración para las herramientas de CMake y estableceremos una variable para que nuestro tesina 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
Ensenada el archivo recién creado con su editor preferido,
vi .vscode/settings.json
y agregue lo posterior,
"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. Consulte la documentación de CMake-Tools para obtener más información.
Abramos ahora el tesina,
code .
Antiguamente de ejecutar la configuración de CMake y construirla, debemos clasificar el ‘kit’ apropiado (tal vez VSCode ya le haya pedido que lo haga). Ensenada la paleta (ctrl + shift + p) y busque CMake: Scan for Kits
y luego CMake: Select a Kit
y asegúrese de clasificar el compilador que hemos instalado en lo alto, es proponer GCC for arm-non-eabi
.
Estamos listos, ¡construyamos el ejemplo! Abre la paleta de nuevo y pulsa. CMake: Build
.
Ejecutando el ejemplo
Demora un minuto. ¿Qué hace?
Proporcionadamente, 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 paseo. 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ó adecuadamente durante la compilación, debería ver un nuevo build
carpeta en la perspicacia de su tesina. En esta carpeta, encontrará el archivo que ahora debemos cargar en el Pi Pico, se flama aquí pico_micro_ros_example.uf2
.
Para cargarlo, simplemente conecte la placa con un cable USB mientras presiona el pequeño pitón blanco etiquetado BOOTSEL
. Al hacerlo, el Pi Pico se montará de modo similar a una dispositivo 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 pasado en la ingreso que micro-ROS tiene una cimentación de comunicación en puente. Luego, tenemos que construir ese puente. Bueno, felizmente, el equipo de progreso ya lo ha construido y lo distribuye como imagen Snap o Docker. Aquí haremos uso del primero.
Si está utilizando Ubuntu 16.04 o posterior, snap ya está preinstalado y despierto para funcionar. Si está ejecutando otro sistema operante, 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
A posteriori de instalarlo, y correcto 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 real.hotplug=true
y reinicie el demonio instantáneo para que surta emoción,
sudo systemctl restart snapd
A posteriori de comprobar de que el Pi Pico esté enchufista, 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.
Efectivamente ejecutando el ejemplo
Con el Pi Pico enchufista 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 rizo principal se está ejecutando. En caso de que no se encienda luego de unos segundos largos (cuente hasta 10 mississippi), es posible que desee desconectar / retornar 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 tesina?
Así que ahora el LED debería sobresalir en verde brillante. Eso es excelente. ¿Sabes qué es más excelente? 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 tesina basado en ROS2 despierto para rodar en la suppa-cool suppa-asequible Raspberry Pi Pico.
Por supuesto, esto no hubiera sido posible sin el equipo de progreso de micro-ROS y el ingeniero de Cyberbotics Darko Lukić (@lukicdarkoo), quienes reunieron el ejemplo original 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 memorizar todo sobre ellos.
¿Y usted? ¿Tienes ya algunos proyectos interesantes en mente?
Esta publicación apareció por primera vez en artivis.github.io