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.