Noticias

Publique lecturas de sonda con micro-ROS en Raspberry Pi Pico

En esta publicación, aprenderá cómo conectar un sensor de campo de acción HC-SR04 a la Raspberry Pi Pico y imprimir sus títulos medidos en el descriptivo ROS 2 usando micro ROS. Esto se basamento en el artículo precursor «Primeros pasos con micro-ROS en la Raspberry Pi Pico». Así que te recomiendo que lo leas primero si eres nuevo en el tema.

Un sensor que dijiste

En este tutorial usaremos uno de los sensores más comunes en robótica, un sonar. Estos sensores son baratos, relativamente fáciles de usar y sorprendentemente precisos en circunstancias favorables. Los sonares se utilizan para determinar distancias. Por lo tanto, se pueden utilizar para detectar y averiguar obstáculos para que un autómata pueda evitar cosas cercanas. No es ningún secreto por qué son tan increíblemente populares.

Entonces, ¿qué es un sonar, cómo funciona, cuál debo designar?

«Soy un murceguillo (sensor)»

Un sonar es un sensor de ecolocalización que se puede utilizar para determinar distancias. Para favorecer la digestión, los sonares funcionan como los murciélagos. No, no vuelan, cazan escarabajos al amanecer; Siquiera luchan contra el crimen. Obviamente me refería a la forma en que los murciélagos perciben el mundo. Un sonar consta de un transmisor y un receptor. El primero envía una señal ultrasónica que rebota en los obstáculos alrededor de el receptor. Al determinar la diferencia de tiempo entre la transmisión y la recibimiento de la señal, se puede calcular fácilmente la distancia recorrida por la onda de sonido y, por lo tanto, la distancia al obstáculo que hizo eco del sonido.

Esta tecnología puede sufrir todo tipo de problemas; si, por ejemplo, la onda de sonido se refleja allí del sensor. O si es arrojado al sensor por dos obstáculos a diferentes distancias. O si es absorbido por un material fonoabsorbente.

Si esto aún no está claro o si desea obtener más información al respecto, lo dirigiré a su motor de búsqueda web preferido, ya que está un poco fuera del talento de esta publicación.

¿Qué maniquí de sonda debo designar?

Existen muchos modelos diferentes de sonar, felizmente la mayoría de ellos funcionan de la misma guisa. Incluso se pueden encontrar en Internet por unos euros cada uno. Vaya a su proveedor de productos electrónicos preferido y seguro que los encontrará a la liquidación.

Le recomendaría que use el ‘HC-SR04P’, que es la modificación de 3.3V del inmensamente popular ‘HC-SR04’ (5V). Es este maniquí (el ‘HC-SR04P’) el que usaré en esta publicación. Adecuado a su muy bajo consumo de energía, se puede suministrar energía directamente desde el Pi Pico. Por lo tanto, toda la configuración se puede suministrar fácilmente con comida a través del cable USB. Si utiliza un paquete de 5 V, adapte el cableado que se describe a continuación; de lo contrario, corre el aventura de dañar su Pi Pico. Como remisión, pedí un parte de 5 unidades por menos de $ 10, incluido el remesa. Incluyendo el precio de Pi Pico, ¡es una gran sensación por el precio!

Cableado del sonar al Pi Pico

La placa ‘HC-SR04P’ tiene cuatro pines etiquetados como ‘Vcc’, ‘Gnd’, ‘Trig’ y ‘Echo’. Como ya adivinó, los pines Vcc y Gnd son para la ringlera de 3.3v y tierra, respectivamente. ‘Trig’ se utiliza para activar el sensor y ‘Echo’ informa la recibimiento del eco (la recibimiento de la onda rebotando en un obstáculo).

A partir de ahí y en pulvínulo al pinout de Pi Pico, el cableado es simple:

  • 3V3 OUT (pin 36) al ‘Vcc’ del sonar
  • GND (pin 38) a la ‘Gnd’ del sonar
  • GPIO 6 (pin 9) para el eco del sonar
  • GPIO 7 (pin 10) para ‘disparar’ la sonda

Esta configuración se muestra en la sucesivo figura.

En cuanto al hardware, hemos terminado. Vayamos al software.

Microcódigo para micro ROS en Pi Pico

Vimos en la publicación precursor cómo configurar VSCode para programar Micro-Ros en la Raspberry Pi Pico y cómo clasificar y flashear un software. Así que vamos directamente al plato principal, omitiendo todo el código habitual y mostrando solo los bits específicos de nuestra aplicación. Sin retención, tenga en cuenta que este ejemplo (y más) está completamente acondicionado en GitHub en artivis / mico_ros.

