micro-ROS / micro-ROS/micro_ros_platformio

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

Open
#167 6 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
334
Forks
111
PR merge metrics
No merged PRs in 30d

Description

## 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!

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the issue with the Arduino Portenta H7, micro-ROS agent, UDP transport, custom messages, and best-effort publishers at the stated rates. Inspect the deserialization paths reported in InputMessage.cpp and Processor.cpp, including the Fast CDR BadParamException. Done means the agent runs indefinitely without deserialization errors or a crash while publishers continue at the expected rates.

Written by the indexing model from the issue text.

Assessment

Tech stack
arduino
Domain
embedded-iot, networking
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.