We (@ishugoel and I) will be attending this meeting.
Yes we are available
We created a POC StaticExecutor for rclcpp that can be added without breaking existing source code. If someone wants to use the StaticExecutor instead of the SingleThreaded executor, this only requires a change to one line of code at user-code level.
The code and preliminary results can be found here https://github.com/nobleo/rclcpp-static-executor. This StaticExecutor significantly reduces CPU usage. We can quickly explain how we changed the existing executor. We have aligned with Ingo and his team to collaborate on a better executor for ROS2. Our focus is on optimization whereas Ingo and his team are working on proper scheduling, both of which are important for RT.
The version we will discuss is a POC on the latest stable dashing release. We are currently also working on a PR (master) version.
Thanks for the invitation. I’m available.
These would be my topics:
go via AIs from the last meeting
discuss probably the goals of the RT WG (Personally I’m not sure I understand them, and during the last meeting I got a feeling that those goals are quite different for the RT WG participants)
Topic: ROS2 Real-time Working Group Online Meeting 3 - Oct 2, 2019, 7AM PDT (UTC-7)
Time: Oct 2, 2019 07:00 AM Pacific Time (US and Canada)
Join Zoom Meeting
Meeting ID: 571 727 736
Password: 074189
One tap mobile
+16699006833,571727736# US (San Jose)
+19294362866,571727736# US (New York)
Dial by your location
+1 669 900 6833 US (San Jose)
+1 929 436 2866 US (New York)
Meeting ID: 571 727 736
Find your local number: https://zoom.us/u/aAmxdSnyw
I’ve made a small presentation that shows the differences between the current executor and our proposal. I think it is easy to follow even for people who don’t have a deep understanding of how the current executor works. I will need about 10-15 min. to explain the executors and their differences, but I will need presenter view for this (screen-sharing). Is this possible? I have no experience with Zoom Meetings.
The presentation will be quite short, but if people are interested we can have a discussion after the presentation about the possible next steps and features people require. The executor we made shows possible CPU gains and gives an alternative for specific use-cases, but a proper all-round executor will need additional features.
Features that are currently on the TODO list:
Different scheduling mechanism (Bosch, create RT safe scheduling, add priority)
Semi-dynamic setup (Nobleo, rebuild the system based on event triggers, i.e. something added to a node)
In that thread I proposed an overall goal which would be to make ROS 2 hard real time. This would then mean that we’d need to “analyse an entire stack, from the hardware platform to the applications written with ROS 2” and improve the realtime across the entire stack.
However the guys have, rightfully so, convinced me that this is simply too much work and it depends too much on the use case and selected underlying stack (ECU, RTOS, network interfaces, …).
As a result we agreed to work on the following sub-goals:
Provide a use case description and requirements
Implement real-time able rmw (single threaded, static executor)
Present findings on real-time audit in rcutils, rcl and rclcpp and continue improving
Create a shared repository for tools for static and dynamic code analysis and tracing
Additional goals are of course welcome but we will also need someone to work on them.
Yes, I’m happy to join any meeting you think I could help with, please ping me directly for each meeting you’d like me to attend. If you need me on a regular basis I can do that too, though selfishly I’m trying to stay out of the way as much as possible.
Discourse won’t let me upload the presentation as a powerpoint and the presentation in pdf format is not really usable (the transition of images on a single slide is how I show the working of the executors). Instead I will share some links here, while I look for a way to share the powerpoint.
rclcpp Dashing this link contains a README where the executors are explained with flowcharts. The flowcharts + explanations get the ideas across of each executor.
rclcpp Master fork This is the fork we use for the pull request that is up to date with master (slightly behind by now probably).
Hopefully this gets everyone what they are looking for. If you want more information or help with the code or understanding the STE or static executor, don’t hesitate to send me a message.
I do not have a lot of experience making flowcharts, nor do I know the exact rules to making them. I hope that despite the inaccuracies they are still readable. Sorry for the possible inconvenience.
I added the powerpoint that I used during the meeting for my presentation to rclcpp Dashing in the presentation folder. Please let me know if it works by downloading it and looking at it in presentation view (to cycle through the images).
Sidenote: The dashing version now uses the nodes’ guard_conditions as event trigger to rebuild the executable list and the wait-set. Making the use of the static executor less restrictive (semi-dynamic, rebuild only when necessary). We will continue work on a master (eloquent) version and look into a multi-threaded version.