MultiONoticias

ROS es un código abierto que le permite interconectar diferentes componentes de un robot con el objeto de una operación autónoma

Primeros pasos con ROS usando QCar de Quanser

-A
+A

Por Juan Piñeros.
Ingeniero de Aplicaciones Académicas | Quanser

Al iniciarse en la robótica, a menudo escuchará el término ROS (Robot Operating System). En caso de que no esté familiarizado, ROS es un código abierto que le permite interconectar diferentes componentes de un robot con el objeto de una operación autónoma. En alto nivel, ROS utiliza una estructura similar a un gráfico para realizar la comunicación entre pares. Como ocurre con cualquier software, ROS también tiene diferentes distribuciones según el año de lanzamiento. Para hacer que ROS sea más compatible con los estándares de la industria, se lanzó una versión más nueva a partir de 2017 llamada ROS2 con la siguiente serie de distribuciones ( https://docs.ros.org/en/dashing/Releases.html )

Comprender qué distribución usarás es muy importante. Para los fines de este blog, las explicaciones se realizarán con ROS2 Dashing, actualmente compatible con Ubuntu 18.04, que es el sistema operativo que se ejecuta en el QCar.

Entrando al ecosistema ROS:

Antes de iniciar su aplicación ROS, intente dividir la tarea en los componentes individuales que necesitará. A continuación, defina el tipo de información necesaria para cada componente. En ROS, los componentes individuales se pueden considerar como nodos. Los nodos pueden enviar o recibir información según cómo estén configurados. La transferencia continua de información se realiza con un editor y una estructura de suscriptores. La conexión entre dos nodos se realiza a través de un tema que tiene un nombre único.

Visualmente, así es como se vería el flujo de información:

 

 

Los temas se configuran mediante una definición de mensaje específica. Una definición de mensaje incluirá datos, los tipos requeridos (float64, string, uint32, etc.) y una etiqueta correspondiente. Tenga en cuenta que ROS tiene definiciones de mensajes predefinidas para publicar temas que describen atributos como la pose de un robot, información de sensores, información de navegación, etc. También tiene la flexibilidad de crear su propia definición de mensajes si su aplicación lo requiere.

Publiquemos un tema

En el caso del QCar, hemos definido un editor que transmite continuamente la información de la IMU (unidad de medida inercial) a una frecuencia específica. Dado que las IMU pertenecen a la categoría de sensores, podemos usar la definición sensor_msgs.msg para configurar nuestro tema. En la práctica, así es como se define nuestro mensaje:

La función imu_callback() se utiliza para completar cada componente de la definición del mensaje Imu(). La función Imu() proviene del paquete sensor_msgs.msg de ROS.

A continuación, especificamos el nombre del tema y la frecuencia utilizada para publicar los datos. Mirando una vez más al QCar, así es como se define nuestro tema IMU:

Dentro de ROS2, tenemos acceso a "rcply" que contiene la función create_publisher(). Nuestro siguiente paso es definir la definición de mensaje (Imu), el nombre del tema '/qcar/imu' y el tamaño de la cola. Usamos create_timer() para llamar periódicamente a la función imu_callback() a una velocidad específica. Se realiza un proceso similar para sensores adicionales en el QCar. Para un desglose más complejo de los nodos creados para nuestra plataforma QCar, le recomiendo que esté atento a la próxima actualización de la oferta ROS de QCar. Transferiremos el paquete QCar a ROS2.

Suscripción a temas:

Ahora que hemos analizado rápidamente la publicación, hagamos lo contrario y veamos cómo podemos suscribirnos a un tema. En este ejemplo, nos centraremos en un tema que se utiliza para publicar un comando de velocidad lineal y un punto de ajuste del ángulo de dirección. Al igual que la publicación de datos, para suscribirse a un tema, necesitamos saber el nombre y la definición del mensaje utilizado. Nuestro suscriptor se define como:

Donde utilizamos el paquete "rcply" para crear una suscripción usando la función create_subscription(), que espera la definición del mensaje (vector3Stamped), el nombre del tema '/qcar/user_command', una función de devolución de llamada self.process_cmd() y una cola. Usamos la función de devolución de llamada process_cmd() para guardar los comandos del usuario en la variable self.command:

Notará que no tuvimos que crear una función de temporizador para el suscriptor. En ROS1 y ROS2, cuando se inicia una suscripción, un suscriptor solo lee los datos cuando hay un nuevo paquete disponible del editor. A su vez, si hay cuellos de botella en tu editor, tu suscriptor también se retrasará. Para datos con requisitos de gran ancho de banda, como video, es importante tener en cuenta el tamaño de la imagen, el formato y la tasa de publicación.

Quizás se pregunte, ¿qué puede hacer con el tema al que nos hemos suscrito? ¡Podemos usarlo para algunas aplicaciones interesantes de procesamiento de imágenes!

 

Figura X. El programa anterior muestra cómo usamos el comando de dirección para definir la región de interés antes de realizar una detección de borde astuto. Útil para aplicaciones de conducción autónoma, ¿no crees?

Como puede ver, es muy sencillo integrar un dispositivo Quanser para comunicarse usando la infraestructura ROS. Deberá tener en cuenta las limitaciones que existen cuando incorpora diferentes paquetes de ROS, pero esto debería darle una idea de cómo comenzar su investigación con una plataforma como QCar.

 

Traducción: Jacqueline Vicarte
Más información sobre este producto
Entre en contacto con: Jaqueline Vicarte
jvicarte@multion.com