Microros client stops receiving data
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 25/100
- Tipo di issue
- Bug
- Chiarezza
- Da chiarire
- Stato di attività
- Ferma
- Stack tecnologico
- cpp, embedded-iot
- Ambito
- embedded-iot, networking
Direzione di ricerca
Inizia riproducendo la configurazione con tre dispositivi ESP32 usando set_microros_wifi_transports e porte UDP4 distinte. Esamina la configurazione del transport e il ciclo rclc_executor_spin_some confrontando il comportamento di un singolo dispositivo con quello di tre dispositivi. Il lavoro è completato quando tutti i dispositivi continuano a ricevere i dati a cui sono iscritti mentre vengono eseguiti simultaneamente.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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);
}
}
- Lingua principale
- Shell
- Stelle
- 509
- Fork
- 183
- Merge medio
- 22h 26m
- PR unite (30g)
- 7
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di micro-ROS/micro_ros_setup
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
micro-ROS/micro_ros_setup#814 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 42/100
micro-ROS/micro_ros_setup#809 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 38/100
micro-ROS/micro_ros_setup#808 · 2 commenti ·
-
sensor msgs dependencies Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 20/100
micro-ROS/micro_ros_setup#806 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 20/100
micro-ROS/micro_ros_setup#803 ·
Tutte le issue di micro-ROS/micro_ros_setup
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 90/100
danielmiessler/LifeOS#2218 ·
-
docs(agents): strengthen the no-backslash-escaped-backticks rule with an issue-creation example Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 92/100
-
technical-debt
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
ll7/robot_sf_ll7#9560 ·
-
Update ghgrab to 2.1.0 Apertapackage-update
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
oSoWoSo/vOid_Community_repOsitory#148 · 1 commento ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100