These reference applications simulate a few components using types and services
from the public UMAA 6 standard. The intention here was to minimize application
code and highlight the ease of access to the writers/readers and their usage.
Note: This example only instantiates DDS entities (readers, writers, participants) and does not implement UMAA application layer requirements such as Flow Control, Large Collections, or Generalizations/Specializations. It is intended as an alternative framework approach to the official UMAA C++ SDKs released by AUVSI.
There are currently ~40 components defined by UMAA of which 9 are Distro A.
(components/UMAA Component Definitions v1.0.pdf)
By inspecting the start_component.sh script we can see how components can be
instantiated from Modern C++ or Python apps using the same DDS configuration files.
It takes advantage of Connext's XML-Based Application Creation framework
to define and manage all of the messaging entities with XML files.
This lends itself well to the common use case of simulation/test apps in Python
correlating with deployed apps in Modern C++.
Recommended for large systems where there is a clear delineation between systems and software engineering.
XML definition of DDS entities allows for a single point of configuration/definition
of a DDS system.
Applications developed in API's such as C++ or Python can have a single point of system definition/configuration.
The downside is a close coupling of configs to application development which could add
additional administrative overhead.
- Components are defined in
./components - UMAA Domain (Topics/Types) is defined in
./domain
NOTE:umaa_domain_lib.xmlis inherited into the component definitions.
This file contains all types/topics defined for UMAA 6.0 and can be reused for your own development if desired. - QoS profiles are defined in
../../qos
All 3 sets of XML files are consumed in the ./start_component.sh script.
Reference the Connext Getting Started guides to complete the below:
- Linux-based OS or WSL.
- Connext 7.3.0 Host/Target install
- Python API setup
- Setup Connext Environment Variables
- Ubuntu 20.04
- Connext 6.1.2(C++11)/Connext 7.3.0(C++11,Python)
See the top-level README build instructions for cloning, environment setup, and building.
To build just this example:
cd build
make xml_app_autopilotExecutable is output to: build/cpp/xml-app-framework/xml_app_autopilot
arg1: component name: [autopilot, usvnav, logging, globalvectorcmd]
arg2: Domain ID to override <components>.xml definition
cd cpp/xml-app-framework
./start_component.sh autopilot 1This reference application provides XML definition for all the entities in
the UMAA AutoPilot component and showcases accessing those entities to read/write data using features
such as listeners and AsyncWaitset.
NOTE: The commands don't implement the UMAA command state pattern("Flow Control") as
that is outside the current scope of this middleware example.
arg1: component name: [autopilot, usvnav, logging, globalvectorcmd]
arg2: Domain ID to override <components>.xml definition
cd xml-app-framework
./start_component.sh usvnavThis reference application provides XML definition for all the entities in
the UMAA USVNav component and showcases accessing those entities to read/write data
arg1: component name: [autopilot, usvnav, logging, globalvectorcmd]
arg2: Domain ID to override <components>.xml definition
cd xml-app-framework
./start_component.sh loggingThis reference application provides XML definition for all the entities in
the UMAA Logging component and showcases accessing those entities to read/write data
arg1: component name: [autopilot, usvnav, logging, globalvectorcmd]
arg2: Domain ID to override <components>.xml definition
cd xml-app-framework
./start_component.sh globalvectorcmdThis script publishes messages of the GlobalVectorCommandType to reference
reception into the AsyncWaitset of the AutoPilot component.