Skip to content

Commit

Permalink
Merge pull request #455 from eProsima/feature/ExternalQD
Browse files Browse the repository at this point in the history
Update Quality Declarations and READMEs
  • Loading branch information
JaimeMartin authored Oct 6, 2020
2 parents 27711b9 + 5ae7e78 commit 401c777
Show file tree
Hide file tree
Showing 7 changed files with 261 additions and 34 deletions.
30 changes: 22 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# ROS 2 Middleware Implementation for eProsima's Fast-RTPS
# ROS 2 Middleware Implementation for eProsima's Fast DDS

`rmw_fastrtps` constitutes __[ROS 2](https://index.ros.org/doc/ros2/) default middleware implementation__, providing an interface between ROS 2 and [eProsima's](https://www.eprosima.com/index.php) [Fast-RTPS](https://github.com/eProsima/Fast-RTPS) middleware.
`rmw_fastrtps` constitutes __[ROS 2](https://index.ros.org/doc/ros2/) default middleware implementation__, providing an interface between ROS 2 and [eProsima's](https://www.eprosima.com/index.php) [Fast DDS](https://github.com/eProsima/Fast-DDS) middleware.

## Getting started
This implementation is available in all ROS 2 distributions, both from binaries and from sources.
You do not need to do anything in order to use Fast-RTPS as your ROS 2 middleware layer (since it is the default implementation).
You do not need to do anything in order to use Fast DDS as your ROS 2 middleware layer (since it is the default implementation).
However, you can still specify it in two different ways:

1. Exporting `RMW_IMPLEMENTATION` environment variable:
Expand All @@ -18,7 +18,7 @@ However, you can still specify it in two different ways:

## Two different RMW implementations

`rmw_fastrtps` actually provides not one but two different ROS 2 middleware implementations, both of them using Fast-RTPS as middleware layer: `rmw_fastrtps_cpp` and `rmw_fastrtps_dynamic_cpp` (note that directory `rmw_fastrtps_shared_cpp` just contains the code that the two implementations share, and does not constitute a layer on its own).
`rmw_fastrtps` actually provides not one but two different ROS 2 middleware implementations, both of them using Fast DDS as middleware layer: `rmw_fastrtps_cpp` and `rmw_fastrtps_dynamic_cpp` (note that directory `rmw_fastrtps_shared_cpp` just contains the code that the two implementations share, and does not constitute a layer on its own).

The main difference between the two is that `rmw_fastrtps_dynamic_cpp` uses introspection typesupport at run time to decide on the serialization/deserialization mechanism.
On the other hand, `rmw_fastrtps_cpp` uses its own typesupport, which generates the mapping for each message type at build time.
Expand All @@ -28,11 +28,11 @@ You can however set it to `rmw_fastrtps_dynamic_cpp` using the environment varia

## Advance usage

`rmw_fastrtps` sets some of the Fast-RTPS configurable parameters:
`rmw_fastrtps` sets some of the Fast DDS configurable parameters:
* History memory policy: `PREALLOCATED_WITH_REALLOC_MEMORY_MODE`
* Publication mode: `ASYNCHRONOUS_PUBLISH_MODE`

However, it is possible to fully configure Fast-RTPS (including the history memory policy and the publication mode) using an XML file as described in [Fast-RTPS documentation](https://eprosima-fast-rtps.readthedocs.io/en/latest/xmlprofiles.html).
However, it is possible to fully configure Fast DDS (including the history memory policy and the publication mode) using an XML file as described in [Fast DDS documentation](https://fast-dds.docs.eprosima.com/en/latest/fastdds/xml_configuration/xml_configuration.html).
Then, you just need to set environment variable `RMW_FASTRTPS_USE_QOS_FROM_XML` to 1 (it is set to 0 by default).
This tells `rmw_fastrtps` that it should not override neither the history memory policy nor the publication mode.

Expand All @@ -42,9 +42,9 @@ You have two ways of telling you ROS 2 application which XML to use:

## Example

The following example configures Fast-RTPS to publish synchronously, and to have a pre-allocated history that can be expanded whenever it gets filled.
The following example configures Fast DDS to publish synchronously, and to have a pre-allocated history that can be expanded whenever it gets filled.

1. Create a Fast-RTPS XML file with:
1. Create a Fast DDS XML file with:

```XML
<?xml version="1.0" encoding="UTF-8"?>
Expand Down Expand Up @@ -78,3 +78,17 @@ The following example configures Fast-RTPS to publish synchronously, and to have
```bash
FASTRTPS_DEFAULT_PROFILES_FILE=<path_to_xml_file> RMW_FASTRTPS_USE_QOS_FROM_XML=1 RMW_IMPLEMENTATION=rmw_fastrtps_cpp ros2 run demo_nodes_cpp listener
```

## Quality Declaration files

Quality Declarations for each package in this repository:

* [`rmw_fastrtps_shared_cpp`](rmw_fastrtps_shared_cpp/QUALITY_DECLARATION.md)
* [`rmw_fastrps_cpp`](rmw_fastrtps_cpp/QUALITY_DECLARATION.md)
* [`rmw_fastrtps_dynamic_cpp`](rmw_fastrtps_dynamic_cpp/QUALITY_DECLARATION.md)

Quality Declarations for the external dependencies of these packages can be found in:

* [Fast DDS Quality Declaration](https://github.com/eProsima/Fast-DDS/blob/master/QUALITY.md)
* [Fast CDR Quality Declaration](https://github.com/eProsima/Fast-CDR/blob/master/QUALITY.md)
* [`foonathan_memory` Quality Declaration](https://github.com/eProsima/Fast-DDS/blob/master/Quality_Declaration_foonathan_memory.md)
28 changes: 14 additions & 14 deletions rmw_fastrtps_cpp/QUALITY_DECLARATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ All pull requests must resolve related documentation changes before merging.
### Feature Documentation [3.i]

Some of the `rmw_fastrtps_cpp` features are documented on the repository level [README](../README.md).
Much of Fast RTPS itself has feature documentation [hosted publicly](https://fast-rtps.docs.eprosima.com/en/latest).
Much of Fast DDS itself has feature documentation [hosted publicly](https://fast-dds.docs.eprosima.com/en/latest/).

### Public API Documentation [3.ii]

Expand Down Expand Up @@ -114,7 +114,7 @@ Changes are required to make a best effort to keep or increase coverage before b
Current coverage statistics can be viewed [here](https://ci.ros2.org/job/ci_linux_coverage/lastSuccessfulBuild/cobertura/src_ros2_rmw_fastrtps_rmw_fastrtps_cpp_src/).

This package claims to meet the coverage requirements for the current quality level, even though it doesn't have 95% line coverage.
The justification is that the only uncovered lines have to do with system resource exhaustion and Fast-DDS internal failure.
The justification is that the only uncovered lines have to do with system resource exhaustion and Fast DDS internal failure.

A summary of how these statistics are calculated can be found in the [ROS 2 On-boarding guide](https://index.ros.org/doc/ros2/Contributing/ROS-2-On-boarding-Guide/#note-on-coverage-runs).

Expand All @@ -133,24 +133,24 @@ Results of the nightly linter tests can be found [here](https://ci.ros2.org/view
### Direct Runtime ROS Dependencies [5.i]/[5.ii]

`rmw_fastrtps_cpp` has the following runtime ROS dependencies:
* `fastrtps_cmake_module`
* `rcutils`
* `rmw`
* `rmw_dds_common`
* `rmw_fastrtps_shared_cpp`
* `rosidl_runtime_c`
* `rosidl_runtime_cpp`
* `rosidl_typesupport_fastrtps_c`
* `rosidl_typesupport_fastrtps_cpp`
* `fastrtps_cmake_module`: [QUALITY DECLARATION](https://github.com/ros2/rosidl_typesupport_fastrtps/blob/master/fastrtps_cmake_module/QUALITY_DECLARATION.md)
* `rcutils`: [QUALITY DECLARATION](https://github.com/ros2/rcutils/blob/master/QUALITY_DECLARATION.md)
* `rmw`: [QUALITY DECLARATION](https://github.com/ros2/rmw/blob/master/rmw/QUALITY_DECLARATION.md)
* `rmw_dds_common`: [QUALITY DECLARATION](https://github.com/ros2/rmw_dds_common/blob/master/rmw_dds_common/QUALITY_DECLARATION.md)
* `rmw_fastrtps_shared_cpp`: [QUALITY DECLARATION](https://github.com/ros2/rmw_fastrtps/blob/master/rmw_fastrtps_shared_cpp/QUALITY_DECLARATION.md)
* `rosidl_runtime_c`: [QUALITY DECLARATION](https://github.com/ros2/rosidl/blob/master/rosidl_runtime_c/QUALITY_DECLARATION.md)
* `rosidl_runtime_cpp`: [QUALITY DECLARATION](https://github.com/ros2/rosidl/blob/master/rosidl_runtime_cpp/QUALITY_DECLARATION.md)
* `rosidl_typesupport_fastrtps_c`: [QUALITY DECLARATION](https://github.com/ros2/rosidl_typesupport_fastrtps/blob/master/rosidl_typesupport_fastrtps_c/QUALITY_DECLARATION.md)
* `rosidl_typesupport_fastrtps_cpp`: [QUALITY DECLARATION](https://github.com/ros2/rosidl_typesupport_fastrtps/blob/master/rosidl_typesupport_fastrtps_cpp/QUALITY_DECLARATION.md)

It has several "buildtool" dependencies, which do not affect the resulting quality of the package, because they do not contribute to the public library API.
It also has several test dependencies, which do not affect the resulting quality of the package, because they are only used to build and run the test code.

### Direct Runtime Non-ROS Dependencies [5.iii]

`rmw_fastrtps_cpp` has the following runtime non-ROS dependencies.
* `fastcdr`
* `fastrtps`
* `fastcdr`: *eProsima Fast CDR* claims to be Quality Level 2. For more information, please refer to its [QUALITY DECLARATION](https://github.com/eProsima/Fast-CDR/blob/master/QUALITY.md)
* `fastrtps`: *eProsima Fast DDS* claims to be Quality Level 2. For more information, please refer to its [QUALITY DECLARATION](https://github.com/eProsima/Fast-DDS/blob/master/QUALITY.md)

## Platform Support [6]

Expand Down Expand Up @@ -196,7 +196,7 @@ The chart below compares the requirements in the REP-2004 with the current state
|3.v.b| Centralized declaration available for peer review ||
|4| **Testing** | --- |
|4.i| Feature items tests ||
|4.ii| Public API tests | None |
|4.ii| Public API tests | * |
|4.iii.a| Using coverage ||
|4.iii.a| Coverage policy ||
|4.iv.a| Performance tests (if applicable) ||
Expand Down
4 changes: 2 additions & 2 deletions rmw_fastrtps_cpp/README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# `rmw_fastrtps_cpp`

`rmw_fastrtps_cpp` implements the ROS middleware interface using eProsima FastRTPS static code generation in C++.
`rmw_fastrtps_cpp` implements the ROS middleware interface using eProsima Fast DDS static code generation in C++.

For more information see the repository level [README](../README.md)

## Quality Declaration

This package claims to be in the **Quality Level 3** category, see the [Quality Declaration](QUALITY_DECLARATION.md) for more details.
This package claims to be in the **Quality Level 2** category, see the [Quality Declaration](QUALITY_DECLARATION.md) for more details.
Loading

0 comments on commit 401c777

Please sign in to comment.