-
Notifications
You must be signed in to change notification settings - Fork 87
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Deserialization errors and eventual micro-ROS agent crash with best-effort publishers. #167
Comments
We will need your application and custom msgs code to take a look. |
Hi Pablo, I've attached It appears that the deserialization errors and crashing are related to multi-threading. In my main loop, I call I then found here that I should be setting
in my custom
Is multi-threading not supported on the Arduino Portenta, or am I missing some other configuration-related things? |
Hello @lucas-tiz, unfortunately, micro-ROS is not a multithreaded library, and If you have written your own CAN transports, you probably need to take care of the multithreading within their scope. I would recommend trying to make it work single-threaded and when it works smoothly try to configure multithreading. In any case, I do not see a micro-ROS application in your attached file, there are no entities nor executors or spinning code block. |
Hi @pablogs9 , sorry, I think I need to clarify: The CAN data is unrelated to the micro-ROS transport. I am using UDP for the micro-ROS transport. The CAN data is received from a sensor connected to the Portenta and then published to a ROS topic inside a thread. If publish the data from the main thread instead of the CAN thread, I no longer get deserialization errors. However, if I still call
All the micro-ROS entities and executors are in another file. I have quite a bit of code for this project organized in multiple files, so if it would be helpful to you, I can simplify the project and attach it. Thank you |
Only esp32 has native Freertos and limited pthread like support. You may check the example, The wiki, https://github.com/hippo5329/micro-ROS-demos-platformio/wiki |
Thanks for the information @hippo5329 , do you know if there is documentation on multithreading with micro-ROS? I've only found this so far: https://micro.ros.org/blog/2021/07/07/multithreading/ |
Issue template
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:
and occasionally:
Messages continue to publish successfully at around 100 Hz, but eventually the micro-ROS agent crashes with the following message:
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!
The text was updated successfully, but these errors were encountered: