Deserialization errors and eventual micro-ROS agent crash with best-effort publishers.

Aperta
#167 6 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
38/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
arduino

Direzione di ricerca

Inizia riproducendo il problema con Arduino Portenta H7, micro-ROS agent, trasporto UDP, messaggi personalizzati e publisher best-effort alle frequenze indicate. Esamina i percorsi di deserializzazione segnalati in InputMessage.cpp e Processor.cpp, inclusa la Fast CDR BadParamException. Il lavoro sarà considerato completato quando l’agente rimarrà in esecuzione indefinitamente senza errori di deserializzazione né crash, mentre i publisher continueranno alle frequenze previste.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Issue template

  • Hardware description: Arduino Portenta H7
  • RTOS: Mbed OS
  • Installation type: PlatformIO
  • Version or commit hash: Galactic, Humble (I've tried both)
Steps to reproduce the issue

I am running micro-ROS on an Arduino Portenta H7, communicating via UDP with a computer running ROS2. I've been testing with both Galactic and Humble (two different systems, one running Ubuntu 20 and the other 22).

I have four publishers in micro-ROS, each publishing a custom message (containing a builtin_interfaces/Time, a uint8, and two float32s) at 100 Hz using best effort QoS. I also have one publisher publishing a custom message (a builtin_interfaces/Time, and a uint8) at 1 Hz.

After the micro-ROS agent is started, communication works for some time, but deserialization errors start to appear, mostly:

[1736739981.033497] error    | InputMessage.cpp   | log_error                | deserialization error  | buffer: 
0000: 00 00 00 00 00 00

and occasionally:

[1734728823.613239] error    | InputMessage.cpp   | log_error                | deserialization error  | buffer: 
0000: 81 01 49 12 07 01 1F 00 12 AD 00 A5 3E ED 65 67 D3 90 66 22 00 00 00 01 00 00 00 00 00 00 00 00
[1734728823.615098] error    | Processor.cpp      | process_write_data_submessage | deserialization error processing WRITE_DATA submessage | client_key: 0x16BCCD79

Messages continue to publish successfully at around 100 Hz, but eventually the micro-ROS agent crashes with the following message:

terminate called after throwing an instance of 'eprosima::fastcdr::exception::BadParamException'
  what():  Unexpected byte value in Cdr::deserialize(bool), expected 0 or 1

Sometimes it takes a while to crash, and other times it only takes a few minutes. I've also tried publishing with reliable QoS. In that case, the micro-ROS agent doesn't crash or have deserialization errors (at least not as quickly), but each topic is only published at about 1 Hz.

Expected behavior

The micro-ROS agent runs indefinitely with no deserialization errors and doesn't crash.

Actual behavior

Deserialization errors and crash.

Thanks!

Lingua principale
Python
Stelle
334
Fork
111
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di micro-ROS/micro_ros_platformio

Tutte le issue di micro-ROS/micro_ros_platformio

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.