Madrid, November 2020
During the latest year, we have integrated many features and tools for ROS 2 Foxy. Here is a list of the most important items in no specific order:
Better Performance
- Shared Memory Transport: The best performance for intra and interprocess communications. The shared memory transport has been available since one year ago, but we have been iterating towards a zero-copy transport we are releasing next month, and you can make use of some intermediate performance improvements with our latest 2.1 release.
Better Quality
- Quality Level 1: Fast DDS exposes the best quality among all the ROS2 DDS supported implementations: QL1
Better Security
- Now Fast DDS includes not only the mandatory DDS security plugin (Encryption, Authentication and Access control), but also the security logging plugin, thanks to the contribution of canonical.
More Tools
- ROS2 Discovery Server: The solution for heterogeneous and lossy networks and large deployments. We released the discovery server 1.0 several months ago, but our new release 2.0 is a totally new discovery server. The discovery traffic is reduced up to 90% with respect to the traditional DDS discovery mechanism.
- ROS2 Integration Service: As a result of a collaboration between Open Robotics and eProsima, we released the Integration Service, a tool to integrate ROS2 with other protocols & enable ROS2 over WAN/Internet. We demonstrated this tool past week with this cool demo.
- Micro-ROS: The solution for Microcontrollers. We coordinate Micro-ROS and the embedded WG, and the middleware behind this project is our Micro XRCE-DDS, the standard extension of DDS for microcontrollers. All the suite is ready for Foxy, and during the last months we have added tons of new features, new supported hardware, new supported RTOS (Zephyr, FreeRTOS, NuttX, and more coming), and also Arduino
Real-Time Support
Also, let’s review some previous features included in Fast DDS & ROS 2 Foxy but now widely known, for example for real-time applications:
- Static Allocations: A feature for real-time applications. Allocating and deallocating memory implies some non-deterministic time consuming operations. Therefore, most real-time systems need to operate in a way that all dynamic memory is allocated during the application initialization, avoiding memory management operations in the main loop.
If the user provides some parameters, for example, the maximum number of participants, publishers, and subscribers, Fast DDS is able to pre-allocate this memory, avoiding future dynamic allocations.
We have a comprehensive guide on how to use this feature and a complete use case example.
- Non-Blocking Calls: Real-time applications need predictable behavior, including a predictable maximum time since a function is called until it returns control. In order to comply with this restriction, Fast DDS can be configured to limit the maximum blocking time of these functions. If the blocking time limit is exceeded, the requested operation is aborted and function terminated, returning the control to the caller.
Both features are available since Eloquent, actually.
More Features:
- Async and Sync publication mode: Depending on the application you could need Sync or Async Publishing. ROS 2 is Asynchronous by default, as it was ROS 1, and this is the behavior expected by most users, but we also support Synchronous. You can choose the behavior by just changing a parameter in an XML file.
- DDS-XTypes APIs: This is an advanced feature allowing the user to create its data types at runtime without defining them on an IDL file in advance. You can use this feature for many applications, for example, we use dynamic types in the ROS 2 Integration Service, to create ROS 2 or DDS data types on the fly when routing information between two domains, WAN connections, or integrations with other protocols.
- The XTypes can be used in combination with Topic and Data Type Discovery. You can information in our online docs: Discovery-Time Data Typing and Type Lookup Service
- Multi-Network interface cards support and white list: Having more than one interface? No problem. Fast DDS uses all available network interfaces by default, except when the user configures a whitelist on the transport.
- Static Discovery: Sometimes you have a completely static system in a final application: You know in advance all the nodes you have, and the topics that nodes are publishing or subscribing to. In that case, you can use static discovery, an ultra-fast discovery mechanism that uses the name of the remote participant to lookup the full configuration from an XML file (topics, publishers, subscribers, QoS settings) simplifying the discovery process, saving bandwidth, and minimizing the start-up time.
- Persistence: ROS 2 allows you to send the history of published samples to late joining subscribers. By default, this history is maintained in the publisher memory, but if you want a level more of persistence, Fast DDS allows you to set-up that history to be saved in persistent storage -a database-, us adding robustness to applications in the case of, for example, unexpected shutdowns. Configuring the persistence service, publishers and subscribers can resume their operation from the state in which they were when the shutdown occurred.
- XML Profiles: Every feature can be set up using the Fast DDS XML profiles. No code required. Easy and Fast deployment of your application.
This was just a list in no specific order of things you can already do in Foxy with Fast DDS. We have a really comprehensive online doc, and we are continuously adding interesting use cases and tutorials, to both our docs and ROS 2 documentation.
MORE INFORMATION ABOUT EPROSIMA FAST DDS:
For any questions please contact