{"id":40917022,"url":"https://github.com/rticommunity/rticonnextdds-usecases-umaa","last_synced_at":"2026-01-22T03:16:43.012Z","repository":{"id":234007639,"uuid":"776106115","full_name":"rticommunity/rticonnextdds-usecases-umaa","owner":"rticommunity","description":null,"archived":false,"fork":false,"pushed_at":"2025-12-30T22:58:02.000Z","size":40964,"stargazers_count":3,"open_issues_count":1,"forks_count":0,"subscribers_count":7,"default_branch":"main","last_synced_at":"2026-01-03T22:09:38.440Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rticommunity.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-03-22T17:36:31.000Z","updated_at":"2025-10-21T00:09:15.000Z","dependencies_parsed_at":"2024-09-11T21:56:33.275Z","dependency_job_id":"4e58aba7-078e-4861-9ba8-9c076a8ed499","html_url":"https://github.com/rticommunity/rticonnextdds-usecases-umaa","commit_stats":null,"previous_names":["rticommunity/rticonnextdds-usecases-umaa"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rticommunity/rticonnextdds-usecases-umaa","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rticommunity%2Frticonnextdds-usecases-umaa","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rticommunity%2Frticonnextdds-usecases-umaa/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rticommunity%2Frticonnextdds-usecases-umaa/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rticommunity%2Frticonnextdds-usecases-umaa/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rticommunity","download_url":"https://codeload.github.com/rticommunity/rticonnextdds-usecases-umaa/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rticommunity%2Frticonnextdds-usecases-umaa/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28652051,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T01:17:37.254Z","status":"online","status_checked_at":"2026-01-22T02:00:07.137Z","response_time":144,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-22T03:16:42.957Z","updated_at":"2026-01-22T03:16:43.001Z","avatar_url":"https://github.com/rticommunity.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# UMAA Starter Kit\r\n\r\nA starting point for developing to the UMAA standard with Connext.\r\n\r\n- [Overview](#overview)\r\n- [UMAA Standard](#umaa-standard)   \r\n  Breakdown of UMAA standard from a DDS perspective\r\n- [Examples](#examples)\r\n  - [XML-Based Application Framework](#xml-based-application-framework)\r\n  - [Service Template Wrappers](#service-template-wrappers)\r\n  - [Dynamic Types Python](#dynamic-types-python)\r\n- [UMAA Data Types](#umaa-data-types)\r\n- [Best Practices](#best-practices)   \r\n  Recommendations and general guidelines\r\n- [CMAKE modules](#cmake-modules)\r\n- [Record/Replay/Convert](#recordreplayconvert-usage-examples)\r\n\r\n## Overview\r\n\r\nThis Starter Kit provides an entry point to developing with UMAA.  \r\nIt highlights usage of a few UMAA defined Components to simulate  \r\ninteraction between the different interfaces. \r\n\r\nIt showcases Connext's ability to easily instantiate UMAA components  \r\nusing either the Modern C++ or the Python APIs.  \r\nIt also highlights the option to manage DDS configuration of both systems with  \r\na centralized xml or compose UMAA services from template classes.\r\n\r\n\r\n## UMAA Standard\r\nLatest Version: 6.0 Distro A\r\n[Download from AUVSI](https://www.auvsi.org/unmanned-maritime-autonomy-architecture)\r\n\r\n**Note:** The AUVSI UMAA website now provides a Distro A SDK that includes reference code examples designed to be used with RTI Connext. \r\nThe UMAA SDK examples are currently considered the best path forward with regards to UMAA development.\r\nExamples in this repo are intended as alternatives re: setting up DDS for different use cases and could be integrated into the SDK if so desired.\r\n\r\nThe UMAA standard defines the following(as of 6.0):  \r\n- Middleware level:\r\n  - Data model(~600 data types in an IDL format)\r\n  - No QOS (Exception: Large Collections- PRESENTATION)\r\n  - Topics(“Interfaces”) per “Service”.\r\n- Application level:  \r\n  - Command state machine/handshaking(\"Flow Control\")\r\n  - Large data set synchronization(\"Large Collections\")\r\n  - Type extension(\"Generalizations/Specializations\")\r\n- Systems level:\r\n  - \"Components\": Collection of \"Interfaces\" defined in the UMAA MBSE model.\r\n    - **Note:** This starter kit provides an xml definition of the Autopilot and USVNAV component  \r\n      DDS entities based on our interpretation of the v1.0 Component Definitions release. \r\n    - There are currently ~40 components defined by UMAA of which 9 are Distro A.  \r\n      (`examples/xml-app-framework/components/UMAA Component Definitions v1.0.pdf`)\r\n    \r\n*NOTE:  \r\nThe application level requirements (i.e Flow Control/Large Collections/Generic-Specified types)  \r\nare outside of the current scope of this middleware reference starter kit.  \r\nSome application layer development would be required on top of the middleware infrastructure to   \r\nbe compliant with the UMAA standard. See the UMAA SDK from AUVSI for details.*\r\n\r\n## Examples\r\n\r\n### XML-Based Application Framework\r\n[Full Documentation](examples/xml-app-framework/README.md)\r\n\r\nCentralized XML configuration for DDS entities, components, and QoS profiles. Ideal for large systems with separate systems engineering teams managing configuration files independently from application code.\r\n\r\n**When to use:** You need strict separation between systems configuration and software development, or want a single source of truth for DDS infrastructure that can be shared across C++ and Python applications.\r\n\r\n### Service Template Wrappers\r\n[Full Documentation](examples/service-template-wrappers/README.md)\r\n\r\nC++ template classes that compose UMAA services programmatically with AsyncWaitset support. Provides flexibility to dynamically build components at runtime.\r\n\r\n**When to use:** You're doing rapid prototyping, need runtime flexibility to compose services, or prefer a code-centric approach over XML configuration.\r\n\r\n### Dynamic Types Python\r\n[Full Documentation](examples/dynamic-types-python/README.md)\r\n\r\nPython scripts using DynamicData API for runtime type instantiation without code generation. Perfect for testing, debugging, and simulating UMAA messages.\r\n\r\n**When to use:** You need quick debugging/testing without recompiling, want to simulate specific UMAA messages, or need flexible data inspection during development.\r\n\r\n## UMAA Data Types\r\nUMAA defines ~ 600 data types. This is what is used to determine the \"structure\" of the data being transported.  \r\nWith Connext, we use RTI Code Generator `rtiddsgen` ([manual](https://community.rti.com/static/documentation/connext-dds/current/doc/manuals/connext_dds_professional/code_generator/users_manual/code_generator/users_manual/UsersManual_Title.htm)) to generate code per the API being used.  \r\nThis code assists with construction and serialization/deserialization of these data structures.\r\n\r\n### C++11 data types\r\nFor the C++11 API, we generate helper headers and classes for all of the UMAA types  \r\nand then compile them into a single shared library.\r\n\r\nThis makes it more convenient to link your source code against when developing.   \r\n\r\nThe build system generates all Type support code into `build/umaa_cpp11_gen` and creates a shared library (`libumaa_types.so`) in `build/datamodel/lib`. \r\n\r\n### Python data types\r\nWith Python, `rtiddsgen` converts the types into Python modules that we can then reference in our Python scripts.  \r\nFor Python types there is a bug in RTIDDSGEN that doesn't resolve the include modules  \r\npaths correctly. (CODEGENII-2112)\r\n\r\nThe workaround is to export all the modules to a single folder and then we can add them to the `PYTHONPATH`.  \r\nYou can find the Python types have been pre-generated and added to the `datamodel/umaa/python_flat` folder for this example.\r\n\r\n## Best Practices\r\n### Increase Network Buffers\r\n[UMAA data types](#umaa-data-types) can tend to be very large individually(compressed up to 1 KB each) and even  \r\nmore so in aggregate.    \r\nDuring the automatic discovery process these are sent out to provide a definition of the  \r\ndata structure to allow for deserialization of the messages.  \r\n\r\nOn startup, this can cause local UDP buffers to get filled up and prevent the discovery sequence  \r\nfrom fully completing.  \r\n\r\nTo mitigate this on Linux systems, one of the options is to [increase the UDP buffers](https://community.rti.com/howto/improve-rti-connext-dds-network-performance-linux-systems).\r\n\r\n\r\n\r\n## CMAKE modules\r\nThis repo pulls in a git submodule from [rticonnextdds-cmake-utils](https://github.com/rticommunity/rticonnextdds-cmake-utils).  \r\n\r\nThe `rticonnextdds-cmake-utils` repo provides convenient CMAKE utils to find Connext, call `rtiddsgen` and pass in IDL files as an argument.\r\n\r\n### Build System Architecture\r\n**All builds must be performed from the repository root.** Standalone subfolder builds are not supported.\r\n\r\nThe build system generates UMAA type support code (~600 IDL files) into `build/umaa_cpp11_gen` and creates a shared library (`libumaa_types.so`) in `build/datamodel/lib`. Examples then link against this library.\r\n\r\n#### Building Everything\r\n```bash\r\n# Source the Connext environment script\r\nsource \u003cconnext_install_dir\u003e/resource/scripts/rtisetenv_\u003ctarget\u003e.bash\r\n# Example: source /opt/rti_connext_dds-7.3.0/resource/scripts/rtisetenv_x64Linux4gcc7.3.0.bash\r\n\r\n# Build all targets\r\nmkdir -p build \u0026\u0026 cd build\r\ncmake ..\r\nmake -j1  # Sequential build recommended due to large number of IDL targets\r\n```\r\n\r\n#### Building Individual Targets\r\nYou can build specific components without rebuilding everything:\r\n\r\n```bash\r\ncd build\r\n\r\n# Build just the datamodel library\r\nmake umaa_types\r\n\r\n# Build specific examples\r\nmake service_autopilot      # Service template wrappers example\r\nmake xml_app_autopilot      # XML-based framework example\r\n```\r\n\r\nExecutables are output to:\r\n- `build/examples/service-template-wrappers/service_autopilot`\r\n- `build/examples/xml-app-framework/xml_app_autopilot`\r\n\r\n**Note:** Individual IDL file targets are also available (e.g., `make LandmarkReportType.idl_datamodel`) if you need to regenerate specific types during development.\r\n\r\n## Record/Replay/Convert usage examples\r\nConnext includes a set of services that can capture selected DDS traffic and store in a SQLite database to allow for \r\nplayback/conversion at a later date. \r\n\r\nSome reference examples have been created for the workflow of recording, replaying and converting DDS messages.\r\n\r\n### Assets\r\n- [Recording Service Manual(7.3)](https://community.rti.com/static/documentation/connext-dds/7.3.0/doc/manuals/connext_dds_professional/services/recording_service/index.html)\r\n- [Docker Container Image](https://hub.docker.com/r/rticom/recording-service)  \r\n\r\n### Setup\r\n- Install Connext Host per [Connext Getting Started](https://community.rti.com/static/documentation/connext-dds/current/doc/manuals/connext_dds_professional/getting_started_guide/index.html) Guide  \r\n- Clone `rticonnextdds-usecases-umaa` repo  \r\n- Set `NDDSHOME` to your Connext Install Path.  \r\n- Publish DDS Data on Domain ID 1 using [XML App Framework's USVNAV Component](/examples/xml-app-framework/README.md#python-usvnav)\r\n\r\n### Record a \"Deploy\" scenario\r\nThis example logs a filtered subset of topics in a XCDR serialized format to a SQLite Database.   \r\n(Recording in a serialized format is more efficient for runtime usage.)       \r\n\r\nIt also rolls over every 1GB and uses a formatted naming convention for every index.    \r\nDomain ID: 1\r\n\r\n```sh\r\ncd services\r\n./start_record.sh deploy\r\n```\r\n\r\n### Record a \"Debug\" scenario\r\nThis example logs all topics in a JSON serialized(human readable) format to a SQLite Database.  \r\nDomain ID: 1\r\n\r\n```sh\r\ncd services\r\n./start_record.sh debug\r\n```\r\n\r\n### Replay \r\n\r\nWhen you \"replay\" DDS data what you are really doing is re-publishing the   \r\nmessages that were originally logged.  \r\n\r\nAs a writer of DDS data, your QoS then needs to meet or exceed any existing readers  \r\nwithin the current system.  \r\n\r\nYou can include your systems QoS with the following 2 steps:   \r\n\r\n1. Add the QoS XML file to the -cfgFile argument (see `services/start_replay.sh`):\r\n   ```bash\r\n   xml=\"./umaa_replay.xml;../qos/umaa_qos_lib.xml\"\r\n   ```\r\n\r\n2. Set the datawriter to use the desired QoS Profile (see `services/umaa_replay.xml`):\r\n   ```xml\r\n   \u003cdatawriter_qos base_name=\"umaa_qos_lib::topic_qos_assign\" /\u003e\r\n   ```\r\n\r\n#### Replay XCDR data\r\nThis example replays XCDR data logged from the \"Deploy\" scenario.  \r\nDomain ID: 1\r\n\r\n```sh\r\ncd services\r\n./start_replay.sh xcdr\r\n```\r\n\r\n#### Replay JSON data\r\nThis example replays JSON data logged from the \"Debug\" scenario.  \r\nDomain ID: 1\r\n\r\n```sh\r\ncd services\r\n./start_replay.sh json\r\n```\r\n\r\n### Convert XCDR to JSON\r\nThis example converts XCDR data logged from the \"Deploy\" scenario to JSON.  \r\nDomain ID: 1\r\n\r\n```sh\r\ncd services\r\n./start_convert.sh xcdr_to_json\r\n```\r\n\r\n### Convert XCDR to CSV\r\nThis example converts XCDR data logged from the \"Deploy\" scenario to CSV.    \r\nDomain ID: 1\r\n\r\n```sh\r\ncd services\r\n./start_convert.sh xcdr_to_csv\r\n\r\n```\r\n\r\n\r\n\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frticommunity%2Frticonnextdds-usecases-umaa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frticommunity%2Frticonnextdds-usecases-umaa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frticommunity%2Frticonnextdds-usecases-umaa/lists"}