Correctamente, vamos a sumergirnos. Nuestra aplicación consta esencialmente de dos funciones, una que activa y lee el sensor y una segunda, la devolución de convocatoria del temporizador, que claridad a la primera, completa y publica un mensaje ROS:

// The GPIO pins to which the sonar is wired
#define GPIO_ECHO 6
#define GPIO_TRIGGER 7

/**
 * @brief Get the range value in meter.
 */
float read_range()

  // Send an impulse trigger of 10us
  gpio_put(GPIO_TRIGGER, 1);
  sleep_us(10);
  gpio_put(GPIO_TRIGGER, 0);

  // Read how long is the echo
  uint32_t signaloff, signalon;
  do
    signaloff = time_us_32();
   while (gpio_get(GPIO_ECHO) == 0);

  do
    signalon = time_us_32();
   while (gpio_get(GPIO_ECHO) == 1);

  // Contemporáneo echo duration in us
  const float dt = signalon - signaloff;

  // distance in meter:
  // echo duration (us) x speed of sound (m/us) / 2 (round trip)
  return dt * 0.000343 / 2.0;

...

/**
 * @brief Read the range from the sensor,
 * fill up the ROS message and publish it.
 */
void timer_callback(rcl_timer_t *timer, int64_t /*last_call_time*/)
  if (timer)
    range_msg.range = read_range();
    fill_msg_stamp(range_msg.header.stamp);
    rcl_publish(&publisher, &range_msg, NULL);
   else
    printf("Failed to publish range. Continuing.n");
  

Eso es practicamente todo. El resto del código consiste principalmente en un texto habitual que inicializa el GPIO, configura el nodo, el editor, el temporizador y el ejecutor de micro ROS, y hace rotar todo.

Observe que estamos usando el mensaje habitual ‘sensor_msgs / msgs / Range’. Puede encontrar su definición y un desglose de su campo en ringlera en la documentación de la API ROS2.

Ahora todo lo que tiene que hacer es clasificar el código, flashear el archivo ‘.uf2’ resultante e iniciar el agente micro-ROS.

Pib pib

Suponiendo que la compilación y el flasheo hayan ido perfectamente, todo lo que tenemos que hacer es conectar la placa a nuestra computadora e iniciar el agente micro-ROS. Para hacer esto, usamos el sucesivo comando:

docker run -it --rm -v /dev:/dev --privileged --net=host microros/micro-ros-agent:foxy serial --dev /dev/ttyACM0 -b 115200

Veamos si conseguimos poco

$ ros2 topic list
/parameter_events
/pico/range
/rosout

Se está promocionando el tema ‘/ pico / range’, este es un buen aparición. Veamos que contiene

$ ros2 topic echo /pico/range
header:
  stamp:
    sec: 145
    nanosec: 837599000
  frame_id: pico_sonar_0_link
radiation_type: 0
field_of_view: 30.0
min_range: 0.019999999552965164
max_range: 4.0
range: 12.138598442077637
---
header:
  stamp:
    sec: 145
    nanosec: 915356000
  frame_id: pico_sonar_0_link
radiation_type: 0
field_of_view: 30.0
min_range: 0.019999999552965164
max_range: 4.0
range: 12.138941764831543
---

¡Eso se ve perfectamente!

Ahora puede retar con su nuevo sensor y mover un obstáculo alrededor de delante y alrededor de detrás frente a él. Tome una cinta métrica y compare la distancia indicada con la medida. Te sorprenderá su precisión, sé que fui yo.

¿Que sigue?

Este es un pequeño plan agradable para acercarse a Micro-ROS en la Raspberry Pi Pico y las posibilidades que abre. En realidad vale la pena ver la distancia auténtico entre el sensor y un obstáculo en el descriptivo ROS 2. Si damos un paso detrás, podemos ver una imagen un poco más ancho; una imagen en la que los robots existentes se pueden expandir viable y sin esfuerzo con módulos de hardware listos para plug-and-play ROS2. La conexión de una cámara y su comida se muestra mágicamente en el descriptivo. Un módulo IMU podría proporcionar una fuente confiable de odometría. Un motor que puede rotar en un destapar y cerrar de fanales (muestrario de palabras).

Incluso si aún no estamos allí, definitivamente seguiré este pensamiento para mi propio Turtlebot 3. ¿Puedes creer que no tiene sonar?

Gracias a Dios, ahora puedo juntar fácilmente un par de estos y mi autómata dejará de chocar con mi astuto perezoso que está tirado en el suelo. Ninja ignorante, invisible al escáner láser.

Antaño de comenzar a retar con Micro-ROS en su Raspberry Pi Pico, asegúrese de suscribirse a nuestro boletín informativo para que no se pierda los próximos tutoriales y más.

Esta publicación apareció por primera vez en artivis.github.io

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba