ROS2 Embedded SIG meeting #2

Sorry for the delay.

ROS 2 Embedded SIG meeting #2 Agenda 01/15

15 January 2019 16:00 PM, Hangouts Meet.

ATTENDEES

eProsima: Borja Outerelo, Julian Bermudez
Bosch: Ingo Lütkebohle
Acutronic Robotics: Iñigo Muguruza, Juan Flores
PIAP: Adam Dabrowski
eSOL: Akihiko Tsukuda, Shoji Morita
Renesas Electronics: Osamu “Max” Matsushima

AGENDA

Crystal changes and how they affect embedded

List all the changes on ROS 2 Crystal changes and how they might affect microcontrollers.

eProsima: The most significant difference we have notice porting micro-ROS to the new Crystal packages is the change on the rmw implementation initialisation. Now it passes the options from upper layers including what we think it is essentially an allocator instance, so we can create custom allocators from upper layers avoiding dynamic memory allocations in the rmw_implementation.
The rmw_microxrcedds implementation has been adapted, and a PR is being reviewed. You can check there what changes were needed.

Bosch: We might need to look at how micro-ROS is compiled in conjunction with ROS 2 standard packages. No significant changes regarding executors done in Crystal.

eSOL: We have collected ROS 2 Crystal. 2 Projects: A) bring ROS 2 to eSOL’s embedded RTOS, B) Work in conjunction with Renesas to put it into their microcontrollers. It has been done at project A), but has not been done at project B) yet.

Bosch: People may be interested in hearing something else from Renesas work in their microcontrollers and ROS integration.

Memory footprint measurement

eProsima: http://jenkins.eprosima.com:8080/job/Micro%20XRCE-DDS%20Client%20Memory%20Profiling/plot/

The output of the first rough massif benchmark of ROS 2 (using rmw_fastrtps) on Linux
Found peak

Library Bytes
/opt/ros/crystal/lib/libfastrtps.so.1.7.0 omitted
/opt/ros/crystal/lib/librcl.so 26029
/opt/ros/crystal/lib/librclcpp.so 56486
/opt/ros/crystal/lib/librcutils.so 18
/opt/ros/crystal/lib/librmw_fastrtps_cpp.so 4214
/opt/ros/crystal/lib/librmw_fastrtps_shared_cpp.so 16912
/opt/ros/crystal/lib/librmw_implementation.so 48
/opt/ros/crystal/lib/librosidl_typesupport_cpp.so 384
/usr/lib/libPocoFoundation.so.50 56
/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 8888
/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25 72704
/usr/lib/x86_64-linux-gnu/libtinyxml2.so.6.0.0 0

The output from micro-ROS software stack static memory analysis.

Dynamic linking size -t output:

text data bss dec hex filename
5268771 126800 544 5396115 525693 ./install/rclcpp/lib/librclcpp.so
85834 2752 8 88594 15a12 /libmicroxrcedds_client.so

Static linking size -t output:

Binary totals (micro-ROS stack):

text data bss dec hex
553635 10304 16367 580306 8dad2

Bosch: the Interesting point is to get the source of the dynamic allocations. Currently testing the Valgrind massif tool and get the peak allocations. Still an ongoing task.

eProsima: experiencing some issues with realloc calls where a strange behaviour is observed in massif data viewer tool.

Acutronic: Still investigation NuttX tools for getting runtime measurements.

Bosch: NuttX and Linux memory measure will be in the default standard library implementation.

Renesas: We are working on a NuttX implementation for RX65N chips. Do you have measured ST32 memory?

Acutronic: Made tests on Olimex. Executing basic complete micro-ROS stack with a client:

  • RAM: 36KB (of 192KB)
  • Flash: 383 KB (of 1MB)

Bosch: Most of the issues with memory usage reside in the CPP layers.

ROS 2 TSC

Bosch: Next TSC meeting will discuss the formation of real-time and safety WGs. Real time working group could be interested in the static memory allocations as well.

PIAP: Can we join?

Bosch: TSC is only open for organisations participating to the ROS 2 core. Working groups are open to the general public.

Next SIG meeting

In 6-8 weeks

AP: Add static compilation of types support to the micro-ROS documentation.