rmw
defines an interface of middleware primitives that are used by the higher level ROS API's. It consists of these main components:
- Initialization and Shutdown:
- Nodes
- Publisher
- Subscription
- Service Client
- Service Server
There are some common utility functions in combination with "Topics" or "Services":
- A function to validate a fully qualified topic or service name
- A function to validate a node's namespace
- A function to validate a node's name
- A function to validate the compatibility of two QoS profiles
It also has some machinery that is necessary to wait on and act on these concepts:
- Initialization and shutdown management (global for now)
- Wait sets for waiting on messages and service requests / responses to be ready
- Guard conditions for waking up wait sets asynchronously
- Introspection of the ROS graph
Further still there are some useful abstractions and utilities:
- Allocator functions for various types
- Error handling functionality (C style)
- Macros
- Return code types and other utility types
- Sanity checks for some of the types
- Macros for controlling symbol visibility on the library
- Utility function to demangle a type to a human readable string (C++ specific):