{"id":13762058,"url":"https://github.com/osrf/nexus","last_synced_at":"2025-07-07T17:03:35.952Z","repository":{"id":200627695,"uuid":"631622242","full_name":"osrf/nexus","owner":"osrf","description":"Core packages of Nexus","archived":false,"fork":false,"pushed_at":"2024-10-18T09:13:00.000Z","size":4551,"stargazers_count":28,"open_issues_count":6,"forks_count":7,"subscribers_count":8,"default_branch":"main","last_synced_at":"2024-10-19T12:45:45.066Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/osrf.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2023-04-23T15:51:36.000Z","updated_at":"2024-10-18T16:01:27.000Z","dependencies_parsed_at":"2023-10-17T11:22:35.231Z","dependency_job_id":"2a67f597-4d26-48fc-a321-cbd6e001ceed","html_url":"https://github.com/osrf/nexus","commit_stats":null,"previous_names":["osrf/nexus"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osrf%2Fnexus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osrf%2Fnexus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osrf%2Fnexus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osrf%2Fnexus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/osrf","download_url":"https://codeload.github.com/osrf/nexus/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224970216,"owners_count":17400292,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":"2024-08-03T14:00:34.345Z","updated_at":"2025-05-10T14:31:19.927Z","avatar_url":"https://github.com/osrf.png","language":"C++","funding_links":[],"categories":["Software Packages"],"sub_categories":["Application-Specific Packages"],"readme":"# NEXUS\n[![style](https://github.com/osrf/nexus/actions/workflows/style.yaml/badge.svg)](https://github.com/osrf/nexus/actions/workflows/style.yaml)\n[![integration_tests](https://github.com/osrf/nexus/actions/workflows/nexus_integration_tests.yaml/badge.svg)](https://github.com/osrf/nexus/actions/workflows/nexus_integration_tests.yaml)\n[![workcell_editor](https://github.com/osrf/nexus/actions/workflows/nexus_workcell_editor.yaml/badge.svg)](https://github.com/osrf/nexus/actions/workflows/nexus_workcell_editor.yaml)\n\n![](./docs/media/nexus_architecture.png)\n\nA ROS 2 framework which enables configuration and orchestration of process workflows for both individual robotic cells and sets of cells (line). NEXUS facilitates the integration of hardware agnostic industrial robotics and traditional automation components, specifying each cell or line processes through re-configurable behaviour trees. Cells in a line, or hardware components in a cell, can be triggered concurrently or sequentially according to recipes, managed through the orchestrator, departing from traditional Programmable Logic Controllers.\n\nFor details on architecture and concepts [see](./docs/concepts.md).\n\n## Requirements\n* [ROS 2 Jazzy](https://docs.ros.org/en/jazzy/Installation/Ubuntu-Install-Debians.html) on `Ubuntu 24.04`\n\n## Setup\n\n### Install system dependencies\nWhile `cargo` and `rustc` can be installed via rosdep, the version that available is\nv1.66 on most target platforms. However most dependencies require newer versions of `cargo` and `rustc`.\nHence for now, we will install the latest version manually.\nTODO: Consider adding this dep back for J turtle if Ubuntu 24.04 has the newer.\ncargo and rustc pkgs.\n\n```bash\nsudo apt update \u0026\u0026 sudo apt install curl\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n```\n\n### Setup the NEXUS workspace\n\n```bash\nmkdir ~/ws_nexus/src -p\ncd ~/ws_nexus/src/\ngit clone git@github.com:osrf/nexus\nvcs import . \u003c nexus/abb.repos\ncd ~/ws_nexus\nrosdep install --from-paths src --ignore-src --rosdistro jazzy -y -r\n```\n\n### Build the NEXUS workspace\n```bash\nsource /opt/ros/jazzy/setup.bash\ncolcon build --cmake-args -DCMAKE_BUILD_TYPE=Release\n```\n\n## Configuration\n\nThe workcell and system orchestrators rely on behavior trees for orchestration. `NEXUS` provides several BT skills that may be reused for a variety of applications.\nSee sample BTs for [system_orchestrator](nexus_demos/config/system_orchestrator_bt.xml) and [workcell_orchestrator](nexus_demos/config/workcell_1_bts/place_on_conveyor.xml) for a pick \u0026 place application.\n\nAt present, capabilities are registered as plugins with the `orchestrator` at runtime.\nWe support [these capabilities](./nexus_capabilities/src/capabilities/plugins.xml) out of the bo\nEach plugin may register one or more behavior tree nodes which can then be used to define processes as seen in the `place_on_conveyor.xml`.\nThe framework to register capabilities and map them to processes that can be performed in ongoing work. See [this discussion](https://github.com/osrf/nexus/discussions/32) for more details.\n\n### Visualization [experimental]\n![](./docs/media/bt_example.png)\n\nAt present, behavior trees can be viewed and modified using [Groot](https://github.com/BehaviorTree/Groot). Once `Groot` is launched, click \"Load palette from file\" and select [nexus_tree_nodes.xml](./nexus_tree_nodes.xml). Then any of the configured BTs can be loaded via the \"Load Tree\" button.\nA current limitation of this approach is the need to manually update the palette file when the plugins loaded by a task capability changes. In the future, the goals is to more closely couple the generation of this file and the skill plugins the orchestrators are capable of loading.\n\n### Generating Zenoh bridge configurations\n\nThe script in `nexus_network_configuration` helps to simplify configuration of Zenoh bridges for multiple machines. The Zenoh bridge files are generated from [NEXUS Network Configuration](nexus_demos/config/zenoh/nexus_network_config.yaml) and [nexus_endpoints.redf.yaml](./nexus_endpoints.redf.yaml). After configuring the [NEXUS Network Configuration](nexus_demos/config/zenoh/nexus_network_config.yaml), you can run `ros2 run nexus_network_configuration nexus_network_configuration -n \u003cPATH_TO_NEXUS_NETWORK_CONFIG\u003e -r \u003cPATH_TO_REDF_CONFIGS\u003e -o \u003cZENOH_CONFIGS_OUTPUT_DIRECTORY\u003e` to generate the Zenoh bridges.\n\nFurther detailed instructions on running the Zenoh bridges with said configurations are in the [package README](nexus_network_configuration/README.md)\n\n## Demos\n\n![](./docs/media/nexus_demo.png)\n\nFollow instructions [here](nexus_demos/README.md) to run pick and place demonstrations with a line comprising of two workcells that perform different types of tasks.\n\n## Generating Endpoints\n\nThe `nexus_endpoints` package contains ROS topics, services and actions used by NEXUS. The package is generated from [nexus_endpoints.redf.yaml](./nexus_endpoints.redf.yaml) using `redf`. rust is required to generated the package, the easiest way to install rust is via [rustup](https://rustup.rs/).\n\nWith rust installed, clone the redf repo at https://github.com/osrf/redf, then run\n```bash\ncargo install --path .\n```\n\nWith redf installed, run `generate_endpoints.sh` to generate the package.\n\n## Contributing\nAll contributions are welcome! Please ensure the following guidelines are followed when submitting pull requests:\n\n### Signed commits\n* Ensure all commits are [signed](https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits).\n\n### Endpoints\nEnsure your code does not directly import interface definitions or use hardcoded strings for ROS 2 endpoints.\nAll endpoint properties must be retrieved from [nexus_endpoints.hpp](nexus_endpoints/nexus_endpoints.hpp).\nIf an endpoint is missing, first add its definition to [nexus_endpoints.redf.yaml](./nexus_endpoints.redf.yaml) and then follow the instructions [above](#generating-endpoints) to re-generate `nexus_endpoints.hpp`.\n\n### Code style\n#### C++\nThe NEXUS codebase adheres to C++ style format as used in the [Open-RMF](https://github.com/open-rmf/rmf) project.\nThe linter of choice is `uncrustify` and the configuration used may be referenced [here](https://github.com/open-rmf/rmf_utils/blob/main/rmf_utils/test/format/rmf_code_style.cfg).\nInstead of invoking `uncrustify` directly, use `ament_uncrustify` instead which is a wrapper around a specific version of `uncrustify`.\nYou may locally run the linter as follows\n```bash\nsudo apt update \u0026\u0026 sudo apt install -y ros-jazzy-rmf-utils # This is a one-time step\nsource /opt/ros/jazzy/setup.bash\ncd ~/ws_nexus/src/nexus\nament_uncrustify -c /opt/ros/jazzy/share/rmf_utils/rmf_code_style.cfg . --language C++ --exclude nexus_endpoints/nexus_endpoints.hpp\n```\nTo automatically reformat the code, append `--reformat` to the `ament_uncrustify` line above.\nIt is highly recommended to audit the changes by the linter before committing.\n\n#### Python\nThe NEXUS codebase adheres to [PEP8](https://peps.python.org/pep-0008/) style format for python scripts.\nA linter such as `pycodestyle` may be used for linting.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fosrf%2Fnexus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fosrf%2Fnexus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fosrf%2Fnexus/lists"}