Linux

Utilice Micro-ROS para difundir las lecturas de la sonda en Raspberry Pi Pico

En el presente artículo, va a aprender de qué forma conectar el sensor de campo HC-SR04 a la Raspberry Pi Pico y de qué forma emplear el micro ROS para imprimir su título de medición en la descripción del ROS 2. Esto se apoya en el producto previo «Introducción a Micro ROS en Raspberry Pi Pico «. Por consiguiente, si no está familiarizado con el tema, le sugiero que lo lea primero.

El sensor del que andas comentando

En este tutorial, vamos a usar entre los sensores más habituales en robótica, el sonar. Estos sensores son económicos, parcialmente simples de emplear y muy precisos en condiciones convenientes. El sonar se usa para saber la distancia. En consecuencia, se tienen la posibilidad de emplear para advertir y hallar óbices a fin de que las máquinas logren eludir los elementos próximos. No es ningún misterio por qué razón son tan populares.

¿Qué es el sonar, de qué forma marcha y cuál debo precisar?

«Soy un murciélago (sensor)»

Sonar es un sensor de ecolocalización que se puede emplear para saber la distancia. Para contribuir a la digestión, el sonar marcha como un murciélago. No, no tienen la posibilidad de volar, cazan insectos al amanecer, aun pelean contra el delito. Por supuesto quiero decir que la manera en que los murceguillos perciben el planeta. Sonar se compone de un transmisor y un receptor. El primero manda señales ultrasónicas y rebota en óbices cerca del receptor. Al saber la diferencia de tiempo entre la transmisión y la recepción de la señal, la distancia transitada por la onda de sonido se puede calcular de forma fácil, tal es así que la distancia al obstáculo del eco se puede calcular de manera fácil.

Tienen la posibilidad de aparecer múltiples inconvenientes con esta tecnología, por servirnos de un ejemplo, en el momento en que el sensor refleja las ondas sonoras. O si es lanzado hacia el sensor por 2 óbices a distintas distancias. O en el momento en que es absorbido por materiales fonoabsorbentes.

Si aún no está claro o si quiere conseguir mucho más información, lo guiaré a fin de que use su motor de búsqueda web preferido pues no es conveniente para este producto.

¿Qué modelo de sonda debo precisar?

Existen muchos modelos de sonda distintas y me alegra que la mayor parte de ellos funcionen igual. Por unos euros cada uno de ellos, aun se tienen la posibilidad de localizar en Internet. Visite su distribuidor de artículos electrónicos preferido, seguramente los hallará en venta.

Le sugiero que utilice «HC-SR04P», que es una versión cambiada de 3.3V del muy habitual «HC-SR04» (5V). Usaré este modelo de cuerpo humano («HC-SR04P») en el presente artículo. Gracias a su bajísimo consumo de energía, se puede dar de comer de manera directa desde el Pi Pico. Por consiguiente, toda la instalación se puede dar de comer de forma fácil con alimentos a través del cable USB. Si está usando una batería de 5 V, ajuste el cableado como se detalla ahora; en caso contrario, podría eliminar su Pi Pico. Como recomendación, solicité 5 productos en depósito por menos de 10 € incluyendo el envío. Introduciendo el valor del Pi Pico, ¡la sensación de súper económico!

Cableado de la sonda a Pi Pico

La placa «HC-SR04P» tiene 4 pines etiquetados como «Vcc», «Gnd», «Trig» y «Echo». Como ahora adivinó, los pines Vcc y Gnd se utilizan para bandas de 3.3v y tierra respectivamente. «Trig» se emplea para encender el sensor y «Echo» comunica el eco recibido (onda recibida rebotando en el obstáculo).

Desde allí y desde los pines de Pulvínulo hasta Pi Pico, el cableado es simple:

  • SALIDA 3V3 (Pin 36) a ‘Vcc’ del Sonar
  • GND (pin 38) a la sonda «Gnd»
  • GPIO 6 (pin 9) para eco de sonda
  • Sonda «gatillo» GPIO 7 (pin 10)

Esta configuración se expone en la próxima figura.

En lo que se refiere al hardware, hemos terminado. Llegamos al programa.

El microcódigo micro ROS en Pi Pico

En el producto previo hemos visto de qué manera modificar VSCode para desarrollar Micro-Ros en Raspberry Pi Pico y de qué forma clasificar y flashear el programa. Conque vamos de manera directa al plato primordial, suprimiendo todos y cada uno de los códigos recurrentes y exponiendo solo ciertas secciones de nuestra app. Sin reservas, tenga presente que este caso de ejemplo (y mucho más) se ha establecido completamente en artivis / mico_ros en GitHub.

Bien, vamos a zambullirnos. Nuestra app consta eminentemente de 2 funcionalidades, una es la activación y lectura del sensor, la otra es el recordatorio del temporizador, que la primera oportunidad borra, completa y publica el 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 prácticamente todo. El resto del código es eminentemente artículo sin formato para inicializar GPIO, modificar nodos ROS, editores, temporizadores y microactuadores, y lograr que todo ande.

Tenga presente que utilizamos el mensaje frecuente «sensor_msgs / msgs / Range». Consulte la documentación de la Interfaz de programación de aplicaciones ROS2 para conseguir su definición y un desglose de los campos de fila.

Todo cuanto debes realizar es clasificar el código, actualizar el fichero «.uf2» generado y después comenzar el agente micro-ROS.

estar listo

Suponiendo que la colección y el flasheo hayan ido bien, todo cuanto debemos llevar a cabo es conectar la placa de avance a nuestra PC y también comenzar el agente micro-ROS. Para llevar a cabo esto, empleamos el próximo comando:

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

Observemos si tenemos la posibilidad de venir un poquito

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

Se comunica el tema ‘/ pico / range’, lo que es bueno, observemos qué hay dentro

$ 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
---

¡Se ve especial!

En este momento puede emplear su nuevo sensor para retar y desplazar óbices en frente de él. Tome una cinta métrica y compare la distancia mostrada con el valor medido. Te sorprenderá su precisión, sé que soy yo.

¿Cuál es el próximo paso?

Aquí hay un pequeño plan realmente bueno para arrimarse al Micro-ROS en Raspberry Pi Pico y sus opciones. En verdad, merece la pena ver la distancia real entre el sensor y el obstáculo en la descripción de ROS 2, si profundizamos un tanto mucho más observamos una imagen un tanto mucho más grande, los robots que ya están tienen la posibilidad de emplear el módulo de hardware ROS2 plug and play agrandar virtualmente imagen fácil. La descripción revela mágicamente la conexión entre la cámara y tu comida. El módulo IMU puede ser una fuente fiable para el podómetro. Un motor que puede marchar en el momento en que se abre y se cierra la linterna (ejemplo de una palabra).

Aun si todavía no nos encontramos allí, finalmente proseguiré esta iniciativa por mi cuenta Turtlebot 3. ¿No piensas que suena?

A dios gracias, en este momento puedo ensamblar de manera fácil ciertos y mi máquina dejará de chocar con mi listo perezoso en el piso. El ninja desinformado no puede ser visto por el escáner láser.

Antes de retar Micro-ROS en Raspberry Pi Pico, suscríbase a nuestro folleto para no perderse los próximos manuales, etcétera.

Este producto apareció por vez primera en artivis.github.io

Deja una respuesta

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

Botón volver arriba