rcl
consists of functions and structs (pure C) organized into ROS concepts:
- Nodes
- Publisher
- Subscription
- Service Client
- Service Server
- Timer
There are some functions for working with "Topics" and "Services":
- A function to validate a topic or service name (not necessarily fully qualified):
- A function to expand a topic or service name to a fully qualified name:
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/service requests and responses/timers to be ready
- Guard conditions for waking up wait sets asynchronously
- Functions for introspecting and getting notified of changes of the ROS graph
Further still there are some useful abstractions and utilities:
- Allocator concept, which can used to control allocation in
rcl_*
functions
- Concept of ROS Time and access to steady and system wall time
- Error handling functionality (C style)
- Macros
- Return code types
- Macros for controlling symbol visibility on the library