Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Microros client stops receiving data

Abierto
#686 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
25/100
Tipo de issue
Error
Claridad
Necesita aclaración
Estado de actividad
Estancado
Stack tecnológico
cpp, embedded-iot

Línea de trabajo

Comienza reproduciendo la configuración con tres dispositivos ESP32 usando set_microros_wifi_transports y distintos puertos UDP4. Inspecciona la configuración del transporte y el bucle rclc_executor_spin_some mientras comparas el comportamiento de un solo dispositivo con el de tres dispositivos. Se considera terminado cuando todos los dispositivos siguen recibiendo sus datos suscritos al ejecutarse simultáneamente.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Hey @pablogs9 ,
I am facing some sort of communication issue as follows....
Problem Description:
I am facing difficulties when attempting to run three ESP32 devices simultaneously, each connecting to a MicroROS agent and publishing twist data to three separate bots. Despite having a strong WiFi signal and utilizing the UDP4 protocol on different ports for each ESP32 device (port 8888 and others), we encounter a recurring problem. Initially, when each ESP32 device is started individually, communication runs smoothly. However, after a short period, all three ESP32 devices cease to receive data.

Key Details:

  • WiFi Signal Strength: Strong
  • Protocol: UDP4
  • Port Configuration: Each ESP32 device uses a unique port for communication

Efforts Made:

  • Ensured strong WiFi signal.
  • Configured each ESP32 device to use a unique port for communication.
  • Verified that communication functions correctly when bots are started individually.

Code on each ESP32(changing the node and topic names as well as ports accordingly):
#include <ESP32Servo.h>
#include <micro_ros_arduino.h>
#include <stdio.h>
#include <rcl/rcl.h>
#include <rcl/error_handling.h>
#include <rclc/rclc.h>
#include <rclc/executor.h>
#include <geometry_msgs/msg/twist.h>
#include <std_msgs/msg/bool.h> // Include Bool message type

rcl_subscription_t subscriber_cmd_vel;
geometry_msgs__msg__Twist msg;
rcl_subscription_t subscriber_pen_down;
std_msgs__msg__Bool pen_msg;
rclc_executor_t executor;
rclc_support_t support;
rcl_allocator_t allocator;
rcl_node_t node;
rcl_timer_t timer;

Servo servo1;
Servo servo2;
Servo servo3;
Servo servo_pen;

#define servo1_pin 25
#define servo2_pin 26
#define servo3_pin 27
#define servo_pen_pin 19
#define LED_PIN LED_BUILTIN
#define RCCHECK(fn) { rcl_ret_t temp_rc = fn; if((temp_rc != RCL_RET_OK)){error_loop();}}
#define RCSOFTCHECK(fn) { rcl_ret_t temp_rc = fn; if((temp_rc != RCL_RET_OK)){}}

void error_loop(){
while(1){
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
delay(100);
}
}

void cmd_vel_callback(const void * msgin)
{
const geometry_msgs__msg__Twist * msg = (const geometry_msgs__msg__Twist *)msgin;
// Your processing logic for Twist messages goes here
}

void pen_down_callback(const void * msgin)
{
const std_msgs__msg__Bool * pen_msg = (const std_msgs__msg__Bool *)msgin;
// Your processing logic for Bool messages goes here
}

void setup() {
set_microros_wifi_transports("wifi", "password", "192.168..", 8888);
// set_microros_tcp_transports("192.168.65.44", 8892);
Serial.begin(9600);
servo1.attach(servo1_pin);
servo2.attach(servo2_pin);
servo3.attach(servo3_pin);
servo_pen.attach(servo_pen_pin);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, HIGH);
delay(2000);

allocator = rcl_get_default_allocator();

RCCHECK(rclc_support_init(&support, 0, NULL, &allocator));
RCCHECK(rclc_node_init_default(&node, "subscriber_node_3", "", &support));

RCCHECK(rclc_subscription_init_default(
&subscriber_cmd_vel,
&node,
ROSIDL_GET_MSG_TYPE_SUPPORT(geometry_msgs, msg, Twist),
"/cmd_vel/bot3"));

RCCHECK(rclc_subscription_init_default(
&subscriber_pen_down,
&node,
ROSIDL_GET_MSG_TYPE_SUPPORT(std_msgs, msg, Bool),
"/pen3_down"));

RCCHECK(rclc_executor_init(&executor, &support.context, 2, &allocator));
RCCHECK(rclc_executor_add_subscription(&executor, &subscriber_cmd_vel, &msg, &cmd_vel_callback, ON_NEW_DATA));
RCCHECK(rclc_executor_add_subscription(&executor, &subscriber_pen_down, &pen_msg, &pen_down_callback, ON_NEW_DATA));
}

void loop() {
RCCHECK(rclc_executor_spin_some(&executor, RCL_MS_TO_NS(1)));

servo1.write(msg.linear.x + 90);
servo2.write(msg.linear.y + 90);
servo3.write(msg.linear.z + 90);
// Process msg_pen_down (bool) if needed
if (pen_msg.data) {
servo_pen.write(95);
} else {
servo_pen.write(90);
}
}

Lenguaje dominante
Shell
Estrellas
514
Forks
184
Merge medio
22 h 26 min
PR fusionados (30 d)
7

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de micro-ROS/micro_ros_setup

Todos los issues de micro-ROS/micro_ros_setup

Issues similares

Más issues de Shell/Bash

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.