diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6f51c3a540d..0f1664a5746 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,21 +1,42 @@ name: Test -on: [push, pull_request] +on: pull_request jobs: test: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v2 + - name: Checkout + uses: actions/checkout@v3 - name: Setup Python - uses: actions/setup-python@v1 + uses: actions/setup-python@v4 with: - python-version: 3.8 + python-version: '3.10' - name: Install dependencies with pip - run: | - pip install --no-warn-script-location --user --upgrade -r requirements.txt + run: pip install --no-warn-script-location --user -r requirements.txt -c constraints.txt - - run: make html - - run: make test + - name: Test doc8 + run: make test + + build: + needs: test + runs-on: ubuntu-22.04 + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + + - name: Setup Graphviz + uses: ts-graphviz/setup-graphviz@v1 + + - name: Install dependencies with pip + run: pip install --no-warn-script-location --user -r requirements.txt -c constraints.txt + + - name: Build the docs + run: make html diff --git a/.gitignore b/.gitignore index d1440c38911..0499adb29a1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ build/ +plugins/__pycache__ _build/ .idea/ .vscode/ diff --git a/.mergify.yml b/.mergify.yml index d010a4daaf7..bf25109cd1a 100644 --- a/.mergify.yml +++ b/.mergify.yml @@ -8,7 +8,6 @@ pull_request_rules: branches: - iron - humble - - foxy - name: backport at reviewers discretion conditions: @@ -19,7 +18,6 @@ pull_request_rules: branches: - iron - humble - - foxy - name: backport to iron at reviewers discretion conditions: @@ -38,12 +36,3 @@ pull_request_rules: backport: branches: - humble - - - name: backport to foxy at reviewers discretion - conditions: - - base=rolling - - "label=backport-foxy" - actions: - backport: - branches: - - foxy diff --git a/Makefile b/Makefile index fed8f298a07..669b8b6e860 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,11 @@ SOURCE = source OUT = build LINKCHECKDIR = $(OUT)/linkcheck -BUILD = python3 -m sphinx +PYTHON := python3 +ifeq ($(OS),Windows_NT) + PYTHON := python +endif +BUILD = $(PYTHON) -m sphinx OPTS =-c . help: @@ -12,7 +16,7 @@ help: multiversion: Makefile sphinx-multiversion $(OPTS) "$(SOURCE)" build/html - @echo "" > build/html/index.html + @echo "" > build/html/index.html python3 make_sitemapindex.py %: Makefile diff --git a/conf.py b/conf.py index efebb3a946f..f6f0a05435e 100644 --- a/conf.py +++ b/conf.py @@ -25,6 +25,7 @@ from docutils.parsers.rst import Directive sys.path.append(os.path.abspath('./sphinx-multiversion')) +sys.path.append(os.path.abspath('plugins')) # The suffix(es) of source filenames. @@ -81,7 +82,7 @@ 'sphinx_multiversion', 'sphinx_tabs.tabs', 'sphinx_rtd_theme', - 'sphinx_sitemap', + 'sphinx_sitemap_ros', ] # Intersphinx mapping @@ -125,10 +126,10 @@ smv_branch_whitelist = r'^(rolling|iron|humble|galactic|foxy|eloquent|dashing|crystal)$' -smv_released_pattern = r'^refs/(heads|remotes/[^/]+)/(humble|galactic|foxy|eloquent|dashing|crystal).*$' +smv_released_pattern = r'^refs/(heads|remotes/[^/]+)/(iron|humble|galactic|foxy|eloquent|dashing|crystal).*$' smv_remote_whitelist = r'^(origin)$' -smv_latest_version = 'humble' -smv_eol_versions = ['crystal', 'dashing', 'eloquent', 'galactic'] +smv_latest_version = 'iron' +smv_eol_versions = ['crystal', 'dashing', 'eloquent', 'foxy', 'galactic'] distro_full_names = { 'crystal': 'Crystal Clemmys', @@ -238,6 +239,8 @@ def generate(cls, app): 'canonical_url': os.path.relpath( canonical_url, redirect_url ), + # Skip entry into sitemap.xml with reason 'redirect'. + 'skip_sitemap': 'redirect', 'title': os.path.basename(redirect_url), 'metatags': redirect_html_fragment.format( base_url=app.config.html_baseurl, diff --git a/constraints.txt b/constraints.txt new file mode 100644 index 00000000000..dfc63ee198e --- /dev/null +++ b/constraints.txt @@ -0,0 +1,30 @@ +Jinja2==3.0.3 +MarkupSafe==2.0.1 +Pygments==2.11.2 +alabaster==0.7.12 +babel==2.8.0 +certifi==2020.6.20 +chardet==4.0.0 +imagesize==1.3.0 +importlib-metadata==4.6.4 +more-itertools==8.10.0 +packaging==21.3 +pbr==5.8.0 +pip==22.0.2 +pyparsing==2.4.7 +pytz==2022.1 +requests==2.25.1 +restructuredtext-lint==1.3.2 +roman==3.3 +setuptools==59.6.0 +six==1.16.0 +snowballstemmer==2.2.0 +Sphinx==4.3.2 +sphinx-copybutton==0.4.0 +sphinx-multiversion==0.2.4 +sphinx-rtd-theme==1.0.0 +sphinx-tabs==3.2.0 +stevedore==3.5.0 +urllib3==1.26.5 +wheel==0.37.1 +zipp==1.0.0 diff --git a/docker/image/Dockerfile b/docker/image/Dockerfile index 62462e88e65..b0dc465639f 100644 --- a/docker/image/Dockerfile +++ b/docker/image/Dockerfile @@ -3,7 +3,7 @@ # # docker build -f docker/image/Dockerfile . -FROM ubuntu:focal +FROM ubuntu:jammy ARG user=rosindex ARG uid=1000 @@ -15,7 +15,13 @@ RUN apt-get update && \ git-all \ graphviz \ make \ - python3-pip && \ + python3-doc8 \ + python3-docutils \ + python3-pip \ + python3-sphinx \ + python3-sphinx-copybutton \ + python3-sphinx-rtd-theme \ + python3-sphinx-tabs && \ rm -rf /var/lib/apt/lists/* RUN useradd -u $uid -m $user @@ -25,4 +31,4 @@ WORKDIR /tmp/doc_repository USER $user -CMD pip3 install --no-warn-script-location --user --upgrade -r requirements.txt && make multiversion +CMD pip3 install --no-warn-script-location --user -r requirements.txt -c constraints.txt && make multiversion diff --git a/plugins/sphinx_sitemap_ros.py b/plugins/sphinx_sitemap_ros.py new file mode 100644 index 00000000000..b76e437266e --- /dev/null +++ b/plugins/sphinx_sitemap_ros.py @@ -0,0 +1,238 @@ +# Copyright (c) 2013 Michael Dowling +# Copyright (c) 2017 Jared Dillard +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + + +''' +The implementation of this sphinx extensions is largely borrowed from the sphinx_sitemap extension +(version: https://github.com/jdillard/sphinx-sitemap/blob/3bd87ef166bc9f3758d360ad4d23b524668b161d/sphinx_sitemap/__init__.py) +with modifications made to add_html_link() to ignore any pages whose context contains the +'skip_sitemap' key. +''' + + +import os +import queue +from multiprocessing import Manager +from typing import Any, Dict, List, Optional +from xml.etree import ElementTree + +from sphinx.application import Sphinx +from sphinx.util.logging import getLogger + +__version__ = "0.0.1" + +logger = getLogger(__name__) + + +def setup(app: Sphinx) -> Dict[str, Any]: + """ + Sphinx extension setup function. + It adds config values and connects Sphinx events to the sitemap builder. + + :param app: The Sphinx Application instance + :return: A dict of Sphinx extension options + """ + app.add_config_value("site_url", default=None, rebuild="") + app.add_config_value( + "sitemap_url_scheme", default="{lang}{version}{link}", rebuild="" + ) + app.add_config_value("sitemap_locales", default=None, rebuild="") + + app.add_config_value("sitemap_filename", default="sitemap.xml", rebuild="") + + try: + app.add_config_value("html_baseurl", default=None, rebuild="") + except BaseException: + pass + + app.connect("builder-inited", record_builder_type) + app.connect("html-page-context", add_html_link) + app.connect("build-finished", create_sitemap) + + return { + "parallel_read_safe": True, + "parallel_write_safe": True, + "version": __version__, + } + + +def get_locales(app: Sphinx) -> List[str]: + """ + Get a list of locales from the extension config or automatically detect based + on Sphinx Application config. + + :param app: The Sphinx Application instance + :return: A list of locales + """ + # Manually configured list of locales + sitemap_locales: Optional[List[str]] = app.builder.config.sitemap_locales + if sitemap_locales: + # special value to add nothing -> use primary language only + if sitemap_locales == [None]: + return [] + + # otherwise, add each locale + return [locale for locale in sitemap_locales] + + # Or autodetect locales + locales = [] + for locale_dir in app.builder.config.locale_dirs: + locale_dir = os.path.join(app.confdir, locale_dir) + if os.path.isdir(locale_dir): + for locale in os.listdir(locale_dir): + if os.path.isdir(os.path.join(locale_dir, locale)): + locales.append(locale) + return locales + + +def record_builder_type(app: Sphinx): + """ + Determine if the Sphinx Builder is an instance of DirectoryHTMLBuilder and store that in the + application environment. + + :param app: The Sphinx Application instance + """ + # builder isn't initialized in the setup so we do it here + builder = getattr(app, "builder", None) + if builder is None: + return + builder.env.is_directory_builder = type(builder).__name__ == "DirectoryHTMLBuilder" + builder.env.app.sitemap_links = Manager().Queue() + + +def hreflang_formatter(lang: str) -> str: + """ + Format the supplied locale code into a string that is compatible with `hreflang`. + See also: + + - https://en.wikipedia.org/wiki/Hreflang#Common_Mistakes + - https://github.com/readthedocs/readthedocs.org/pull/5638 + + :param lang: The locale string to format + :return: The formatted locale string + """ + if "_" in lang: + return lang.replace("_", "-") + return lang + + +def add_html_link(app: Sphinx, pagename: str, templatename, context, doctree): + """ + As each page is built, collect page names for the sitemap + + :param app: The Sphinx Application instance + :param pagename: The current page being built + """ + + # Return if the context contains `skip_sitemap`. + if 'skip_sitemap' in context.keys(): + logger.debug(f"sphinx-sitemap-ros: Ignoring sitemap entry for {pagename} with reason \"{context['skip_sitemap']}\"") + return + + env = app.builder.env + if app.builder.config.html_file_suffix is None: + file_suffix = ".html" + else: + file_suffix = app.builder.config.html_file_suffix + + # Support DirectoryHTMLBuilder path structure + # where generated links between pages omit the index.html + if env.is_directory_builder: # type: ignore + if pagename == "index": + sitemap_link = "" + elif pagename.endswith("/index"): + sitemap_link = pagename[:-6] + "/" + else: + sitemap_link = pagename + "/" + else: + sitemap_link = pagename + file_suffix + + env.app.sitemap_links.put(sitemap_link) # type: ignore + + +def create_sitemap(app: Sphinx, exception): + """ + Generates the sitemap.xml from the collected HTML page links. + + :param app: The Sphinx Application instance + """ + site_url = app.builder.config.site_url or app.builder.config.html_baseurl + if site_url: + site_url.rstrip("/") + "/" + else: + logger.warning( + "sphinx-sitemap-ros: html_baseurl is required in conf.py." "Sitemap not built.", + type="sitemap", + subtype="configuration", + ) + return + + if app.env.app.sitemap_links.empty(): # type: ignore + logger.info( + "sphinx-sitemap-ros: No pages generated for %s" % app.config.sitemap_filename, + type="sitemap", + subtype="information", + ) + return + + ElementTree.register_namespace("xhtml", "http://www.w3.org/1999/xhtml") + + root = ElementTree.Element( + "urlset", xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" + ) + + locales = get_locales(app) + + if app.builder.config.version: + version = app.builder.config.version + "/" + else: + version = "" + + while True: + try: + link = app.env.app.sitemap_links.get_nowait() # type: ignore + except queue.Empty: + break + + url = ElementTree.SubElement(root, "url") + scheme = app.config.sitemap_url_scheme + if app.builder.config.language: + lang = app.builder.config.language + "/" + else: + lang = "" + + ElementTree.SubElement(url, "loc").text = site_url + scheme.format( + lang=lang, version=version, link=link + ) + + for lang in locales: + lang = lang + "/" + ElementTree.SubElement( + url, + "{http://www.w3.org/1999/xhtml}link", + rel="alternate", + hreflang=hreflang_formatter(lang.rstrip("/")), + href=site_url + scheme.format(lang=lang, version=version, link=link), + ) + + filename = app.outdir + "/" + app.config.sitemap_filename + ElementTree.ElementTree(root).write( + filename, xml_declaration=True, encoding="utf-8", method="xml" + ) + + logger.info( + "sphinx-sitemap-ros: %s was generated for URL %s in %s" + % (app.config.sitemap_filename, site_url, filename), + type="sitemap", + subtype="information", + ) diff --git a/requirements.txt b/requirements.txt index 6ffb56e0aa7..69607aa7835 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,9 +1,8 @@ doc8 -docutils==0.16 -pip -sphinx<6.0.0 -sphinx-copybutton -sphinx-multiversion -sphinx-rtd-theme -sphinx-sitemap -sphinx-tabs +docutils +pip==22.0.2 +sphinx==4.3.2 +sphinx-copybutton==0.4.0 +sphinx-multiversion==0.2.4 +sphinx-rtd-theme==1.0.0 +sphinx-tabs==3.2.0 diff --git a/source/Citations.rst b/source/Citations.rst index e4d7e44c716..a433d9fc937 100644 --- a/source/Citations.rst +++ b/source/Citations.rst @@ -5,13 +5,12 @@ Citations If you use ROS 2 in your work please cite the 2022 Science Robotics paper `Robot Operating System 2: Design, architecture, and uses in the wild `_. -S. Macenski, T. Foote, B. Gerkey, C. Lalancette, W. Woodall, “Robot Operating System 2: Design, architecture, and uses in the wild,” Science Robotics vol. 7, May 2022. + | S. Macenski, T. Foote, B. Gerkey, C. Lalancette, W. Woodall, "Robot Operating System 2: Design, architecture, and uses in the wild," Science Robotics vol. 7, May 2022. -.. code-block:: +.. code-block:: bibtex - @article{ - doi:10.1126/scirobotics.abm6074, - author = {Steven Macenski and Tully Foote and Brian Gerkey and Chris Lalancette and William Woodall }, + @article{doi:10.1126/scirobotics.abm6074, + author = {Steven Macenski and Tully Foote and Brian Gerkey and Chris Lalancette and William Woodall}, title = {Robot Operating System 2: Design, architecture, and uses in the wild}, journal = {Science Robotics}, volume = {7}, @@ -21,3 +20,19 @@ S. Macenski, T. Foote, B. Gerkey, C. Lalancette, W. Woodall, “Robot Operating doi = {10.1126/scirobotics.abm6074}, URL = {https://www.science.org/doi/abs/10.1126/scirobotics.abm6074} } + + +If you use ROS 2 Composition in your work, please cite the 2023 IEEE RA-L paper `Impact of ROS 2 Node Composition in Robotic Systems `_. + + | S. Macenski, A. Soragna, M. Carroll, Z. Ge, "Impact of ROS 2 Node Composition in Robotic Systems", IEEE Robotics and Autonomous Letters (RA-L), 2023. + +.. code-block:: bibtex + + @article{doi:10.48550/arXiv.2305.09933, + author = {Steven Macenski and Alberto Soragna and Michael Carroll and Zhenpeng Ge}, + title = {Impact of ROS 2 Node Composition in Robotic Systems}, + journal = {IEEE Robotics and Autonomous Letters (RA-L)}, + year = {2023}, + doi = {10.48550/arXiv.2305.09933}, + URL = {https://arxiv.org/abs/2305.09933} + } diff --git a/source/Concepts.rst b/source/Concepts.rst index 147ddea7b6b..032cde1ab14 100644 --- a/source/Concepts.rst +++ b/source/Concepts.rst @@ -1,5 +1,3 @@ -.. _ConceptsHome: - Concepts ======== @@ -8,113 +6,9 @@ Conceptual overviews provide relatively high-level, general background informati .. toctree:: :maxdepth: 1 - Concepts/About-Domain-ID - Concepts/About-Different-Middleware-Vendors - Concepts/About-Logging - Concepts/About-Quality-of-Service-Settings - Concepts/About-ROS-2-Client-Libraries - Concepts/About-ROS-Interfaces - Concepts/About-ROS-2-Parameters - Concepts/About-Executors - Concepts/About-Topic-Statistics - Concepts/About-Command-Line-Tools - Concepts/About-RQt - Concepts/About-Composition - Concepts/About-Catment - Concepts/About-Cross-Compilation - Concepts/About-Security - Concepts/About-Tf2 - - -The Core Stack Developer Concepts are much more detailed conceptual articles intended for developers who plan modify or contribute to the ROS 2 core: - -.. toctree:: - :maxdepth: 2 - - Concepts/About-Build-System - Concepts/About-Internal-Interfaces - Concepts/About-Middleware-Implementations - Concepts/About-ROS-2-Client-Libraries - -Quick overview of ROS 2 Concepts --------------------------------- - -.. contents:: - :local: - -ROS 2 is a middleware based on an anonymous publish/subscribe mechanism that allows for message passing between different ROS processes. - -At the heart of any ROS 2 system is the ROS graph. -The ROS graph refers to the network of nodes in a ROS system and the connections between them by which they communicate. - -Graph Concepts -^^^^^^^^^^^^^^ - - -* Nodes: A node is an entity that uses ROS to communicate with other nodes. -* Messages: ROS data type used when subscribing or publishing to a topic. -* Topics: Nodes can publish messages to a topic as well as subscribe to a topic to receive messages. -* Discovery: The automatic process through which nodes determine how to talk to each other. - -Nodes -^^^^^ - -A node is a participant in the ROS graph. -ROS nodes use a ROS client library to communicate with other nodes. -Nodes can publish or subscribe to Topics. -Nodes can also provide or use Services and Actions. -There are configurable Parameters associated with a node. -Connections between nodes are established through a distributed discovery process. -Nodes may be located in the same process, in different processes, or on different machines. -These concepts will be described in more detail in the sections that follow. - -Client Libraries -^^^^^^^^^^^^^^^^ - -ROS client libraries allow nodes written in different programming languages to communicate. -There is a core ROS client library (RCL) that implements common functionality needed for the ROS APIs of different languages. -This makes it so that language-specific client libraries are easier to write and that they have more consistent behavior. - -The following client libraries are maintained by the ROS 2 team: - - -* rclcpp = C++ client library -* rclpy = Python client library - -Additionally, other client libraries have been developed by the ROS community. -See the :doc:`ROS 2 Client Libraries ` article for more details. - -Discovery -^^^^^^^^^ - -Discovery of nodes happens automatically through the underlying middleware of ROS 2. -It can be summarized as follows: - -#. When a node is started, it advertises its presence to other nodes on the network with the same ROS domain (set with the ROS_DOMAIN_ID environment variable). - Nodes respond to this advertisement with information about themselves so that the appropriate connections can be made and the nodes can communicate. -#. Nodes periodically advertise their presence so that connections can be made with new-found entities, even after the initial discovery period. -#. Nodes advertise to other nodes when they go offline. - -Nodes will only establish connections with other nodes if they have compatible :doc:`Quality of Service <../Tutorials/Demos/Quality-of-Service>` settings. - -Take the :ref:`talker-listener demo ` for example. -Running the C++ talker node in one terminal will publish messages on a topic, -and the Python listener node running in another terminal will subscribe to messages on the same topic. - -You should see that these nodes discover each other automatically, and begin to exchange messages. - -Security -^^^^^^^^ - -ROS 2 includes the ability to secure communications among nodes within the ROS 2 computational graph. -Similar to discovery, security happens through the underlying ROS 2 middleware (provided it has support for the corresponding security plugins). -No additional software installation is needed to enable security; however, the middleware requires configuration files for each ROS graph participant. -These files enable encryption and authentication, and define policies both for individual nodes and for the overall ROS graph. -ROS 2 also adds a master "on/off" switch to control security behavior. - -ROS utilities can create the authoritative `trust anchor `_ for a ROS application, or an external certificate authority can be used. - -See the :doc:`ROS 2 Security ` article for additional details or ROS security features. + Concepts/Basic + Concepts/Intermediate + Concepts/Advanced Related Content @@ -126,4 +20,3 @@ For a brief video introduction to ROS 2, see this community contributed content: * `Getting started with ROS Part 1: Nodes, Parameters and Topics `_ * `Getting started with ROS Part 2: Services and Actions `_ - diff --git a/source/Concepts/About-Catment.rst b/source/Concepts/About-Catment.rst deleted file mode 100644 index 5708ef69dc7..00000000000 --- a/source/Concepts/About-Catment.rst +++ /dev/null @@ -1,266 +0,0 @@ -.. redirect-from:: - - catment - -On the mixing of ament and catkin (catment) -=========================================== - -**All that follows is experimental and speculative.** - -.. contents:: Table of Contents - :depth: 2 - :local: - -Background ----------- - -There once was a thing called ``rosbuild``. -Then came a thing called ``catkin``, which largely replaced ``rosbuild``. -Recently introduced is a thing called ``ament``, which may one day replace ``catkin``. - -All three tools can be considered "meta-build systems". -They sit atop other build systems (e.g. CMake, Python setuptools) and provide extra functionality that's intended to make those build systems easier to use, especially when managing dependencies across multiple packages and when building multiple packages in a single workspace. - -Each of these meta-build systems does two things: - - -#. - Adds an API to the underlying build system (e.g. CMake) that can be used to simplify common tasks (e.g. supplying all the flags exported by depended-upon packages when building an executable). - There are usually hooks to allow injection of extra APIs by packages outside of the core meta-build system. - - - * ``rosbuild``: ``mk/cmake.mk``, ``rosbuild_init()``, ``rosbuild_add_executable()``, etc. - * ``catkin``: ``catkin_package()``, ``catkin_install_python()``, etc. - * ``ament``: ``ament_target_dependencies()``, ``ament_export_dependencies()``, ``ament_package()``, etc. - -#. - Provides a tool that can be used to iterate in dependency order over a workspace full of packages, building and perhaps installing each one. - - - * ``rosbuild``: ``rosmake`` - * ``catkin``: ``catkin build``, ``catkin_make``, ``catkin_make_isolated``, etc. - * ``ament``: ``ament build`` - -The common thread that ties all of these systems together is the division of the code into **packages**\ , with each package containing a manifest file (``manifest.xml`` or ``package.xml``). -This manifest is required (with some exceptions) for both parts of the meta-build system (API and build tool) to function. - -Postulates ----------- - - -#. **While we usually consider the two aspects of a meta-build system to be coupled, they needn't be.** - The API used inside a package and the tool that iterates over the packages can be considered largely independent, with the package manifest forming the interface between them. - There's no reason in principle why, for example, ``rosmake`` couldn't be modified to iterate over a workspace filled with ``catkin`` packages, stepping into them in dependency order and doing the usual ``mkdir build; cd build; cmake ..; make install`` routine for each one (with appropriate flags passed to ``cmake`` and ``make``). -#. - **The effort required to migrate from one meta-build system to another should be minimized.** - The mass migration from ``rosbuild`` to ``catkin`` was difficult and remains a sore point for many in the community. - While it's reasonable to ask developers to make changes in exchange for getting access to new functionality, the changes that are required should be as small as possible without sacrificing the effectiveness of the new system. - This is especially true when the old system is in widespread use. - - - #. Corollary: **Migration to a new meta-build system should not be required without a very good reason.** - If a developer doesn't want the functionality offered by the new system, then they shouldn't be coerced into migrating from the old system unless there's something irrevocably broken about the old system (e.g. ``rosbuild``\ 's in-source build pattern and lack of an "install" step). - -#. - **Interoperability is a good thing.** - Whenever possible (not all combinations will be practical), developers should be able to mix and match meta-build systems, including mixing their different aspects (i.e., use the building tool from one system and the API from another). - Such mixing and matching is especially important when developers want to combine a large existing codebase using one meta-build system (e.g. ROS with ``catkin``) with new libraries and tools offered by a codebase using another meta-build system (e.g. ROS 2 with ``ament``). - Ideally, that kind of combination can be done without requiring changes to the API used by either codebase and without telling the developer which builder tool to use. - - - #. Corollary: **Workspaces needn't be homogeneous.** - There's no reason that we shouldn't be able to freely mix, say, ``catkin`` and ``ament`` packages in one workspace, with dependencies going in both directions, so long as the builder tool in use knows how to build them both. - The primary interface between packages (at least, CMake-controlled packages) is their CMake configuration file. - So long as that configuration file follows the standard protocol (setting ``foo_LIBRARIES``, etc.), then it shouldn't matter who wrote the file. - It could be auto-generated by ``catkin`` or ``ament``, or even manually crafted by a developer who wants to use plain CMake in their package, but still have that package depended-upon by ``catkin`` or ``ament`` packages. - -Use cases, with experimental implementations --------------------------------------------- - -Adding ROS packages to a ROS 2 workspace and building with ``ament build`` -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Let's say that you want to add some existing ROS packages to your ROS 2 workspace and don't want to migrate the ROS packages from ``catkin`` to ``ament`` (or vice versa). Here are two patches that let you do that: - - -* `ament_package `__: - Adds support for format 1 package manifests, instead of requiring format 2. - This change isn't strictly related to ``catkin`` vs. ``ament``, because format 2 has been around for a while and ``catkin`` supports it, so developers could already update their manifests to format 2. - But there's a ton of ROS code out there that uses format 1, so we should support it. - This implementation could be improved, e.g. by reasoning over the various flavors of depend tags and how they differ between formats 1 and 2. -* `ament_tools `__: - Adds a new ``catkin`` build type to ``ament``. - This implementation just treats ``catkin`` packages the same as plain ``cmake`` packages, which seems to work fine. - It could be made more sophisticated. - -Example usage: - - -#. Get the ROS 2 code as usual, using the branches mentioned above. -#. Add to your workspace some ``catkin`` ROS packages, ensuring that all of their dependencies are satisfied (either present in the workspace or installed elsewhere with appropriate setup shell files sourced). -#. Build as usual (e.g. ``colcon build``). - -Voila: your existing code isn't suddenly broken just because there's a new build tool in use. - -Variation: Building ROS packages with ``ament build`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Let's say that you love the new ``ament`` tool and want to use it to build your existing ROS packages that use ``catkin`` internally. -Here's an example of how to do that, by doing a minimal installation of ``ament`` and then using it to build a workspace full of ROS ``catkin`` packages: - -.. code-block:: bash - - mkdir -p ~/ament_ws/src - cd ~/ament_ws/src - git clone https://github.com/osrf/osrf_pycommon.git - git clone https://github.com/ament/ament_package.git - cd ament_package - git checkout catkin - cd .. - git clone https://github.com/ament/ament_tools.git - cd ament_tools - git checkout catkin - cd ../.. - ./src/ament_tools/scripts/ament.py build - -Now build the ROS packages: - -.. code-block:: bash - - . $HOME/ament_ws/install/setup.bash - cd ~/ros_catkin_ws - ament build - -Voila: you used the ``ament`` build tool to build your ``catkin`` packages, without having to migrate them. - -Variation: Using the ``catkin`` API in a ROS 2 package -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Let's say that you're building on top of ROS 2, which internally uses the ``ament`` API, and you want to add a new package using the ``catkin`` API. - -To make this work, you need a Python3 installation of ``catkin`` (the binary debians use Python2.7). -Here's an example of doing that, installing to ``$HOME/catkin``: - -.. code-block:: bash - - # install catkin_pkg - git clone https://github.com/ros-infrastructure/catkin_pkg.git - cd catkin_pkg - git checkout ament - python3 setup.py install --prefix $HOME/catkin --single-version-externally-managed --record foo --install-layout deb - # install catkin - git clone https://github.com/ros/catkin.git - cd catkin - git checkout ament - mkdir build - cd build - PYTHONPATH=$HOME/catkin/lib/python3/dist-packages/ cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/catkin -DPYTHON_EXECUTABLE=/usr/bin/python3 - make install - -To use that version of catkin, you just need to source the ``$HOME/catkin/setup.bash`` file. - -Let's assume that you have the usual ROS 2 workspace in ``~/ros2_ws``, and that you're on the ``catkin`` branches in ``ament_package`` and ``ament_tools``. -Add to that workspace the ``image_tools_catkin`` package from https://github.com/gerkey/catment. -It's a simple port of the ROS 2 ``image_tools`` package, taking it from the ``ament`` API to the ``catkin`` API. -To build it: - -.. code-block:: bash - - cd ~/ros2_ws - . $HOME/catkin/setup.bash - ./src/ament/ament_tools/scripts/ament.py build - -Voila: when adding new packages atop ROS 2, you're free to choose which CMake API you prefer inside your package. - - -* **Caveat**: Requires commenting out the use of ``CATKIN_DEPENDS`` inside ``catkin_package()``, because somewhere somebody was getting upset that things like ``rclcpp`` aren't ``catkin`` packages. - That constraint needs to be relaxed somehow. -* **TODO**: The same demo but with an ``ament`` package that depends on a ``catkin`` package (this is easy). -* **TODO**: The same demo but with a package that has a vanilla ``CMakeLists.txt`` that uses neither ``ament`` nor ``catkin``, and provides a manually generated ``fooConfig.cmake`` file that exports the right stuff to make it look the same to outsiders. - -Building ROS 2 packages with ``catkin_make_isolated`` -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Let's say that you're already familiar with ROS and ``catkin`` and you're excited to try ROS 2, but you're not in the mood to learn about ``ament``. -You'd rather stick to what you know, such as using ``catkin_make_isolated`` to build everything. -Here is a patch that allows you to do that: - - -* `catkin `__: - Adds support for packages that declare themselves to have a build type of ``ament_*``. - This implementation calls out to ``ament`` to build each such package. - While ``ament_cmake`` packages can be treated as plain ``cmake`` packages (as we did when adding ``catkin`` support to ``ament``), ``ament_python`` packages require some gnarly invocations of Python. - Instead of trying to replicate that logic in ``catkin``, it's easier to just let ``ament`` handle it. - Also in this patch, we add the ``buildtool_export_depend`` packages to the set that are considered when building. -* `catkin_pkg `__: - Also in this patch, we add the ``buildtool_export_depend`` packages to the set that are considered when computing the topological order. - -Because we're going to call out to ``ament build``, we will also need a minimal installation of ``ament``, as done in a previous example: - -.. code-block:: bash - - mkdir -p ~/ament_ws/src - cd ~/ament_ws/src - git clone https://github.com/osrf/osrf_pycommon.git - git clone https://github.com/ament/ament_package.git - cd ament_package - git checkout catkin - cd .. - git clone https://github.com/ament/ament_tools.git - cd ament_tools - git checkout catkin - cd ../.. - ./src/ament_tools/scripts/ament.py build - -Then we need to install the modified version of catkin somewhere: - -.. code-block:: bash - - # install catkin_pkg - git clone https://github.com/ros-infrastructure/catkin_pkg.git - cd catkin_pkg - git checkout ament - python3 setup.py install --prefix $HOME/catkin --single-version-externally-managed --record foo --install-layout deb - # install catkin - git clone https://github.com/ros/catkin.git - cd catkin - git checkout ament - mkdir build - cd build - PYTHONPATH=$HOME/catkin/lib/python3/dist-packages/ cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/catkin -DPYTHON_EXECUTABLE=/usr/bin/python3 - make install - -Now build the ROS 2 packages: - -.. code-block:: bash - - . $HOME/catkin/setup.bash - . $HOME/ament_ws/install/setup.bash - cd ~/ros2_ws - touch src/eProsima/AMENT_IGNORE - PYTHONPATH=$PYTHONPATH:/home/gerkey/ros2_ws_catkin/install_isolated/lib/python3.5/site-packages catkin_make_isolated --install - -Voila: you've built ROS 2 using the tools that you're familiar with. - - -* **Caveat**: we're ignoring the ``eProsima`` packages in the workspace because they lack ``package.xml`` files, which means that ``catkin`` can't see them. - ``ament`` has some heuristics for handling such packages. - Options: backport those heuristics to ``catkin``; switch to installing non-``package.xml``-containing packages outside of the workspace; or just add a ``package.xml`` to each of those packages (e.g. in our own fork). - -Combining all of ROS and ROS 2 in one workspace and building it (TODO) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -This step will require sorting out some things, including at least: - -* Package name conflicts. - We currently have ROS 2 versions of ROS message packages, as well as some stuff in ``geometry2``. - Either the functionality needs to be merged into one package that can support both systems, or the new versions need different names. -* Message generation. - ROS and ROS 2 have different message generation steps, the output of which might or might not conflict. - Something sophisticated needs to be done to allow generation of all the right artifacts from a single message package (or, as indicated above, the new message packages need different names). - -Using ``bloom`` to release ``ament`` packages (TODO) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -It seems like ``bloom`` ought be able to release packages that use the ``ament`` CMake API, and that the resulting releases should be able to be built on the farm. -We can make changes to ``bloom`` and ``ros_buildfarm`` as needed to enable this use case. diff --git a/source/Concepts/Advanced.rst b/source/Concepts/Advanced.rst new file mode 100644 index 00000000000..4f333d38da4 --- /dev/null +++ b/source/Concepts/Advanced.rst @@ -0,0 +1,11 @@ +Advanced Concepts +================= + +These conceptual documents are intended for developers who plan to modify or contribute to the ROS 2 core. + +.. toctree:: + :maxdepth: 1 + + Advanced/About-Build-System + Advanced/About-Internal-Interfaces + Advanced/About-Middleware-Implementations diff --git a/source/Concepts/About-Build-System.rst b/source/Concepts/Advanced/About-Build-System.rst similarity index 82% rename from source/Concepts/About-Build-System.rst rename to source/Concepts/Advanced/About-Build-System.rst index 56188aac78c..fbab29aaee9 100644 --- a/source/Concepts/About-Build-System.rst +++ b/source/Concepts/Advanced/About-Build-System.rst @@ -1,22 +1,36 @@ -About the build system -====================== +.. redirect-from:: -.. include:: ../../global_substitutions.txt + Concepts/About-Build-System -Under everything is the build system. -Iterating on ``catkin`` from ROS 1, we have created a set of |packages| under the moniker ``ament``. -Some of the reasons for changing the name to ``ament`` are that we wanted it to not collide with ``catkin`` (in case we want to mix them at some point) and to prevent confusion with existing ``catkin`` documentation. -``ament``'s primary responsibility is to make it easier to develop and maintain ROS 2 core |packages|. -However, this responsibility extends to any user who is willing to make use of our build system conventions and tools. -Additionally it should make |packages| conventional, such that developers should be able to pick up any ``ament`` based |package| and make some assumptions about how it works, how to introspect it, and how to build or use it. +The build system +================ -``ament`` consists of a few important repositories which are all in the ``ament`` `GitHub organization `_: - -.. contents:: - :depth: 1 +.. contents:: Table of Contents :local: -The ``ament_package`` Package +.. include:: ../../../global_substitutions.txt + +The build system is what allows developers to build their ROS 2 code as needed. +ROS 2 relies heavily on the division of code into packages, with each package containing a manifest file (``package.xml``). +This manifest file contains essential metadata about the package, including its dependencies on other packages. +This manifest is required for the meta-build tool to function. + +The ROS 2 build system consists of 3 major concepts. + +Build tool +---------- + +This is the software that controls the compilation and testing of a single package. +In ROS 2 this is usually CMake for C++, and setuptools for Python, but other build tools are supported. + +Build helpers +------------- + +These are helper functions that hook into the build tool to developer experience. +ROS 2 packages typically rely on the ``ament`` series of packages for this. +``ament`` consists of a few important repositories which are all in the `GitHub organization `_. + +The ``ament_package`` package ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Located on |GitHub|_ at `ament/ament_package `_, this repository contains a single :term:`ament Python package` that provides various utilities for |ament packages|, e.g. templates for environment hooks. @@ -59,7 +73,7 @@ Here is a list of common package types that you might run into in this software ament Python package A :term:`Python package` that also follows the ``ament`` packaging guidelines. -The ``ament_cmake`` Repository +The ``ament_cmake`` repository ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Located on |GitHub|_ at `ament/ament_cmake `_, this repository contains many "ament CMake" and pure CMake packages which provide the infrastructure in CMake that is required to create "ament CMake" packages. @@ -98,7 +112,7 @@ Here a list of the |packages| in the repository along with a short description: - ``ament_cmake_python`` - provides CMake functions for |packages| that contain Python code - - see the :doc:`ament_cmake_python user documentation <../How-To-Guides/Ament-CMake-Python-Documentation>` + - see the :doc:`ament_cmake_python user documentation <../../How-To-Guides/Ament-CMake-Python-Documentation>` - ``ament_cmake_test`` @@ -121,16 +135,17 @@ The environment setup files, often named something like ``setup.bash``, are a pl The developers are able to do this using an "environment hook" which is basically an arbitrary bit of shell code that can set or modify environment variables, define shell functions, setup auto-completion rules, etc... This feature is how, for example, ROS 1 set the ``ROS_DISTRO`` environment variable without ``catkin`` knowing anything about the ROS distribution. -The ``ament_lint`` Repository +The ``ament_lint`` repository ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Located on |GitHub|_ at `ament/ament_lint `_, this repository provides several |packages| which provide linting and testing services in a convenient and consistent manner. Currently there are |packages| to support C++ style linting using ``uncrustify``, static C++ code checks using ``cppcheck``, checking for copyright in source code, Python style linting using ``pep8``, and other things. The list of helper packages will likely grow in the future. -Build tools -~~~~~~~~~~~ +Meta-build tool +--------------- + +This is a piece of software that knows how to topologically order a group of packages, and build or test them in the correct dependency order. +This software will call into the Build Tool to do the actual work of compiling, testing, and installing the package. -A build tool performs the task of building a workspace of packages together at once with a single invocation. -For ROS 2 releases up to Ardent, the build tool providing this functionality is called ``ament_tools``. -As of ROS 2 Bouncy, ``ament_tools`` has been superseded by ``colcon``, as described in `the universal build tool article `_. +In ROS 2, the tool named `colcon `__ is used for this. diff --git a/source/Concepts/About-Internal-Interfaces.rst b/source/Concepts/Advanced/About-Internal-Interfaces.rst similarity index 96% rename from source/Concepts/About-Internal-Interfaces.rst rename to source/Concepts/Advanced/About-Internal-Interfaces.rst index a3833463855..a80cb2b83e8 100644 --- a/source/Concepts/About-Internal-Interfaces.rst +++ b/source/Concepts/Advanced/About-Internal-Interfaces.rst @@ -1,13 +1,20 @@ -About internal ROS 2 interfaces -=============================== +.. redirect-from:: -.. include:: ../../global_substitutions.txt + Concepts/About-Internal-Interfaces + +Internal ROS 2 interfaces +========================= + +.. contents:: Table of Contents + :local: + +.. include:: ../../../global_substitutions.txt The internal ROS interfaces are public C |APIs| that are intended for use by developers who are creating |client libraries| or adding a new underlying middleware, but are not intended for use by typical ROS users. The ROS |client libraries| provide the user facing |APIs| that most ROS users are familiar with, and may come in a variety of programming languages. Internal API Architecture Overview -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +---------------------------------- There are two main internal interfaces: @@ -19,7 +26,7 @@ The underlying middleware used for ROS 2 is either a DDS or RTPS implementation, The ``rcl`` |API| is a slightly higher level |API| which is used to implement the |client libraries| and does not touch the middleware implementation directly, but rather does so through the ROS middleware interface (``rmw`` |API|) abstraction. -.. figure:: images/ros_client_library_api_stack.png +.. figure:: ../images/ros_client_library_api_stack.png :alt: ros2 software stack As the diagram shows, these |APIs| are stacked such that the typical ROS user will use the |client library| |API|, e.g. ``rclcpp``, to implement their code (executable or library). @@ -38,12 +45,12 @@ It also makes it easy to see what code is potentially violating the vendor porta .. _Type Specific Interfaces: Type Specific Interfaces -~~~~~~~~~~~~~~~~~~~~~~~~ +------------------------ All along the way there are some parts of the |APIs| that are necessarily specific to the message types being exchanged, e.g. publishing a message or subscribing to a topic, and therefore require generated code for each message type. The following diagram layouts the path from user defined ``rosidl`` files, e.g. ``.msg`` files, to the type specific code used by the user and system to perform type specific functions: -.. figure:: images/ros_idl_api_stack_static.png +.. figure:: ../images/ros_idl_api_stack_static.png :alt: ros2 idl static type support stack Figure: flow chart of "static" type support generation, from ``rosidl`` files to user facing code. @@ -85,7 +92,7 @@ In order to accomplish this, this generic function needs some meta information a Then to publish a message, you call a generic publish function and pass a message to be published along with a structure which contains the necessary meta data about the message type. This is referred to as "dynamic" type support, as opposed to "static" type support which requires generated versions of a function for each type. -.. figure:: images/ros_idl_api_stack_dynamic.png +.. figure:: ../images/ros_idl_api_stack_dynamic.png :alt: ros2 idl dynamic type support stack Figure: flow chart of "dynamic" type support generation, from ``rosidl`` files to user facing code. @@ -109,8 +116,8 @@ DDS-XTypes, or something like it, is required in the underlying middleware in or Also, this approach to type support is normally slower than the static type support alternative. The type specific generated code in static type support can be written to be more efficient as it does not need to iterate over the message type's meta data to perform things like serialization. -The ``rcl`` Repository -~~~~~~~~~~~~~~~~~~~~~~ +The ``rcl`` repository +---------------------- The ROS Client Library interface (``rcl`` |API|) can be used by |client libraries| (e.g. ``rclc``, ``rclcpp``, ``rclpy``, etc.) in order to avoid duplicating logic and features. By reusing the ``rcl`` |API|, client libraries can be smaller and more consistent with each other. @@ -125,8 +132,8 @@ This implementation avoids direct contact with the middleware by instead using t For a complete definition of the ``rcl`` |API|, see `the rcl docs `_. -The ``rmw`` Repository -~~~~~~~~~~~~~~~~~~~~~~ +The ``rmw`` repository +---------------------- The ROS middleware interface (``rmw`` |API|) is the minimal set of primitive middleware capabilities needed to build ROS on top. Providers of different middleware implementations must implement this interface in order to support the entire ROS stack on top. @@ -138,8 +145,8 @@ The ``rmw`` |package| contains the C headers which define the interface, the imp For a definition of the ``rmw`` |API|, see `the rmw docs `_. -The ``rosidl`` Repository -~~~~~~~~~~~~~~~~~~~~~~~~~ +The ``rosidl`` repository +------------------------- The ``rosidl`` |API| consists of a few message related static functions and types along with a definition of what code should be generated by messages in different languages. The generated message code specified in the |API| will be language specific, but may or may not reuse generated code for other languages. @@ -175,12 +182,8 @@ See the :ref:`Type Specific Interfaces` section above for more details. For more information on what exactly is in the ``rosidl`` |API| (static and generated) see this page: -.. warning:: - - TODO: link to definition of ``rosidl`` |APIs| - -The ``rcutils`` Repository -~~~~~~~~~~~~~~~~~~~~~~~~~~ +The ``rcutils`` repository +-------------------------- ROS 2 C Utilities (``rcutils``) is a C |API| composed of macros, functions, and data structures used throughout the ROS 2 codebase. These are mainly used for error handling, commandline argument parsing, and logging which are not specific to the client or middleware layers and can be shared by both. diff --git a/source/Concepts/About-Middleware-Implementations.rst b/source/Concepts/Advanced/About-Middleware-Implementations.rst similarity index 82% rename from source/Concepts/About-Middleware-Implementations.rst rename to source/Concepts/Advanced/About-Middleware-Implementations.rst index 84ab3740392..9ab0ac8d0fe 100644 --- a/source/Concepts/About-Middleware-Implementations.rst +++ b/source/Concepts/Advanced/About-Middleware-Implementations.rst @@ -1,13 +1,19 @@ +.. redirect-from:: -About ROS 2 middleware implementations -====================================== + Concepts/About-Middleware-Implementations -.. include:: ../../global_substitutions.txt +ROS 2 middleware implementations +================================ + +.. contents:: Table of Contents + :local: + +.. include:: ../../../global_substitutions.txt ROS middleware implementations are sets of |packages| that implement some of the internal ROS interfaces, e.g. the ``rmw``, ``rcl``, and ``rosidl`` |APIs|. Common Packages for DDS Middleware Packages -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +------------------------------------------- All of the current ROS middleware implementations are based on full or partial DDS implementations. For example, there is a middleware implementation that uses RTI's Connext DDS and an implementation which uses eProsima's Fast DDS. @@ -21,13 +27,13 @@ The ``rosidl_generator_dds_idl`` |package| generates a DDS ``.idl`` file for eac Currently DDS based ROS middleware implementations make use of this generator's output ``.idl`` files to generate pre-compiled type support that is vendor specific. Structure of ROS Middleware Implementations -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +------------------------------------------- A ROS middleware implementation is typically made up of a few |packages| in a single repository: -- ``_cmake_module``: contains CMake Module for discovering and exposing required dependencies -- ``rmw__``: contains the implementation of the ``rmw`` |API| in a particular language, typically C++ -- ``rosidl_typesupport__``: contains tools to generate static type support code for ``rosidl`` files, tailored to the implementation in a particular language, typically C or C++ +- ``_cmake_module``: contains CMake Module for discovering and exposing required dependencies +- ``rmw__``: contains the implementation of the ``rmw`` |API| in a particular language, typically C++ +- ``rosidl_typesupport__``: contains tools to generate static type support code for ``rosidl`` files, tailored to the implementation in a particular language, typically C or C++ The ``_cmake_module`` |package| contains any CMake Modules and functions needed to find the supporting dependencies for the middleware implementation. For example, ``rti_connext_dds_cmake_module`` provides wrapper logic around the CMake Module shipped with RTI Connext DDS to make sure that all packages that depend on it will select the same installation of RTI Connext DDS. @@ -53,9 +59,3 @@ The rmw implementation for ``Fast DDS`` is on |GitHub|_ at `ros2/rmw_fastrtps_cp The rmw implementation for ``Connext DDS`` is on |GitHub|_ at `ros2/rmw_connextdds `_. The rmw implementation for ``GurumDDS`` is on |GitHub|_ at `ros/rmw_gurumdds `_. - -To learn more about what is required to create a new middleware implementation for ROS see this page: - -.. warning:: - - TODO: Link to more detailed middleware implementation docs and/or tutorial. diff --git a/source/Concepts/Basic.rst b/source/Concepts/Basic.rst new file mode 100644 index 00000000000..b6cd5a7c3af --- /dev/null +++ b/source/Concepts/Basic.rst @@ -0,0 +1,23 @@ +Basic Concepts +============== + +ROS 2 is a middleware based on a strongly-typed, anonymous publish/subscribe mechanism that allows for message passing between different processes. + +At the heart of any ROS 2 system is the ROS graph. +The ROS graph refers to the network of nodes in a ROS system and the connections between them by which they communicate. + +These are the concepts that will help you get started understanding the basics of ROS 2. + +.. toctree:: + :maxdepth: 1 + + Basic/About-Nodes + Basic/About-Discovery + Basic/About-Interfaces + Basic/About-Topics + Basic/About-Services + Basic/About-Actions + Basic/About-Parameters + Basic/About-Command-Line-Tools + Basic/About-Launch + Basic/About-Client-Libraries diff --git a/source/Concepts/Basic/About-Actions.rst b/source/Concepts/Basic/About-Actions.rst new file mode 100644 index 00000000000..fe0311b1199 --- /dev/null +++ b/source/Concepts/Basic/About-Actions.rst @@ -0,0 +1,56 @@ +Actions +======= + +.. contents:: Table of Contents + :local: + +In ROS 2, an action refers to a long-running remote procedure call with feedback and the ability to cancel or preempt the goal. +For instance, the high-level state machine running a robot may call an action to tell the navigation subsystem to travel to a waypoint, which may take several seconds (or minutes) to do. +Along the way, the navigation subsystem can provide feedback on how far along it is, and the high-level state machine has the option to cancel or preempt the travel to that waypoint. + +This structure is reflected in how an action message definition looks: + +.. code:: + + int32 request + --- + int32 response + --- + int32 feedback + +In ROS 2, actions are expected to be long running procedures, as there is overhead in setting up and monitoring the connection. +If you need a short running remote procedure call, consider using a :doc:`service ` instead. + +Actions are identified by an action name, which looks much like a topic name (but is in a different namespace). + +An action consists of two parts: the action server and the action client. + +Action server +------------- + +The action server is the entity that will accept the remote procedure request and perform some procedure on it. +It is also responsible for sending out feedback as the action progresses and should react to cancellation/preemption requests. +For instance, consider an action to calculate the Fibonacci sequence with the following interface: + +.. code:: + + int32 order + --- + int32[] sequence + --- + int32[] sequence + +The action server is the entity that receives this message, starts calculating the sequence up to ``order`` (providing feedback along the way), and finally returns a full result in ``sequence``. + +.. note:: + + There should only ever be one action server per action name. + It is undefined which action server will receive client requests in the case of multiple action servers on the same action name. + +Action client +------------- + +An action client is an entity that will request a remote action server to perform a procedure on its behalf. +Following the example above, the action client is the entity that creates the initial message containing the ``order``, and waits for the action server to compute the sequence and return it (with feedback along the way). + +Unlike the action server, there can be arbitrary numbers of action clients using the same action name. diff --git a/source/Concepts/About-ROS-2-Client-Libraries.rst b/source/Concepts/Basic/About-Client-Libraries.rst similarity index 90% rename from source/Concepts/About-ROS-2-Client-Libraries.rst rename to source/Concepts/Basic/About-Client-Libraries.rst index 2e58984301d..890ee99047e 100644 --- a/source/Concepts/About-ROS-2-Client-Libraries.rst +++ b/source/Concepts/Basic/About-Client-Libraries.rst @@ -1,13 +1,12 @@ .. redirect-from:: Concepts/About-Client-Interfaces + Concepts/About-ROS-2-Client-Libraries -.. include:: ../../global_substitutions.txt +.. include:: ../../../global_substitutions.txt -.. _ROS-2-Client-Libraries: - -About ROS 2 client libraries -============================ +Client libraries +================ .. contents:: Table of Contents :local: @@ -15,17 +14,16 @@ About ROS 2 client libraries Overview -------- -Client libraries are the APIs that allow users to implement their ROS code. -Using client libraries, users gain access to ROS concepts such as nodes, topics, services, etc. -Client libraries come in a variety of programming languages so that users may write ROS code in the language that is best-suited for their application. +Client libraries are the APIs that allow users to implement their ROS 2 code. +Using client libraries, users gain access to ROS 2 concepts such as nodes, topics, services, etc. +Client libraries come in a variety of programming languages so that users may write ROS 2 code in the language that is best-suited for their application. For example, you might prefer to write visualization tools in Python because it makes prototyping iterations faster, while for parts of your system that are concerned with efficiency, the nodes might be better implemented in C++. -Nodes written using different client libraries are able to share messages with each other because all client libraries implement code generators that provide users with the capability to interact with ROS interface files in the respective language. +Nodes written using different client libraries are able to share messages with each other because all client libraries implement code generators that provide users with the capability to interact with ROS 2 interface files in the respective language. -In addition to the language-specific communication tools, client libraries expose to users the core functionality that makes ROS “ROS”. +In addition to the language-specific communication tools, client libraries expose to users the core functionality that makes ROS "ROS". For example, here is a list of functionality that can typically be accessed through a client library: - * Names and namespaces * Time (real or simulated) * Parameters @@ -36,9 +34,9 @@ For example, here is a list of functionality that can typically be accessed thro Supported client libraries -------------------------- -The C++ client library (``rclcpp``) and the Python client library (``rclpy``) are both client libraries which utilize common functionality in the RCL. +The C++ client library (``rclcpp``) and the Python client library (``rclpy``) are both client libraries which utilize common functionality in ``rcl``. -The ``rclcpp`` Package +The ``rclcpp`` package ~~~~~~~~~~~~~~~~~~~~~~ The ROS Client Library for C++ (``rclcpp``) is the user facing, C++ idiomatic interface which provides all of the ROS client functionality like creating nodes, publishers, and subscriptions. @@ -51,7 +49,7 @@ The generated |API| documentation is here: `api/rclcpp/index.html `_ -The ``rclpy`` Package +The ``rclpy`` package ~~~~~~~~~~~~~~~~~~~~~ The ROS Client Library for Python (``rclpy``) is the Python counterpart to the C++ client library. @@ -67,7 +65,7 @@ This is avoided if possible when communicating between publishers and subscripti The ``rclpy`` repository is located on GitHub at `ros2/rclpy `_ and contains the |package| ``rclpy``. The generated |API| documentation is here: -`api/rclpy/index.html `_ +`api/rclpy/index.html `_ Community-maintained @@ -75,7 +73,6 @@ Community-maintained While the C++ and Python client libraries are maintained by the core ROS 2 team, members of the ROS 2 community maintain additional client libraries: -* `Ada `__ Ada binding and tools for ROS 2 - workspace overlay. * `C `__ ``rclc`` does not put a layer on top of rcl but complements rcl to make rcl+rclc a feature-complete client library in C. See `micro.ros.org `__ for tutorials. * `JVM and Android `__ Java and Android bindings for ROS 2. * `.NET Core, UWP and C# `__ This is a collection of projects (bindings, code generator, examples and more) for writing ROS 2 applications for .NET Core and .NET Standard. @@ -84,11 +81,13 @@ While the C++ and Python client libraries are maintained by the core ROS 2 team, Older, unmaintained client libraries are: +* `Ada `__ * `C# `__ * `Objective C and iOS `__ +* `Zig `__ -Common functionality: the RCL +Common functionality: ``rcl`` ----------------------------- Most of the functionality found in a client library is not specific to the programming language of the client library. @@ -102,7 +101,7 @@ In addition to making the client libraries light-weight, an advantage of having If any changes are made to the logic/behavior of the functionality in the core RCL -- namespaces, for example -- all client libraries that use the RCL will have these changes reflected. Furthermore, having the common core means that maintaining multiple client libraries becomes less work when it comes to bug fixes. -`The API documentation for the RCL can be found here. `__ +The API documentation for ``rcl`` can be found `here `__. Language-specific functionality ------------------------------- diff --git a/source/Concepts/About-Command-Line-Tools.rst b/source/Concepts/Basic/About-Command-Line-Tools.rst similarity index 68% rename from source/Concepts/About-Command-Line-Tools.rst rename to source/Concepts/Basic/About-Command-Line-Tools.rst index 2bc2c911c88..2b0b7c71c4f 100644 --- a/source/Concepts/About-Command-Line-Tools.rst +++ b/source/Concepts/Basic/About-Command-Line-Tools.rst @@ -2,12 +2,12 @@ Introspection-with-command-line-tools Tutorials/Introspection-with-command-line-tools + Concepts/About-Command-Line-Tools Introspection with command line tools ===================================== .. contents:: Table of Contents - :depth: 1 :local: ROS 2 includes a suite of command-line tools for introspecting a ROS 2 system. @@ -25,24 +25,25 @@ To see all available sub-commands run: Examples of sub-commands that are available include: - -* action: Introspect/interact with ROS actions -* bag: Record/play a rosbag -* component: Manage component containers -* daemon: Introspect/configure the ROS 2 daemon -* doctor: Check ROS setup for potential issues -* interface: Show information about ROS interfaces -* launch: Run/introspect a launch file -* lifecycle: Introspect/manage nodes with managed lifecycles -* node: Introspect ROS nodes -* param: Introspect/configure parameters on a node -* pkg: Introspect ROS packages -* run: Run ROS nodes -* security: Configure security settings -* service: Introspect/call ROS services -* test: Run a ROS launch test -* topic: Introspect/publish ROS topics -* trace: Tracing tools to get information on ROS nodes execution (only available on Linux) +* ``action``: Introspect/interact with ROS actions +* ``bag``: Record/play a rosbag +* ``component``: Manage component containers +* ``daemon``: Introspect/configure the ROS 2 daemon +* ``doctor``: Check ROS setup for potential issues +* ``interface``: Show information about ROS interfaces +* ``launch``: Run/introspect a launch file +* ``lifecycle``: Introspect/manage nodes with managed lifecycles +* ``multicast``: Multicast debugging commands +* ``node``: Introspect ROS nodes +* ``param``: Introspect/configure parameters on a node +* ``pkg``: Introspect ROS packages +* ``run``: Run ROS nodes +* ``security``: Configure security settings +* ``service``: Introspect/call ROS services +* ``test``: Run a ROS launch test +* ``topic``: Introspect/publish ROS topics +* ``trace``: Tracing tools to get information on ROS nodes execution (only available on Linux) +* ``wtf``: An alias for ``doctor`` Example ------- @@ -72,7 +73,7 @@ Behind the scenes ----------------- ROS 2 uses a distributed discovery process for nodes to connect to each other. -As this process purposefully does not use a centralized discovery mechanism (like the ROS Master in ROS 1), it can take time for ROS nodes to discover all other participants in the ROS graph. +As this process purposefully does not use a centralized discovery mechanism, it can take time for ROS nodes to discover all other participants in the ROS graph. Because of this, there is a long-running daemon in the background that stores information about the ROS graph to provide faster responses to queries, e.g. the list of node names. The daemon is automatically started when the relevant command-line tools are used for the first time. diff --git a/source/Concepts/Basic/About-Discovery.rst b/source/Concepts/Basic/About-Discovery.rst new file mode 100644 index 00000000000..0d5a0cda2f2 --- /dev/null +++ b/source/Concepts/Basic/About-Discovery.rst @@ -0,0 +1,21 @@ +Discovery +========= + +.. contents:: Table of Contents + :local: + +Discovery of nodes happens automatically through the underlying middleware of ROS 2. +It can be summarized as follows: + +#. When a node is started, it advertises its presence to other nodes on the network with the same ROS domain (set with the ROS_DOMAIN_ID environment variable). + Nodes respond to this advertisement with information about themselves so that the appropriate connections can be made and the nodes can communicate. +#. Nodes periodically advertise their presence so that connections can be made with new-found entities, even after the initial discovery period. +#. Nodes advertise to other nodes when they go offline. + +Nodes will only establish connections with other nodes if they have compatible :doc:`Quality of Service <../../Tutorials/Demos/Quality-of-Service>` settings. + +Take the :ref:`talker-listener demo ` for example. +Running the C++ talker node in one terminal will publish messages on a topic, +and the Python listener node running in another terminal will subscribe to messages on the same topic. + +You should see that these nodes discover each other automatically, and begin to exchange messages. diff --git a/source/Concepts/About-ROS-Interfaces.rst b/source/Concepts/Basic/About-Interfaces.rst similarity index 66% rename from source/Concepts/About-ROS-Interfaces.rst rename to source/Concepts/Basic/About-Interfaces.rst index 4ab01c62d65..d8044e231a9 100644 --- a/source/Concepts/About-ROS-Interfaces.rst +++ b/source/Concepts/Basic/About-Interfaces.rst @@ -1,19 +1,18 @@ -.. _InterfaceConcept: - .. redirect-from:: About-ROS-Interfaces + Concepts/About-ROS-Interfaces -About ROS 2 interfaces -====================== +Interfaces +========== .. contents:: Table of Contents :local: -1. Background -------------- +Background +---------- -ROS applications typically communicate through interfaces of one of three types: messages, services and actions. +ROS applications typically communicate through interfaces of one of three types: :doc:`topics `, :doc:`services `, or :doc:`actions `. ROS 2 uses a simplified description language, the interface definition language (IDL), to describe these interfaces. This description makes it easy for ROS tools to automatically generate source code for the interface type in several target languages. @@ -24,15 +23,18 @@ In this document we will describe the supported types: * action: ``.action`` files describe actions. They are composed of three parts: a goal, a result, and feedback. Each part is a message declaration itself. +Messages +-------- -2. Message description specification ------------------------------------- +Messages are a way for a ROS 2 node to send data on the network to other ROS nodes, with no response expected. +For instance, if a ROS 2 node reads temperature data from a sensor, it can then publish that data on the ROS 2 network using a ``Temperature`` message. +Other nodes on the ROS 2 network can subscribe to that data and receive the ``Temperature`` message. Messages are described and defined in ``.msg`` files in the ``msg/`` directory of a ROS package. ``.msg`` files are composed of two parts: fields and constants. -2.1 Fields -^^^^^^^^^^ +Fields +^^^^^^ Each field consists of a type and a name, separated by a space, i.e: @@ -49,12 +51,11 @@ For example: int32 my_int string my_string -2.1.1 Field types -~~~~~~~~~~~~~~~~~ +Field types +~~~~~~~~~~~ Field types can be: - * a built-in-type * names of Message descriptions defined on their own, such as "geometry_msgs/PoseStamped" @@ -128,7 +129,6 @@ Field types can be: - builtins.str - wstring - *Every built-in-type can be used to define arrays:* .. list-table:: @@ -155,8 +155,7 @@ Field types can be: - builtins.str* - string - -All types that are more permissive than their ROS definition enforce the ROS constraints in range and length by software +All types that are more permissive than their ROS definition enforce the ROS constraints in range and length by software. *Example of message definition using arrays and bounded types:* @@ -173,14 +172,14 @@ All types that are more permissive than their ROS definition enforce the ROS con string<=10[] unbounded_array_of_strings_up_to_ten_characters_each string<=10[<=5] up_to_five_strings_up_to_ten_characters_each -2.1.2 Field names -~~~~~~~~~~~~~~~~~ +Field names +~~~~~~~~~~~ Field names must be lowercase alphanumeric characters with underscores for separating words. They must start with an alphabetic character, and they must not end with an underscore or have two consecutive underscores. -2.1.3 Field default value -~~~~~~~~~~~~~~~~~~~~~~~~~ +Field default value +~~~~~~~~~~~~~~~~~~~ Default values can be set to any field in the message type. Currently default values are not supported for string arrays and complex types (i.e. types not present in the built-in-types table above; that applies to all nested messages). @@ -200,16 +199,16 @@ For example: string full_name "John Doe" int32[] samples [-200, -100, 0, 100, 200] -Note: - +.. note:: -* string values must be defined in single ``'`` or double ``"`` quotes -* currently string values are not escaped + * string values must be defined in single ``'`` or double ``"`` quotes + * currently string values are not escaped -2.2 Constants -^^^^^^^^^^^^^ +Constants +^^^^^^^^^ -Each constant definition is like a field description with a default value, except that this value can never be changed programatically. This value assignment is indicated by use of an equal '=' sign, e.g. +Each constant definition is like a field description with a default value, except that this value can never be changed programatically. +This value assignment is indicated by use of an equal '=' sign, e.g. .. code-block:: bash @@ -228,8 +227,10 @@ For example: Constants names have to be UPPERCASE -3. Service description specification ------------------------------------- +Services +-------- + +Services are a request/response communication, where the client (requester) is waiting for the server (responder) to make a short computation and return a result. Services are described and defined in ``.srv`` files in the ``srv/`` directory of a ROS package. @@ -248,33 +249,55 @@ We can of course get much more complicated (if you want to refer to a message fr .. code-block:: bash - #request constants + # request constants int8 FOO=1 int8 BAR=2 - #request fields + # request fields int8 foobar another_pkg/AnotherMessage msg --- - #response constants + # response constants uint32 SECRET=123456 - #response fields + # response fields another_pkg/YetAnotherMessage val CustomMessageDefinedInThisPackage value uint32 an_integer You cannot embed another service inside of a service. -4. New features in ROS 2 interfaces ------------------------------------ +Actions +------- + +Actions are a long-running request/response communication, where the action client (requester) is waiting for the action server (the responder) to take some action and return a result. +In contrast to services, actions can be long-running (many seconds or minutes), provide feedback while they are happening, and can be interrupted. -The ROS 2 IDL is closely related to the `ROS 1 IDL `__. -Most existing ROS 1 ``.msg`` and ``.srv`` files should be usable as-is with ROS 2. -Atop ROS 1's existing feature set, the ROS 2 IDL introduces some new features, namely: +Action definitions have the following form: +.. code:: + + + --- + + --- + + +Like services, the request fields are before and the response fields are after the first triple-dash (``---``), respectively. +There is also a third set of fields after the second triple-dash, which is the fields to be sent when sending feedback. + +There can be arbitrary numbers of request fields (including zero), arbitrary numbers of response fields (including zero), and arbitrary numbers of feedback fields (including zero). + +The ````, ````, and ```` follow all of the same rules as the ```` for a message. +The ````, ````, and ```` follow all of the same rules as the ```` for a message. + +For instance, the ``Fibonacci`` action definition contains the following: + +.. code:: + + int32 order + --- + int32[] sequence + --- + int32[] sequence -* **bounded arrays**: Whereas the ROS 1 IDL allows unbounded arrays (e.g., ``int32[] foo``) and fixed-size arrays (e.g., ``int32[5] bar``), the ROS 2 IDL further allows bounded arrays (e.g., ``int32[<=5] bat``). - There are use cases in which it's important to be able to place an upper bound on the size of an array without committing to always using that much space (e.g., in a real-time system in which you need to preallocate all memory that will be used during execution). -* **bounded strings**: Whereas the ROS 1 IDL allows unbounded strings (e.g., ``string foo``), the ROS 2 IDL further allows bounded strings (e.g., ``string<=5 bar``). -* **default values**: Whereas the ROS 1 IDL allows constant fields (e.g., ``int32 X=123``), the ROS 2 IDL further allows default values to be specified (e.g., ``int32 X 123``). - The default value is used when constructing a message/service object and can be subsequently overridden by assigning to the field. - You can also specify default values for action parts. +This is an action definition where the action client is sending a single ``int32`` field representing the number of Fibonacci steps to take, and expecting the action server to produce an array of ``int32`` containing the complete steps. +Along the way, the action server may also provide an intermediate array of ``int32`` contains the steps accomplished up until a certain point. diff --git a/source/Concepts/Basic/About-Launch.rst b/source/Concepts/Basic/About-Launch.rst new file mode 100644 index 00000000000..75a12f4d97d --- /dev/null +++ b/source/Concepts/Basic/About-Launch.rst @@ -0,0 +1,18 @@ +Launch +====== + +.. contents:: Table of Contents + :local: + +A ROS 2 system typically consists of many nodes running across many different processes (and even different machines). +While it is possible to run each of these nodes separately, it gets cumbersome quite quickly. + +The launch system in ROS 2 is meant to automate the running of many nodes with a single command. +It helps the user describe the configuration of their system and then executes it as described. +The configuration of the system includes what programs to run, where to run them, what arguments to pass them, and ROS-specific conventions which make it easy to reuse components throughout the system by giving them each a different configuration. +It is also responsible for monitoring the state of the processes launched, and reporting and/or reacting to changes in the state of those processes. + +All of the above is specified in a launch file, which can be written in Python, XML, or YAML. +This launch file can then be run using the ``ros2 launch`` command, and all of the nodes specified will be run. + +The `design document `__ details the goal of the design of ROS 2's launch system (not all functionality is currently available). diff --git a/source/Concepts/Basic/About-Nodes.rst b/source/Concepts/Basic/About-Nodes.rst new file mode 100644 index 00000000000..6ec5fbbfa94 --- /dev/null +++ b/source/Concepts/Basic/About-Nodes.rst @@ -0,0 +1,18 @@ +Nodes +===== + +.. contents:: Table of Contents + :local: + +A node is a participant in the ROS 2 graph, which uses a :doc:`client library ` to communicate with other nodes. +Nodes can communicate with other nodes within the same process, in a different process, or on a different machine. +Nodes are typically the unit of computation in a ROS graph; each node should do one logical thing. + +Nodes can :doc:`publish ` to named topics to deliver data to other nodes, or :doc:`subscribe ` to named topics to get data from other nodes. +They can also act as a :doc:`service client ` to have another node perform a computation on their behalf, or as a :doc:`service server ` to provide functionality to other nodes. +For long-running computations, a node can act as an :doc:`action client ` to have another node perform it on their behalf, or as an :doc:`action server ` to provide functionality to other nodes. +Nodes can provide configurable :doc:`parameters ` to change behavior during run-time. + +Nodes are often a complex combination of publishers, subscribers, service servers, service clients, action servers, and action clients, all at the same time. + +Connections between nodes are established through a distributed :doc:`discovery ` process. diff --git a/source/Concepts/About-ROS-2-Parameters.rst b/source/Concepts/Basic/About-Parameters.rst similarity index 62% rename from source/Concepts/About-ROS-2-Parameters.rst rename to source/Concepts/Basic/About-Parameters.rst index 5ac2008c696..47c659b96bd 100644 --- a/source/Concepts/About-ROS-2-Parameters.rst +++ b/source/Concepts/Basic/About-Parameters.rst @@ -1,11 +1,10 @@ -.. _AboutParameters: - .. redirect-from:: About-ROS-2-Parameters + Concepts/About-ROS-2-Parameters -About parameters in ROS 2 -========================= +Parameters +========== .. contents:: Table of Contents :local: @@ -13,7 +12,7 @@ About parameters in ROS 2 Overview -------- -Parameters in ROS are associated with individual nodes. +Parameters in ROS 2 are associated with individual nodes. Parameters are used to configure nodes at startup (and during runtime), without changing the code. The lifetime of a parameter is tied to the lifetime of the node (though the node could implement some sort of persistence to reload values after restart). @@ -21,10 +20,10 @@ Parameters are addressed by node name, node namespace, parameter name, and param Providing a parameter namespace is optional. Each parameter consists of a key, a value, and a descriptor. -The key is a string and the value is one of the following types: bool, int64, float64, string, byte[], bool[], int64[], float64[] or string[]. +The key is a string and the value is one of the following types: ``bool``, ``int64``, ``float64``, ``string``, ``byte[]``, ``bool[]``, ``int64[]``, ``float64[]`` or ``string[]``. By default all descriptors are empty, but can contain parameter descriptions, value ranges, type information, and additional constraints. -For an hands-on tutorial with ROS parameters see :doc:`../Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Parameters/Understanding-ROS2-Parameters`. +For an hands-on tutorial with ROS parameters see :doc:`../../Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Parameters/Understanding-ROS2-Parameters`. Parameters background --------------------- @@ -34,7 +33,7 @@ Declaring parameters By default, a node needs to *declare* all of the parameters that it will accept during its lifetime. This is so that the type and name of the parameters are well-defined at node startup time, which reduces the chances of misconfiguration later on. -See :doc:`../Tutorials/Beginner-Client-Libraries/Using-Parameters-In-A-Class-CPP` or :doc:`../Tutorials/Beginner-Client-Libraries/Using-Parameters-In-A-Class-Python` for tutorials on declaring and using parameters from a node. +See :doc:`../../Tutorials/Beginner-Client-Libraries/Using-Parameters-In-A-Class-CPP` or :doc:`../../Tutorials/Beginner-Client-Libraries/Using-Parameters-In-A-Class-Python` for tutorials on declaring and using parameters from a node. For some types of nodes, not all of the parameters will be known ahead of time. In these cases, the node can be instantiated with ``allow_undeclared_parameters`` set to ``true``, which will allow parameters to be get and set on the node even if they haven't been declared. @@ -52,14 +51,16 @@ When the parameter is declared, it should be declared using a ``ParameterDescrip Parameter callbacks ^^^^^^^^^^^^^^^^^^^ -A ROS 2 node can register two different types of callbacks to be informed when changes are happening to parameters. -The reason that there are two types of callbacks is to have a chance to intervene before the parameter change happens, and to have a chance to react after the parameter change happens. -A node can register for both, either, or none of the callback types. -Both types are described below. +A ROS 2 node can register three different types of callbacks to be informed when changes are happening to parameters. +All three of the callbacks are optional. + +The first is known as a "pre set parameter" callback, and can be set by calling ``add_pre_set_parameters_callback`` from the node API. +This callback is passed a list of the ``Parameter`` objects that are being changed, and returns nothing. +When it is called, it can modify the ``Parameter`` list to change, add, or remove entries. +As an example, if ``parameter2`` should change anytime that ``parameter1`` changes, that can be implemented with this callback. -The first type is known as a "set parameter" callback, and can be set by calling ``add_on_set_parameters_callback`` from the node API. -The callback should accept a list of ``Parameter`` objects, and return an ``rcl_interfaces/msg/SetParametersResult``. -This callback will be called before a parameter is declared or changed on a node. +The second is known as a "set parameter" callback, and can be set by calling ``add_on_set_parameters_callback`` from the node API. +The callback is passed a list of immutable ``Parameter`` objects, and returns an ``rcl_interfaces/msg/SetParametersResult``. The main purpose of this callback is to give the user the ability to inspect the upcoming change to the parameter and explicitly reject the change. .. note:: @@ -68,29 +69,30 @@ The main purpose of this callback is to give the user the ability to inspect the If the individual callback were to make changes to the class it is in, for instance, it may get out-of-sync with the actual parameter. To get a callback *after* a parameter has been successfully changed, see the next type of callback below. -The second type of callback is known as an "on parameter event" callback, and can be set by calling ``on_parameter_event`` from one of the parameter client APIs. -The callback should accept an ``rcl_interfaces/msg/ParameterEvent`` object, and return nothing. -This callback will be called after all parameters in the input event have been declared, changed, or deleted. +The third type of callback is known as an "post set parameter" callback, and can be set by calling ``add_post_set_parameters_callback`` from the node API. +The callback is passed a list of immutable ``Parameter`` objects, and returns nothing. The main purpose of this callback is to give the user the ability to react to changes from parameters that have successfully been accepted. +The ROS 2 demos have an `example `__ of all of these callbacks in use. + Interacting with parameters --------------------------- -ROS 2 nodes can perform parameter operations through node APIs as described in :doc:`../Tutorials/Beginner-Client-Libraries/Using-Parameters-In-A-Class-CPP` or :doc:`../Tutorials/Beginner-Client-Libraries/Using-Parameters-In-A-Class-Python`. +ROS 2 nodes can perform parameter operations through node APIs as described in :doc:`../../Tutorials/Beginner-Client-Libraries/Using-Parameters-In-A-Class-CPP` or :doc:`../../Tutorials/Beginner-Client-Libraries/Using-Parameters-In-A-Class-Python`. External processes can perform parameter operations via parameter services that are created by default when a node is instantiated. The services that are created by default are: -* /node_name/describe_parameters: Uses a service type of ``rcl_interfaces/srv/DescribeParameters``. +* ``/node_name/describe_parameters``: Uses a service type of ``rcl_interfaces/srv/DescribeParameters``. Given a list of parameter names, returns a list of descriptors associated with the parameters. -* /node_name/get_parameter_types: Uses a service type of ``rcl_interfaces/srv/GetParameterTypes``. +* ``/node_name/get_parameter_types``: Uses a service type of ``rcl_interfaces/srv/GetParameterTypes``. Given a list of parameter names, returns a list of parameter types associated with the parameters. -* /node_name/get_parameters: Uses a service type of ``rcl_interfaces/srv/GetParameters``. +* ``/node_name/get_parameters``: Uses a service type of ``rcl_interfaces/srv/GetParameters``. Given a list of parameter names, returns a list of parameter values associated with the parameters. -* /node_name/list_parameters: Uses a service type of ``rcl_interfaces/srv/ListParameters``. +* ``/node_name/list_parameters``: Uses a service type of ``rcl_interfaces/srv/ListParameters``. Given an optional list of parameter prefixes, returns a list of the available parameters with that prefix. If the prefixes are empty, returns all parameters. -* /node_name/set_parameters: Uses a service type of ``rcl_interfaces/srv/SetParameters``. +* ``/node_name/set_parameters``: Uses a service type of ``rcl_interfaces/srv/SetParameters``. Given a list of parameter names and values, attempts to set the parameters on the node. Returns a list of results from trying to set each parameter; some of them may have succeeded and some may have failed. -* /node_name/set_parameters_atomically: Uses a service type of ``rcl_interfaces/srv/SetParametersAtomically``. +* ``/node_name/set_parameters_atomically``: Uses a service type of ``rcl_interfaces/srv/SetParametersAtomically``. Given a list of parameter names and values, attempts to set the parameters on the node. Returns a single result from trying to set all parameters, so if one failed, all of them failed. Setting initial parameter values when running a node @@ -103,21 +105,21 @@ Setting initial parameter values when launching nodes ----------------------------------------------------- Initial parameter values can also be set when running the node through the ROS 2 launch facility. -See :doc:`this document <../Tutorials/Intermediate/Launch/Using-ROS2-Launch-For-Large-Projects>` for information on how to specify parameters via launch. +See :doc:`this document <../../Tutorials/Intermediate/Launch/Using-ROS2-Launch-For-Large-Projects>` for information on how to specify parameters via launch. Manipulating parameter values at runtime ---------------------------------------- The ``ros2 param`` command is the general way to interact with parameters for nodes that are already running. ``ros2 param`` uses the parameter service API as described above to perform the various operations. -See :doc:`this how-to guide <../How-To-Guides/Using-ros2-param>` for details on how to use ``ros2 param``. +See :doc:`this how-to guide <../../How-To-Guides/Using-ros2-param>` for details on how to use ``ros2 param``. Migrating from ROS 1 -------------------- -The :doc:`Launch file migration guide <../How-To-Guides/Launch-files-migration-guide>` explains how to migrate ``param`` and ``rosparam`` launch tags from ROS 1 to ROS 2. +The :doc:`Launch file migration guide <../../How-To-Guides/Migrating-from-ROS1/Migrating-Launch-Files>` explains how to migrate ``param`` and ``rosparam`` launch tags from ROS 1 to ROS 2. -The :doc:`YAML parameter file migration guide <../How-To-Guides/Parameters-YAML-files-migration-guide>` explains how to migrate parameter files from ROS 1 to ROS 2. +The :doc:`YAML parameter file migration guide <../../How-To-Guides/Migrating-from-ROS1/Migrating-Parameters>` explains how to migrate parameter files from ROS 1 to ROS 2. In ROS 1, the ``roscore`` acted like a global parameter blackboard where all nodes could get and set parameters. Since there is no central ``roscore`` in ROS 2, that functionality no longer exists. diff --git a/source/Concepts/Basic/About-Services.rst b/source/Concepts/Basic/About-Services.rst new file mode 100644 index 00000000000..24c97825f38 --- /dev/null +++ b/source/Concepts/Basic/About-Services.rst @@ -0,0 +1,52 @@ +Services +======== + +.. contents:: Table of Contents + :local: + +In ROS 2, a service refers to a remote procedure call. +In other words, a node can make a remote procedure call to another node which will do a computation and return a result. + +This structure is reflected in how a service message definition looks: + +.. code:: + + uint32 request + --- + uint32 response + +In ROS 2, services are expected to return quickly, as the client is generally waiting on the result. +Services should never be used for longer running processes, in particular processes that might need to be preempted for exceptional situations. +If you have a service that will be doing a long-running computation, consider using an :doc:`action ` instead. + +Services are identified by a service name, which looks much like a topic name (but is in a different namespace). + +A service consists of two parts: the service server and the service client. + +Service server +-------------- + +A service server is the entity that will accept a remote procedure request, and perform some computation on it. +For instance, suppose the ROS 2 message contains the following: + +.. code:: + + uint32 a + uint32 b + --- + uint32 sum + +The service server would be the entity that receives this message, adds ``a`` and ``b`` together, and returns the ``sum``. + +.. note:: + + There should only ever be one service server per service name. + It is undefined which service server will receive client requests in the case of multiple service servers on the same service name. + +Service client +-------------- + +A service client is an entity that will request a remote service server to perform a computation on its behalf. +Following from the example above, the service client is the entity that creates the initial message containing ``a`` and ``b``, and waits for the service server to compute the sum and return the result. + +Unlike the service server, there can be arbitrary numbers of service clients using the same service name. diff --git a/source/Concepts/Basic/About-Topics.rst b/source/Concepts/Basic/About-Topics.rst new file mode 100644 index 00000000000..d76b1145201 --- /dev/null +++ b/source/Concepts/Basic/About-Topics.rst @@ -0,0 +1,51 @@ +Topics +====== + +.. contents:: Table of Contents + :local: + +Topics are one of the three primary styles of interfaces provided by ROS 2. +Topics should be used for continuous data streams, like sensor data, robot state, etc. + +As stated earlier, ROS 2 is a strongly-typed, anonymous publish/subscribe system. +Let's break down that sentence and explain it a bit more. + +Publish/Subscribe +----------------- + +A publish/subscribe system is one in which there are producers of data (publishers) and consumers of data (subscribers). +The publishers and subscribers know how to contact each other through the concept of a "topic", which is a common name so that the entites can find each other. +For instance, when you create a publisher, you must also give it a string that is the name of the topic; the same goes for the subscriber. +Any publishers and subscribers that are on the same topic name can directly communicate with each other. +There may be zero or more publishers and zero or more subscribers on any particular topic. +When data is published to the topic by any of the publishers, all subscribers in the system will receive the data. +This system is also known as a "bus", since it somewhat resembles a device bus from electrical engineering. +This concept of a bus is part of what makes ROS 2 a powerful and flexible system. +Publishers and subscribers can come and go as needed, meaning that debugging and introspection are natural extensions to the system. +For instance, if you want to record data, you can use the ``ros2 bag record`` command. +Under the hood, ``ros2 bag record`` creates a new subscriber to whatever topic you tell it, without interrupting the flow of data to the other parts of the system. + +Anonymous +--------- + +Another fact mentioned in the introduction is that ROS 2 is "anonymous". +This means that when a subscriber gets a piece of data, it doesn't generally know or care which publisher originally sent it (though it can find out if it wants). +The benefit to this architecture is that publishers and subscribers can be swapped out at will without affecting the rest of the system. + +Strongly-typed +-------------- + +Finally, the introduction also mentioned that the publish/subscribe system is "strongly-typed". +That has two meanings in this context: + +1. The types of each field in a ROS message are typed, and that type is enforced at various levels. + For instance, if the ROS message contains: + + .. code:: + + uint32 field1 + string field2 + + Then the code will ensure that ``field`` is always an unsigned integer and that ``field2`` is always a string. + +2. The semantics of each field are well-defined. There is no automated mechanism to ensure this, but all of the core ROS types have strong semantics associated with them. For instance, the IMU message contains a 3-dimensional vector for the measured angular velocity, and each of the dimensions is specified to be in radians/second. Other interpretations should not be placed into the message. diff --git a/source/Concepts/Intermediate.rst b/source/Concepts/Intermediate.rst new file mode 100644 index 00000000000..0338e8f0fdf --- /dev/null +++ b/source/Concepts/Intermediate.rst @@ -0,0 +1,19 @@ +Intermediate Concepts +===================== + +These are the concepts that further your understanding of a basic ROS 2 system. + +.. toctree:: + :maxdepth: 1 + + Intermediate/About-Domain-ID + Intermediate/About-Different-Middleware-Vendors + Intermediate/About-Logging + Intermediate/About-Quality-of-Service-Settings + Intermediate/About-Executors + Intermediate/About-Topic-Statistics + Intermediate/About-RQt + Intermediate/About-Composition + Intermediate/About-Cross-Compilation + Intermediate/About-Security + Intermediate/About-Tf2 diff --git a/source/Concepts/About-Composition.rst b/source/Concepts/Intermediate/About-Composition.rst similarity index 94% rename from source/Concepts/About-Composition.rst rename to source/Concepts/Intermediate/About-Composition.rst index 2a5c270954c..4a6a9399ee3 100644 --- a/source/Concepts/About-Composition.rst +++ b/source/Concepts/Intermediate/About-Composition.rst @@ -1,8 +1,11 @@ -About Composition -================= +.. redirect-from:: + + Concepts/About-Composition + +Composition +=========== .. contents:: Table of Contents - :depth: 1 :local: ROS 1 - Nodes vs. Nodelets @@ -23,16 +26,13 @@ Having different APIs, which was the biggest drawback in ROS 1, is avoided in RO It is still possible to use the node-like style of "writing your own main" but for the common case it is not recommended. - By making the process layout a deploy-time decision the user can choose between: - * running multiple nodes in separate processes with the benefits of process/fault isolation as well as easier debugging of individual nodes and -* running multiple nodes in a single process with the lower overhead and optionally more efficient communication (see :doc:`Intra Process Communication <../Tutorials/Demos/Intra-Process-Communication>`). +* running multiple nodes in a single process with the lower overhead and optionally more efficient communication (see :doc:`Intra Process Communication <../../Tutorials/Demos/Intra-Process-Communication>`). Additionally ``ros2 launch`` can be used to automate these actions through specialized launch actions. - Writing a Component ------------------- @@ -58,15 +58,12 @@ Additionally, once a component is created, it must be registered with the index In order for the component_container to be able to find desired components, it must be executed or launched from a shell that has sourced the corresponding workspace. -.. _composition-using-components: - Using Components ---------------- The `composition `__ package contains a couple of different approaches on how to use components. The three most common ones are: - #. Start a (`generic container process `__) and call the ROS service `load_node `__ offered by the container. The ROS service will then load the component specified by the passed package name and library name and start executing it within the running process. Instead of calling the ROS service programmatically you can also use a `command line tool `__ to invoke the ROS service with the passed command line arguments @@ -77,4 +74,4 @@ The three most common ones are: Practical application --------------------- -Try the :doc:`Composition demos <../Tutorials/Intermediate/Composition>`. +Try the :doc:`Composition demos <../../Tutorials/Intermediate/Composition>`. diff --git a/source/Concepts/About-Cross-Compilation.rst b/source/Concepts/Intermediate/About-Cross-Compilation.rst similarity index 91% rename from source/Concepts/About-Cross-Compilation.rst rename to source/Concepts/Intermediate/About-Cross-Compilation.rst index e93217d764c..4a5098ae50a 100644 --- a/source/Concepts/About-Cross-Compilation.rst +++ b/source/Concepts/Intermediate/About-Cross-Compilation.rst @@ -1,5 +1,12 @@ -About Cross-compilation -======================= +.. redirect-from:: + + Concepts/About-Cross-Compilation + +Cross-compilation +================= + +.. contents:: Table of Contents + :local: Overview -------- @@ -27,4 +34,4 @@ It is a Python script that compiles ROS 2 source files for supported target arch Detailed design of the tool can be found on `ROS 2 design `__. Instructions to use the tool are in the `cross_compile package `__. -If you are using an older version, please follow the :doc:`cross-compilation guide <../How-To-Guides/Cross-compilation>`. +If you are using an older version, please follow the :doc:`cross-compilation guide <../../How-To-Guides/Cross-compilation>`. diff --git a/source/Concepts/About-Different-Middleware-Vendors.rst b/source/Concepts/Intermediate/About-Different-Middleware-Vendors.rst similarity index 90% rename from source/Concepts/About-Different-Middleware-Vendors.rst rename to source/Concepts/Intermediate/About-Different-Middleware-Vendors.rst index 4ada90c11ab..dc8d1d897dd 100644 --- a/source/Concepts/About-Different-Middleware-Vendors.rst +++ b/source/Concepts/Intermediate/About-Different-Middleware-Vendors.rst @@ -1,9 +1,13 @@ .. redirect-from:: DDS-and-ROS-middleware-implementations + Concepts/About-Different-Middleware-Vendors -About different ROS 2 DDS/RTPS vendors -====================================== +Different ROS 2 middleware vendors +================================== + +.. contents:: Table of Contents + :local: ROS 2 is built on top of DDS/RTPS as its middleware, which provides discovery, serialization and transportation. `This article `__ explains the motivation behind using DDS implementations, and/or the RTPS wire protocol of DDS, in detail. @@ -47,7 +51,7 @@ Supported RMW implementations - ``rmw_gurumdds_cpp`` - Community support. Support included in binaries, but GurumDDS installed separately. -For practical information on working with multiple RMW implementations, see the :doc:`"Working with multiple RMW implementations" <../How-To-Guides/Working-with-multiple-RMW-implementations>` tutorial. +For practical information on working with multiple RMW implementations, see the :doc:`"Working with multiple RMW implementations" <../../How-To-Guides/Working-with-multiple-RMW-implementations>` tutorial. Multiple RMW implementations ---------------------------- @@ -55,7 +59,7 @@ Multiple RMW implementations The ROS 2 binary releases for currently active distros have built-in support for several RMW implementations out of the box (Fast DDS, RTI Connext Pro, Eclipse Cyclone DDS, GurumNetworks GurumDDS). The default is Fast DDS, which works without any additional installation steps because we distribute it with our binary packages. -Other RMWs like Cyclone DDS, Connext or GurumDDS can be enabled by :doc:`installing additional packages <../Installation/DDS-Implementations>`, but without having to rebuild anything or replace any existing packages. +Other RMWs like Cyclone DDS, Connext or GurumDDS can be enabled by :doc:`installing additional packages <../../Installation/DDS-Implementations>`, but without having to rebuild anything or replace any existing packages. A ROS 2 workspace that has been built from source may build and install multiple RMW implementations simultaneously. While the core ROS 2 code is being compiled, any RMW implementation that is found will be built if the relevant DDS/RTPS implementation has been installed properly and the relevant environment variables have been configured. @@ -78,4 +82,4 @@ The implementation identifier is the name of the ROS package that provides the R For example, if both ``rmw_cyclonedds_cpp`` and ``rmw_connextdds`` ROS packages are installed, ``rmw_connextdds`` would be the default. If ``rmw_fastrtps_cpp`` is ever installed, it would be the default. -See the :doc:`guide <../How-To-Guides/Working-with-multiple-RMW-implementations>` for how to specify which RMW implementation is to be used when running the ROS 2 examples. +See the :doc:`guide <../../How-To-Guides/Working-with-multiple-RMW-implementations>` for how to specify which RMW implementation is to be used when running the ROS 2 examples. diff --git a/source/Concepts/About-Domain-ID.rst b/source/Concepts/Intermediate/About-Domain-ID.rst similarity index 98% rename from source/Concepts/About-Domain-ID.rst rename to source/Concepts/Intermediate/About-Domain-ID.rst index ab804b4785d..73ca15e4e5a 100644 --- a/source/Concepts/About-Domain-ID.rst +++ b/source/Concepts/Intermediate/About-Domain-ID.rst @@ -1,7 +1,13 @@ +.. redirect-from:: + + Concepts/About-Domain-ID The ROS_DOMAIN_ID ================= +.. contents:: Table of Contents + :local: + Overview -------- diff --git a/source/Concepts/About-Executors.rst b/source/Concepts/Intermediate/About-Executors.rst similarity index 96% rename from source/Concepts/About-Executors.rst rename to source/Concepts/Intermediate/About-Executors.rst index 1c777bb7003..ec15e588dec 100644 --- a/source/Concepts/About-Executors.rst +++ b/source/Concepts/Intermediate/About-Executors.rst @@ -1,4 +1,6 @@ -.. _Executors: +.. redirect-from:: + + Concepts/About-Executors Executors ========= @@ -9,7 +11,7 @@ Executors Overview -------- -Execution management in ROS 2 is explicated by the concept of Executors. +Execution management in ROS 2 is handled by Executors. An Executor uses one or more threads of the underlying operating system to invoke the callbacks of subscriptions, timers, service servers, action servers, etc. on incoming messages and events. The explicit Executor class (in `executor.hpp `_ in rclcpp, in `executors.py `_ in rclpy, or in `executor.h `_ in rclc) provides more control over execution management than the spin mechanism in ROS 1, although the basic API is very similar. @@ -53,7 +55,7 @@ In order not to counteract the QoS settings of the middleware, an incoming messa A *wait set* is used to inform the Executor about available messages on the middleware layer, with one binary flag per queue. The *wait set* is also used to detect when timers expire. -.. image:: images/executors_basic_principle.png +.. image:: ../images/executors_basic_principle.png The Single-Threaded Executor is also used by the container process for :doc:`components <./About-Composition>`, i.e. in all cases where nodes are created and executed without an explicit main function. @@ -92,7 +94,7 @@ All three executors can be used with multiple nodes by calling ``add_node(..)`` rclcpp::executors::StaticSingleThreadedExecutor executor; executor.add_node(node1); executor.add_node(node2); - executor.add_node(node2); + executor.add_node(node3); executor.spin(); In the above example, the one thread of a Static Single-Threaded Executor is used to serve three nodes together. @@ -138,8 +140,8 @@ There are two types of callback groups, where the type has to be specified at in * *Reentrant:* Callbacks of this group may be executed in parallel. Callbacks of different callback groups may always be executed in parallel. -The Multi-Threaded Executor uses its threads as a pool to process a many callbacks as possible in parallel according to these conditions. -For tips on how to use callback groups efficiently, see :doc:`Using Callback Groups <../How-To-Guides/Using-callback-groups>`. +The Multi-Threaded Executor uses its threads as a pool to process as many callbacks as possible in parallel according to these conditions. +For tips on how to use callback groups efficiently, see :doc:`Using Callback Groups <../../How-To-Guides/Using-callback-groups>`. The Executor base class in rclcpp also has the function ``add_callback_group(..)``, which allows distributing callback groups to different Executors. By configuring the underlying threads using the operating system scheduler, specific callbacks can be prioritized over other callbacks. @@ -156,7 +158,7 @@ In detail, it only reports whether there are any messages for a certain topic or The Executor uses this information to process the messages (including services and actions) in a round-robin fashion - but not in FIFO order. The following flow diagram visualizes this scheduling semantics. -.. image:: images/executors_scheduling_semantics.png +.. image:: ../images/executors_scheduling_semantics.png This semantics was first described in a `paper by Casini et al. at ECRTS 2019 `_. (Note: The paper also explains that timer events are prioritized over all other messages. `This prioritization was removed in Eloquent. `_) diff --git a/source/Concepts/About-Logging.rst b/source/Concepts/Intermediate/About-Logging.rst similarity index 98% rename from source/Concepts/About-Logging.rst rename to source/Concepts/Intermediate/About-Logging.rst index 234fe50394b..f0bfc75bf6b 100644 --- a/source/Concepts/About-Logging.rst +++ b/source/Concepts/Intermediate/About-Logging.rst @@ -1,15 +1,14 @@ .. redirect-from:: Logging + Concepts/About-Logging -About logging and logger configuration -====================================== +Logging and logger configuration +================================ .. contents:: Table of Contents - :depth: 2 :local: - Overview -------- @@ -127,7 +126,7 @@ Logging subsystem design The image below shows the five main pieces to the logging subsystem and how they interact. -.. figure:: images/ros2_logging_architecture.png +.. figure:: ../images/ros2_logging_architecture.png :alt: ROS 2 logging architecture :width: 550px :align: center @@ -185,7 +184,7 @@ Logging usage .. group-tab:: C++ * See the `rclcpp logging demo `_ for some simple examples. - * See the :doc:`logging demo <../Tutorials/Demos/Logging-and-logger-configuration>` for example usage. + * See the :doc:`logging demo <../../Tutorials/Demos/Logging-and-logger-configuration>` for example usage. * See the `rclcpp documentation `__ for an extensive list of functionality. .. group-tab:: Python diff --git a/source/Concepts/About-Quality-of-Service-Settings.rst b/source/Concepts/Intermediate/About-Quality-of-Service-Settings.rst similarity index 83% rename from source/Concepts/About-Quality-of-Service-Settings.rst rename to source/Concepts/Intermediate/About-Quality-of-Service-Settings.rst index b203bd3bf66..c74842bdf1f 100644 --- a/source/Concepts/About-Quality-of-Service-Settings.rst +++ b/source/Concepts/Intermediate/About-Quality-of-Service-Settings.rst @@ -1,19 +1,22 @@ .. redirect-from:: About-Quality-of-Service-Settings + Concepts/About-Quality-of-Service-Settings -About Quality of Service settings -================================= +Quality of Service settings +=========================== +.. contents:: Table of Contents + :local: Overview -------- ROS 2 offers a rich variety of Quality of Service (QoS) policies that allow you to tune communication between nodes. With the right set of Quality of Service policies, ROS 2 can be as reliable as TCP or as best-effort as UDP, with many, many possible states in between. -Unlike ROS 1, which primarily only supported TCP, ROS 2 benefits from the flexibility of the underlying DDS transport in environments with lossy wireless networks where a “best effort” policy would be more suitable, or in real-time computing systems where the right Quality of Service profile is needed to meet deadlines. +Unlike ROS 1, which primarily only supported TCP, ROS 2 benefits from the flexibility of the underlying DDS transport in environments with lossy wireless networks where a "best effort" policy would be more suitable, or in real-time computing systems where the right Quality of Service profile is needed to meet deadlines. -A set of QoS “policies” combine to form a QoS “profile”. +A set of QoS "policies" combine to form a QoS "profile". Given the complexity of choosing the correct QoS policies for a given scenario, ROS 2 provides a set of predefined QoS profiles for common use cases (e.g. sensor data). At the same time, developers are given the flexibility to control specific policies of the QoS profiles. @@ -33,7 +36,7 @@ The base QoS profile currently includes settings for the following policies: * Depth - * *Queue size*: only honored if the “history” policy was set to “keep last”. + * *Queue size*: only honored if the "history" policy was set to "keep last". * Reliability @@ -42,7 +45,7 @@ The base QoS profile currently includes settings for the following policies: * Durability - * *Transient local*: the publisher becomes responsible for persisting samples for “late-joining” subscriptions. + * *Transient local*: the publisher becomes responsible for persisting samples for "late-joining" subscriptions. * *Volatile*: no attempt is made to persist samples. * Deadline @@ -55,25 +58,25 @@ The base QoS profile currently includes settings for the following policies: * Liveliness - * *Automatic*: the system will consider all of the node’s publishers to be alive for another “lease duration” when any one of its publishers has published a message. - * *Manual by topic*: the system will consider the publisher to be alive for another “lease duration” if it manually asserts that it is still alive (via a call to the publisher API). + * *Automatic*: the system will consider all of the node’s publishers to be alive for another "lease duration" when any one of its publishers has published a message. + * *Manual by topic*: the system will consider the publisher to be alive for another "lease duration" if it manually asserts that it is still alive (via a call to the publisher API). * Lease Duration * *Duration*: the maximum period of time a publisher has to indicate that it is alive before the system considers it to have lost liveliness (losing liveliness could be an indication of a failure). -For each of the policies that is not a duration, there is also the option of “system default”, which uses the default of the underlying middleware. -For each of the policies that is a duration, there also exists a “default” option that means the duration is unspecified, which the underlying middleware will usually interpret as an infinitely long duration. +For each of the policies that is not a duration, there is also the option of "system default", which uses the default of the underlying middleware. +For each of the policies that is a duration, there also exists a "default" option that means the duration is unspecified, which the underlying middleware will usually interpret as an infinitely long duration. Comparison to ROS 1 ^^^^^^^^^^^^^^^^^^^ -The “history” and “depth” policies in ROS 2 combine to provide functionality akin to the queue size in ROS 1. +The "history" and "depth" policies in ROS 2 combine to provide functionality akin to the queue size in ROS 1. -The “reliability” policy in ROS 2 is akin to the use of either UDPROS (only in ``roscpp``) for “best effort”, or TCPROS (ROS 1 default) for “reliable”. +The "reliability" policy in ROS 2 is akin to the use of either UDPROS (only in ``roscpp``) for "best effort", or TCPROS (ROS 1 default) for "reliable". Note however that even the reliable policy in ROS 2 is implemented using UDP, which allows for multicasting if appropriate. -The “durability” policy “transient local”, combined with any depth, provides functionality similar to that of “latching” publishers. +The "durability" policy "transient local", combined with any depth, provides functionality similar to that of "latching" publishers. The remaining policies in ROS 2 are not akin to anything that is available in ROS 1, meaning that ROS 2 is more featureful than ROS 1 in this respect. It is possible that in the future, even more QoS policies will be available in ROS 2. @@ -89,8 +92,8 @@ The currently defined QoS profiles are: * Default QoS settings for publishers and subscriptions In order to make the transition from ROS 1 to ROS 2 easier, exercising a similar network behavior is desirable. - By default, publishers and subscriptions in ROS 2 have “keep last” for history with a queue size of 10, “reliable” for reliability, “volatile” for durability, and “system default” for liveliness. - Deadline, lifespan, and lease durations are also all set to “default”. + By default, publishers and subscriptions in ROS 2 have "keep last" for history with a queue size of 10, "reliable" for reliability, "volatile" for durability, and "system default" for liveliness. + Deadline, lifespan, and lease durations are also all set to "default". * Services @@ -126,8 +129,8 @@ QoS compatibilities QoS profiles may be configured for publishers and subscriptions independently. A connection between a publisher and a subscription is only made if the pair has compatible QoS profiles. -QoS profile compatibility is determined based on a “Request vs Offered” model. -Subscriptions *request* a QoS profile that is the “minimum quality” that it is willing to accept, and publishers *offer* a QoS profile that is the “maximum quality” that it is able to provide. +QoS profile compatibility is determined based on a "Request vs Offered" model. +Subscriptions *request* a QoS profile that is the "minimum quality" that it is willing to accept, and publishers *offer* a QoS profile that is the "maximum quality" that it is able to provide. Connections are only made if every policy of the requested QoS profile is not more stringent than that of the offered QoS profile. Multiple subscriptions can be connected to a single publisher simultaneously even if their requested QoS profiles are different. The compatibility between a publisher and a subscription is unaffected by the presence of other publishers and subscriptions. @@ -163,18 +166,26 @@ The following tables show the compatibility of the different policy settings and * - Publisher - Subscription - Compatible + - Result * - Volatile - Volatile - Yes + - New messages only * - Volatile - Transient local - No + - No communication * - Transient local - Volatile - Yes + - New messages only * - Transient local - Transient local - Yes + - New and old messages + +To achieve a "latched" topic that is visible to late subscribers, +both the publisher and subscriber must agree to use 'Transient Local'. *Compatibility of deadline QoS policies:* diff --git a/source/Concepts/About-RQt.rst b/source/Concepts/Intermediate/About-RQt.rst similarity index 91% rename from source/Concepts/About-RQt.rst rename to source/Concepts/Intermediate/About-RQt.rst index eff1d29ffab..e6811457899 100644 --- a/source/Concepts/About-RQt.rst +++ b/source/Concepts/Intermediate/About-RQt.rst @@ -1,22 +1,20 @@ -.. _RQt_Overview_Usage: - .. redirect-from:: RQt-Overview-Usage Tutorials/RQt-Overview-Usage + Concepts/About-RQt Overview and usage of RQt ========================= .. contents:: Table of Contents - :depth: 2 :local: Overview -------- RQt is a graphical user interface framework that implements various tools and interfaces in the form of plugins. -One can run all the existing GUI tools as dockable windows within RQt! +One can run all the existing GUI tools as dockable windows within RQt. The tools can still run in a traditional standalone method, but RQt makes it easier to manage all the various windows in a single screen layout. You can run any RQt tools/plugins easily by: @@ -56,7 +54,7 @@ Installing From Debian Building From Source ^^^^^^^^^^^^^^^^^^^^ -See :doc:`Building RQt from Source <../How-To-Guides/RQt-Source-Install>`. +See :doc:`Building RQt from Source <../../How-To-Guides/RQt-Source-Install>`. RQt Components Structure ------------------------ @@ -74,7 +72,7 @@ Compared to building your own GUIs from scratch: * Standardized common procedures for GUI (start-shutdown hook, restore previous states). * Multiple widgets can be docked in a single window. * Easily turn your existing Qt widgets into RQt plugins. -* Expect support at `ROS Answers `__ (ROS community website for the questions). +* Expect support at `Robotics Stack Exchange `__ (ROS community website for the questions). From system architecture's perspective: diff --git a/source/Concepts/About-Security.rst b/source/Concepts/Intermediate/About-Security.rst similarity index 84% rename from source/Concepts/About-Security.rst rename to source/Concepts/Intermediate/About-Security.rst index 71f0d17b89e..a52066c4a4e 100644 --- a/source/Concepts/About-Security.rst +++ b/source/Concepts/Intermediate/About-Security.rst @@ -1,15 +1,24 @@ -.. _ROS-2-Security: +.. redirect-from:: -About ROS 2 Security -==================== + Concepts/About-Security + +ROS 2 Security +============== .. contents:: Table of Contents :local: - Overview -------- +ROS 2 includes the ability to secure communications among nodes within the ROS 2 computational graph. +Similar to discovery, security happens through the underlying ROS 2 middleware (provided it has support for the corresponding security plugins). +No additional software installation is needed to enable security; however, the middleware requires configuration files for each ROS graph participant. +These files enable encryption and authentication, and define policies both for individual nodes and for the overall ROS graph. +ROS 2 also adds a master "on/off" switch to control security behavior. + +ROS utilities can create the authoritative `trust anchor `_ for a ROS application, or an external certificate authority can be used. + Built-in ROS 2 security features enable control over communications throughout the ROS graph. This not only allows for encrypting data in transit between ROS domain participants, but also enables authentication of participants sending data, ensures the integrity of data being sent, and enables domain-wide access controls. @@ -82,4 +91,4 @@ These variables generally assist ROS in managing enclaves and locating the secur Learn More ---------- -For more information and hands-on exercises enabling ROS 2 communications security, see the :doc:`../Tutorials/Advanced/Security/Introducing-ros2-security`. +For more information and hands-on exercises enabling ROS 2 communications security, see the :doc:`../../Tutorials/Advanced/Security/Introducing-ros2-security`. diff --git a/source/Concepts/About-Tf2.rst b/source/Concepts/Intermediate/About-Tf2.rst similarity index 61% rename from source/Concepts/About-Tf2.rst rename to source/Concepts/Intermediate/About-Tf2.rst index 9c7a182dbca..f43fceae6b4 100644 --- a/source/Concepts/About-Tf2.rst +++ b/source/Concepts/Intermediate/About-Tf2.rst @@ -1,10 +1,11 @@ -.. _AboutTf2: +.. redirect-from:: -About tf2 -========= + Concepts/About-Tf2 + +Tf2 +=== .. contents:: Table of Contents - :depth: 2 :local: Overview @@ -13,7 +14,7 @@ Overview tf2 is the transform library, which lets the user keep track of multiple coordinate frames over time. tf2 maintains the relationship between coordinate frames in a tree structure buffered in time and lets the user transform points, vectors, etc. between any two coordinate frames at any desired point in time. -.. image:: images/ros2_tf2_frames.png +.. image:: ../images/ros2_tf2_frames.png Properties of tf2 ----------------- @@ -32,31 +33,31 @@ tf2 can have every component in your distributed system build its own transform Tutorials --------- -We created a set of :doc:`tutorials <../Tutorials/Intermediate/Tf2/Tf2-Main>` that walks you through using tf2, step by step. -You can get started on the :doc:`introduction to tf2 <../Tutorials/Intermediate/Tf2/Introduction-To-Tf2>` tutorial. -For a complete list of all tf2 and tf2-related tutorials check out the :doc:`tutorials <../Tutorials/Intermediate/Tf2/Tf2-Main>` page. +We created a set of :doc:`tutorials <../../Tutorials/Intermediate/Tf2/Tf2-Main>` that walks you through using tf2, step by step. +You can get started on the :doc:`introduction to tf2 <../../Tutorials/Intermediate/Tf2/Introduction-To-Tf2>` tutorial. +For a complete list of all tf2 and tf2-related tutorials check out the :doc:`tutorials <../../Tutorials/Intermediate/Tf2/Tf2-Main>` page. There are essentially two main tasks that any user would use tf2 for, listening for transforms and broadcasting transforms. If you want to use tf2 to transform between coordinate frames, your nodes will need to listen for transforms. What you will do is receive and buffer all coordinate frames that are broadcasted in the system, and query for specific transforms between frames. -Check out the "Writing a listener" tutorial :doc:`(Python) <../Tutorials/Intermediate/Tf2/Writing-A-Tf2-Listener-Py>` :doc:`(C++) <../Tutorials/Intermediate/Tf2/Writing-A-Tf2-Listener-Cpp>` to learn more. +Check out the "Writing a listener" tutorial :doc:`(Python) <../../Tutorials/Intermediate/Tf2/Writing-A-Tf2-Listener-Py>` :doc:`(C++) <../../Tutorials/Intermediate/Tf2/Writing-A-Tf2-Listener-Cpp>` to learn more. To extend the capabilities of a robot, you will need to start broadcasting transforms. Broadcasting transforms means to send out the relative pose of coordinate frames to the rest of the system. A system can have many broadcasters that each provide information about a different part of the robot. -Check out the "Writing a broadcaster" tutorial :doc:`(Python) <../Tutorials/Intermediate/Tf2/Writing-A-Tf2-Broadcaster-Py>` :doc:`(C++) <../Tutorials/Intermediate/Tf2/Writing-A-Tf2-Broadcaster-Cpp>` to learn more. +Check out the "Writing a broadcaster" tutorial :doc:`(Python) <../../Tutorials/Intermediate/Tf2/Writing-A-Tf2-Broadcaster-Py>` :doc:`(C++) <../../Tutorials/Intermediate/Tf2/Writing-A-Tf2-Broadcaster-Cpp>` to learn more. In addition to that, tf2 can broadcast static transforms that do not change over time. This mainly saves storage and lookup time, but also reduces the publishing overhead. You should note that static transforms are published once and assumed to not change, so no history is stored. -If you want to define static transforms in your tf2 tree, take a look at the "Writing a static broadcaster" :doc:`(Python) <../Tutorials/Intermediate/Tf2/Writing-A-Tf2-Static-Broadcaster-Py>` :doc:`(C++) <../Tutorials/Intermediate/Tf2/Writing-A-Tf2-Static-Broadcaster-Cpp>` tutorial. +If you want to define static transforms in your tf2 tree, take a look at the "Writing a static broadcaster" :doc:`(Python) <../../Tutorials/Intermediate/Tf2/Writing-A-Tf2-Static-Broadcaster-Py>` :doc:`(C++) <../../Tutorials/Intermediate/Tf2/Writing-A-Tf2-Static-Broadcaster-Cpp>` tutorial. -You can also learn how to add fixed and dynamic frames to your tf2 tree in the "Adding a frame" :doc:`(Python) <../Tutorials/Intermediate/Tf2/Adding-A-Frame-Py>` :doc:`(C++) <../Tutorials/Intermediate/Tf2/Adding-A-Frame-Cpp>` tutorial. +You can also learn how to add fixed and dynamic frames to your tf2 tree in the "Adding a frame" :doc:`(Python) <../../Tutorials/Intermediate/Tf2/Adding-A-Frame-Py>` :doc:`(C++) <../../Tutorials/Intermediate/Tf2/Adding-A-Frame-Cpp>` tutorial. Once you are finished with the basic tutorials, you can move on to learn about tf2 and time. -The tf2 and time tutorial :doc:`(Python) <../Tutorials/Intermediate/Tf2/Learning-About-Tf2-And-Time-Py>` :doc:`(C++) <../Tutorials/Intermediate/Tf2/Learning-About-Tf2-And-Time-Cpp>` teaches the basic principles of tf2 and time. -The advanced tutorial about tf2 and time :doc:`(Python) <../Tutorials/Intermediate/Tf2/Time-Travel-With-Tf2-Py>` :doc:`(C++) <../Tutorials/Intermediate/Tf2/Time-Travel-With-Tf2-Cpp>` teaches the principles of time traveling with tf2. +The tf2 and time tutorial :doc:`(Python) <../../Tutorials/Intermediate/Tf2/Learning-About-Tf2-And-Time-Py>` :doc:`(C++) <../../Tutorials/Intermediate/Tf2/Learning-About-Tf2-And-Time-Cpp>` teaches the basic principles of tf2 and time. +The advanced tutorial about tf2 and time :doc:`(Python) <../../Tutorials/Intermediate/Tf2/Time-Travel-With-Tf2-Py>` :doc:`(C++) <../../Tutorials/Intermediate/Tf2/Time-Travel-With-Tf2-Cpp>` teaches the principles of time traveling with tf2. Paper ----- diff --git a/source/Concepts/About-Topic-Statistics.rst b/source/Concepts/Intermediate/About-Topic-Statistics.rst similarity index 61% rename from source/Concepts/About-Topic-Statistics.rst rename to source/Concepts/Intermediate/About-Topic-Statistics.rst index 1247870b19b..369a684cc02 100644 --- a/source/Concepts/About-Topic-Statistics.rst +++ b/source/Concepts/Intermediate/About-Topic-Statistics.rst @@ -1,11 +1,10 @@ -.. _AboutTopicStats: - .. redirect-from:: About-Topic-Statistics + Concepts/About-Topic-Statistics -About topic statistics -====================== +Topic statistics +================ .. contents:: Table of Contents :local: @@ -13,29 +12,20 @@ About topic statistics Overview -------- -ROS 2 provides integrated measurement of statistics for messages received by any -subscription. -Allowing a user to collect subscription statistics enables them to characterize -the performance of their system or aid in diagnosis of any present issues. +ROS 2 provides integrated measurement of statistics for messages received by any subscription. +Allowing a user to collect subscription statistics enables them to characterize the performance of their system or aid in diagnosis of any present issues. The measurements provided are the received message age and received message period. -For each measurement the statistics provided are the average, maximum, minimum, -standard deviation, and sample count. These statistics are calculated in a moving window. +For each measurement the statistics provided are the average, maximum, minimum, standard deviation, and sample count. +These statistics are calculated in a moving window. How statistics are calculated ----------------------------- -Each statistic set is calculated in constant time and constant memory -by using the utilities implemented in the -`libstatistics_collector `__ -package. -When a new message is received by a subscription, this is a new sample for calculation in -the current measurement window. -The average calculated is simply a -`moving average `__. -The maximum, minimum, and sample count are updated upon receipt of each new sample, whereas the -standard deviation is calculated using `Welford's online algorithm -`__. +Each statistic set is calculated in constant time and constant memory by using the utilities implemented in the `libstatistics_collector `__ package. +When a new message is received by a subscription, this is a new sample for calculation in the current measurement window. +The average calculated is simply a `moving average `__. +The maximum, minimum, and sample count are updated upon receipt of each new sample, whereas the standard deviation is calculated using `Welford's online algorithm `__. Types of statistics calculated ------------------------------ @@ -54,28 +44,23 @@ Behavior -------- By default, Topic Statistics measurements are not enabled. -After enabling this feature for a specific node via the subscription configuration options, both -received message age and received message period measurements are enabled for that specific subscription. +After enabling this feature for a specific node via the subscription configuration options, both received message age and received message period measurements are enabled for that specific subscription. The data is published as a `statistics_msg/msg/MetricsMessage -`__ -at a configurable period (default 1 second) to a configurable topic (default ``/statistics``). +`__ at a configurable period (default 1 second) to a configurable topic (default ``/statistics``). Note that the publishing period also serves as the sample collection window period. Since received message period requires a message timestamp in a header field, empty data is published. That is, all statistics values are NaN if no timestamp is found. -Publishing NaN values instead of not publishing at all avoids the absence of a signal problem and is -meant to explicitly show that a measurement could not be made. +Publishing NaN values instead of not publishing at all avoids the absence of a signal problem and is meant to explicitly show that a measurement could not be made. The first sample of each window for the received message period statistic does not yield a measurement. -This is because calculating this statistic requires knowing the time the previous -message arrived, so subsequent samples in the window yield measurements. +This is because calculating this statistic requires knowing the time the previous message arrived, so subsequent samples in the window yield measurements. Comparison to ROS 1 ------------------- -Similar to ROS 1 `Topic Statistics `__, both message age -and message period are calculated, albeit from the subscription side. +Similar to ROS 1 `Topic Statistics `__, both message age and message period are calculated, albeit from the subscription side. Other ROS 1 metrics, e.g., the number of dropped messages or traffic volume, are currently not provided. Support @@ -84,4 +69,3 @@ Support This feature is currently supported in ROS 2 Foxy for C++ only (rclcpp). Future work and improvements, such as Python support, can be found `here `__. - diff --git a/source/Contact.rst b/source/Contact.rst index 3ad0af1957e..d29b06208f6 100644 --- a/source/Contact.rst +++ b/source/Contact.rst @@ -3,7 +3,7 @@ Contact ======= -.. _Using ROS Answers: +.. _Using Robotics Stack Exchange: Support ------- @@ -12,10 +12,10 @@ Different types of questions or discussions correspond to different avenues of c check the descriptions below to ensure you choose the right method. Need help troubleshooting your system? -First, search `ROS Answers `__ to see if others have had similar issues, and if their solution works for you. +First, search `Robotics Stack Exchange `__ to see if others have had similar issues, and if their solution works for you. -If not, ask a new question on `ROS Answers `__. -Make sure to add tags, at the very least the ``ros2`` tag and the distro version you are running, e.g. ``humble``. +If not, ask a new question on `Robotics Stack Exchange `__. +Make sure to add tags, at the very least the ``ros2`` tag and the distro version you are running, e.g. ``{DISTRO}``. If your question is related to the documentation here, add a tag like ``docs``, or more specifically, ``tutorials``. Contributing support @@ -24,7 +24,7 @@ Contributing support ROS 2 users come from a wide range of technical backgrounds, use a variety of different operating systems, and don’t necessarily have any prior experience with ROS (1 or 2). So, it's important for users with any amount of experience to contribute support. -If you see an issue on `ROS Answers `__ that is similar to something you’ve run into yourself, please consider providing some pointers to what helped in your situation. +If you see an issue on `Robotics Stack Exchange `__ that is similar to something you’ve run into yourself, please consider providing some pointers to what helped in your situation. Don’t worry if you aren't sure if your response is correct. Simply say so, and other community members will jump in if necessary. @@ -40,7 +40,7 @@ You can search for individual ROS 2 repositories on `ROS 2's GitHub `__. -Next, check `ROS Answers `__ to see if someone else has asked your question or reported your issue. +Next, check `Robotics Stack Exchange `__ to see if someone else has asked your question or reported your issue. If it has not been reported, feel free to open an issue in the appropriate repository tracker. If it's not clear which tracker to use for a particular issue, file it in the `ros2/ros2 repository `__ and we'll have a look at it. @@ -106,7 +106,7 @@ This also applies to crossposting. Try to pick the forum which you think matches best and ask there. If you are referred to a new forum, provide a link to the old discussion. -On https://answers.ros.org you can edit your question to provide more details. +On `Robotics Stack Exchange `__ you can edit your question to provide more details. The more details that you include in your question the easier it is for others to help you find your solution which makes it more likely for you to get a response. It's considered bad form to list your personal deadlines; community members answering questions also have them. @@ -122,7 +122,7 @@ Content, links, and images unrelated to the topic are considered spam. For commercial posts, see also `this discussion `_. Minimize references to content behind pay walls. -The content posted on `ROS Discourse `__ and `ROS Answers `__ should "generally" be free and open to all users. +The content posted on `ROS Discourse `__ and `Robotics Stack Exchange `__ should "generally" be free and open to all users. Links to content behind pay walls such as private journal articles, text books, and paid news websites, while helpful and relevant, may not be accessible to all users. Where possible primary sources should be free and open with paid content playing a supporting role. diff --git a/source/How-To-Guides.rst b/source/How-To-Guides.rst index 06a50e78932..7bf01b03cb2 100644 --- a/source/How-To-Guides.rst +++ b/source/How-To-Guides.rst @@ -24,10 +24,9 @@ If you are new and looking to learn the ropes, start with the :doc:`Tutorials `__ will be very helpful, an official tutorial can be found `here `__. +Before using ``ament_cmake``, it is very helpful to know the basics of `CMake `__. +An official tutorial can be found `here `__. .. contents:: Table of Contents :depth: 2 @@ -18,8 +19,8 @@ Basics ------ A basic CMake outline can be produced using ``ros2 pkg create `` on the command line. -The basic build information is then gathered in two files: the ``package.xml`` and the ``CMakeLists.txt``. -The ``package.xml`` must contain all dependencies and a bit of metadata to allow colcon to find the correct build order for your packages, to install the required dependencies in CI as well as provide the information for a release with ``bloom``. +The build information is then gathered in two files: the ``package.xml`` and the ``CMakeLists.txt``, which must be in the same directory. +The ``package.xml`` must contain all dependencies and a bit of metadata to allow colcon to find the correct build order for your packages, to install the required dependencies in CI, and to provide the information for a release with ``bloom``. The ``CMakeLists.txt`` contains the commands to build and package executables and libraries and will be the main focus of this document. Basic project outline @@ -29,23 +30,22 @@ The basic outline of the ``CMakeLists.txt`` of an ament package contains: .. code-block:: cmake - cmake_minimum_required(VERSION 3.5) - project(my_project) + cmake_minimum_required(VERSION 3.8) + project(my_project) - ament_package() + ament_package() The argument to ``project`` will be the package name and must be identical to the package name in the ``package.xml``. The project setup is done by ``ament_package()`` and this call must occur exactly once per package. -``ament_package()`` installs the ``package.xml``, registers the package with the ament index, and installs config (and possibly target) files for CMake so that it can be found by other packages using ``find_package``. +``ament_package()`` installs the ``package.xml``, registers the package with the ament index, and installs configuration (and possibly target) files for CMake so that it can be found by other packages using ``find_package``. Since ``ament_package()`` gathers a lot of information from the ``CMakeLists.txt`` it should be the last call in your ``CMakeLists.txt``. -Although it is possible to follow calls to ``ament_package()`` by calls to ``install`` functions copying files and directories, it is simpler to just keep ``ament_package()`` the last call. ``ament_package`` can be given additional arguments: - ``CONFIG_EXTRAS``: a list of CMake files (``.cmake`` or ``.cmake.in`` templates expanded by ``configure_file()``) which should be available to clients of the package. For an example of when to use these arguments, see the discussion in `Adding resources`_. - For more information on how to use template files, see `the official documentation `__. + For more information on how to use template files, see `the official documentation `__. - ``CONFIG_EXTRAS_POST``: same as ``CONFIG_EXTRAS``, but the order in which the files are added differs. While ``CONFIG_EXTRAS`` files are included before the files generated for the ``ament_export_*`` calls the files from ``CONFIG_EXTRAS_POST`` are included afterwards. @@ -61,203 +61,237 @@ The only difference is again the order in which the files are added with the fol - files added by ``CONFIG_EXTRAS_POST`` -Adding files and headers -^^^^^^^^^^^^^^^^^^^^^^^^ +Compiler and linker options +^^^^^^^^^^^^^^^^^^^^^^^^^^^ -There are two main targets to build: libraries and executables which are built by ``add_library`` and ``add_executable`` respectively. +ROS 2 targets compilers which comply with the C++17 and C99 standard. +Newer versions might be targeted in the future and are referenced `here `__. +Therefore it is customary to set the corresponding CMake flags: -With the separation of header files and implementation in C/C++, it is not always necessary to add both files as argument to ``add_library``/ ``add_executable``. +.. code-block:: cmake -The following best practice is proposed: + if(NOT CMAKE_C_STANDARD) + set(CMAKE_C_STANDARD 99) + endif() + if(NOT CMAKE_CXX_STANDARD) + set(CMAKE_CXX_STANDARD 17) + endif() + +To keep the code clean, compilers should throw warnings for questionable code and these warnings should be fixed. -- if you are building a library, put all headers which should be usable by clients and therefore must be installed into a subdirectory of the ``include`` folder named like the package, while all other files (``.c/.cpp`` and header files which should not be exported) are inside the ``src`` folder. +It is recommended to at least cover the following warning levels: + +- For Visual Studio: the default ``W1`` warnings -- only cpp files are explicitly referenced in the call to ``add_library`` or ``add_executable`` +- For GCC and Clang: ``-Wall -Wextra -Wpedantic`` are highly recommended and ``-Wshadow`` is advisable -- allow to find headers via +It is currently recommended to use ``add_compile_options`` to add these options for all targets. +This avoids cluttering the code with target-based compile options for all executables, libraries, and tests: .. code-block:: cmake - target_include_directories(my_target - PUBLIC - $ - $) + if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + add_compile_options(-Wall -Wextra -Wpedantic) + endif() -This adds all files in the folder ``${CMAKE_CURRENT_SOURCE_DIR}/include`` to the public interface during build time and all files in the include folder (relative to ``${CMAKE_INSTALL_DIR}``) when being installed. +Finding dependencies +^^^^^^^^^^^^^^^^^^^^ -In principle, using generator expressions here is not necessary if both folders are called ``include`` and top-level with respect to ``${CMAKE_CURRENT_SOURCE_DIR}`` and ``${CMAKE_INSTALL_DIR}``, but it is very common. +Most ``ament_cmake`` projects will have dependencies on other packages. +In CMake, this is accomplished by calling ``find_package``. +For instance, if your package depends on ``rclcpp``, then the ``CMakeLists.txt`` file should contain: -Adding Dependencies -^^^^^^^^^^^^^^^^^^^ +.. code-block:: cmake -There are two ways to link your packages against a new dependency. + find_package(rclcpp REQUIRED) -The first and recommended way is to use the ament macro ``ament_target_dependencies``. -As an example, suppose we want to link ``my_target`` against the linear algebra library Eigen3. +.. note:: -.. code-block:: cmake + It should never be necessary to ``find_package`` a library that is not explicitly needed but is a dependency of another dependency that is explicitly needed. + If that is the case, file a bug against the corresponding package. - find_package(Eigen3 REQUIRED) - ament_target_dependencies(my_target Eigen3) +Adding targets +^^^^^^^^^^^^^^ -It includes the necessary headers and libraries and their dependencies to be correctly found by the project. -It will also ensure that the include directories of all dependencies are ordered correctly when using overlay workspaces. +In CMake nomenclature, ``targets`` are the artifacts that this project will create. +Either libraries or executables can be created, and a single project can contain zero or many of each of them. -The second way is to use ``target_link_libraries``. +.. tabs:: -The recommended way in modern CMake is to only use targets, exporting and linking against them. -CMake targets are namespaced, similar to C++. -For instance, ``Eigen3`` defines the target ``Eigen3::Eigen``. + .. group-tab:: Libraries -At least until ``Crystal Clemmys`` target names are not supported in the ``ament_target_dependencies`` macro. -Sometimes it will be necessary to call the ``target_link_libaries`` CMake function. -In the example of Eigen3, the call should then look like + These are created with a call to ``add_library``, which should contain both the name of the target and the source files that should be compiled to create the library. -.. code-block:: cmake + With the separation of header files and implementation in C/C++, it is not usually necessary to add header files as arguments to ``add_library``. - find_package(Eigen3 REQUIRED) - target_link_libraries(my_target Eigen3::Eigen) + The following best practice is proposed: -This will also include necessary headers, libraries and their dependencies, but in contrast to ``ament_target_dependencies`` it might not correctly order the dependencies when using overlay workspaces. + - Put all headers which should be usable by clients of this library (and therefore must be installed) into a subdirectory of the ``include`` folder named like the package, while all other files (``.c/.cpp`` and header files which should not be exported) are inside the ``src`` folder -.. note:: + - Only ``.c/.cpp`` files are explicitly referenced in the call to ``add_library`` - It should never be necessary to ``find_package`` a library that is not explicitly needed but is a dependency of another dependency that is explicitly needed. - If that is the case, file a bug against the corresponding package. + - Find headers to your library ``my_library`` via -Building a Library -^^^^^^^^^^^^^^^^^^ + .. code-block:: cmake -When building a reusable library, some information needs to be exported for downstream packages to easily use it. + target_include_directories(my_library + PUBLIC + "$" + "$") -.. code-block:: cmake + This adds all files in the folder ``${CMAKE_CURRENT_SOURCE_DIR}/include`` to the public interface during build time and all files in the include folder (relative to ``${CMAKE_INSTALL_DIR}``) when being installed. - ament_export_targets(my_libraryTargets HAS_LIBRARY_TARGET) - ament_export_dependencies(some_dependency) + ``ros2 pkg create`` creates a package layout that follows these rules. - install( - DIRECTORY include/ - DESTINATION include - ) + .. note:: - install( - TARGETS my_library - EXPORT my_libraryTargets - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib - RUNTIME DESTINATION bin - INCLUDES DESTINATION include - ) + Since Windows is one of the officially supported platforms, to have maximum impact, any package should also build on Windows. + The Windows library format enforces symbol visibility; that is, every symbol which should be used from a client has to be explicitly exported by the library (and symbols need to be implicitly imported). + Since GCC and Clang builds do not generally do this, it is advised to use the logic in `the GCC wiki `__. + To use it for a package called ``my_library``: -Here, we assume that the folder ``include`` contains the headers which need to be exported. -Note that it is not necessary to put all headers into a separate folder, only those that should be included by clients. + - Copy the logic in the link into a header file called ``visibility_control.hpp``. -Here is what's happening in the snippet above: + - Replace ``DLL`` by ``MY_LIBRARY`` (for an example, see visibility control of `rviz_rendering `__). -- The ``ament_export_targets`` macro exports the targets for CMake. - This is necessary to allow your library's clients to use the ``target_link_libraries(client my_library::my_library)`` syntax. - ``ament_export_targets`` can take an arbitrary list of targets named as ``EXPORT`` in an install call and an additional option ``HAS_LIBRARY_TARGET``, which adds potential libraries to environment variables. + - Use the macros "MY_LIBRARY_PUBLIC" for all symbols you need to export (i.e. classes or functions). -- The ``ament_export_dependencies`` exports dependencies to downstream packages. - This is necessary so that the user of the library does not have to call ``find_package`` for those dependencies, too. + - In the project ``CMakeLists.txt`` use: -- The first ``install`` commands installs the header files which should be available to clients. + .. code-block:: cmake -.. warning:: + target_compile_definitions(my_library PRIVATE "MY_LIBRARY_BUILDING_LIBRARY") - Calling ``ament_export_targets``, ``ament_export_dependencies``, or other ament commands from a CMake subdirectory will not work as expected. - This is because the CMake subdirectory has no way of setting necessary variables in the parent scope where ``ament_package`` is called. + For more details, see :ref:`Windows Symbol Visibility in the Windows Tips and Tricks document `. -- The last large install command installs the library. - Archive and library files will be exported to the lib folder, runtime binaries will be installed to the bin folder and the path to installed headers is ``include``. + .. group-tab:: Executables -.. note:: + These should be created with a call to ``add_executable``, which should contain both the name of the target and the source files that should be compiled to create the executable. + The executable may also have to be linked with any libraries created in this package by using ``target_link_libraries``. - Windows DLLs are treated as runtime artifacts and installed into the ``RUNTIME DESTINATION`` folder. - It is therefore advised to not leave out the ``RUNTIME`` install even when developing libraries on Unix based systems. + Since executables aren't generally used by clients as a library, no header files need to be put in the ``include`` directory. -- Regarding the ``include directory``, the install command only adds information to CMake, it does not actually install the includes folder. - This is done by copying the headers via ``install(DIRECTORY DESTINATION )`` as described above. +In the case that a package has both libraries and executables, make sure to combine the advice from both "Libraries" and "Executables" above. -- The ``EXPORT`` notation of the install call requires additional attention: - It installs the CMake files for the ``my_library`` target. - It is named exactly like the argument in ``ament_export_targets`` and could be named like the library. - However, this will then prohibit using the ``ament_target_dependencies`` way of including your library. - To allow for full flexibility, it is advised to prepend the export target with something like ``Targets``. +Linking to dependencies +^^^^^^^^^^^^^^^^^^^^^^^ -- All install paths are relative to ``CMAKE_INSTALL_PREFIX``, which is already set correctly by colcon/ament +There are two ways to link your targets against a dependency. -There are two additional functions which can be used but are superfluous for target based installs: +The first and recommended way is to use the ament macro ``ament_target_dependencies``. +As an example, suppose we want to link ``my_library`` against the linear algebra library Eigen3. .. code-block:: cmake - ament_export_include_directories(include) - ament_export_libraries(my_library) + find_package(Eigen3 REQUIRED) + ament_target_dependencies(my_library PUBLIC Eigen3) -The first macro marks the directory of the exported include directories (this is achieved by ``INCLUDES DESTINATION`` in the target ``install`` call). -The second macro marks the location of the installed library (this is done by the ``HAS_LIBRARY_TARGET`` argument in the call to ``ament_export_targets``). +It includes the necessary headers and libraries and their dependencies to be correctly found by the project. -Some of the macros can take different types of arguments for non-target exports, but since the recommended way for modern Make is to use targets, we will not cover them here. -Documentation of these options can be found in the source code itself. +The second way is to use ``target_link_libraries``. -Compiler and linker options -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Modern CMake prefers to use only targets, exporting and linking against them. +CMake targets may be namespaced, similar to C++. +Prefer to use the namespaced targets if they are available. +For instance, ``Eigen3`` defines the target ``Eigen3::Eigen``. -ROS 2 targets compilers which comply with the C++14 and C99 standard until at least ``Crystal Clemmys``. -Newer versions might be targeted in the future and are referenced `here `__. -Therefore it is customary to set the corresponding CMake flags: +In the example of Eigen3, the call should then look like .. code-block:: cmake - if(NOT CMAKE_C_STANDARD) - set(CMAKE_C_STANDARD 99) - endif() - if(NOT CMAKE_CXX_STANDARD) - set(CMAKE_CXX_STANDARD 14) - endif() + target_link_libraries(my_library PUBLIC Eigen3::Eigen) -To keep the code clean, compilers should throw warnings for questionable code and these warnings should be fixed. +This will also include necessary headers, libraries and their dependencies. +Note that this dependency must have been previously discovered via a call to ``find_package``. -It is recommended to at least cover the following warning levels: +Installing +^^^^^^^^^^ -- For Visual Studio, the default ``W1`` warnings are kept +.. tabs:: -- For GCC and Clang: ``-Wall -Wextra -Wpedantic`` are required and ``-Wshadow -Werror`` are advisable (the latter makes warnings errors). + .. group-tab:: Libraries -Although modern CMake advises to add compiler flags on a target basis, i.e. call + When building a reusable library, some information needs to be exported for downstream packages to easily use it. -.. code-block:: cmake + First, install the headers files which should be available to clients. + The include directory is custom to support overlays in ``colcon``; see https://colcon.readthedocs.io/en/released/user/overriding-packages.html#install-headers-to-a-unique-include-directory for more information. - target_compile_options(my_target PRIVATE -Wall) + .. code-block:: cmake -it is at the moment recommended to use the directory level function ``add_compile_options(-Wall)`` to not clutter the code with target-based compile options for all executables and tests. + install( + DIRECTORY include/ + DESTINATION include/${PROJECT_NAME} + ) -Building libraries on Windows -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + Next, install the targets and create the export target (``export_${PROJECT_NAME}``) that other code will use to find this package. + Note that you can use a single ``install`` call to install all of the libraries in the project. -Since Linux, Mac and Windows are all officially supported platforms, to have maximum impact any package should also build on Windows. -The Windows library format enforces symbol visibility: -Every symbol which should be used from a client has to be explicitly exported by the library (and data symbols need to be implicitly imported). + .. code-block:: cmake -To keep this compatible with Clang and GCC builds, it is advised to use the logic in `the GCC wiki `__. -To use it for a package called ``my_library``: + install( + TARGETS my_library + EXPORT export_${PROJECT_NAME} + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib + RUNTIME DESTINATION bin + ) -- Copy the logic in the link into a header file called ``visibility_control.hpp``. + ament_export_targets(export_${PROJECT_NAME} HAS_LIBRARY_TARGET) + ament_export_dependencies(some_dependency) -- Replace ``DLL`` by ``MY_LIBRARY`` (for an example, see visibility control of `rviz_rendering `__). + Here is what's happening in the snippet above: -- Use the macros "MY_LIBRARY_PUBLIC" for all symbols you need to export (i.e. classes or functions). + - The ``ament_export_targets`` macro exports the targets for CMake. + This is necessary to allow your library's clients to use the ``target_link_libraries(client PRIVATE my_library::my_library)`` syntax. + If the export set includes a library, add the option ``HAS_LIBRARY_TARGET`` to ``ament_export_targets``, which adds potential libraries to environment variables. -- In the project ``CMakeLists.txt`` use: + - The ``ament_export_dependencies`` exports dependencies to downstream packages. + This is necessary so that the user of the library does not have to call ``find_package`` for those dependencies, too. -.. code-block:: cmake + .. warning:: + + Calling ``ament_export_targets``, ``ament_export_dependencies``, or other ament commands from a CMake subdirectory will not work as expected. + This is because the CMake subdirectory has no way of setting necessary variables in the parent scope where ``ament_package`` is called. + + .. note:: + + Windows DLLs are treated as runtime artifacts and installed into the ``RUNTIME DESTINATION`` folder. + It is therefore advised to keep the ``RUNTIME`` install even when developing libraries on Unix based systems. + + - The ``EXPORT`` notation of the install call requires additional attention: + It installs the CMake files for the ``my_library`` target. + It must be named exactly the same as the argument in ``ament_export_targets``. + To ensure that it can be used via ``ament_target_dependencies``, it should not be named exactly the same as the library name, but instead should have a prefix like ``export_`` (as shown above). + + - All install paths are relative to ``CMAKE_INSTALL_PREFIX``, which is already set correctly by colcon/ament. + + There are two additional functions which are available, but are superfluous for target based installs: + + .. code-block:: cmake + + ament_export_include_directories("include/${PROJECT_NAME}") + ament_export_libraries(my_library) + + The first macro marks the directory of the exported include directories. + The second macro marks the location of the installed library (this is done by the ``HAS_LIBRARY_TARGET`` argument in the call to ``ament_export_targets``). + These should only be used if the downstream projects can't or don't want to use CMake target based dependencies. + + Some of the macros can take different types of arguments for non-target exports, but since the recommended way for modern Make is to use targets, we will not cover them here. + Documentation of these options can be found in the source code itself. + + .. group-tab:: Executables + + When installing an executable, the following stanza *must be followed exactly* for the rest of the ROS tooling to find it: + + .. code-block:: cmake - target_compile_definitions(my_library PRIVATE "MY_LIBRARY_BUILDING_LIBRARY") + install(TARGETS my_exe + DESTINATION lib/${PROJECT_NAME}) -For more details, see :ref:`Windows Symbol Visibility in the Windows Tips and Tricks document `. +In the case that a package has both libraries and executables, make sure to combine the advice from both "Libraries" and "Executables" above. -Testing and Linting +Linting and Testing ------------------- In order to separate testing from building the library with colcon, wrap all calls to linters and tests in a conditional: @@ -401,7 +435,7 @@ This extension point is useful when registering resources (see below). .. note:: - It is possible to define custom extension points in a similar manner to ``ament_package`` and ``rosidl_generate_interfaces``, but this should hardly be necessary. + It is possible to define custom extension points in a similar manner to ``ament_package`` and ``rosidl_generate_interfaces``, but this should hardly be necessary. Adding extension points ^^^^^^^^^^^^^^^^^^^^^^^ @@ -417,7 +451,7 @@ To do so: .. code-block:: cmake - ament_execute_extensions(my_extension_point) + ament_execute_extensions(my_extension_point) Ament extensions work by defining a variable containing the name of the extension point and filling it with the macros to be executed. Upon calling ``ament_execute_extensions``, the scripts defined in the variable are then executed one after another. @@ -475,7 +509,7 @@ Querying the ament index If necessary, it is possible to query the ament index for resources via CMake. To do so, there are three functions: -``ament_index_has_resource``: obtain a prefix path to the resource if it exists with the following parameters: +``ament_index_has_resource``: Obtain a prefix path to the resource if it exists with the following parameters: - ``var``: the output parameter: fill this variable with FALSE if the resource does not exist or the prefix path to the resource otherwise diff --git a/source/How-To-Guides/Configure-ZeroCopy-loaned-messages.rst b/source/How-To-Guides/Configure-ZeroCopy-loaned-messages.rst new file mode 100644 index 00000000000..6c14ce703a8 --- /dev/null +++ b/source/How-To-Guides/Configure-ZeroCopy-loaned-messages.rst @@ -0,0 +1,106 @@ +.. redirect-from:: + + How-To-Guides/Disabling-ZeroCopy-loaned-messages + +Configure Zero Copy Loaned Messages +=================================== + +.. contents:: Contents + :depth: 1 + :local: + +See the `Loaned Messages `__ article for details on how loaned messages work. + +How to disable Loaned Messages +------------------------------ + +Publishers +~~~~~~~~~~ + +By default, *Loaned Messages* will try to borrow the memory from underlying middleware if it supports *Loaned Messages*. +The ``ROS_DISABLE_LOANED_MESSAGES`` environment variable can be used to disable *Loaned Messages*, and fallback to normal publisher behavior, without any code changes or middleware configuration. +You can set the environment variable with the following command: + +.. tabs:: + + .. group-tab:: Linux + + .. code-block:: console + + export ROS_DISABLE_LOANED_MESSAGES=1 + + To maintain this setting between shell sessions, you can add the command to your shell startup script: + + .. code-block:: console + + echo "export ROS_DISABLE_LOANED_MESSAGES=1" >> ~/.bashrc + + .. group-tab:: macOS + + .. code-block:: console + + export ROS_DISABLE_LOANED_MESSAGES=1 + + To maintain this setting between shell sessions, you can add the command to your shell startup script: + + .. code-block:: console + + echo "export ROS_DISABLE_LOANED_MESSAGES=1" >> ~/.bash_profile + + .. group-tab:: Windows + + .. code-block:: console + + set ROS_DISABLE_LOANED_MESSAGES=1 + + If you want to make this permanent between shell sessions, also run: + + .. code-block:: console + + setx ROS_DISABLE_LOANED_MESSAGES 1 + + +Subscriptions +~~~~~~~~~~~~~ + +Currently using *Loaned Messages* is not safe on subscription, see more details in `this issue `_. +Because of this, by default *Loaned Messages* is ``disabled`` on subscription with `Set disable loan to on by default `_ even though underlying middleware supports that. +To enable *Loaned Messages* on subscription, you need to set the environment variable ``ROS_DISABLE_LOANED_MESSAGES`` to ``0`` explicitly. + +.. tabs:: + + .. group-tab:: Linux + + .. code-block:: console + + export ROS_DISABLE_LOANED_MESSAGES=0 + + To maintain this setting between shell sessions, you can add the command to your shell startup script: + + .. code-block:: console + + echo "export ROS_DISABLE_LOANED_MESSAGES=0" >> ~/.bashrc + + .. group-tab:: macOS + + .. code-block:: console + + export ROS_DISABLE_LOANED_MESSAGES=0 + + To maintain this setting between shell sessions, you can add the command to your shell startup script: + + .. code-block:: console + + echo "export ROS_DISABLE_LOANED_MESSAGES=0" >> ~/.bash_profile + + .. group-tab:: Windows + + .. code-block:: console + + set ROS_DISABLE_LOANED_MESSAGES=0 + + If you want to make this permanent between shell sessions, also run: + + .. code-block:: console + + setx ROS_DISABLE_LOANED_MESSAGES 0 diff --git a/source/How-To-Guides/Cross-compilation.rst b/source/How-To-Guides/Cross-compilation.rst index 1704fe5a9c2..ca68f7ea6f1 100644 --- a/source/How-To-Guides/Cross-compilation.rst +++ b/source/How-To-Guides/Cross-compilation.rst @@ -10,7 +10,7 @@ Cross-compilation :depth: 2 :local: -For background information on cross-compilation, see the :doc:`conceptual article <../Concepts/About-Cross-Compilation>`. +For background information on cross-compilation, see the :doc:`conceptual article <../Concepts/Intermediate/About-Cross-Compilation>`. This document provides you with details on how to cross-compile the ROS 2 software stack as well as provide examples for cross-compiling to systems based on the Arm cores. diff --git a/source/How-To-Guides/DDS-tuning.rst b/source/How-To-Guides/DDS-tuning.rst index c99f69ec88d..79014a6b238 100644 --- a/source/How-To-Guides/DDS-tuning.rst +++ b/source/How-To-Guides/DDS-tuning.rst @@ -129,7 +129,7 @@ Next, to set the minimum socket receive buffer size that Cyclone requests, write https://raw.githubusercontent.com/eclipse-cyclonedds/cyclonedds/master/etc/cyclonedds.xsd"> - 10MB + diff --git a/source/How-To-Guides/Disabling-ZeroCopy-loaned-messages.rst b/source/How-To-Guides/Disabling-ZeroCopy-loaned-messages.rst deleted file mode 100644 index f76bea70b79..00000000000 --- a/source/How-To-Guides/Disabling-ZeroCopy-loaned-messages.rst +++ /dev/null @@ -1,55 +0,0 @@ -.. _ZeroCopyLoanedMessages: - -Disabling Zero Copy Loaned Messages -=================================== - -.. contents:: Contents - :depth: 1 - :local: - -See the `Loaned Messages `__ article for details on how loaned messages work. - -How to disable Loaned Messages ------------------------------- - -By default, *Loaned Messages* will try to borrow the memory from underlying middleware if it supports *Loaned Messages*. -The ``ROS_DISABLE_LOANED_MESSAGES`` environment variable can be used to disable *Loaned Messages*, and fallback to normal publisher and subscription behavior, without any code changes or middleware configuration. -You can set the environment variable with the following command: - -.. tabs:: - - .. group-tab:: Linux - - .. code-block:: console - - export ROS_DISABLE_LOANED_MESSAGES=1 - - To maintain this setting between shell sessions, you can add the command to your shell startup script: - - .. code-block:: console - - echo "export ROS_DISABLE_LOANED_MESSAGES=1" >> ~/.bashrc - - .. group-tab:: macOS - - .. code-block:: console - - export ROS_DISABLE_LOANED_MESSAGES=1 - - To maintain this setting between shell sessions, you can add the command to your shell startup script: - - .. code-block:: console - - echo "export ROS_DISABLE_LOANED_MESSAGES=1" >> ~/.bash_profile - - .. group-tab:: Windows - - .. code-block:: console - - set ROS_DISABLE_LOANED_MESSAGES=1 - - If you want to make this permanent between shell sessions, also run: - - .. code-block:: console - - setx ROS_DISABLE_LOANED_MESSAGES 1 diff --git a/source/How-To-Guides/Installation-Troubleshooting.rst b/source/How-To-Guides/Installation-Troubleshooting.rst index 6109bd0aa89..21015d7607e 100644 --- a/source/How-To-Guides/Installation-Troubleshooting.rst +++ b/source/How-To-Guides/Installation-Troubleshooting.rst @@ -103,6 +103,13 @@ If you encounter exceptions when trying to source the environment after building colcon version-check # check if newer versions available sudo apt install python3-colcon* --only-upgrade # upgrade installed colcon packages to latest version +Anaconda Python Conflict +^^^^^^^^^^^^^^^^^^^^^^^^ + +``conda`` does not work in conjunction with ROS 2. +Make sure that your ``PATH`` environment variable does not have any conda paths in it. +You may have to check your ``.bashrc`` for this line and comment it out. + .. _macOS-troubleshooting: macOS @@ -322,8 +329,41 @@ Fast RTPS requires ``msvcr20.dll``, which is part of the ``Visual C++ Redistribu Although it is usually installed by default in Windows 10, we know that some Windows 10-like versions don't have it installed by default (e.g.: Windows Server 2019). In case you don't have it installed, you can download it from `here `_. +Failed to create process +^^^^^^^^^^^^^^^^^^^^^^^^ + +If running a ROS binary gives the error: + +.. code-block:: + + | failed to create process. + +It is likely the Python interpreter was not found. +For each executable, the shebang (first line) of the accompanying script is used, so make sure Python is available under the expected path (default: ``C:\Python38\``). + Binary installation specific ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * If your example does not start because of missing DLLs, please verify that all libraries from external dependencies such as OpenCV are located inside your ``PATH`` variable. * If you forget to call the ``local_setup.bat`` file from your terminal, the demo programs will most likely crash immediately. + +Running RViz with WSL2 +^^^^^^^^^^^^^^^^^^^^^^ + +If you are using `WSL2 `__ to run ROS 2 on Windows, you may run into an issue running RViz that looks like: + +.. code-block:: console + + $ rviz2 + [INFO] [1695823660.091830699] [rviz2]: Stereo is NOT SUPPORTED + [INFO] [1695823660.091943524] [rviz2]: OpenGl version: 4.1 (GLSL 4.1) + D3D12: Removing Device. + Segmentation fault + +One possible solution to this is to force RViz to use software rendering: + +.. code-block:: console + + $ export LIBGL_ALWAYS_SOFTWARE=true + $ rviz2 + [INFO] [1695823660.091830699] [rviz2]: Stereo is NOT SUPPORTED diff --git a/source/How-To-Guides/Launch-file-different-formats.rst b/source/How-To-Guides/Launch-file-different-formats.rst index 0939d72d179..4cbb7776a19 100644 --- a/source/How-To-Guides/Launch-file-different-formats.rst +++ b/source/How-To-Guides/Launch-file-different-formats.rst @@ -366,7 +366,7 @@ Python, XML, or YAML: Which should I use? .. note:: Launch files in ROS 1 were written in XML, so XML may be the most familiar to people coming from ROS 1. - To see what's changed, you can visit :doc:`Launch-files-migration-guide`. + To see what's changed, you can visit :doc:`Migrating-from-ROS1/Migrating-Launch-Files`. For most applications the choice of which ROS 2 launch format comes down to developer preference. However, if your launch file requires flexibility that you cannot achieve with XML or YAML, you can use Python to write your launch file. diff --git a/source/How-To-Guides/Migrating-from-ROS1.rst b/source/How-To-Guides/Migrating-from-ROS1.rst new file mode 100644 index 00000000000..18d6756ac97 --- /dev/null +++ b/source/How-To-Guides/Migrating-from-ROS1.rst @@ -0,0 +1,26 @@ +Migrating from ROS 1 to ROS 2 +============================= + +These guides show how to convert existing ROS 1 packages to ROS 2. +If you are new to porting between ROS 1 and ROS 2, it is recommended to read through the guides in order. + +.. toctree:: + :maxdepth: 1 + + Migrating-from-ROS1/Migrating-Packages + Migrating-from-ROS1/Migrating-Interfaces + Migrating-from-ROS1/Migrating-CPP-Packages + Migrating-from-ROS1/Migrating-Python-Packages + Migrating-from-ROS1/Migrating-Launch-Files + Migrating-from-ROS1/Migrating-Parameters + Migrating-from-ROS1/Migrating-Scripts + +Automatic tools +--------------- + +There are also some automatic conversion tools that exist, though they are not exhaustive: + +* `Magical ROS 2 Conversion Tool `_ +* Launch File migrator that converts a ROS 1 XML launch file to a ROS 2 Python launch file: https://github.com/aws-robotics/ros2-launch-file-migrator +* Amazon has made their tools for porting from ROS 1 to ROS 2 available at: https://github.com/awslabs/ros2-migration-tools/tree/master/porting\_tools +* `rospy2 `_ Python project to automatically convert rospy calls to rclpy calls diff --git a/source/The-ROS2-Project/Contributing/Migration-Guide.rst b/source/How-To-Guides/Migrating-from-ROS1/Migrating-CPP-Packages.rst similarity index 65% rename from source/The-ROS2-Project/Contributing/Migration-Guide.rst rename to source/How-To-Guides/Migrating-from-ROS1/Migrating-CPP-Packages.rst index 77af629653d..ef3083e9e62 100644 --- a/source/The-ROS2-Project/Contributing/Migration-Guide.rst +++ b/source/How-To-Guides/Migrating-from-ROS1/Migrating-CPP-Packages.rst @@ -1,124 +1,30 @@ .. redirect-from:: - Migration-Guide - Contributing/Migration-Guide + Migration-Guide + Contributing/Migration-Guide + The-ROS2-Project/Contributing/Migration-Guide -Migration guide from ROS 1 -========================== +Migrating C++ Packages +====================== .. contents:: Table of Contents :depth: 2 :local: -There are two different kinds of package migrations: - -* Migrating the source code of an existing package from ROS 1 to ROS 2 with the intent that a significant part of the source code will stay the same or at least similar. - An example for this could be `pluginlib `_ where the source code is maintained in different branches within the same repository and commonly patches can be ported between those branches when necessary. -* Implementing the same or similar functionality of a ROS 1 package for ROS 2 but with the assumption that the source code will be significantly different. - An example for this could be `roscpp `_ in ROS 1 and `rclcpp `_ in ROS 2 which are separate repositories and don't share any code. - -This article focuses on the former case and describes the high-level steps to migrate a ROS 1 package to ROS 2. -It does not aim to be a step-by-step migration instruction and is not considered the *final* "solution". -Future versions will aim to make migration smoother and less effort up to the point of maintaining a single package from the same branch for ROS 1 as well as ROS 2. - -Prerequisites -------------- - -Before being able to migrate a ROS 1 package to ROS 2 all of its dependencies must be available in ROS 2. - -Migration steps ---------------- - -.. contents:: - :depth: 1 - :local: - -Package manifests -^^^^^^^^^^^^^^^^^ - -ROS 2 doesn't support format 1 of the package specification but only newer format versions (2 and higher). -Therefore the ``package.xml`` file must be updated to at least format 2 if it uses format 1. -Since ROS 1 supports all formats it is safe to perform that conversion in the ROS 1 package. - -Some packages might have different names in ROS 2 so the dependencies might need to be updated accordingly. - -Metapackages -^^^^^^^^^^^^ - -ROS 2 doesn't have a special package type for metapackages. -Metapackages can still exist as regular packages that only contain runtime dependencies. -When migrating metapackages from ROS 1, simply remove the ```` tag in your package manifest. - -Message, service, and action definitions -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Message files must end in ``.msg`` and must be located in the subfolder ``msg``. -Service files must end in ``.srv`` and must be located in the subfolder ``srv``. -Actions files must end in ``.action`` and must be located in the subfolder ``action``. - -These files might need to be updated to comply with the `ROS Interface definition `__. -Some primitive types have been removed and the types ``duration`` and ``time`` which were builtin types in ROS 1 have been replaced with normal message definitions and must be used from the `builtin_interfaces `__ package. -Also some naming conventions are stricter than in ROS 1. - -In your ``package.xml``: - - -* Add ``rosidl_default_generators``. -* Add ``rosidl_default_runtime``. -* For each dependent message package, add ``message_package``. - -In your ``CMakeLists.txt``: - -* Start by enabling C++14 - -.. code-block:: cmake - - set(CMAKE_CXX_STANDARD 14) - - -* Add ``find_package(rosidl_default_generators REQUIRED)`` -* For each dependent message package, add ``find_package(message_package REQUIRED)`` and replace the CMake function call to ``generate_messages`` with ``rosidl_generate_interfaces``. - -This will replace ``add_message_files`` and ``add_service_files`` listing of all the message and service files, which can be removed. - -Build system -^^^^^^^^^^^^ - -The build system in ROS 2 is called `ament `__ -and the build tool is :doc:`colcon <../../Tutorials/Beginner-Client-Libraries/Colcon-Tutorial>`. -Ament is built on CMake: ``ament_cmake`` provides CMake functions to make writing ``CMakeLists.txt`` files easier. - Build tool -~~~~~~~~~~ +---------- Instead of using ``catkin_make``, ``catkin_make_isolated`` or ``catkin build`` ROS 2 uses the command line tool `colcon `__ to build and install a set of packages. +See the :doc:`beginner tutorial <../../Tutorials/Beginner-Client-Libraries/Colcon-Tutorial>` to get started with ``colcon``. -Pure Python package -~~~~~~~~~~~~~~~~~~~ - -If the ROS 1 package uses CMake only to invoke the ``setup.py`` file and does not contain anything beside Python code (e.g. also no messages, services, etc.) it should be converted into a pure Python package in ROS 2: - - -* - Update or add the build type in the ``package.xml`` file: - - .. code-block:: xml - - - ament_python - - -* - Remove the ``CMakeLists.txt`` file - -* - Update the ``setup.py`` file to be a standard Python setup script +Build system +------------ -ROS 2 supports Python 3 only. -While each package can choose to also support Python 2 it must invoke executables with Python 3 if it uses any API provided by other ROS 2 packages. +The build system in ROS 2 is called `ament `__. +Ament is built on CMake: ``ament_cmake`` provides CMake functions to make writing ``CMakeLists.txt`` files easier. Update the *CMakeLists.txt* to use *ament_cmake* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Apply the following changes to use ``ament_cmake`` instead of ``catkin``: @@ -157,9 +63,6 @@ Apply the following changes to use ``ament_cmake`` instead of ``catkin``: * Instead of passing ``INCLUDE_DIRS ...`` call ``ament_export_include_directories(...)`` before. * Instead of passing ``LIBRARIES ...`` call ``ament_export_libraries(...)`` before. - * - **TODO document ament_export_targets (``ament_export_interfaces`` in Eloquent and older)?** - * Replace the invocation of ``add_message_files``, ``add_service_files`` and ``generate_messages`` with `rosidl_generate_interfaces `__. @@ -201,7 +104,7 @@ Apply the following changes to use ``ament_cmake`` instead of ``catkin``: * ``CATKIN_PACKAGE_SHARE_DESTINATION``: ``share/${PROJECT_NAME}`` Unit tests -~~~~~~~~~~ +^^^^^^^^^^ If you are using gtest: @@ -237,12 +140,12 @@ Add ``ament_cmake_gtest`` to your ``package.xml``. + ament_cmake_gtest Linters -~~~~~~~ +^^^^^^^ In ROS 2 we are working to maintain clean code using linters. -The styles for different languages are defined in our `Developer Guide `. +The styles for different languages are defined in our :doc:`Developer Guide <../../The-ROS2-Project/Contributing/Developer-Guide>`. -If you are starting a project from scratch it is recommended to follow the style guide and turn on the automatic linter unit tests by adding these lines just below ``if(BUILD_TESTING)`` (until alpha 5 this was ``AMENT_ENABLE_TESTING``). +If you are starting a project from scratch it is recommended to follow the style guide and turn on the automatic linter unit tests by adding these lines just below ``if(BUILD_TESTING)``: .. code-block:: cmake @@ -256,20 +159,11 @@ You will also need to add the following dependencies to your ``package.xml``: ament_lint_auto ament_lint_common -Continue to use ``catkin`` in CMake -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -ROS 2 uses ament as the build system but for backward compatibility ROS 2 has a package called ``catkin`` which provides almost the same API as catkin in ROS 1. -In order to use this backward compatibility API the ``CMakeLists.txt`` must only be updated to call the function ``catkin_ament_package()`` *after* all targets. - -**NOTE: This has not been implemented yet and is only an idea at the moment. -Due to the number of changes related to dependencies it has not yet been decided if this compatibility API is useful enough to justify the effort.** - Update source code -^^^^^^^^^^^^^^^^^^ +------------------ Messages, services, and actions -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The namespace of ROS 2 messages, services, and actions use a subnamespace (``msg``, ``srv``, or ``action``, respectively) after the package name. Therefore an include looks like: ``#include ``. @@ -298,7 +192,7 @@ The migration requires includes to change by: The migration requires code to insert the ``msg`` namespace into all instances. Use of service objects -~~~~~~~~~~~~~~~~~~~~~~ +^^^^^^^^^^^^^^^^^^^^^^ Service callbacks in ROS 2 do not have boolean return values. Instead of returning false on failures, throwing exceptions is recommended. @@ -321,7 +215,7 @@ Instead of returning false on failures, throwing exceptions is recommended. } Usages of ros::Time -~~~~~~~~~~~~~~~~~~~ +^^^^^^^^^^^^^^^^^^^ For usages of ``ros::Time``: @@ -336,29 +230,19 @@ For usages of ``ros::Time``: * Convert all instances using the std_msgs::Time field ``nsec`` to the builtin_interfaces::msg::Time field ``nanosec`` Usages of ros::Rate -~~~~~~~~~~~~~~~~~~~ +^^^^^^^^^^^^^^^^^^^ There is an equivalent type ``rclcpp::Rate`` object which is basically a drop in replacement for ``ros::Rate``. -ROS client library -~~~~~~~~~~~~~~~~~~ - -.. toctree:: - :titlesonly: - - Migration-Guide-Python - - -**NOTE: Others to be written** Boost -~~~~~ +^^^^^ Much of the functionality previously provided by Boost has been integrated into the C++ standard library. As such we would like to take advantage of the new core features and avoid the dependency on boost where possible. Shared Pointers -""""""""""""""" +~~~~~~~~~~~~~~~ To switch shared pointers from boost to standard C++ replace instances of: @@ -373,7 +257,7 @@ Also it is recommended practice to use ``using`` instead of ``typedef``. For details `see here `__ Thread/Mutexes -"""""""""""""" +~~~~~~~~~~~~~~ Another common part of boost used in ROS codebases are mutexes in ``boost::thread``. @@ -383,7 +267,7 @@ Another common part of boost used in ROS codebases are mutexes in ``boost::threa * Replace ``#include `` with ``#include `` Unordered Map -""""""""""""" +~~~~~~~~~~~~~ Replace: @@ -392,7 +276,7 @@ Replace: * ``boost::unordered_map`` with ``std::unordered_map`` function -"""""""" +~~~~~~~~ Replace: @@ -400,29 +284,10 @@ Replace: * ``#include `` with ``#include `` * ``boost::function`` with ``std::function`` -Parameters ----------- - -In ROS 1, parameters are associated with a central server that allowed retrieving parameters at runtime through the use of the network APIs. -In ROS 2, parameters are associated per node and are configurable at runtime with ROS services. +Example: Converting an existing ROS 1 package to ROS 2 +------------------------------------------------------ -* See `ROS 2 Parameter design document `_ for more details about the system model. - -* See :doc:`ROS 2 CLI usage <../../Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Parameters/Understanding-ROS2-Parameters>` for a better understanding of how the CLI tools work and its differences with ROS 1 tooling. - -* See :doc:`../../How-To-Guides/Parameters-YAML-files-migration-guide` to see how YAML parameter files are parsed in ROS 2 and their differences with ROS implementation. - -Launch files ------------- - -While launch files in ROS 1 are always specified using `.xml `__ files, ROS 2 supports Python scripts to enable more flexibility (see `launch package `__) as well as XML and YAML files. -See `separate tutorial <../../How-To-Guides/Launch-files-migration-guide>` on migrating launch files from ROS 1 to ROS 2. - -Example: Converting an existing ROS 1 package to use ROS 2 ----------------------------------------------------------- - -Let's say that we have simple ROS 1 package called ``talker`` that uses ``roscpp`` -in one node, called ``talker``. +Let's say that we have simple ROS 1 package called ``talker`` that uses ``roscpp`` in one node, called ``talker``. This package is in a catkin workspace, located at ``~/ros1_talker``. The ROS 1 code @@ -505,12 +370,12 @@ Here is the content of those three files: Building the ROS 1 code ~~~~~~~~~~~~~~~~~~~~~~~ -We source an environment setup file (in this case for Jade using bash), then we +We source an environment setup file (in this case for Noetic using bash), then we build our package using ``catkin_make install``: .. code-block:: bash - . /opt/ros/jade/setup.bash + . /opt/ros/noetic/setup.bash cd ~/ros1_talker catkin_make install @@ -519,7 +384,7 @@ Running the ROS 1 node If there's not already one running, we start a ``roscore``, first sourcing the setup file from our ``catkin`` install tree (the system setup file at -``/opt/ros/jade/setup.bash`` would also work here): +``/opt/ros/noetic/setup.bash`` would also work here): .. code-block:: bash @@ -582,8 +447,7 @@ Changing C++ library calls ~~~~~~~~~~~~~~~~~~~~~~~~~~ Instead of passing the node's name to the library initialization call, we do -the initialization, then pass the node name to the creation of the node object -(we can use the ``auto`` keyword because now we're requiring a C++14 compiler): +the initialization, then pass the node name to the creation of the node object: .. code-block:: cpp @@ -608,7 +472,7 @@ To further control how message delivery is handled, a quality of service The default profile is ``rmw_qos_profile_default``. For more details, see the `design document `__ -and `concept overview <../../Concepts/About-Quality-of-Service-Settings>`. +and :doc:`concept overview <../../Concepts/Intermediate/About-Quality-of-Service-Settings>`. The creation of the outgoing message is different in the namespace: @@ -698,14 +562,6 @@ Putting it all together, the new ``talker.cpp`` looks like this: Changing the ``package.xml`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -ROS 2 doesn't support format 1 of the package specification but only newer format versions (2 and higher). -We start by specifying the format version in the ``package`` tag: - -.. code-block:: xml - - - - ROS 2 uses a newer version of ``catkin``, called ``ament_cmake``, which we specify in the ``buildtool_depend`` tag: @@ -714,8 +570,7 @@ ROS 2 uses a newer version of ``catkin``, called ``ament_cmake``, which we speci ament_cmake -In our build dependencies, instead of ``roscpp`` we use ``rclcpp``, which provides -the C++ API that we use. +In our build dependencies, instead of ``roscpp`` we use ``rclcpp``, which provides the C++ API that we use. .. code-block:: xml @@ -723,8 +578,7 @@ the C++ API that we use. rclcpp We make the same addition in the run dependencies and also update from the -``run_depend`` tag to the ``exec_depend`` tag (part of the upgrade to version 2 of -the package format): +``run_depend`` tag to the ``exec_depend`` tag (part of the upgrade to version 2 of the package format): .. code-block:: xml @@ -776,9 +630,6 @@ Putting it all together, our ``package.xml`` now looks like this: -**TODO: show simpler version of this file just using the ```` tag, which is -enabled by version 2 of the package format (also supported in ``catkin`` so, -strictly speaking, orthogonal to ROS 2).** Changing the CMake code ~~~~~~~~~~~~~~~~~~~~~~~ @@ -790,22 +641,20 @@ ROS 2 relies on a higher version of CMake: #cmake_minimum_required(VERSION 2.8.3) cmake_minimum_required(VERSION 3.5) -ROS 2 relies on the C++14 standard. -Depending on what compiler you're using, support for C++14 might not be enabled -by default. -Using ``gcc`` 5.3 (which is what is used on Ubuntu Xenial), we need to enable it -explicitly, which we do by adding this line near the top of the file: +ROS 2 relies on the C++17 standard. +Depending on what compiler you're using, support for C++17 might not be enabled by default. +Enable C++17 support explicitly by adding this line near the top of the file: .. code-block:: cmake - set(CMAKE_CXX_STANDARD 14) + set(CMAKE_CXX_STANDARD 17) The preferred way to work on all platforms is this: .. code-block:: cmake if(NOT CMAKE_CXX_STANDARD) - set(CMAKE_CXX_STANDARD 14) + set(CMAKE_CXX_STANDARD 17) endif() if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_options(-Wall -Wextra -Wpedantic) @@ -878,8 +727,7 @@ like ``Boost``, or a library being built in the same ``CMakeLists.txt``, use target_link_libraries(target ${Boost_LIBRARIES}) For installation, ``catkin`` defines variables like ``CATKIN_PACKAGE_BIN_DESTINATION``. -With ``ament_cmake``, we just give a path relative to the installation root, like ``bin`` -for executables: +With ``ament_cmake``, we just give a path relative to the installation root: .. code-block:: cmake @@ -910,7 +758,7 @@ Putting it all together, the new ``CMakeLists.txt`` looks like this: cmake_minimum_required(VERSION 3.5) project(talker) if(NOT CMAKE_CXX_STANDARD) - set(CMAKE_CXX_STANDARD 14) + set(CMAKE_CXX_STANDARD 17) endif() if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_options(-Wall -Wextra -Wpedantic) @@ -937,8 +785,6 @@ Putting it all together, the new ``CMakeLists.txt`` looks like this: ament_export_dependencies(std_msgs) ament_package() -**TODO: Show what this would look like with ``ament_auto``.** - Building the ROS 2 code ~~~~~~~~~~~~~~~~~~~~~~~ @@ -955,103 +801,10 @@ package using ``colcon build``: Running the ROS 2 node ~~~~~~~~~~~~~~~~~~~~~~ -Because we installed the ``talker`` executable into ``bin``, after sourcing the -setup file, from our install tree, we can invoke it by name directly -(also, there is not yet a ROS 2 equivalent for ``rosrun``): +Because we installed the ``talker`` executable into the correct directory, after sourcing the +setup file, from our install tree, we can invoke it by running: .. code-block:: bash . ~/ros2_ws/install/setup.bash - talker - -Update scripts -^^^^^^^^^^^^^^ - -ROS CLI arguments -~~~~~~~~~~~~~~~~~ - -Since `ROS Eloquent <../../Releases/Release-Eloquent-Elusor>`, ROS arguments should be scoped with ``--ros-args`` and a trailing ``--`` (the trailing double dash may be elided if no arguments follow it). - -Remapping names is similar to ROS 1, taking on the form ``from:=to``, except that it must be preceded by a ``--remap`` (or ``-r``) flag. -For example: - -.. code-block:: bash - - ros2 run some_package some_ros_executable --ros-args -r foo:=bar - -We use a similar syntax for parameters, using the ``--param`` (or ``-p``) flag: - - -.. code-block:: bash - - ros2 run some_package some_ros_executable --ros-args -p my_param:=value - -Note, this is different than using a leading underscore in ROS 1. - -To change a node name use ``__node`` (the ROS 1 equivalent is ``__name``): - -.. code-block:: bash - - ros2 run some_package some_ros_executable --ros-args -r __node:=new_node_name - -Note the use of the ``-r`` flag. -The same remap flag is needed for changing the namespace ``__ns``: - -.. code-block:: bash - - ros2 run some_package some_ros_executable --ros-args -r __ns:=/new/namespace - -There is no equivalent in ROS 2 for the following ROS 1 keys: - -- ``__log`` (but ``--log-config-file`` can be used to provide a logger configuration file) -- ``__ip`` -- ``__hostname`` -- ``__master`` - -For more information, see the `design document `_. - -Quick reference -""""""""""""""" - -+------------+-------------+----------------+ -| Feature | ROS 1 | ROS 2 | -+============+=============+================+ -| remapping | foo:=bar | -r foo:=bar | -+------------+-------------+----------------+ -| parameters | _foo:=bar | -p foo:=bar | -+------------+-------------+----------------+ -| node name | __name:=foo | -r __node:=foo | -+------------+-------------+----------------+ -| namespace | __ns:=foo | -r __ns:=foo | -+------------+-------------+----------------+ - - -More examples and tools -^^^^^^^^^^^^^^^^^^^^^^^ - -- Launch File migrator that converts a ROS 1 XML launch file to a ROS 2 Python launch file: https://github.com/aws-robotics/ros2-launch-file-migrator -- Amazon has exposed their tools for porting ROS 1 robots to ROS 2 - https://github.com/awslabs/ros2-migration-tools/tree/master/porting\_tools - - -Licensing ---------- - -In ROS 2 our recommended license is the `Apache 2.0 License `__. -In ROS 1 our recommended license was the `3-Clause BSD License `__. - -For any new project we recommend using the Apache 2.0 License, whether ROS 1 or ROS 2. - -However, when migrating code from ROS 1 to ROS 2 we cannot simply change the license. -The existing license must be preserved for any preexisting contributions. - -To that end if a package is being migrated we recommend keeping the existing license and continuing to contribute to that package under the existing OSI license, which we expect to be the BSD license for core elements. - -This will keep things clear and easy to understand. - -Changing the License -^^^^^^^^^^^^^^^^^^^^ - -It is possible to change the license, however you will need to contact all the contributors and get permission. -For most packages this is likely to be a significant effort and not worth considering. -If the package has a small set of contributors then this may be feasible. + ros2 run talker talker diff --git a/source/How-To-Guides/Migrating-from-ROS1/Migrating-Interfaces.rst b/source/How-To-Guides/Migrating-from-ROS1/Migrating-Interfaces.rst new file mode 100644 index 00000000000..11fd99d64ea --- /dev/null +++ b/source/How-To-Guides/Migrating-from-ROS1/Migrating-Interfaces.rst @@ -0,0 +1,52 @@ +Migrating Interfaces +==================== + +.. contents:: Table of Contents + :depth: 2 + :local: + +Messages, services, and actions are collectively called ``interfaces`` in ROS 2. + +Interface definitions +--------------------- + +Message files must end in ``.msg`` and must be located in the subfolder ``msg``. +Service files must end in ``.srv`` and must be located in the subfolder ``srv``. +Actions files must end in ``.action`` and must be located in the subfolder ``action``. + +These files might need to be updated to comply with the `ROS Interface definition `__. +Some primitive types have been removed and the types ``duration`` and ``time`` which were builtin types in ROS 1 have been replaced with normal message definitions and must be used from the `builtin_interfaces `__ package. +Also some naming conventions are stricter than in ROS 1. +There is additional information in the :doc:`conceptual article <../../Concepts/Basic/About-Interfaces>`. + +Building interfaces +------------------- + +The way in which interfaces are built in ROS 2 differs substantially from ROS 1. +Interfaces can only be built from packages containing a ``CMakeLists.txt``. +If you are developing a pure Python package, then the interfaces should be placed in a different package containing only the interfaces (which is best practice anyway). +See the :doc:`custom interfaces tutorial<../../Tutorials/Beginner-Client-Libraries/Custom-ROS2-Interfaces>` for more information. + +Migrating interface package to ROS 2 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In your ``package.xml``: + +* Add ``rosidl_default_generators``. +* Add ``rosidl_default_runtime``. +* Add ``rosidl_interface_packages`` +* For each dependent message package, add ``message_package``. + +In your ``CMakeLists.txt``: + +* Enable C++17 + +.. code-block:: cmake + + set(CMAKE_CXX_STANDARD 17) + +* Add ``find_package(rosidl_default_generators REQUIRED)`` +* For each dependent message package, add ``find_package(message_package REQUIRED)`` and replace the CMake function call to ``generate_messages`` with ``rosidl_generate_interfaces``. + +This will replace ``add_message_files`` and ``add_service_files`` listing of all the message and service files, which can be removed. + diff --git a/source/How-To-Guides/Launch-files-migration-guide.rst b/source/How-To-Guides/Migrating-from-ROS1/Migrating-Launch-Files.rst similarity index 91% rename from source/How-To-Guides/Launch-files-migration-guide.rst rename to source/How-To-Guides/Migrating-from-ROS1/Migrating-Launch-Files.rst index f22e9cdf663..24212f46c93 100644 --- a/source/How-To-Guides/Launch-files-migration-guide.rst +++ b/source/How-To-Guides/Migrating-from-ROS1/Migrating-Launch-Files.rst @@ -1,27 +1,30 @@ .. redirect-from:: - Guides/Launch-files-migration-guide - Tutorials/Launch-files-migration-guide + Guides/Launch-files-migration-guide + Tutorials/Launch-files-migration-guide + How-To-Guides/Launch-files-migration-guide .. _MigratingLaunch: -Migrating launch files from ROS 1 to ROS 2 -========================================== +Migrating Launch Files +====================== .. contents:: Table of Contents :depth: 1 :local: -This guide describes how to write XML launch files for an easy migration from ROS 1. +While launch files in ROS 1 are always specified using `.xml `__ files, ROS 2 supports Python scripts to enable more flexibility (see `launch package `__) as well as XML and YAML files. + +This guide describes how to write ROS 2 XML launch files for an easy migration from ROS 1. Background ---------- -A description of the ROS 2 launch system and its Python API can be found in :doc:`Launch System tutorial <../Tutorials/Intermediate/Launch/Launch-system>`. +A description of the ROS 2 launch system and its Python API can be found in :doc:`Launch System tutorial <../../../Tutorials/Intermediate/Launch/Launch-system>`. -Migrating tags from ROS 1 to ROS 2 ----------------------------------- +Migrating tags +-------------- launch ^^^^^^ @@ -57,7 +60,8 @@ param * Used for passing a parameter to a node. * There's no global parameter concept in ROS 2. For that reason, it can only be used nested in a ``node`` tag. - Some attributes aren't supported in ROS 2: ``type``, ``textfile``, ``binfile``, ``executable``, ``command``. + Some attributes aren't supported in ROS 2: ``type``, ``textfile``, ``binfile``, ``executable``. +* The ``command`` attribute is now ``value="$(command '...' )"``. Example ~~~~~~~ @@ -180,7 +184,7 @@ include Nest includes in ``group`` tags to scope them. * ``ns`` attribute is not supported. See example of ``push_ros_namespace`` tag for a workaround. - * ``arg`` tags nested in an ``include`` tag don't support conditionals (``if`` or ``unless``). + * ``arg`` tags nested in an ``include`` tag don't support conditionals (``if``, ``unless``) or the ``description`` attribute. * There is no support for nested ``env`` tags. ``set_env`` and ``unset_env`` can be used instead. * Both ``clear_params`` and ``pass_all_args`` attributes aren't supported. @@ -200,7 +204,7 @@ arg * ``value`` attribute is not allowed. Use ``let`` tag for this. * ``doc`` is now ``description``. - * When nested within an ``include`` tag, ``if`` and ``unless`` attributes aren't allowed. + * When nested within an ``include`` tag, ``if``, ``unless``, and ``description`` attributes aren't allowed. Example ~~~~~~~ @@ -227,7 +231,7 @@ Assuming the above launch configuration is in a file named ``mylaunch.xml``, a d ros2 launch mylaunch.xml topic_name:=custom_topic_name -There is some additional information about passing command-line arguments in :doc:`Using Substitutions <../Tutorials/Intermediate/Launch/Using-Substitutions>`. +There is some additional information about passing command-line arguments in :doc:`Using Substitutions <../../../Tutorials/Intermediate/Launch/Using-Substitutions>`. env ^^^ @@ -399,7 +403,7 @@ There are, however, some changes w.r.t. ROS 1: * There is a new ``find-exec`` substitution. * ``arg`` has been replaced with ``var``. It looks at configurations defined either with ``arg`` or ``let`` tag. -* ``eval`` and ``dirname`` substitutions haven't changed. +* ``eval`` and ``dirname`` substitutions require escape characters for string values, e.g. ``if="$(eval '\'$(var variable)\' == \'val1\'')"``. * ``anon`` substitution is not supported. Type inference rules diff --git a/source/How-To-Guides/Migrating-from-ROS1/Migrating-Packages.rst b/source/How-To-Guides/Migrating-from-ROS1/Migrating-Packages.rst new file mode 100644 index 00000000000..960de91f517 --- /dev/null +++ b/source/How-To-Guides/Migrating-from-ROS1/Migrating-Packages.rst @@ -0,0 +1,171 @@ +Migrating Packages +================== + +.. contents:: Table of Contents + :depth: 2 + :local: + +There are two different kinds of package migrations: + +* Migrating the source code of an existing package from ROS 1 to ROS 2 with the intent that a significant part of the source code will stay the same or at least similar. + An example for this is `pluginlib `_ where the source code is maintained in different branches within the same repository and common patches can be ported between those branches when necessary. +* Implementing the same or similar functionality of a ROS 1 package for ROS 2 but with the assumption that the source code will be significantly different. + An example for this is `roscpp `_ in ROS 1 and `rclcpp `_ in ROS 2 which are separate repositories and don't share any code. + +Prerequisites +------------- + +Before being able to migrate a ROS 1 package to ROS 2 all of its dependencies must be available in ROS 2. + +Package format version +---------------------- + +ROS 2 doesn't support format 1 of the package specification but only newer format versions (2 and higher). +Therefore the ``package.xml`` file must be updated to at least format 2 if it uses format 1. +Since ROS 1 supports all formats it is safe to perform that conversion in the ROS 1 package. + +Migrating from package format 1 to 2+ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The differences between format 1 and format 2 only affect the package.xml with its dependencies. +`REP-0140 `__ defines these differences and provides their rationale. + +See :doc:`the rosdep documentation <../../Tutorials/Intermediate/Rosdep>` for more information about the various tags. + +**** +~~~~~~~~~~~~~ + +The tag determines which format to use, change it like this: + +.. code:: xml + + + +**** +~~~~~~~~~~~~~ + +This is a new tag, intended to reduce unnecessary repetition. +If your format 1 package contained: + +.. code:: xml + + foo + foo + +It should be replaced with: + +.. code:: xml + + foo + +In format 2, that is equivalent to: + +.. code:: xml + + foo + foo + foo + + +**** +~~~~~~~~~~~~~~~~ + +This tag is no longer allowed. +Wherever found, it must be replaced: + +.. code:: xml + + foo + +In format 2, that is equivalent to these two new tags: + +.. code:: xml + + foo + foo + +If the dependency is only used at run-time, only the ```` is needed. +If it is only exported to satisfy the build dependencies of other packages, use ````. +If both are needed, this may be a better choice: + +.. code:: xml + + foo + + +**** +~~~~~~~~~~~~~~~~~ + +In format 2, this tag can satisfy build dependencies, not just those needed for executing your tests. +Unlike format 1, ```` may now refer to a package also declared as some other type of dependency. + +Some test-only dependencies that formerly required a ````, should now be expressed using ````. +For example: + +.. code:: xml + + testfoo + +becomes: + +.. code:: xml + + testfoo + +In your CMakeLists.txt make sure your test dependencies are only referenced within the conditional test block: + +.. code:: cmake + + if (BUILD_TESTING) + find_package(testfoo REQUIRED) + endif() + + +**** +~~~~~~~~~~~~~~~~ + +This tag defines dependencies needed for building your documentation: + +.. code:: xml + + doxygen + python3-sphinx + +This does not create binary package dependencies, unless they were also declared using some other dependency tag. + +Dependency names +---------------- + +Dependency names that come from :doc:`rosdep <../../Tutorials/Intermediate/Rosdep>` should not need to change, as those are shared across ROS 1 and ROS 2. + +Some packages released into ROS might have different names in ROS 2 so the dependencies might need to be updated accordingly. + +Metapackages +------------ + +ROS 2 doesn't have a special package type for metapackages. +Metapackages can still exist as regular packages that only contain runtime dependencies. +When migrating metapackages from ROS 1, simply remove the ```` tag in your package manifest. +See :doc:`Using variants <../Using-Variants>` for more information on metapackages/variants. + +Licensing +--------- + +In ROS 1 our recommended license was the `3-Clause BSD License `__. +In ROS 2 our recommended license is the `Apache 2.0 License `__. + +For any new project we recommend using the Apache 2.0 License, whether ROS 1 or ROS 2. + +However, when migrating code from ROS 1 to ROS 2 we cannot simply change the license. +The existing license must be preserved for any preexisting contributions. + +To that end if a package is being migrated we recommend keeping the existing license and continuing to contribute to that package under the existing OSI license, which we expect to be the BSD license for core elements. + +This will keep things clear and easy to understand. + +Changing the License +^^^^^^^^^^^^^^^^^^^^ + +It is possible to change the license, however you will need to contact all the contributors and get permission. +For most packages this is likely to be a significant effort and not worth considering. +If the package has a small set of contributors then this may be feasible. diff --git a/source/How-To-Guides/Parameters-YAML-files-migration-guide.rst b/source/How-To-Guides/Migrating-from-ROS1/Migrating-Parameters.rst similarity index 59% rename from source/How-To-Guides/Parameters-YAML-files-migration-guide.rst rename to source/How-To-Guides/Migrating-from-ROS1/Migrating-Parameters.rst index 131c5b7bdd9..ac07b2faf0e 100644 --- a/source/How-To-Guides/Parameters-YAML-files-migration-guide.rst +++ b/source/How-To-Guides/Migrating-from-ROS1/Migrating-Parameters.rst @@ -1,17 +1,30 @@ .. redirect-from:: - Guides/Parameters-YAML-files-migration-guide - Tutorials/Parameters-YAML-files-migration-guide + Guides/Parameters-YAML-files-migration-guide + Tutorials/Parameters-YAML-files-migration-guide + How-To-Guides/Parameters-YAML-files-migration-guide -.. _yaml-ros1-ros2: +Migrating Parameters +==================== -Migrating YAML parameter files from ROS 1 to ROS 2 -================================================== +.. contents:: Table of Contents + :depth: 2 + :local: + +In ROS 1, parameters are associated with a central server that allowed retrieving parameters at runtime through the use of the network APIs. +In ROS 2, parameters are associated per node and are configurable at runtime with ROS services. + +* See `ROS 2 Parameter design document `_ for more details about the system model. + +* See :doc:`ROS 2 CLI usage <../../Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Parameters/Understanding-ROS2-Parameters>` for a better understanding of how the CLI tools work and its differences with ROS 1 tooling. + +Migrating YAML Parameter Files +------------------------------ This guide describes how to adapt ROS 1 parameters files for ROS 2. YAML file example ------------------ +^^^^^^^^^^^^^^^^^ YAML is used to write parameters files in both ROS 1 and ROS 2. The main difference in ROS 2 is that node names must be used to address parameters. @@ -48,7 +61,7 @@ We would construct our ROS 2 parameters file as follows: Note the use of wildcards (``/**``) to indicate that the parameter ``debug`` should be set on any node in any namespace. Feature parity --------------- +^^^^^^^^^^^^^^ Some features of ROS 1 parameters files do not exist in ROS 2: diff --git a/source/The-ROS2-Project/Contributing/Migration-Guide-Python.rst b/source/How-To-Guides/Migrating-from-ROS1/Migrating-Python-Packages.rst similarity index 50% rename from source/The-ROS2-Project/Contributing/Migration-Guide-Python.rst rename to source/How-To-Guides/Migrating-from-ROS1/Migrating-Python-Packages.rst index 058ddaae518..c280e6b8453 100644 --- a/source/The-ROS2-Project/Contributing/Migration-Guide-Python.rst +++ b/source/How-To-Guides/Migrating-from-ROS1/Migrating-Python-Packages.rst @@ -1,12 +1,54 @@ .. redirect-from:: - Migration-Guide-Python + Migration-Guide-Python + The-ROS2-Project/Contributing/Migration-Guide-Python -Python migration guide from ROS 1 -================================= +Migrating Python Packages +========================= + +.. contents:: Table of Contents + :depth: 2 + :local: + +Build tool +---------- + +Instead of using ``catkin_make``, ``catkin_make_isolated`` or ``catkin build`` ROS 2 uses the command line tool `colcon `__ to build and install a set of packages. +See the :doc:`beginner tutorial <../../Tutorials/Beginner-Client-Libraries/Colcon-Tutorial>` to get started with ``colcon``. + +Build system +------------ + +For pure Python packages, ROS 2 uses the standard ``setup.py`` installation mechanism familiar to Python developers. + +Update the files to use *setup.py* +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If the ROS 1 package uses CMake only to invoke the ``setup.py`` file and does not contain anything beside Python code (e.g. no messages, services, etc.) it should be converted into a pure Python package in ROS 2: + +* + Update or add the build type in the ``package.xml`` file: + + .. code-block:: xml + + + ament_python + + +* + Remove the ``CMakeLists.txt`` file + +* + Update the ``setup.py`` file to be a standard Python setup script + +ROS 2 supports Python 3 only. +While each package can choose to also support Python 2 it must invoke executables with Python 3 if it uses any API provided by other ROS 2 packages. + +Update source code +------------------ Node Initialization -------------------- +^^^^^^^^^^^^^^^^^^^ In ROS 1: @@ -25,9 +67,8 @@ In ROS 2: node.get_logger().info('Created node') - ROS Parameters --------------- +^^^^^^^^^^^^^^ In ROS 1: @@ -53,41 +94,46 @@ In ROS 2: node.get_logger().warn('port: ' + port) - Creating a Publisher --------------------- +^^^^^^^^^^^^^^^^^^^^ In ROS 1: .. code-block:: python pub = rospy.Publisher('chatter', String) + # or + pub = rospy.Publisher('chatter', String, queue_size=10) In ROS 2: .. code-block:: python - pub = node.create_publisher(String, 'chatter') - + pub = node.create_publisher(String, 'chatter', rclpy.qos.QoSProfile()) + # or + pub = node.create_publisher(String, 'chatter', 10) Creating a Subscriber ---------------------- +^^^^^^^^^^^^^^^^^^^^^ In ROS 1: .. code-block:: python sub = rospy.Subscriber('chatter', String, callback) + # or + sub = rospy.Subscriber('chatter', String, callback, queue_size=10) In ROS 2: .. code-block:: python - sub = node.create_subscription(String, 'chatter', callback) - + sub = node.create_subscription(String, 'chatter', callback, rclpy.qos.QoSProfile()) + # or + sub = node.create_subscription(String, 'chatter', callback, 10) Creating a Service ------------------- +^^^^^^^^^^^^^^^^^^ In ROS 1: @@ -101,9 +147,8 @@ In ROS 2: srv = node.create_service(AddTwoInts, 'add_two_ints', add_two_ints_callback) - Creating a Service Client -------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^ In ROS 1: diff --git a/source/How-To-Guides/Migrating-from-ROS1/Migrating-Scripts.rst b/source/How-To-Guides/Migrating-from-ROS1/Migrating-Scripts.rst new file mode 100644 index 00000000000..12311822757 --- /dev/null +++ b/source/How-To-Guides/Migrating-from-ROS1/Migrating-Scripts.rst @@ -0,0 +1,68 @@ +Migrating Scripts +================= + +ROS CLI +------- + +In ROS 1 there were individual commands for performing various actions, like ``rosrun``, ``rosparam``, etc. + +In ROS 2, there is a single top-level commands called ``ros2``, and all of the actions are sub-commands of that, like ``ros2 run``, ``ros2 param``, etc. + +ROS CLI arguments +----------------- + +In ROS 1, arguments to nodes were provided directly on the command-line. + +ROS 2 arguments should be scoped with ``--ros-args`` and a trailing ``--`` (the trailing double dash may be elided if no arguments follow it). + +Remapping names is similar to ROS 1, taking on the form ``from:=to``, except that it must be preceded by a ``--remap`` (or ``-r``) flag. +For example: + +.. code-block:: bash + + ros2 run some_package some_ros_executable --ros-args -r foo:=bar + +We use a similar syntax for parameters, using the ``--param`` (or ``-p``) flag: + +.. code-block:: bash + + ros2 run some_package some_ros_executable --ros-args -p my_param:=value + +Note, this is different than using a leading underscore in ROS 1. + +To change a node name use ``__node`` (the ROS 1 equivalent is ``__name``): + +.. code-block:: bash + + ros2 run some_package some_ros_executable --ros-args -r __node:=new_node_name + +Note the use of the ``-r`` flag. +The same remap flag is needed for changing the namespace ``__ns``: + +.. code-block:: bash + + ros2 run some_package some_ros_executable --ros-args -r __ns:=/new/namespace + +There is no equivalent in ROS 2 for the following ROS 1 keys: + +- ``__log`` (but ``--log-config-file`` can be used to provide a logger configuration file) +- ``__ip`` +- ``__hostname`` +- ``__master`` + +For more information, see the `design document `_. + +Quick reference +~~~~~~~~~~~~~~~ + ++------------+-------------+----------------+ +| Feature | ROS 1 | ROS 2 | ++============+=============+================+ +| remapping | foo:=bar | -r foo:=bar | ++------------+-------------+----------------+ +| parameters | _foo:=bar | -p foo:=bar | ++------------+-------------+----------------+ +| node name | __name:=foo | -r __node:=foo | ++------------+-------------+----------------+ +| namespace | __ns:=foo | -r __ns:=foo | ++------------+-------------+----------------+ diff --git a/source/How-To-Guides/Node-arguments.rst b/source/How-To-Guides/Node-arguments.rst index 90cf2b1be95..afdb4701681 100644 --- a/source/How-To-Guides/Node-arguments.rst +++ b/source/How-To-Guides/Node-arguments.rst @@ -49,7 +49,7 @@ The namespace, which must start with a forward slash, is set to ``/demo``, which Passing remapping arguments to specific nodes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -If multiple nodes are being run within a single process (e.g. using :doc:`Composition <../Concepts/About-Composition>`), remapping arguments can be passed to a specific node using its name as a prefix. +If multiple nodes are being run within a single process (e.g. using :doc:`Composition <../Concepts/Intermediate/About-Composition>`), remapping arguments can be passed to a specific node using its name as a prefix. For example, the following will pass the remapping arguments to the specified nodes: .. code-block:: bash diff --git a/source/How-To-Guides/Overriding-QoS-Policies-For-Recording-And-Playback.rst b/source/How-To-Guides/Overriding-QoS-Policies-For-Recording-And-Playback.rst index 29696add627..114baf59510 100644 --- a/source/How-To-Guides/Overriding-QoS-Policies-For-Recording-And-Playback.rst +++ b/source/How-To-Guides/Overriding-QoS-Policies-For-Recording-And-Playback.rst @@ -19,7 +19,7 @@ Background ---------- With the introduction of DDS in ROS 2, Quality of Service (QoS) compatibility for publisher/subscriber nodes needs to be considered when recording and playing back data. -More detail on how QoS works can be found :doc:`here <../Concepts/About-Quality-of-Service-Settings>`. +More detail on how QoS works can be found :doc:`here <../Concepts/Intermediate/About-Quality-of-Service-Settings>`. For the purposes of this guide, it is sufficient to know that only the reliability and durability policies affect whether publishers/subscribers are compatible and can receive data from one other. Ros2Bag adapts its requested/offered QoS profile when recording/playing data from a topic to prevent dropped messages. diff --git a/source/How-To-Guides/Package-maintainer-guide.rst b/source/How-To-Guides/Package-maintainer-guide.rst index 2487f12af6d..8b5a1bb2d09 100644 --- a/source/How-To-Guides/Package-maintainer-guide.rst +++ b/source/How-To-Guides/Package-maintainer-guide.rst @@ -162,7 +162,7 @@ Responding to issues Package maintainers should also look at incoming issues on the repository and triage the problems that users are having. -For issues that look like questions, the issue should be closed and the user redirected to https://answers.ros.org. +For issues that look like questions, the issue should be closed and the user redirected to `Robotics Stack Exchange `__ . If an issue looks like a problem, but is not relevant to this particular repository, it should be moved to the appropriate repository with the GitHub "Transfer issue" button. diff --git a/source/How-To-Guides/ROS-2-IDEs.rst b/source/How-To-Guides/ROS-2-IDEs.rst new file mode 100644 index 00000000000..157a80603b6 --- /dev/null +++ b/source/How-To-Guides/ROS-2-IDEs.rst @@ -0,0 +1,260 @@ +IDEs and Debugging [community-contributed] +========================================== + +ROS 2 is not made around a specific development environment and the main focus is on building / running from the command line. +Nonetheless Integrated Development Environments (IDEs) can be used to develop, run and/or debug ROS 2 nodes. + +Below are listed some IDEs and instructions on how to use them with ROS 2. + + +.. contents:: Contents + :depth: 2 + :local: + + +General +------- + + +.. _InstalledPythonCode: + +Installed Python Code +^^^^^^^^^^^^^^^^^^^^^ + +By default, when building workspaces with: + +.. code-block:: bash + + colcon build + +The Python code will be coped over into the ``build``/``install`` directories. +So when attaching a debugger to a ``ros2 run`` command from within an IDE, the code being run (from the ``build``/``install``) is not the same as the files opened in the IDE project. + +There are 2 options to deal with this: + +* Open the source files from ``build``/``install`` directory and place breakpoints there. +* Build the workspace with the `--symlink-install `__ flag to colcon, which will symlink the source files to the ``build``/``install`` directory instead. + + +Visual Studio Code +------------------ + +`VSCode `_ is a versatile and free development environment. + +VSCode is relatively easy to use with ROS 2. +Simply activate your environment in a command line and start the VSCode application from the same terminal and use as normal. +So: + +#. Create your ROS workspace as you would normally. +#. In a terminal, source both ROS 2 and your install (if it was built already). +#. Start VSCode from the same command line. The terminal will be blocked until the application is closed again. + +.. tabs:: + + .. group-tab:: Linux + + .. code-block:: bash + + source /opt/ros/{DISTRO}/setup.bash + cd ~/dev_ws + source ./install/setup.bash + /usr/bin/code ./src/my_node/ + + .. group-tab:: macOS + + .. code-block:: console + + . ~/ros2_install/ros2-osx/setup.bash + cd ~/dev_ws + . ./install/setup.bash + /Applications/Visual Studio Code.app/Contents/Resources/app/bin/code ./src/my_node/ + + .. group-tab:: Windows + + .. code-block:: console + + # For CMD: + call C:\dev\ros2\local_setup.bat + cd C:\dev_ws + call .\install\local_setup.bat + "C:\Program Files\Microsoft VS Code\Code.exe" .\src\my_node\ + + # For PowerShell: + C:\dev\ros2\local_setup.ps1 + cd C:\dev_ws + .\install\local_setup.ps1 + & "C:\Program Files\Microsoft VS Code\Code.exe" .\src\my_node\ + + +VSCode and any terminal created inside VSCode will correctly inherit from the parent environment and should have ROS and installed package available. + +.. note:: + + After adding packages or making major changes you might need to source your install again. + The simplest way to do this is to close VSCode and restart it as above. + + +Python +^^^^^^ + +In your workspace, verify the correct interpreter is used. +Through sourcing the basic command ``python`` should be correct, but VSCode likes to resort to an absolute path for Python. +In the bottom right corner click on "Selected Python Interpreter" to change it. + +If your ROS 2 Python version is from a virtual environment, VSCode will try to source it at each run command. +But we already started VSCode from a sourced environment, so this extra step is not necessary. +You can disable this for the current workspace by finding "Settings" > "Extensions" > "Python" > "Activate Environment" and disabling the check. + +Now simply run a file or create a configuration in ``launch.json``. +Debugging a node is easiest by creating a configuration like a ``python ...`` command, instead of ``ros2 run/launch ...``. +An example of ``launch.json`` could be: + +.. code-block:: + + { + "version": "0.2.0", + "configurations": [ + { + "name": "Python: File", + "type": "python", + "request": "launch", + "program": "my_node.py" + }, + ] + } + + +Instead you could also create a configuration for attaching to a running process, under "Attach using Process Id". + + +See :doc:`Setup ROS 2 with VSCode and Docker` for full instructions on how to use VSCode, in combination with Docker. + + +PyCharm +------- + +`PyCharm `_ is an IDE specifically for Python. + +Of course it can only be meaningfully used for nodes made in Python. + +With PyCharm you can either attach to an existing process (probably started by you via ``ros2 run ...`` or ``ros2 launch ...``) or run the node directly from Python (equivalent to ``python [file.py]``. + + +Integrate for code inspection +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +You can setup your PyCharm project such that it is fully aware of ROS 2 code, allowing code completion and suggestion. + + +Linux +""""" + +Open a terminal, source ROS and start PyCharm: + +.. code-block:: bash + + source /opt/ros/humble/setup.bash + cd path/to/dev_ws + /opt/pycharm/bin/pycharm.sh + +After selecting the correct interpreter, everything should work. + +.. note:: + + This is untested. + + +Windows +""""""" + +First sourcing ROS and then starting PyCharm from the command line seems to have no effect on Windows. +Instead, some settings need to be tweaked. + +#. Create your ROS workspace as you would normally. +#. Start PyCharm normally. +#. Open a project. This should be the root directory of the ROS node you're developing, e.g. ``C:\dev_ws\src\my_node``. +#. Click "Add new interpreter" > "Add local interpreter...". + Select a system interpreter (or virtual environment if you're using one) and select the executable of your ROS Python version (typically ``C:\Python38\python.exe``). + + * If you now open one of your code files, you will see warnings about missing imports. + Trying to run the file will confirm these issues. + +#. Under the "Python Interpreters" window, find and select your ROS interpreter. + Edit the name to something recognizable. + More importantly, now click the "Show Interpreter Paths" button. +#. In the new window, you will see the paths already associated with this interpreter. + Click the "+" button and add two more paths (according to your ROS install): + + * ``C:\dev\ros2_humble\bin`` + * ``C:\dev\ros2_humble\Lib\site-packages`` + +PyCharm will re-index and when finished it should correctly interpret your project, recognising the ROS 2 system packages. +You can navigate through code, get completion and read doc blurbs as expected. + + +If there are dependencies built alongside with your package, they are probably not yet recognized and result in invalid IDE warnings and runtime errors. + +Resolve this by: + +* Making sure the ``PATH`` override in the run/debug configuration includes both the ROS 2 install and your workspace, e.g.: + + .. code-block:: bash + + C:\dev\ros2_humble\local_setup.ps1 + C:\dev_ws\install\local_setup.ps1 + echo $ENV:Path + +* Adding the relevant folders from the ``install/`` directory to your project sources. + + Go to "Settings..." and under "Project: " > "Project Structure" click "Add content root". + Add all the relevant ``site-packages`` folders under ``install/Lib/*``. + + Finally, make sure your run/debug configuration has the option "include content roots in PYTHONPATH" enabled. + +.. tip:: + + Using the `--merge-install `__ option with your colcon build will limit the number of depending directories, making it easier to configure PyCharm. + + +Attach to Process +^^^^^^^^^^^^^^^^^ + +Even without any configuration to PyCharm, you can always just attach to a running Python node. +Open your project source and simply run your node as usual: + +.. code-block:: bash + + ros2 run my_node main + +Then in PyCharm select "Run" > "Attach to Process...". +It might take a second, but a small window should show listing the currently running Python instances, including your node. +There can be multiple Python processes, so there may be some trial-and-error to find the right one. + +After selecting an instance, the usual debugging tools are available. +You can pause it or create breakpoints in the code and step through it. + +.. note:: + + The code in your project might not be the files being executed, see :ref:`this`. + + +Run/Debug +^^^^^^^^^ + +Follow the steps for integration first. + +Running your Python file from PyCharm will likely result in import errors. +This is because PyCharm extends the ``PYTHONPATH`` environment variable, but it leaves ``PATH`` untouched. +Necessary library files in ``ros/bin`` are not found. + +Edit the run/debug configuration for your file and under "Environment Variables:" add a new variable. +It is currently not supported to extend the existing ``PATH``, so we need to override it. +From a sourced ROS terminal, export the content of ``PATH`` with: ``echo $Env:PATH``. +Copy the result. + +Back in PyCharm, paste it as ``PATH``, apply changes and run or debug your node. +It should work like any Python project now, allowing easy additions of breakpoints and other debug methods. + +.. note:: + + On Windows it seems the capitalization of the ``PATH`` variable under "Environment Variables:" must be "path" (all lowercase) in order to work. diff --git a/source/How-To-Guides/RQt-Source-Install.rst b/source/How-To-Guides/RQt-Source-Install.rst index bc8e4620965..a91fc5ceffc 100644 --- a/source/How-To-Guides/RQt-Source-Install.rst +++ b/source/How-To-Guides/RQt-Source-Install.rst @@ -107,4 +107,4 @@ Windows Using RQt ---------- -See :doc:`Overview of RQt <../Concepts/About-RQt>`. +See :doc:`Overview of RQt <../Concepts/Intermediate/About-RQt>`. diff --git a/source/How-To-Guides/Run-2-nodes-in-single-or-separate-docker-containers.rst b/source/How-To-Guides/Run-2-nodes-in-single-or-separate-docker-containers.rst index 9cccd5bcbe0..b327094d8fb 100644 --- a/source/How-To-Guides/Run-2-nodes-in-single-or-separate-docker-containers.rst +++ b/source/How-To-Guides/Run-2-nodes-in-single-or-separate-docker-containers.rst @@ -86,4 +86,4 @@ As an alternative to the command line invocation, you can create a ``docker-comp depends_on: - talker -To run the containers call ``docker-compose up`` in the same directory. You can close the containers with ``Ctrl+C``. +To run the containers call ``docker compose up`` in the same directory. You can close the containers with ``Ctrl+C``. diff --git a/source/How-To-Guides/Setup-ROS-2-with-VSCode-and-Docker-Container.rst b/source/How-To-Guides/Setup-ROS-2-with-VSCode-and-Docker-Container.rst index cf92adeb075..27d6a205611 100644 --- a/source/How-To-Guides/Setup-ROS-2-with-VSCode-and-Docker-Container.rst +++ b/source/How-To-Guides/Setup-ROS-2-with-VSCode-and-Docker-Container.rst @@ -141,7 +141,7 @@ Therefore add the following to ``.devcontainer/devcontainer.json``: }, "containerEnv": { "DISPLAY": "unix:0", - "ROS_LOCALHOST_ONLY": "1", + "ROS_AUTOMATIC_DISCOVERY_RANGE": "LOCALHOST", "ROS_DOMAIN_ID": "42" }, "runArgs": [ diff --git a/source/How-To-Guides/Topics-Services-Actions.rst b/source/How-To-Guides/Topics-Services-Actions.rst index d6a1979b675..1c1bbdfb421 100644 --- a/source/How-To-Guides/Topics-Services-Actions.rst +++ b/source/How-To-Guides/Topics-Services-Actions.rst @@ -8,7 +8,7 @@ Topics vs Services vs Actions :local: When designing a system there are three primary styles of interfaces. -The specifications for the content is in the :doc:`Interfaces Overview <../Concepts/About-ROS-Interfaces>`. +The specifications for the content is in the :doc:`Interfaces Overview <../Concepts/Basic/About-Interfaces>`. This is written to provide the reader with guidelines about when to use each type of interface. Topics diff --git a/source/How-To-Guides/Using-Python-Packages.rst b/source/How-To-Guides/Using-Python-Packages.rst index bfdb3d0dfca..a62d11a805d 100644 --- a/source/How-To-Guides/Using-Python-Packages.rst +++ b/source/How-To-Guides/Using-Python-Packages.rst @@ -96,7 +96,7 @@ Now you can build your workspace and run your python node that depends on packag .. note:: - If you want release your package on Bloom, you should to add the packages you require to ``rosdep``, see the `rosdep key contribution guide`_. + If you want to release your package using Bloom, you should add the packages you require to ``rosdep``, see the `rosdep key contribution guide`_. .. _rosdep key contribution guide: http://docs.ros.org/en/independent/api/rosdep/html/contributing_rules.html diff --git a/source/How-To-Guides/Using-callback-groups.rst b/source/How-To-Guides/Using-callback-groups.rst index 68d7f252363..460797c3abf 100644 --- a/source/How-To-Guides/Using-callback-groups.rst +++ b/source/How-To-Guides/Using-callback-groups.rst @@ -5,7 +5,7 @@ When running a node in a Multi-Threaded Executor, ROS 2 offers callback groups as a tool for controlling the execution of different callbacks. This page is meant as a guide on how to use callback groups efficiently. It is assumed that the reader has a basic understanding -about the concept of :doc:`executors <../Concepts/About-Executors>`. +about the concept of :doc:`executors <../Concepts/Intermediate/About-Executors>`. .. contents:: Table of Contents :local: @@ -28,7 +28,7 @@ In short: executed in parallel - essentially making it as if the callbacks in the group were executed by a SingleThreadedExecutor. * Reentrant Callback Group allows the executor to schedule and execute - the group's callbacks in any way the it sees fit, without restrictions. + the group's callbacks in any way it sees fit, without restrictions. This means that, in addition to different callbacks being run parallel to each other, different instances of the same callback may also be executed concurrently. @@ -108,27 +108,30 @@ Controlling execution In order to control execution with callback groups, one can consider the following guidelines. -* Register callbacks that should never be executed in parallel to the same - Mutually Exclusive Callback Group. - An example case might be that the callbacks are accessing shared - critical and non-thread-safe resources. -* If you have a callback whose execution instances need to be able to overlap - with each other, register it to a Reentrant Callback Group. - An example case could be an action server that needs to be able to process - several action calls in parallel to each other. -* If you have different callbacks that require to be potentially executed - in parallel to one another, register them to - - * a Reentrant Callback Group, or - * different Mutually Exclusive Callback Groups (this option is good if you - want the callbacks to not overlap themselves or also need thread - safety with respect to some other callbacks) - or different callback groups of any type (choose the types according - to other criteria). - -Note that the option in the list is a valid way of allowing parallel -execution for different callbacks, and can even be more desirable than simply -registering everything into one Reentrant Callback Group. +For the interaction of an individual callback with itself: + +* Register it to a Reentrant Callback Group if it should be executed in parallel to itself. + An example case could be an action/service server that needs to be able to + process several action calls in parallel to each other. + +* Register it to a Mutually Exclusive Callback Group if it should **never** be executed in parallel to itself. + An example case could be a timer callback that runs a control loop that publishes control commands. + +For the interaction of different callbacks with each other: + +* Register them to the same Mutually Exclusive Callback Group if they should **never** be executed in parallel. + An example case could be that the callbacks are accessing shared critical and non-thread-safe resources. + +If they should be executed in parallel, you have two options, +depending on whether the individual callbacks should be able to overlap themselves or not: + +* Register them to different Mutually Exclusive Callback Groups (no overlap of the individual callbacks) + +* Register them to a Reentrant Callback Group (overlap of the individual callbacks) + +An example case of running different callbacks in parallel is a Node that has +a synchronous service client and a timer calling this service. +See the detailed example below. Avoiding deadlocks ------------------ diff --git a/source/How-To-Guides/Using-ros2-param.rst b/source/How-To-Guides/Using-ros2-param.rst index 327eadacd7e..9351ce614f0 100644 --- a/source/How-To-Guides/Using-ros2-param.rst +++ b/source/How-To-Guides/Using-ros2-param.rst @@ -5,7 +5,7 @@ Using the ``ros2 param`` command-line tool :depth: 1 :local: -Parameters in ROS 2 can be get, set, listed, and described through a set of services as described in :doc:`the concept document <../Concepts/About-ROS-2-Parameters>`. +Parameters in ROS 2 can be get, set, listed, and described through a set of services as described in :doc:`the concept document <../Concepts/Basic/About-Parameters>`. The ``ros2 param`` command-line tool is a wrapper around these service calls that makes it easy to manipulate parameters from the command-line. ``ros2 param list`` @@ -82,7 +82,7 @@ The following string typed parameter would work: This command will remove a parameter from a particular node. However, note that this can only remove dynamic parameters (not declared parameters). -See :doc:`the concept document <../Concepts/About-ROS-2-Parameters>` for more information. +See :doc:`the concept document <../Concepts/Basic/About-Parameters>` for more information. .. code-block:: console diff --git a/source/How-To-Guides/Working-with-multiple-RMW-implementations.rst b/source/How-To-Guides/Working-with-multiple-RMW-implementations.rst index 567a4aca147..78ee1a32461 100644 --- a/source/How-To-Guides/Working-with-multiple-RMW-implementations.rst +++ b/source/How-To-Guides/Working-with-multiple-RMW-implementations.rst @@ -16,7 +16,7 @@ This page explains the default RMW implementation and how to specify an alternat Prerequisites -------------- -You should have already read the :doc:`DDS and ROS middleware implementations page <../Concepts/About-Different-Middleware-Vendors>`. +You should have already read the :doc:`DDS and ROS middleware implementations page <../Concepts/Intermediate/About-Different-Middleware-Vendors>`. Specifying RMW implementations ------------------------------ @@ -68,10 +68,10 @@ Adding RMW implementations to your workspace Suppose that you have built your ROS 2 workspace with only Fast DDS installed and therefore only the Fast DDS RMW implementation built. The last time your workspace was built, any other RMW implementation packages, ``rmw_connextdds`` for example, were probably unable to find installations of the relevant DDS implementations. If you then install an additional DDS implementation, Connext for example, you will need to re-trigger the check for a Connext installation that occurs when the Connext RMW implementation is being built. -You can do this by specifying the ``--cmake-force-configure`` flag on your next workspace build, and you should see that the RMW implementation package then gets built for the newly installed DDS implementation. +You can do this by specifying the ``--cmake-clean-cache`` flag on your next workspace build, and you should see that the RMW implementation package then gets built for the newly installed DDS implementation. -It is possible to run into a problem when "rebuilding" the workspace with an additional RMW implementation using the ``--cmake-force-configure`` option where the build complains about the default RMW implementation changing. -To resolve this, you can either set the default implementation to what is was before with the ``RMW_IMPLEMENTATION`` CMake argument or you can delete the build folder for packages that complain and continue the build with ``--start-with ``. +It is possible to run into a problem when "rebuilding" the workspace with an additional RMW implementation using the ``--cmake-clean-cache`` option where the build complains about the default RMW implementation changing. +To resolve this, you can either set the default implementation to what is was before with the ``RMW_IMPLEMENTATION`` CMake argument or you can delete the build folder for packages that complain and continue the build with ``--packages-start ``. Troubleshooting --------------- @@ -118,7 +118,7 @@ it will generate a daemon with a Fast DDS implementation: .. code-block:: bash - 21318 22.0 0.6 535896 55044 pts/8 Sl 16:14 0:00 /usr/bin/python3 /opt/ros/{DISTRO}/bin/_ros2_daemon --rmw-implementation rmw_fastrtps_cpp --ros-domain-id 22 + 21318 22.0 0.6 535896 55044 pts/8 Sl 16:14 0:00 /usr/bin/python3 /opt/ros/{DISTRO}/bin/_ros2_daemon --rmw-implementation rmw_fastrtps_cpp --ros-domain-id 0 Even if you run the command line tool again with the correct RMW implementation, the daemon's RMW implementation will not change and the ROS 2 command line tools will fail. diff --git a/source/Installation.rst b/source/Installation.rst index edfe9894f19..1adc0d0e74a 100644 --- a/source/Installation.rst +++ b/source/Installation.rst @@ -50,7 +50,7 @@ We support building ROS 2 from source on the following platforms: * :doc:`Ubuntu Linux ` * :doc:`Windows ` -* :doc:`RHEL ` +* :doc:`RHEL/Fedora ` * :doc:`macOS ` diff --git a/source/Installation/Alternatives.rst b/source/Installation/Alternatives.rst index c0480015c8f..4a05c841222 100644 --- a/source/Installation/Alternatives.rst +++ b/source/Installation/Alternatives.rst @@ -12,5 +12,4 @@ A list of alternative ways to install ROS 2 – whether it's by building from s Alternatives/RHEL-Development-Setup Alternatives/RHEL-Install-Binary Alternatives/macOS-Development-Setup - Alternatives/Fedora-Development-Setup Alternatives/Latest-Development-Setup diff --git a/source/Installation/Alternatives/Fedora-Development-Setup.rst b/source/Installation/Alternatives/Fedora-Development-Setup.rst deleted file mode 100644 index f35f93f5010..00000000000 --- a/source/Installation/Alternatives/Fedora-Development-Setup.rst +++ /dev/null @@ -1,51 +0,0 @@ -.. redirect-from:: - - Installation/Fedora-Development-Setup - -Fedora (source) -=============== - -How to setup the development environment? ------------------------------------------ - -The following system dependencies are required to build ROS 2 on Fedora. They can be installed with ``dnf`` as follows: - -.. code-block:: bash - - sudo dnf install \ - cmake \ - cppcheck \ - eigen3-devel \ - gcc-c++ \ - liblsan \ - libXaw-devel \ - libyaml-devel \ - make \ - opencv-devel \ - patch \ - python3-colcon-common-extensions \ - python3-coverage \ - python3-devel \ - python3-empy \ - python3-nose \ - python3-pip \ - python3-pydocstyle \ - python3-pyparsing \ - python3-pytest \ - python3-pytest-cov \ - python3-pytest-mock \ - python3-pytest-runner \ - python3-rosdep \ - python3-setuptools \ - python3-vcstool \ - poco-devel \ - poco-foundation \ - python3-flake8 \ - python3-flake8-import-order \ - redhat-rpm-config \ - uncrustify \ - wget - - -With this done, you can follow the rest of the :ref:`instructions ` to fetch and build ROS 2. - diff --git a/source/Installation/Alternatives/RHEL-Development-Setup.rst b/source/Installation/Alternatives/RHEL-Development-Setup.rst index 9edf8c4234b..ebdec994c24 100644 --- a/source/Installation/Alternatives/RHEL-Development-Setup.rst +++ b/source/Installation/Alternatives/RHEL-Development-Setup.rst @@ -1,5 +1,7 @@ .. redirect-from:: + Installation/Alternatives/Fedora-Development-Setup + Installation/Fedora-Development-Setup Installation/RHEL-Development-Setup RHEL (source) @@ -29,15 +31,23 @@ Set locale Enable required repositories ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -The rosdep database contains packages from the EPEL and PowerTools repositories, which are not enabled by default. -They can be enabled by running: +.. tabs:: -.. code-block:: bash + .. group-tab:: RHEL + + The rosdep database contains packages from the EPEL and PowerTools repositories, which are not enabled by default. + They can be enabled by running: + + .. code-block:: bash + + sudo dnf install 'dnf-command(config-manager)' epel-release -y + sudo dnf config-manager --set-enabled crb + + .. note:: This step may be slightly different depending on the distribution you are using. Check the EPEL documentation: https://docs.fedoraproject.org/en-US/epel/#_quickstart - sudo dnf install 'dnf-command(config-manager)' epel-release -y - sudo dnf config-manager --set-enabled crb + .. group-tab:: Fedora -.. note:: This step may be slightly different depending on the distribution you are using. Check the EPEL documentation: https://docs.fedoraproject.org/en-US/epel/#_quickstart + No additional setup required. Install development tools @@ -75,8 +85,6 @@ Install development tools flake8-class-newline \ flake8-deprecated -.. _Rolling_rhel-dev-get-ros2-code: - Build ROS 2 ----------- @@ -123,9 +131,14 @@ More info on working with a ROS workspace can be found in :doc:`this tutorial <. cd ~/ros2_{DISTRO}/ colcon build --symlink-install -Note: if you are having trouble compiling all examples and this is preventing you from completing a successful build, you can use ``COLCON_IGNORE`` in the same manner as `CATKIN_IGNORE `__ to ignore the subtree or remove the folder from the workspace. -Take for instance: you would like to avoid installing the large OpenCV library. -Well then simply run ``touch COLCON_IGNORE`` in the ``cam2image`` demo directory to leave it out of the build process. +.. note:: + + If you are having trouble compiling all examples and this is preventing you from completing a successful build, you can use the ``--packages-skip`` colcon flag to ignore the package that is causing problems. + For instance, if you don't want to install the large OpenCV library, you could skip building the packages that depend on it using the command: + + .. code-block:: bash + + colcon build --symlink-install --packages-skip image_tools intra_process_demo Setup environment ----------------- diff --git a/source/Installation/Alternatives/RHEL-Install-Binary.rst b/source/Installation/Alternatives/RHEL-Install-Binary.rst index 178837c5d86..40d8ae49fb5 100644 --- a/source/Installation/Alternatives/RHEL-Install-Binary.rst +++ b/source/Installation/Alternatives/RHEL-Install-Binary.rst @@ -19,8 +19,6 @@ System requirements ------------------- We currently support RHEL 9 64-bit. -The Rolling Ridley distribution will change target platforms from time to time as new platforms are selected for development. -Most people will want to use a stable ROS distribution. System setup ------------ @@ -92,9 +90,7 @@ If you are going to build ROS packages or otherwise do development, you can also Install ROS 2 ------------- -Binary releases of Rolling Ridley are not provided. -Instead you may download nightly :ref:`prerelease binaries `. - +* Go to the `releases page `_ * Download the latest package for RHEL; let's assume that it ends up at ``~/Downloads/ros2-package-linux-x86_64.tar.bz2``. * Note: there may be more than one binary download option which might cause the file name to differ. @@ -103,9 +99,9 @@ Instead you may download nightly :ref:`prerelease binaries .. code-block:: bash - mkdir -p ~/ros2_{DISTRO} - cd ~/ros2_{DISTRO} - tar xf ~/Downloads/ros2-package-linux-x86_64.tar.bz2 + mkdir -p ~/ros2_{DISTRO} + cd ~/ros2_{DISTRO} + tar xf ~/Downloads/ros2-package-linux-x86_64.tar.bz2 Install dependencies using rosdep ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/source/Installation/Alternatives/Ubuntu-Development-Setup.rst b/source/Installation/Alternatives/Ubuntu-Development-Setup.rst index ccd9d4a3844..0971b4dcdd5 100644 --- a/source/Installation/Alternatives/Ubuntu-Development-Setup.rst +++ b/source/Installation/Alternatives/Ubuntu-Development-Setup.rst @@ -103,9 +103,14 @@ More info on working with a ROS workspace can be found in :doc:`this tutorial <. cd ~/ros2_{DISTRO}/ colcon build --symlink-install -Note: if you are having trouble compiling all examples and this is preventing you from completing a successful build, you can use ``COLCON_IGNORE`` in the same manner as `CATKIN_IGNORE `__ to ignore the subtree or remove the folder from the workspace. -Take for instance: you would like to avoid installing the large OpenCV library. -Well then simply run ``touch COLCON_IGNORE`` in the ``cam2image`` demo directory to leave it out of the build process. +.. note:: + + If you are having trouble compiling all examples and this is preventing you from completing a successful build, you can use the ``--packages-skip`` colcon flag to ignore the package that is causing problems. + For instance, if you don't want to install the large OpenCV library, you could skip building the packages that depend on it using the command: + + .. code-block:: bash + + colcon build --symlink-install --packages-skip image_tools intra_process_demo Setup environment ----------------- @@ -150,7 +155,7 @@ Use the ROS 1 bridge (optional) ------------------------------- The ROS 1 bridge can connect topics from ROS 1 to ROS 2 and vice-versa. -See the dedicated `documentation `__ on how to build and use the ROS 1 bridge. +See the dedicated :doc:`document <../../How-To-Guides/Using-ros1_bridge-Jammy-upstream>` on how to build and use the ROS 1 bridge. Alternate compilers ------------------- diff --git a/source/Installation/Alternatives/Ubuntu-Install-Binary.rst b/source/Installation/Alternatives/Ubuntu-Install-Binary.rst index 52dfb95f75c..056af477197 100644 --- a/source/Installation/Alternatives/Ubuntu-Install-Binary.rst +++ b/source/Installation/Alternatives/Ubuntu-Install-Binary.rst @@ -23,8 +23,6 @@ System requirements ------------------- We currently support Ubuntu Linux Jammy (22.04) 64-bit x86 and 64-bit ARM. -The Rolling Ridley distribution will change target platforms from time to time as new platforms are selected for development. -Most people will want to use a stable ROS distribution. System setup ------------ @@ -55,26 +53,23 @@ If you are going to build ROS packages or otherwise do development, you can also .. code-block:: bash - sudo apt install ros-dev-tools + sudo apt update && sudo apt install ros-dev-tools Install ROS 2 ------------- -Binary releases of Rolling Ridley are not provided. -Instead you may download nightly :ref:`prerelease binaries `. - +* Go to the `releases page `_ * Download the latest package for Ubuntu; let's assume that it ends up at ``~/Downloads/ros2-package-linux-x86_64.tar.bz2``. * Note: there may be more than one binary download option which might cause the file name to differ. -* - Unpack it: +* Unpack it: .. code-block:: bash - mkdir -p ~/ros2_{DISTRO} - cd ~/ros2_{DISTRO} - tar xf ~/Downloads/ros2-package-linux-x86_64.tar.bz2 + mkdir -p ~/ros2_{DISTRO} + cd ~/ros2_{DISTRO} + tar xf ~/Downloads/ros2-package-linux-x86_64.tar.bz2 .. _linux-install-binary-install-missing-dependencies: @@ -89,7 +84,7 @@ Install dependencies using rosdep sudo apt install -y python3-rosdep sudo rosdep init rosdep update - rosdep install --from-paths ~/ros2_{DISTRO}/ros2-linux/share --ignore-src -y --skip-keys "cyclonedds fastcdr fastrtps rti-connext-dds-6.0.1 urdfdom_headers" + rosdep install --from-paths ~/ros2_{DISTRO}/ros2-linux/share --ignore-src -y --skip-keys "cyclonedds fastcdr fastrtps iceoryx_binding_c rmw_connextdds rti-connext-dds-6.0.1 urdfdom_headers" .. include:: ../_rosdep_Linux_Mint.rst @@ -140,7 +135,7 @@ Use the ROS 1 bridge (optional) ------------------------------- The ROS 1 bridge can connect topics from ROS 1 to ROS 2 and vice-versa. -See the dedicated `documentation `__ on how to build and use the ROS 1 bridge. +See the dedicated :doc:`document <../../How-To-Guides/Using-ros1_bridge-Jammy-upstream>` on how to build and use the ROS 1 bridge. Troubleshoot ------------ diff --git a/source/Installation/Alternatives/Windows-Development-Setup.rst b/source/Installation/Alternatives/Windows-Development-Setup.rst index cb522d14277..6d49949fcec 100644 --- a/source/Installation/Alternatives/Windows-Development-Setup.rst +++ b/source/Installation/Alternatives/Windows-Development-Setup.rst @@ -43,15 +43,6 @@ Install additional Python dependencies: pip install -U colcon-common-extensions coverage flake8 flake8-blind-except flake8-builtins flake8-class-newline flake8-comprehensions flake8-deprecated flake8-docstrings flake8-import-order flake8-quotes mock mypy==0.931 pep8 pydocstyle pytest pytest-mock vcstool -Install miscellaneous prerequisites -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Next install xmllint: - -* Download the `64 bit binary archives `__ of ``libxml2`` (and its dependencies ``iconv`` and ``zlib``) from https://www.zlatkovic.com/projects/libxml/ -* Unpack all archives into e.g. ``C:\xmllint`` -* Add ``C:\xmllint\bin`` to the ``PATH``. - Build ROS 2 ----------- diff --git a/source/Installation/Alternatives/macOS-Development-Setup.rst b/source/Installation/Alternatives/macOS-Development-Setup.rst index e8121b2aafe..7e09d423f83 100644 --- a/source/Installation/Alternatives/macOS-Development-Setup.rst +++ b/source/Installation/Alternatives/macOS-Development-Setup.rst @@ -14,8 +14,6 @@ System requirements ------------------- We currently support macOS Mojave (10.14). -The Rolling Ridley distribution will change target platforms from time to time as new platforms become available. -Most people will want to use a stable ROS distribution. System setup ------------ @@ -29,7 +27,7 @@ You need the following things installed to build ROS 2: #. **Xcode** - * If you don't already have it installed, install Xcode. + * If you don't already have it installed, install [Xcode](https://apps.apple.com/app/xcode/id497799835). * Note: Versions of Xcode later than 11.3.1 can no longer be installed on macOS Mojave, so you will need to install an older version manually, see: https://stackoverflow.com/a/61046761 * Also, if you don't already have it installed, install the Command Line Tools: @@ -71,12 +69,12 @@ You need the following things installed to build ROS 2: .. code-block:: bash # Add the openssl dir for DDS-Security - # if you are using ZSH, then replace '.bashrc' with '.zshrc' - echo "export OPENSSL_ROOT_DIR=$(brew --prefix openssl)" >> ~/.bashrc + # if you are using BASH, then replace '.zshrc' with '.bashrc' + echo "export OPENSSL_ROOT_DIR=$(brew --prefix openssl)" >> ~/.zshrc # Add the Qt directory to the PATH and CMAKE_PREFIX_PATH - export CMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH:/usr/local/opt/qt@5 - export PATH=$PATH:/usr/local/opt/qt@5/bin + export CMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH:$(brew --prefix qt@5) + export PATH=$PATH:$(brew --prefix qt@5)/bin #. Use ``python3 -m pip`` (just ``pip`` may install Python3 or Python2) to install more stuff: @@ -92,7 +90,7 @@ You need the following things installed to build ROS 2: nose pep8 psutil pydocstyle pydot pygraphviz pyparsing==2.4.7 \ pytest-mock rosdep rosdistro setuptools==59.6.0 vcstool - Please ensure that the ``$PATH`` environment variable contains the install location of the binaries (default: ``$HOME/Library/Python//bin``) + Please ensure that the ``$PATH`` environment variable contains the install location of the binaries (``$(brew --prefix)/bin``) #. *Optional*: if you want to build the ROS 1<->2 bridge, then you must also install ROS 1: @@ -156,7 +154,7 @@ Source the ROS 2 setup file: .. code-block:: bash - . ~/ros2_{DISTRO}/install/setup.bash + . ~/ros2_{DISTRO}/install/setup.zsh This will automatically set up the environment for any DDS vendors that support was built for. diff --git a/source/Installation/DDS-Implementations.rst b/source/Installation/DDS-Implementations.rst index d4b8254a8be..6e35e00ec9d 100644 --- a/source/Installation/DDS-Implementations.rst +++ b/source/Installation/DDS-Implementations.rst @@ -6,7 +6,7 @@ It is compatible with multiple DDS or RTPS (the DDS wire protocol) vendors. There is currently support for eProsima's Fast DDS, RTI's Connext DDS, Eclipse Cyclone DDS, and GurumNetworks GurumDDS. See https://ros.org/reps/rep-2000.html for supported DDS vendors by distribution. -In Rolling, the default DDS vendor is eProsima's Fast DDS. +The default DDS vendor is eProsima's Fast DDS. * :doc:`Working with Eclipse Cyclone DDS ` explains how to utilize Cyclone DDS. * :doc:`Working with eProsima Fast DDS ` explains how to utilize Fast DDS. diff --git a/source/Installation/RHEL-Install-RPMs.rst b/source/Installation/RHEL-Install-RPMs.rst index 76f158a9a80..384fc8bb6ec 100644 --- a/source/Installation/RHEL-Install-RPMs.rst +++ b/source/Installation/RHEL-Install-RPMs.rst @@ -1,14 +1,11 @@ -RHEL (RPM) -========== +RHEL (RPM packages) +=================== .. contents:: Table of Contents :depth: 2 :local: RPM packages for ROS 2 {DISTRO_TITLE_FULL} are currently available for RHEL 9. -The Rolling Ridley distribution will change target platforms from time to time as new platforms are selected for development. -The target platforms are defined in `REP 2000 `__ -Most people will want to use a stable ROS distribution. Resources --------- diff --git a/source/Installation/Ubuntu-Install-Debians.rst b/source/Installation/Ubuntu-Install-Debians.rst index a454942793e..c2c55dfaac9 100644 --- a/source/Installation/Ubuntu-Install-Debians.rst +++ b/source/Installation/Ubuntu-Install-Debians.rst @@ -2,17 +2,14 @@ Installation/Linux-Install-Debians -Ubuntu (Debian) -=============== +Ubuntu (Debian packages) +======================== .. contents:: Table of Contents :depth: 2 :local: -Debian packages for ROS 2 {DISTRO_TITLE_FULL} are currently available for Ubuntu Jammy. -The Rolling Ridley distribution will change target platforms from time to time as new platforms are selected for development. -The target platforms are defined in `REP 2000 `__ -Most people will want to use a stable ROS distribution. +Debian packages for ROS 2 {DISTRO_TITLE_FULL} are currently available for Ubuntu Jammy (22.04). Resources --------- @@ -45,7 +42,7 @@ If you are going to build ROS packages or otherwise do development, you can also .. code-block:: bash - sudo apt install ros-dev-tools + sudo apt update && sudo apt install ros-dev-tools Install ROS 2 ------------- @@ -127,7 +124,7 @@ Use the ROS 1 bridge (optional) ------------------------------- The ROS 1 bridge can connect topics from ROS 1 to ROS 2 and vice-versa. -See the dedicated `documentation `__ on how to build and use the ROS 1 bridge. +See the dedicated :doc:`document <../../How-To-Guides/Using-ros1_bridge-Jammy-upstream>` on how to build and use the ROS 1 bridge. Troubleshoot ------------ diff --git a/source/Installation/Windows-Install-Binary.rst b/source/Installation/Windows-Install-Binary.rst index 76ffb52df37..784020e0e2f 100644 --- a/source/Installation/Windows-Install-Binary.rst +++ b/source/Installation/Windows-Install-Binary.rst @@ -25,19 +25,17 @@ Only Windows 10 is supported. Install ROS 2 ------------- -Binary releases of {DISTRO_TITLE_FULL} are not provided. -Instead you may download nightly :ref:`prerelease binaries `. - -* Download the latest package for Windows, e.g., ``ros2-package-windows-AMD64.zip``. +* Go to the releases page: https://github.com/ros2/ros2/releases +* Download the latest package for Windows, e.g., ``ros2-package-windows-AMD64.zip`` .. note:: - There may be more than one binary download option which might cause the file name to differ. + There may be more than one binary download option which might cause the file name to differ. .. note:: - To install debug libraries for ROS 2, see `Extra Stuff for Debug`_. - Then continue on with downloading ``ros2-package-windows-debug-AMD64.zip``. + To install debug libraries for ROS 2, see `Extra Stuff for Debug`_. + Then continue on with downloading ``ros2-package-windows-debug-AMD64.zip``. * Unpack the zip file somewhere (we'll assume ``C:\dev\ros2_{DISTRO}``\ ). diff --git a/source/Installation/_Windows-Install-Prerequisites.rst b/source/Installation/_Windows-Install-Prerequisites.rst index ca7eca6ac51..9296b248d7e 100644 --- a/source/Installation/_Windows-Install-Prerequisites.rst +++ b/source/Installation/_Windows-Install-Prerequisites.rst @@ -6,7 +6,7 @@ Install Chocolatey Chocolatey is a package manager for Windows, install it by following their installation instructions: -https://chocolatey.org/ +https://chocolatey.org/install You'll use Chocolatey to install some other developer tools. @@ -19,6 +19,11 @@ Open a Command Prompt and type the following to install Python via Chocolatey: choco install -y python --version 3.8.3 +.. note:: + + Chocolatey will install Python in ``C:\Python38``, and the rest of the installation expects it to be there. + If you've installed Python somewhere else, you must copy or link it to that location. + Install Visual C++ Redistributables ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -32,7 +37,7 @@ Install OpenSSL ^^^^^^^^^^^^^^^ Download the *Win64 OpenSSL v1.1.1n* OpenSSL installer from `this page `__. -Scroll to the bottom of the page and download *Win64 OpenSSL v1.1.1n*. +Scroll to the bottom of the page and download *Win64 OpenSSL v1.1.1t*. Don't download the Win32 or Light versions, or the v3.X.Y installers. Run the installer with default parameters, as the following commands assume you used the default installation directory. @@ -126,6 +131,15 @@ Now install some additional python dependencies: python -m pip install -U catkin_pkg cryptography empy importlib-metadata jsonschema lark==1.1.1 lxml matplotlib netifaces numpy opencv-python PyQt5 pillow psutil pycairo pydot pyparsing==2.4.7 pyyaml rosdistro +Install miscellaneous prerequisites +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Next install xmllint: + +* Download the `64 bit binary archives `__ of ``libxml2`` (and its dependencies ``iconv`` and ``zlib``) from https://www.zlatkovic.com/projects/libxml/ +* Unpack all archives into e.g. ``C:\xmllint`` +* Add ``C:\xmllint\bin`` to the ``PATH``. + Install Qt5 ^^^^^^^^^^^ diff --git a/source/Related-Projects/Intel-ROS2-Projects.rst b/source/Related-Projects/Intel-ROS2-Projects.rst index c5ea1b57003..bac7ae8ad6d 100644 --- a/source/Related-Projects/Intel-ROS2-Projects.rst +++ b/source/Related-Projects/Intel-ROS2-Projects.rst @@ -13,7 +13,7 @@ Key Projects We are working on below ROS 2 projects and publish source code through https://github.com/intel/ or ROS 2 GitHub repo gradually. * `ROS2 OpenVINO `__: ROS 2 package for Intel® Visual Inference and Neural Network Optimization Toolkit to develop multiplatform computer vision solutions. -* `ROS2 RealSense Camera `__: ROS 2 package for Intel® RealSense™ D400 serial cameras +* `ROS2 RealSense Camera `__: ROS 2 package for Intel® RealSense™ D400 serial cameras * `ROS2 Movidius NCS `__: ROS 2 package for object detection with Intel® Movidius™ Neural Computing Stick (NCS). * `ROS2 Object Messages `__: ROS 2 messages for object. * `ROS2 Object Analytics `__: ROS 2 package for object detection, tracking and 2D/3D localization. diff --git a/source/Releases.rst b/source/Releases.rst index dae1d92d8da..df131a49aa3 100644 --- a/source/Releases.rst +++ b/source/Releases.rst @@ -23,12 +23,12 @@ Rows in the table marked in green are the currently supported distributions. .. toctree:: :hidden: - Releases/Release-Humble-Hawksbill.rst - Releases/Release-Foxy-Fitzroy.rst - Releases/Release-Rolling-Ridley.rst - Releases/Development.rst - Releases/End-of-Life.rst - Releases/Release-Process.rst + Releases/Release-Iron-Irwini + Releases/Release-Humble-Hawksbill + Releases/Release-Rolling-Ridley + Releases/Development + Releases/End-of-Life + Releases/Release-Process .. raw:: html @@ -47,12 +47,15 @@ Rows in the table marked in green are the currently supported distributions. --> .. |rolling| image:: Releases/rolling-small.png :alt: Rolling logo +.. |iron| image:: Releases/iron-small.png + :alt: Iron logo + .. |humble| image:: Releases/humble-small.png :alt: Humble logo @@ -86,6 +89,10 @@ Rows in the table marked in green are the currently supported distributions. - Release date - Logo - EOL date + * - :doc:`Iron Irwini ` + - May 23rd, 2023 + - |iron| + - November 2024 * - :doc:`Humble Hawksbill ` - May 23rd, 2022 - |humble| @@ -97,7 +104,7 @@ Rows in the table marked in green are the currently supported distributions. * - :doc:`Foxy Fitzroy ` - June 5th, 2020 - |foxy| - - May 2023 + - June 20th, 2023 * - :doc:`Eloquent Elusor ` - November 22nd, 2019 - |eloquent| @@ -145,17 +152,17 @@ There is a new ROS 2 distribution released yearly on May 23rd (`World Turtle Day .. list-table:: :class: future-distros :header-rows: 1 - :widths: 30 40 30 + :widths: 35 30 20 15 * - Distro - Release date - - Supported until - * - :doc:`Iron Irwini ` - - May 2023 - - November 2024 - + - Logo + - EOL date + * - :doc:`Jazzy Jalisco ` + - May 2024 + - TBD + - May 2029 -The expectation is to release new ROS 2 distributions once per year. .. _rolling_distribution: diff --git a/source/Releases/Alpha-Overview.rst b/source/Releases/Alpha-Overview.rst index 57a45971d34..514cec769ed 100644 --- a/source/Releases/Alpha-Overview.rst +++ b/source/Releases/Alpha-Overview.rst @@ -19,7 +19,7 @@ ROS 2 alpha8 release (code name *Hook-and-Loop*; October 2016) Changes to supported DDS vendors ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -ROS 2 supports multiple middleware implementations (see `this page <../../Concepts/About-Different-Middleware-Vendors>` for more details). +ROS 2 supports multiple middleware implementations (see `this page <../../Concepts/Intermediate/About-Different-Middleware-Vendors>` for more details). Until Alpha 8, ROS 2 was supporting ROS middleware implementations for eProsima's Fast RTPS, RTI's Connext and PrismTech's OpenSplice. To streamline our efforts, as of Alpha 8, Fast RTPS and Connext (static) will be supported, with Fast RTPS (`now Apache 2.0-licensed `__) shipped as the default. diff --git a/source/Releases/Beta2-Overview.rst b/source/Releases/Beta2-Overview.rst index d7fe1e8a9f9..abadccc06a0 100644 --- a/source/Releases/Beta2-Overview.rst +++ b/source/Releases/Beta2-Overview.rst @@ -25,7 +25,7 @@ Improvements since Beta 1 release * Debian packages for Ubuntu Xenial * Typesupport has been redesigned so that you only build a single executable and can choose one of the available RMW implementations by setting an environment variable (see `documentation <../../How-To-Guides/Working-with-multiple-RMW-implementations>`). * Namespace support for nodes and topics (see `design article `__, see known issues below). -* A set of command-line tools using the extensible ``ros2`` command (see `conceptual article <../../Concepts/About-Command-Line-Tools>`). +* A set of command-line tools using the extensible ``ros2`` command (see `conceptual article <../../Concepts/Basic/About-Command-Line-Tools>`). * A set of macros for logging messages in C / C++ (see API docs of `rcutils `__). New demo application diff --git a/source/Releases/Development.rst b/source/Releases/Development.rst index a4bc93ef673..727fb4e0c38 100644 --- a/source/Releases/Development.rst +++ b/source/Releases/Development.rst @@ -6,5 +6,4 @@ Below is the ROS 2 distribution that is currently in development. .. toctree:: :maxdepth: 1 - Release-Iron-Irwini.rst - Iron-Irwini-Complete-Changelog.rst + Release-Jazzy-Jalisco diff --git a/source/Releases/End-of-Life.rst b/source/Releases/End-of-Life.rst index 71248ddf249..3e3bcce8ddf 100644 --- a/source/Releases/End-of-Life.rst +++ b/source/Releases/End-of-Life.rst @@ -6,13 +6,14 @@ Below is a list of historic ROS 2 distributions that are no longer supported. .. toctree:: :maxdepth: 1 - Release-Galactic-Geochelone.rst - Release-Eloquent-Elusor.rst - Release-Dashing-Diademata.rst - Release-Crystal-Clemmys.rst - Release-Bouncy-Bolson.rst - Release-Ardent-Apalone.rst - Beta3-Overview.rst - Beta2-Overview.rst - Beta1-Overview.rst - Alpha-Overview.rst + Release-Galactic-Geochelone + Release-Foxy-Fitzroy + Release-Eloquent-Elusor + Release-Dashing-Diademata + Release-Crystal-Clemmys + Release-Bouncy-Bolson + Release-Ardent-Apalone + Beta3-Overview + Beta2-Overview + Beta1-Overview + Alpha-Overview diff --git a/source/Releases/Iron-Irwini-Complete-Changelog.rst b/source/Releases/Iron-Irwini-Complete-Changelog.rst index cc2eeb4c74a..cfc49ec504f 100644 --- a/source/Releases/Iron-Irwini-Complete-Changelog.rst +++ b/source/Releases/Iron-Irwini-Complete-Changelog.rst @@ -1,14 +1,14 @@ -ROS 2 Iron Irwini Complete Changelog -==================================== +Iron Irwini Changelog +===================== This page is a list of the complete changes in all ROS 2 core packages since the previous release. .. contents:: Table of Contents :local: -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`action_msgs `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`action_msgs `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update common_interfaces to C++17. (`#215 `__) (`#151 `__) * Add service_msgs package (`#143 `__) @@ -17,10 +17,11 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Brian, Chris Lalancette, Jacob Perron -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`action_tutorials_cpp `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`action_tutorials_cpp `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Change all ROS2 -> ROS 2. (`#610 `__) * Update the demos to C++17. (`#594 `__) * Add README's for action_tutorials. (`#576 `__) * [rolling] Update maintainers - 2022-11-07 (`#589 `__) @@ -28,10 +29,11 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, kagibson -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`action_tutorials_interfaces `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`action_tutorials_interfaces `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Change all ROS2 -> ROS 2. (`#610 `__) * A couple more upgrades to C++17. (`#609 `__) * Add README's for action_tutorials. (`#576 `__) * [rolling] Update maintainers - 2022-11-07 (`#589 `__) @@ -39,27 +41,27 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Jacob Perron, kagibson -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`action_tutorials_py `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`action_tutorials_py `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Add README's for action_tutorials. (`#576 `__) * [rolling] Update maintainers - 2022-11-07 (`#589 `__) * Contributors: Audrow Nash, kagibson -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`actionlib_msgs `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`actionlib_msgs `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update common_interfaces to C++17. (`#215 `__) * [rolling] Update maintainers - 2022-11-07 (`#210 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_clang_format `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_clang_format `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * ament_clang_format: use open braces for enum definitions (`#426 `__) * [rolling] Update maintainers - 2022-11-07 (`#421 `__) @@ -67,9 +69,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, james-rms, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_clang_tidy `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_clang_tidy `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#421 `__) * Update maintainers (`#379 `__) @@ -78,17 +80,17 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, William Woodall, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#411 `__) * Update maintainers to Michael Jeronimo * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_auto `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_auto `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Support INTERFACE on ament_auto_add_library (`#420 `__) * Fix ament_auto_add_gtest's parameter passing (`#421 `__) @@ -97,27 +99,27 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Christopher Wecht, Joshua Whitley, Rin Iwai -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_clang_format `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_clang_format `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#421 `__) * Update maintainers (`#379 `__) * Contributors: Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_clang_tidy `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_clang_tidy `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#421 `__) * Update maintainers (`#379 `__) * Contributors: Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_copyright `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_copyright `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#421 `__) * [ament_lint_auto] General file exclusion with AMENT_LINT_AUTO_FILE_EXCLUDE (`#386 `__) @@ -125,9 +127,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Abrar Rahman Protyasha, Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_core `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_core `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * ament_cmake_uninstall_target: Correct location of install_manifest.txt (`#432 `__) * Use file(GENERATE OUTPUT) to create dsv files (`#416 `__) Using file(WRITE) and file(APPEND) causes the modification stamp of the file to be changed each time CMake configures, resluting in an 'Installing' message rather than an 'Up-to-date' message even though the file content is identical. Using file(GENERATE OUTPUT) updates the timestamp of the file only if the content changes. @@ -139,9 +141,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Kenji Brameld, Michael Orlov, Scott K Logan, Shane Loretz, Silvio Traversaro, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_cppcheck `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_cppcheck `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#421 `__) * [ament_lint_auto] General file exclusion with AMENT_LINT_AUTO_FILE_EXCLUDE (`#386 `__) @@ -149,9 +151,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Abrar Rahman Protyasha, Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_cpplint `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_cpplint `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#421 `__) * [ament_lint_auto] General file exclusion with AMENT_LINT_AUTO_FILE_EXCLUDE (`#386 `__) @@ -159,57 +161,57 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Abrar Rahman Protyasha, Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_export_definitions `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_export_definitions `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#411 `__) * Update maintainers to Michael Jeronimo * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_export_dependencies `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_export_dependencies `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#411 `__) * Update maintainers to Michael Jeronimo * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_export_include_directories `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_export_include_directories `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#411 `__) * Update maintainers to Michael Jeronimo * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_export_interfaces `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_export_interfaces `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#411 `__) * Update maintainers to Michael Jeronimo * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_export_libraries `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_export_libraries `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#411 `__) * Update maintainers to Michael Jeronimo * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_export_link_flags `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_export_link_flags `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#411 `__) * Update maintainers to Michael Jeronimo * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_export_targets `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_export_targets `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#411 `__) * Update maintainers to Michael Jeronimo * Support new target export template introduced with CMake 3.24 (`#395 `__) @@ -217,9 +219,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Timo Röhling -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_flake8 `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_flake8 `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Add flake8 linter ignore support (`#424 `__) * [rolling] Update maintainers - 2022-11-07 (`#421 `__) @@ -227,114 +229,114 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Abrar Rahman Protyasha, Audrow Nash, RFRIEDM-Trimble, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_gen_version_h `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_gen_version_h `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Changed version gte macro to make it MSVC compatible. Fix `#433 `__ (`#434 `__) * [rolling] Update maintainers - 2022-11-07 (`#411 `__) * Update maintainers to Michael Jeronimo * Contributors: Audrow Nash, iquarobotics -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_gmock `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_gmock `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Fix compiler warnings related to gtest/gmock (`#408 `__) * Suppress compiler warnings when building gmock definition of implicit copy constructor ... is deprecated because it has a user-declared copy assignment operator [-Wdeprecated-copy] * Declare gtest/gmock include dirs as SYSTEM PRIVATE for test targets * [rolling] Update maintainers - 2022-11-07 (`#411 `__) * Update maintainers to Michael Jeronimo * Contributors: Audrow Nash, Robert Haschke -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_google_benchmark `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_google_benchmark `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#411 `__) * Update maintainers to Michael Jeronimo * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_gtest `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_gtest `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Fix compiler warnings related to gtest/gmock (`#408 `__) * Suppress compiler warnings when building gmock definition of implicit copy constructor ... is deprecated because it has a user-declared copy assignment operator [-Wdeprecated-copy] * Declare gtest/gmock include dirs as SYSTEM PRIVATE for test targets * [rolling] Update maintainers - 2022-11-07 (`#411 `__) * Update maintainers to Michael Jeronimo * Contributors: Audrow Nash, Robert Haschke -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_include_directories `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_include_directories `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#411 `__) * Update maintainers to Michael Jeronimo * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_libraries `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_libraries `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#411 `__) * Update maintainers to Michael Jeronimo * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_lint_cmake `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_lint_cmake `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#421 `__) * Update maintainers (`#379 `__) * Contributors: Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_mypy `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_mypy `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#421 `__) * Update maintainers (`#379 `__) * Contributors: Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_pclint `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_pclint `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#421 `__) * Update maintainers (`#379 `__) * Contributors: Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_pep257 `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_pep257 `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#421 `__) * Update maintainers (`#379 `__) * Contributors: Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_pycodestyle `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_pycodestyle `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#421 `__) * Update maintainers (`#379 `__) * Contributors: Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_pyflakes `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_pyflakes `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#421 `__) * Update maintainers (`#379 `__) * Contributors: Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_pytest `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_pytest `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Fix test skipping logic for missing pytest module (`#441 `__) * Add missing buildtool_depend on python3-pytest (`#440 `__) @@ -346,9 +348,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Christophe Bedard, El Jawad Alaa, Jacob Perron, Scott K Logan -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_python `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_python `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Support Debian-specific install dir for ament_cmake_python (`#431 `__) * [rolling] Update maintainers - 2022-11-07 (`#411 `__) * Update maintainers to Michael Jeronimo @@ -356,35 +358,35 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Shane Loretz, Timo Röhling -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_ros `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_ros `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#16 `__) * Update maintainers (`#15 `__) * Contributors: Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_target_dependencies `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_target_dependencies `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#411 `__) * Update maintainers to Michael Jeronimo * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_test `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_test `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * use the error handler replace to allow non-utf8 to be decoded (`#381 `__) * [rolling] Update maintainers - 2022-11-07 (`#411 `__) * Update maintainers to Michael Jeronimo * Contributors: Audrow Nash, El Jawad Alaa -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_uncrustify `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_uncrustify `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#421 `__) * [ament_lint_auto] General file exclusion with AMENT_LINT_AUTO_FILE_EXCLUDE (`#386 `__) @@ -392,35 +394,35 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Abrar Rahman Protyasha, Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_vendor_package `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_vendor_package `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Fix the version number of ament_cmake_vendor_package. * Add ament_cmake_vendor_package package (`#429 `__) * Contributors: Chris Lalancette, Scott K Logan -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_version `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_version `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#411 `__) * Update maintainers to Michael Jeronimo * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cmake_xmllint `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cmake_xmllint `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#421 `__) * Update maintainers (`#379 `__) * Contributors: Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_copyright `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_copyright `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#421 `__) * Support for matching license header within multiline comment block (`#361 `__) @@ -430,18 +432,18 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Will, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cppcheck `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cppcheck `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#421 `__) * Update maintainers (`#379 `__) * Contributors: Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_cpplint `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_cpplint `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#421 `__) * [ament_cpplint] Process errors without linenums (`#385 `__) @@ -450,9 +452,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Abrar Rahman Protyasha, Audrow Nash, Jacob Perron, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_flake8 `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_flake8 `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#421 `__) * Fix exclude regression (`#387 `__) @@ -460,34 +462,34 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_index_cpp `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_index_cpp `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#89 `__) * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_index_python `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_index_python `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#89 `__) * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_lint `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_lint `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#421 `__) * Update maintainers (`#379 `__) * Contributors: Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_lint_auto `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_lint_auto `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Add flake8 linter ignore support (`#424 `__) * [rolling] Update maintainers - 2022-11-07 (`#421 `__) @@ -496,36 +498,36 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Abrar Rahman Protyasha, Audrow Nash, RFRIEDM-Trimble, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_lint_cmake `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_lint_cmake `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#421 `__) * Update maintainers (`#379 `__) * Contributors: Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_lint_common `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_lint_common `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#421 `__) * Update maintainers (`#379 `__) * Contributors: Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_mypy `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_mypy `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#421 `__) * Update maintainers (`#379 `__) * Contributors: Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_package `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_package `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Add support for comment lines in dsv files (`#139 `__) * [rolling] Update maintainers - 2022-11-07 (`#138 `__) @@ -534,18 +536,18 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Scott K Logan, Shane Loretz -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_pclint `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_pclint `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#421 `__) * Update maintainers (`#379 `__) * Contributors: Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_pep257 `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_pep257 `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * updating ref to pep257 docs (`#433 `__) * Added underscore to ignore new pydocstyle item (`#428 `__) @@ -555,9 +557,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Christian Henkel, Cristóbal Arroyo, Mirco Colosi (CR/AAS3), methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_pycodestyle `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_pycodestyle `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * ament_pycodestyle - fix crash caused by reporting on ignored errors (`#435 `__) * [rolling] Update maintainers - 2022-11-07 (`#421 `__) @@ -565,36 +567,36 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Shane Loretz, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_pyflakes `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_pyflakes `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#421 `__) * Update maintainers (`#379 `__) * Contributors: Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_uncrustify `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_uncrustify `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#421 `__) * Update maintainers (`#379 `__) * Contributors: Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ament_xmllint `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ament_xmllint `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#421 `__) * Update maintainers (`#379 `__) * Contributors: Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`builtin_interfaces `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`builtin_interfaces `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update common_interfaces to C++17. (`#215 `__) (`#151 `__) * [rolling] Update maintainers - 2022-11-07 (`#150 `__) @@ -603,9 +605,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Jacob Perron, Tully Foote -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`camera_calibration_parsers `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`camera_calibration_parsers `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update image_common to C++17. (`#267 `__) * Add alias library targets for all libraries (`#259 `__) @@ -613,9 +615,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: AndreasR30, Chris Lalancette, RFRIEDM-Trimble -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`camera_info_manager `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`camera_info_manager `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update image_common to C++17. (`#267 `__) * Add alias library targets for all libraries (`#259 `__) @@ -623,9 +625,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Chris Lalancette, RFRIEDM-Trimble, Ramon Wijnands -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`class_loader `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`class_loader `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * make sanitizer happy (`#205 `__) * [rolling] Update maintainers - 2022-11-07 (`#206 `__) @@ -636,18 +638,19 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chen Lihui, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`common_interfaces `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`common_interfaces `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#210 `__) * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`composition `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`composition `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Change all ROS2 -> ROS 2. (`#610 `__) * update launch file name format to match documentation (`#588 `__) * Added README.md for composition (`#598 `__) * Update the demos to C++17. (`#594 `__) @@ -656,19 +659,21 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chen Lihui, Chris Lalancette, Gary Bey, Patrick Wspanialy -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`composition_interfaces `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`composition_interfaces `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update common_interfaces to C++17. (`#215 `__) (`#151 `__) * [rolling] Update maintainers - 2022-11-07 (`#150 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`demo_nodes_cpp `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`demo_nodes_cpp `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Change all ROS2 -> ROS 2. (`#610 `__) +* Add matched event demo for rclcpp and rclpy (`#607 `__) * Fix the set_parameters_callback example program. (`#608 `__) * [demo_nodes_cpp] Add YAML launch demos for topics (`#605 `__) * update launch file name format to match documentation (`#588 `__) @@ -679,13 +684,14 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Demo for pre and post set parameter callback support (`#565 `__) * local parameter callback support * counter starts from 1, not 2. (`#562 `__) * add a demo of content filter listener (`#557 `__) -* Contributors: Audrow Nash, Chen Lihui, Chris Lalancette, Damien LaRocque, Deepanshu Bansal, Gary Bey, Patrick Wspanialy, Tomoya Fujita +* Contributors: Audrow Nash, Barry Xu, Chen Lihui, Chris Lalancette, Damien LaRocque, Deepanshu Bansal, Gary Bey, Patrick Wspanialy, Tomoya Fujita -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`demo_nodes_cpp_native `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`demo_nodes_cpp_native `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Change all ROS2 -> ROS 2. (`#610 `__) * Added README.md for demo_cpp_nodes_native (`#597 `__) * Update the demos to C++17. (`#594 `__) * [rolling] Update maintainers - 2022-11-07 (`#589 `__) @@ -693,10 +699,12 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Gary Bey, Shane Loretz -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`demo_nodes_py `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`demo_nodes_py `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Change all ROS2 -> ROS 2. (`#610 `__) +* Add matched event demo for rclcpp and rclpy (`#607 `__) * Enable document generation using rosdoc2 (`#606 `__) * Service introspection (`#602 `__) * Added README.md for demo_nodes_py (`#600 `__) @@ -704,59 +712,61 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Demo for pre and post set parameter callback support (`#565 `__) * Add demo for rclpy parameter client (`#566 `__) * Exit with code 0 if ExternalShutdownException is raised (`#581 `__) -* Contributors: Audrow Nash, Brian, Chris Lalancette, Deepanshu Bansal, Gary Bey, Jacob Perron, Yadu +* Contributors: Audrow Nash, Barry Xu, Brian, Chris Lalancette, Deepanshu Bansal, Gary Bey, Jacob Perron, Yadu -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`diagnostic_msgs `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`diagnostic_msgs `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update common_interfaces to C++17. (`#215 `__) * [rolling] Update maintainers - 2022-11-07 (`#210 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`domain_coordinator `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`domain_coordinator `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#16 `__) * Update maintainers (`#15 `__) * Contributors: Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`dummy_map_server `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`dummy_map_server `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Change all ROS2 -> ROS 2. (`#610 `__) * Update the demos to C++17. (`#594 `__) * [rolling] Update maintainers - 2022-11-07 (`#589 `__) * Added README.md for dummy_map_server (`#572 `__) * Contributors: Audrow Nash, Chris Lalancette, Gary Bey -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`dummy_robot_bringup `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`dummy_robot_bringup `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * update launch file name format to match documentation (`#588 `__) * [rolling] Update maintainers - 2022-11-07 (`#589 `__) * Contributors: Audrow Nash, Patrick Wspanialy -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`dummy_sensors `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`dummy_sensors `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Fix unstable LaserScan status for rviz2 (`#616 `__) * Added README.md for dummy_sensors (`#573 `__) * Update the demos to C++17. (`#594 `__) * [rolling] Update maintainers - 2022-11-07 (`#589 `__) -* Contributors: Audrow Nash, Chris Lalancette, Gary Bey +* Contributors: Audrow Nash, Chen Lihui, Chris Lalancette, Gary Bey -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`eigen3_cmake_module `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`eigen3_cmake_module `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#6 `__) * Mirror rolling to master @@ -764,9 +774,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`example_interfaces `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`example_interfaces `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#17 `__) * Remove action_msgs dependency (`#16 `__) @@ -774,81 +784,81 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Jacob Perron -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`examples_rclcpp_async_client `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`examples_rclcpp_async_client `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update the examples to C++17. (`#353 `__) * [rolling] Update maintainers - 2022-11-07 (`#352 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`examples_rclcpp_cbg_executor `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`examples_rclcpp_cbg_executor `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update the examples to C++17. (`#353 `__) * [rolling] Update maintainers - 2022-11-07 (`#352 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`examples_rclcpp_minimal_action_client `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`examples_rclcpp_minimal_action_client `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update the examples to C++17. (`#353 `__) * [rolling] Update maintainers - 2022-11-07 (`#352 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`examples_rclcpp_minimal_action_server `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`examples_rclcpp_minimal_action_server `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update the examples to C++17. (`#353 `__) * [rolling] Update maintainers - 2022-11-07 (`#352 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`examples_rclcpp_minimal_client `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`examples_rclcpp_minimal_client `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update the examples to C++17. (`#353 `__) * [rolling] Update maintainers - 2022-11-07 (`#352 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`examples_rclcpp_minimal_composition `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`examples_rclcpp_minimal_composition `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update the examples to C++17. (`#353 `__) * [rolling] Update maintainers - 2022-11-07 (`#352 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`examples_rclcpp_minimal_publisher `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`examples_rclcpp_minimal_publisher `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update the examples to C++17. (`#353 `__) * [rolling] Update maintainers - 2022-11-07 (`#352 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`examples_rclcpp_minimal_service `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`examples_rclcpp_minimal_service `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update the examples to C++17. (`#353 `__) * [rolling] Update maintainers - 2022-11-07 (`#352 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`examples_rclcpp_minimal_subscriber `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`examples_rclcpp_minimal_subscriber `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update the examples to C++17. (`#353 `__) * [rolling] Update maintainers - 2022-11-07 (`#352 `__) @@ -856,27 +866,27 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Tomoya Fujita -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`examples_rclcpp_minimal_timer `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`examples_rclcpp_minimal_timer `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update the examples to C++17. (`#353 `__) * [rolling] Update maintainers - 2022-11-07 (`#352 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`examples_rclcpp_multithreaded_executor `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`examples_rclcpp_multithreaded_executor `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update the examples to C++17. (`#353 `__) * [rolling] Update maintainers - 2022-11-07 (`#352 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`examples_rclcpp_wait_set `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`examples_rclcpp_wait_set `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update the examples to C++17. (`#353 `__) * [rolling] Update maintainers - 2022-11-07 (`#352 `__) @@ -884,91 +894,91 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, mergify[bot] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`examples_rclpy_executors `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`examples_rclpy_executors `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#352 `__) * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`examples_rclpy_guard_conditions `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`examples_rclpy_guard_conditions `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#352 `__) * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`examples_rclpy_minimal_action_client `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`examples_rclpy_minimal_action_client `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Enable document generation using rosdoc2 for ament_python pkgs (`#357 `__) * Add missing action_msgs dep * Add exec_deps for launch_testing_examples * [rolling] Update maintainers - 2022-11-07 (`#352 `__) * Contributors: Audrow Nash, Yadu -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`examples_rclpy_minimal_action_server `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`examples_rclpy_minimal_action_server `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#352 `__) * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`examples_rclpy_minimal_client `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`examples_rclpy_minimal_client `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#352 `__) * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`examples_rclpy_minimal_publisher `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`examples_rclpy_minimal_publisher `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#352 `__) * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`examples_rclpy_minimal_service `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`examples_rclpy_minimal_service `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#352 `__) * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`examples_rclpy_minimal_subscriber `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`examples_rclpy_minimal_subscriber `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#352 `__) * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`examples_rclpy_pointcloud_publisher `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`examples_rclpy_pointcloud_publisher `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#352 `__) * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`examples_tf2_py `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`examples_tf2_py `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Enable document generation using rosdoc2 for ament_python pkgs (`#587 `__) * Update maintainers (`#560 `__) * Contributors: Audrow Nash, Yadu -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`fastrtps_cmake_module `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`fastrtps_cmake_module `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#93 `__) * Contributors: Audrow Nash @@ -978,30 +988,31 @@ This page is a list of the complete changes in all ROS 2 core packages since the `foonathan_memory_vendor `__ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Added support for QNX 7.1 build (#65) * Update upstream to release 0.7-3 (#62)(#63) * Fix CMake minimum required version (#60) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`geometry2 `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`geometry2 `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update maintainers (`#560 `__) * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`geometry_msgs `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`geometry_msgs `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update common_interfaces to C++17. (`#215 `__) * [rolling] Update maintainers - 2022-11-07 (`#210 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`google_benchmark_vendor `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`google_benchmark_vendor `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Actually update to 1.6.1. (`#25 `__) We claimed we were, but in fact we were pinned to the 1.5.3 git hash. * Remove set but unused variable (`#24 `__) Clang checks -Wunused-but-set-variable. This fails the build with -Werror also enabled. @@ -1010,18 +1021,26 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Michael Carroll -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ignition_cmake2_vendor `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ignition_cmake2_vendor `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Set target version to 2.14.0 (`#5 `__) * Mirror rolling to main * Contributors: Audrow Nash, Yadu -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`image_tools `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ignition_math6_vendor `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +* Forward CMAKE_PREFIX_PATH when building vendor package (`#8 `__) +* Contributors: Scott K Logan + + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`image_tools `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Added README.md for image_tools - [Clean] (`#596 `__) * Update the demos to C++17. (`#594 `__) @@ -1029,9 +1048,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Gary Bey -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`image_transport `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`image_transport `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update image_common to C++17. (`#267 `__) * Add alias library targets for all libraries (`#259 `__) @@ -1042,9 +1061,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Brian, Chris Lalancette, Daisuke Nishimatsu, Kenji Brameld, RFRIEDM-Trimble -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`interactive_markers `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`interactive_markers `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update interactive_markers to C++17. (`#99 `__) * Update maintainers (`#98 `__) @@ -1053,19 +1072,21 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Dharini Dutia -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`intra_process_demo `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`intra_process_demo `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Fix executable name in README (`#619 `__) +* Change all ROS2 -> ROS 2. (`#610 `__) * Added README.md for intra_process_demo (`#595 `__) * Update the demos to C++17. (`#594 `__) * [rolling] Update maintainers - 2022-11-07 (`#589 `__) -* Contributors: Audrow Nash, Chris Lalancette, Gary Bey +* Contributors: Audrow Nash, Chris Lalancette, Gary Bey, Yadunund -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`kdl_parser `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`kdl_parser `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Switch some tests to use unique pointers instead of raw pointers. (`#74 `__) * log link children as DEBUG instead of INFO (`#71 `__) @@ -1076,17 +1097,17 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Chris Lalancette, Joseph Schornak, Scott K Logan, yuraSomatic -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`keyboard_handler `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`keyboard_handler `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Force exit from main thread on signal handling in ``keyboard_handler`` (`#23 `__) * Contributors: Michael Orlov -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`laser_geometry `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`laser_geometry `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update laser_geometry to C++17. (`#90 `__) * Update Maintainers (`#88 `__) @@ -1094,9 +1115,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`launch `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`launch `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Document LaunchService.{run,run_async}() return value (`#702 `__) * [rosdoc2] Fix document generation on buildfarm (`#701 `__) @@ -1124,9 +1145,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Aditya Pande, Alejandro Hernández Cordero, Audrow Nash, Blake Anderson, Chris Lalancette, Christophe Bedard, Hervé Audren, Jacob Perron, Matthew Elwin, Michael Jeronimo, Nikolai Morin, Welte, William Woodall, Yadu, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`launch_pytest `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`launch_pytest `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Fixed typos (`#692 `__) * Drop unused data_files entry for example_processes (`#680 `__) @@ -1135,9 +1156,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Alejandro Hernández Cordero, Audrow Nash, Geoffrey Biggs, Scott K Logan -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`launch_ros `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`launch_ros `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Use SomeEntitiesType for type checking. (`#358 `__) * Fix normalize_parameters_dict for multiple nodes in the same namespace (`#347 `__) @@ -1154,9 +1175,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Aditya Pande, Alexey Merzlyakov, Audrow Nash, Chris Lalancette, Christoph Hellmann Santos, Daisuke Nishimatsu, Felipe Gomes de Melo, Kenji Miyake, William Woodall, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`launch_testing `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`launch_testing `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Improve type checking (`#679 `__) * Fixed typos (`#692 `__) @@ -1169,17 +1190,17 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Alejandro Hernández Cordero, Audrow Nash, Chris Lalancette, Deepanshu Bansal, Hervé Audren, Kenji Brameld, Nikolai Morin, Scott K Logan -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`launch_testing_ament_cmake `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`launch_testing_ament_cmake `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#671 `__) * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`launch_testing_examples `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`launch_testing_examples `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Enable document generation using rosdoc2 for ament_python pkgs (`#357 `__) * increase the timeout for window platform to avoid flaky test (`#355 `__) @@ -1188,9 +1209,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chen Lihui, Chris Lalancette, Yadu -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`launch_testing_ros `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`launch_testing_ros `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Increase the timeouts in wait_for_topic_launch_test. (`#360 `__) * Enable document generation using rosdoc2 (`#359 `__) @@ -1201,9 +1222,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Giorgio Pintaudi, Keng12, Scott K Logan, Yadu -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`launch_xml `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`launch_xml `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Fixed typos (`#692 `__) * Expose emulate_tty to xml and yaml launch (`#669 `__) @@ -1212,9 +1233,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Aditya Pande, Alejandro Hernández Cordero, Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`launch_yaml `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`launch_yaml `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Expose emulate_tty to xml and yaml launch (`#669 `__) * Expose sigterm_timeout and sigkill_timeout to xml frontend (`#667 `__) @@ -1222,9 +1243,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Aditya Pande, Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`libcurl_vendor `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`libcurl_vendor `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * merge libcurl_vendor build instructions (`#81 `__) * Sets CMP0135 policy behavior to NEW (`#79 `__) @@ -1232,9 +1253,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Cristóbal Arroyo, Crola1702, schrodinbug -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`libstatistics_collector `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`libstatistics_collector `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Bump hmarr/auto-approve-action from 3.2.0 to 3.2.1 * Mark benchmark _ as unused. (`#158 `__) @@ -1250,9 +1271,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Scott Mende, dependabot[bot] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`libyaml_vendor `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`libyaml_vendor `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Fix system package dependency (`#54 `__) * Update libyaml_vendor to C++17. (`#55 `__) @@ -1264,9 +1285,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Lou Amadio, Scott K Logan, Silvio Traversaro -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`lifecycle `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`lifecycle `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * update launch file name format to match documentation (`#588 `__) * Update the demos to C++17. (`#594 `__) @@ -1274,9 +1295,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Patrick Wspanialy -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`lifecycle_msgs `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`lifecycle_msgs `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update common_interfaces to C++17. (`#215 `__) (`#151 `__) * [rolling] Update maintainers - 2022-11-07 (`#150 `__) @@ -1284,9 +1305,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, G.A. vd. Hoorn -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`lifecycle_py `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`lifecycle_py `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Enable document generation using rosdoc2 (`#606 `__) * update launch file name format to match documentation (`#588 `__) @@ -1296,9 +1317,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Patrick Wspanialy, Yadu -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`logging_demo `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`logging_demo `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update the demos to C++17. (`#594 `__) * [rolling] Update maintainers - 2022-11-07 (`#589 `__) @@ -1306,17 +1327,17 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Jacob Perron -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`map_msgs `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`map_msgs `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update maintainers * Contributors: Audrow Nash, Steve Macenski -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`mcap_vendor `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`mcap_vendor `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * mcap_vendor: add readme with versioning procedure (`#1230 `__) * Add Michael Orlov as maintainer in rosbag2 packages (`#1215 `__) @@ -1341,9 +1362,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Chris Lalancette, Cristóbal Arroyo, Daisuke Nishimatsu, Emerson Knapp, Jacob Bandes-Storch, James Smith, Michael Orlov, Scott K Logan, james-rms -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`message_filters `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`message_filters `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update message_filters to C++17. (`#88 `__) * Fix cache.h std::placeholder namespace (`#87 `__) @@ -1361,27 +1382,27 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Carlos Andrés Álvarez Restrepo, Chris Lalancette, Haoru Xue, Ivan Santiago Paunovic, Martin Ganeff, Steve Macenski, andermi -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`mimick_vendor `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`mimick_vendor `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * [rolling] Update maintainers - 2022-11-07 (`#29 `__) * Mirror rolling to master * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`nav_msgs `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`nav_msgs `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update common_interfaces to C++17. (`#215 `__) * [rolling] Update maintainers - 2022-11-07 (`#210 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`orocos_kdl_vendor `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`orocos_kdl_vendor `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Make sure to quote orocos variables when setting targets. (`#12 `__) * Ensure orocos-kdl is available as a target (`#10 `__) @@ -1398,9 +1419,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Scott K Logan -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`osrf_testing_tools_cpp `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`osrf_testing_tools_cpp `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Fix mpark/variant conditional for MSVC (`#77 `__) * Changing C++ Compile Version (`#76 `__) @@ -1411,28 +1432,29 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Cristóbal Arroyo, Lucas Wendland, Scott K Logan -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`pendulum_control `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`pendulum_control `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update the demos to C++17. (`#594 `__) * [rolling] Update maintainers - 2022-11-07 (`#589 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`pendulum_msgs `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`pendulum_msgs `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Change all ROS2 -> ROS 2. (`#610 `__) * A couple more upgrades to C++17. (`#609 `__) * Added README.md for pendulum_msgs. (`#577 `__) * [rolling] Update maintainers - 2022-11-07 (`#589 `__) * Contributors: Audrow Nash, Chris Lalancette, Gary Bey -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`performance_test_fixture `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`performance_test_fixture `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Resolve use-after-free compiler warnings (`#24 `__) * Update performance_test_fixture to C++17. (`#21 `__) @@ -1442,17 +1464,17 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Scott K Logan -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`pluginlib `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`pluginlib `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update maintainers * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`pybind11_vendor `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`pybind11_vendor `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Add a modified patch from upstream to support Python 3.11 (`#22 `__) * Add missing buildtool dependency on git (`#19 `__) @@ -1465,27 +1487,27 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Scott K Logan, Steven! Ragnarök, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`python_cmake_module `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`python_cmake_module `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#13 `__) * Mirror rolling to master * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`python_orocos_kdl_vendor `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`python_orocos_kdl_vendor `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Fixes policy CMP0135 warning for CMake >= 3.24 (`#16 `__) * Workaround pybind11 CMake error (`#9 `__) * Contributors: Cristóbal Arroyo, Jacob Perron -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`python_qt_binding `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`python_qt_binding `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Fix to allow ninja to use make for generators (`#123 `__) * Fix flake8 linter regression (`#125 `__) @@ -1495,18 +1517,18 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Christoph Hellmann Santos, Cristóbal Arroyo, Michael Carroll, Rhys Mainwaring, Scott K Logan -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`qt_dotgraph `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`qt_dotgraph `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Add in LICENSE file * Cast drawLine input arguments to int (`#264 `__) (`#265 `__) * Contributors: Chris Lalancette, mergify[bot] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`qt_gui `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`qt_gui `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Add in LICENSE file * Fix flake8 errors introduced by the previous commit. (`#262 `__) @@ -1514,63 +1536,69 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Chris Lalancette, Michael Jeronimo -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`qt_gui_app `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`qt_gui_app `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Add in LICENSE file * Contributors: Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`qt_gui_core `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`qt_gui_core `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Add in LICENSE file * Contributors: Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`qt_gui_cpp `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`qt_gui_cpp `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Fix ClassLoader warning by unloading plugin providers. (`#275 `__) +* Chen Lihui * fix shiboken error (`#267 `__) * Conditionally run import tests when generators are built (`#269 `__) * Add in LICENSE file * Contributors: Chris Lalancette, Christoph Hellmann Santos, Michael Carroll, Rhys Mainwaring, Scott K Logan -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`qt_gui_py_common `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`qt_gui_py_common `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Add in LICENSE file * Contributors: Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`quality_of_service_demo_cpp `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`quality_of_service_demo_cpp `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update the demos to C++17. (`#594 `__) * [rolling] Update maintainers - 2022-11-07 (`#589 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`quality_of_service_demo_py `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`quality_of_service_demo_py `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Use non-deprecated rclpy import. (`#617 `__) +* Change all ROS2 -> ROS 2. (`#610 `__) * Enable document generation using rosdoc2 (`#606 `__) * [rolling] Update maintainers - 2022-11-07 (`#589 `__) * Exit with code 0 if ExternalShutdownException is raised (`#581 `__) -* Contributors: Audrow Nash, Jacob Perron, Yadu +* Contributors: Audrow Nash, Chris Lalancette, Jacob Perron, Yadu -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rcl `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rcl `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Honor ROS_LOCALHOST_ONLY if enabled. (`#1071 `__) +* fix flaky test (`#1063 `__) * Add enable_type_description_service node option - API only (`#1060 `__) * Dynamic Subscription (BONUS: Allocators): rcl (`#1057 `__) * Runtime Interface Reflection: rcl (`#1025 `__) @@ -1604,9 +1632,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Barry Xu, Brian, Chen Lihui, Chris Lalancette, Emerson Knapp, Geoffrey Biggs, Shane Loretz, Tomoya Fujita, mauropasse, methylDragon, 정찬희 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rcl_action `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rcl_action `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * doc update, ROS message accessibility depends on RMW implementation. (`#1043 `__) * Update rcl to C++17. (`#1031 `__) @@ -1615,45 +1643,46 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Tomoya Fujita -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rcl_interfaces `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rcl_interfaces `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Add interfaces for logging service. (`#154 `__) * Update common_interfaces to C++17. (`#215 `__) (`#151 `__) * [rolling] Update maintainers - 2022-11-07 (`#150 `__) -* Contributors: Audrow Nash, Chris Lalancette +* Contributors: Audrow Nash, Chris Lalancette, Lei Liu -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rcl_lifecycle `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rcl_lifecycle `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update rcl to C++17. (`#1031 `__) * [rolling] Update maintainers - 2022-11-07 (`#1017 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rcl_logging_interface `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rcl_logging_interface `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update rcl_logging to C++17. (`#98 `__) * Updated maintainers - 2022-11-07 (`#96 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rcl_logging_noop `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rcl_logging_noop `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update rcl_logging to C++17. (`#98 `__) * Updated maintainers - 2022-11-07 (`#96 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rcl_logging_spdlog `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rcl_logging_spdlog `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Mark the benchmark _ as unused. (`#99 `__) * Update rcl_logging to C++17. (`#98 `__) @@ -1664,9 +1693,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Shane Loretz, William Woodall -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rcl_yaml_param_parser `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rcl_yaml_param_parser `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Fix some warnings from clang. (`#1042 `__) * Cleanup the dependencies in rcl_yaml_param_parser. (`#1014 `__) @@ -1676,10 +1705,32 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Barry Xu, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rclcpp `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rclcpp `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Fix delivered message kind (`#2175 `__) (`#2178 `__) +* Add support for logging service. (`#2122 `__) +* Picking ABI-incompatible executor changes (`#2170 `__) +* add events-executor and timers-manager in rclcpp (`#2155 `__) +* Create common structures for executors to use (`#2143 `__) +* Implement deliver message kind (`#2168 `__) +* applied tracepoints for ring_buffer (`#2091 `__) +* Dynamic Subscription (REP-2011 Subset): Stubs for rclcpp (`#2165 `__) +* Add type_hash to cpp TopicEndpointInfo (`#2137 `__) +* Trigger the intraprocess guard condition with data (`#2164 `__) +* Minor grammar fix (`#2149 `__) +* Fix unnecessary allocations in executor.cpp (`#2135 `__) +* add Logger::get_effective_level(). (`#2141 `__) +* Remove deprecated header (`#2139 `__) +* Implement matched event (`#2105 `__) +* use allocator via init_options argument. (`#2129 `__) +* Fixes to silence some clang warnings. (`#2127 `__) +* Documentation improvements on the executor (`#2125 `__) +* Avoid losing waitable handles while using MultiThreadedExecutor (`#2109 `__) +* Hook up the incompatible type event inside of rclcpp (`#2069 `__) +* Update all rclcpp packages to C++17. (`#2121 `__) +* Fix clang warning: bugprone-use-after-move (`#2116 `__) * Fix memory leak in tracetools::get_symbol() (`#2104 `__) * Service introspection (`#1985 `__) * Allow publishing borrowed messages with intra-process enabled (`#2108 `__) @@ -1745,37 +1796,47 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Update get_parameter_from_event to follow the function description (`#1922 `__) * Add 'best available' QoS enum values and methods (`#1920 `__) * use reinterpret_cast for function pointer conversion. (`#1919 `__) -* Contributors: Alberto Soragna, Alexander Hans, Alexis Paques, Andrew Symington, Audrow Nash, Barry Xu, Brian, Chen Lihui, Chris Lalancette, Christophe Bedard, Cristóbal Arroyo, Daniel Reuter, Deepanshu Bansal, Hubert Liberacki, Ivan Santiago Paunovic, Jacob Perron, Jeffery Hsu, Jochen Sprickerhof, Lei Liu, Mateusz Szczygielski, Miguel Company, Nikolai Morin, Shane Loretz, Silvio Traversaro, Tomoya Fujita, Tyler Weaver, William Woodall, andrei, mauropasse, methylDragon, schrodinbug, uupks +* Contributors: Alberto Soragna, Alexander Hans, Alexis Paques, Andrew Symington, Audrow Nash, Barry Xu, Brian, Chen Lihui, Chris Lalancette, Christophe Bedard, Christopher Wecht, Cristóbal Arroyo, Daniel Reuter, Deepanshu Bansal, Emerson Knapp, Hubert Liberacki, Ivan Santiago Paunovic, Jacob Perron, Jeffery Hsu, Jochen Sprickerhof, Lei Liu, Mateusz Szczygielski, Michael Carroll, Miguel Company, Nikolai Morin, Shane Loretz, Silvio Traversaro, Tomoya Fujita, Tyler Weaver, William Woodall, Yadu, andrei, mauropasse, mergify[bot], methylDragon, schrodinbug, uupks, ymski -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rclcpp_action `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rclcpp_action `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* extract the result response before the callback is issued. (`#2132 `__) +* Update all rclcpp packages to C++17. (`#2121 `__) +* Fix the GoalUUID to_string representation (`#1999 `__) * Explicitly set callback type (`#2059 `__) * Update maintainers (`#2043 `__) * Do not clear entities callbacks on destruction (`#2002 `__) * Revert "Introduce executors new spin_for method, replace spin_until_future_complete with spin_until_complete. (`#1821 `__) (`#1874 `__)" (`#1956 `__) * Introduce executors new spin_for method, replace spin_until_future_complete with spin_until_complete. (`#1821 `__) (`#1874 `__) -* Contributors: Audrow Nash, Hubert Liberacki, William Woodall, mauropasse +* Contributors: Audrow Nash, Chris Lalancette, Hubert Liberacki, Nathan Wiebe Neufeldt, Tomoya Fujita, William Woodall, mauropasse -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rclcpp_components `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rclcpp_components `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Update all rclcpp packages to C++17. (`#2121 `__) * Improve component_manager_isolated shutdown (`#2085 `__) * Update maintainers (`#2043 `__) * use unique ptr and remove unuseful container (`#2013 `__) * Revert "Introduce executors new spin_for method, replace spin_until_future_complete with spin_until_complete. (`#1821 `__) (`#1874 `__)" (`#1956 `__) * Introduce executors new spin_for method, replace spin_until_future_complete with spin_until_complete. (`#1821 `__) (`#1874 `__) -* Contributors: Audrow Nash, Chen Lihui, Hubert Liberacki, Michael Carroll, William Woodall +* Contributors: Audrow Nash, Chen Lihui, Chris Lalancette, Hubert Liberacki, Michael Carroll, William Woodall -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rclcpp_lifecycle `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rclcpp_lifecycle `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Add support for logging service. (`#2122 `__) +* Support publishing loaned messages in LifecyclePublisher (`#2159 `__) +* Fixes to silence some clang warnings. (`#2127 `__) +* Update all rclcpp packages to C++17. (`#2121 `__) +* Use the correct macro for LifecycleNode::get_fully_qualified_name (`#2117 `__) +* add get_fully_qualified_name to rclcpp_lifecycle (`#2115 `__) * Implement Unified Node Interface (NodeInterfaces class) (`#2041 `__) * Add clock type to node_options (`#1982 `__) * Update maintainers (`#2043 `__) @@ -1790,13 +1851,18 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Support pre-set and post-set parameter callbacks in addition to on-set-parameter-callback. (`#1947 `__) * Make create_service accept rclcpp::QoS (`#1969 `__) * Make create_client accept rclcpp::QoS (`#1964 `__) -* Contributors: Andrew Symington, Audrow Nash, Chris Lalancette, Deepanshu Bansal, Ivan Santiago Paunovic, Jeffery Hsu, Shane Loretz, Tomoya Fujita, methylDragon +* Contributors: Andrew Symington, Audrow Nash, Chris Lalancette, Deepanshu Bansal, Ivan Santiago Paunovic, Jeffery Hsu, Lei Liu, Michael Babenko, Shane Loretz, Steve Macenski, Tomoya Fujita, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rclpy `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rclpy `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Fix type in Node init args (`#1115 `__) (`#1122 `__) +* Logging service support (`#1102 `__) +* Use custom sourcedir for conf.py (`#1109 `__) +* ServerGoalHandle should be destroyed before removing. (`#1113 `__) +* Fix unnecessary list comprehension flake8 (`#1112 `__) * Stub type hash value line in TopicEndpointInfo string (`#1110 `__) * Support documentation generation using rosdoc2 (`#1103 `__) * Fix Time and Duration raising exception when compared to another type (`#1007 `__) @@ -1853,12 +1919,12 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Expose 'best available' QoS policies (`#928 `__) * remove feedback callback when the goal has been completed. (`#927 `__) * Allow to create a subscription with a callback that also receives the message info (`#922 `__) -* Contributors: Achille Verheye, Audrow Nash, Barry Xu, Brian, Brian Chen, Chen Lihui, Chris Lalancette, Cristóbal Arroyo, Deepanshu Bansal, Emerson Knapp, Erki Suurjaak, Felix Divo, Florian Vahl, Gonzo, GuiHome, Ivan Santiago Paunovic, Jacob Perron, Lei Liu, Lucas Wendland, Sebastian Freitag, Seulbae Kim, Shane Loretz, Steve Nogar, Takeshi Ishita, Tomoya Fujita, Tony Najjar, Yadu, Yuki Igarashi +* Contributors: Achille Verheye, Audrow Nash, Barry Xu, Brian, Brian Chen, Chen Lihui, Chris Lalancette, Cristóbal Arroyo, Deepanshu Bansal, Emerson Knapp, Erki Suurjaak, Felix Divo, Florian Vahl, Gonzo, GuiHome, Ivan Santiago Paunovic, Jacob Perron, Lei Liu, Lucas Wendland, Michael Carroll, Sebastian Freitag, Seulbae Kim, Shane Loretz, Steve Nogar, Takeshi Ishita, Tomoya Fujita, Tony Najjar, Yadu, Yuki Igarashi, mergify[bot] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rcpputils `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rcpputils `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Add missing header for strlen (`#169 `__) * issue-167 (`#172 `__) @@ -1869,9 +1935,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Artem Shumov, Audrow Nash, Sebastian Freitag, William Woodall, bijoua29 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rcutils `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rcutils `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * fix memory leak (`#423 `__) * Add convenience error handling macros (`#421 `__) @@ -1929,9 +1995,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: AIxWall, Abrar Rahman Protyasha, Audrow Nash, Chen Lihui, Chris Lalancette, Emerson Knapp, Felipe Neves, Jacob Perron, Mario Prats, Maximilian Downey Twiss, Nikolai Morin, Tomoya Fujita, William Woodall, Yakumoo, guijan, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rmw `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rmw `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Dynamic Subscription (BONUS: Allocators): rmw (`#353 `__) * Runtime Interface Reflection: rmw (`#340 `__) @@ -1957,9 +2023,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Barry Xu, Brian, Chris Lalancette, Emerson Knapp, Geoffrey Biggs, Jacob Perron, Lee, Minju, Nikolai Morin, Tomoya Fujita, William Woodall, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rmw_connextdds `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rmw_connextdds `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Dynamic Subscription (BONUS: Allocators): rmw_connextdds (`#115 `__) * Revert "Refactor serialization support to use allocators and refs" @@ -1970,9 +2036,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Brian, Chris Lalancette, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rmw_connextdds_common `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rmw_connextdds_common `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rmw_connextdds] New RMW discovery options (`#108 `__) * Call get_type_hash_func (`#113 `__) @@ -1986,9 +2052,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Andrea Sorbini, Barry Xu, Brian, Chris Lalancette, Emerson Knapp, Grey, Jose Luis Rivero, Michael Carroll, Michael Jeronimo -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rmw_connextddsmicro `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rmw_connextddsmicro `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Dynamic Subscription (BONUS: Allocators): rmw_connextdds (`#115 `__) * Add stubs for new rmw interfaces (`#111 `__) @@ -1997,9 +2063,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Brian, Chris Lalancette, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rmw_cyclonedds_cpp `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rmw_cyclonedds_cpp `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Dynamic Subscription (BONUS: Allocators): rmw_cyclonedds (`#451 `__) * Add stubs for new rmw interfaces (`#447 `__) @@ -2023,9 +2089,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Barry Xu, Brian, Chris Lalancette, Emerson Knapp, Geoffrey Biggs, Jose Luis Rivero, Shane Loretz, Tomoya Fujita, Tully Foote, Voldivh, eboasson, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rmw_dds_common `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rmw_dds_common `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Type hash in GraphCache, user_data encoding tools (`#70 `__) * Mark benchmark _ as unused. (`#71 `__) @@ -2039,9 +2105,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Emerson Knapp, Jacob Perron, hannes09, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rmw_fastrtps_cpp `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rmw_fastrtps_cpp `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Dynamic Subscription (BONUS: Allocators): rmw_fastrtps (`#687 `__) * Runtime Interface Reflection: rmw_fastrtps (`#655 `__) @@ -2065,9 +2131,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Brian, Chris Lalancette, Emerson Knapp, Geoffrey Biggs, Jacob Perron, Jose Luis Rivero, Miguel Company, Oscarchoi, Ricardo González, Tomoya Fujita, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rmw_fastrtps_dynamic_cpp `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rmw_fastrtps_dynamic_cpp `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Dynamic Subscription (BONUS: Allocators): rmw_fastrtps (`#687 `__) * Runtime Interface Reflection: rmw_fastrtps (`#655 `__) @@ -2091,9 +2157,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Brian, Chris Lalancette, Emerson Knapp, Geoffrey Biggs, Jacob Perron, Jose Luis Rivero, Miguel Company, Oscarchoi, Ricardo González, Tomoya Fujita, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rmw_fastrtps_shared_cpp `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rmw_fastrtps_shared_cpp `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Fix matched event issues (`#683 `__) * Dynamic Subscription (BONUS: Allocators): rmw_fastrtps (`#687 `__) @@ -2120,9 +2186,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Barry Xu, Brian, Chris Lalancette, Emerson Knapp, Geoffrey Biggs, Michael Carroll, Miguel Company, Oscarchoi, Ricardo González, Tomoya Fujita, mauropasse, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rmw_implementation `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rmw_implementation `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Dynamic Subscription (BONUS: Allocators): rmw_implementation (`#219 `__) * Runtime Interface Reflection: rmw_implementation (`#215 `__) @@ -2134,17 +2200,17 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Brian, Chris Lalancette, G.A. vd. Hoorn, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rmw_implementation_cmake `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rmw_implementation_cmake `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#337 `__) * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`robot_state_publisher `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`robot_state_publisher `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update robot_state_publisher to C++17. (`#204 `__) * [rolling] Update maintainers - 2022-11-07 (`#203 `__) @@ -2152,18 +2218,20 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ros2action `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ros2action `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Make all of the dependencies in pure Python packages exec_depend. (`#823 `__) * [rolling] Update maintainers - 2022-11-07 (`#776 `__) -* Contributors: Audrow Nash +* Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ros2bag `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ros2bag `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Cleanup the help text for ros2 bag record. (`#1329 `__) (`#1333 `__) * Enable document generation using rosdoc2 for ament_python pkgs (`#1260 `__) * CLI: Get storage-specific values from plugin (`#1209 `__) * Fix up some of the wording in the record help text. (`#1228 `__) @@ -2190,12 +2258,12 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Add CLI verb for burst mode of playback (`#980 `__) * Add play-for specified number of seconds functionality (`#960 `__) * Make unpublished topics unrecorded by default (`#968 `__) -* Contributors: Agustin Alba Chicar, Chris Lalancette, DensoADAS, Emerson Knapp, EsipovPA, Esteve Fernandez, Geoffrey Biggs, Hunter L.Allen, Keisuke Shima, Michael Orlov, Sean Kelly, Tony Peng, Yadu, james-rms, kylemarcey, ricardo-manriquez +* Contributors: Agustin Alba Chicar, Chris Lalancette, DensoADAS, Emerson Knapp, EsipovPA, Esteve Fernandez, Geoffrey Biggs, Hunter L.Allen, Keisuke Shima, Michael Orlov, Sean Kelly, Tony Peng, Yadu, james-rms, kylemarcey, mergify[bot], ricardo-manriquez -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ros2cli `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ros2cli `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Set automatically_declare_parameters_from_overrides in DirectNode. (`#813 `__) * Enable document generation using rosdoc2 (`#811 `__) @@ -2209,27 +2277,27 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Cristóbal Arroyo, Ivan Santiago Paunovic, Tomoya Fujita, Yadu, mjbogusz -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ros2cli_common_extensions `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ros2cli_common_extensions `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#7 `__) * Update maintainers (`#6 `__) * Contributors: Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ros2cli_test_interfaces `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ros2cli_test_interfaces `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#776 `__) * Remove action_msgs dependency (`#743 `__) * Contributors: Audrow Nash, Jacob Perron -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ros2component `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ros2component `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Enable document generation using rosdoc2 (`#811 `__) * [rolling] Update maintainers - 2022-11-07 (`#776 `__) @@ -2238,74 +2306,82 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Yadu -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ros2doctor `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ros2doctor `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Shutdown ros2doctor hello when ctrl-c is received (`#829 `__) +* Make all of the dependencies in pure Python packages exec_depend. (`#823 `__) * Enable document generation using rosdoc2 (`#811 `__) * Fix warnings for ros2component, ros2doctor, ros2interface, and ros2node * [rolling] Update maintainers - 2022-11-07 (`#776 `__) -* Contributors: Audrow Nash, Yadu +* Contributors: Audrow Nash, Chris Lalancette, Michael Carroll, Yadu -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ros2interface `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ros2interface `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Make all of the dependencies in pure Python packages exec_depend. (`#823 `__) * Enable document generation using rosdoc2 (`#811 `__) * [rolling] Update maintainers - 2022-11-07 (`#776 `__) -* Contributors: Audrow Nash, Yadu +* Contributors: Audrow Nash, Chris Lalancette, Yadu -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ros2launch `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ros2launch `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#331 `__) * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ros2lifecycle `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ros2lifecycle `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Make all of the dependencies in pure Python packages exec_depend. (`#823 `__) * [rolling] Update maintainers - 2022-11-07 (`#776 `__) -* Contributors: Audrow Nash +* Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ros2lifecycle_test_fixtures `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ros2lifecycle_test_fixtures `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update the ros2cli test fixture to C++17. (`#789 `__) * [rolling] Update maintainers - 2022-11-07 (`#776 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ros2multicast `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ros2multicast `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Make all of the dependencies in pure Python packages exec_depend. (`#823 `__) * [rolling] Update maintainers - 2022-11-07 (`#776 `__) * Add --group and --port options to ros2 multicast (`#770 `__) -* Contributors: Audrow Nash, Shane Loretz +* Contributors: Audrow Nash, Chris Lalancette, Shane Loretz -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ros2node `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ros2node `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Make all of the dependencies in pure Python packages exec_depend. (`#823 `__) * Enable document generation using rosdoc2 (`#811 `__) * Fix warnings for ros2component, ros2doctor, ros2interface, and ros2node * Fix linters (`#808 `__) * add timeout option for ros2param to find node. (`#802 `__) * [rolling] Update maintainers - 2022-11-07 (`#776 `__) * Updated wording in list.py (`#775 `__) -* Contributors: Audrow Nash, Cristóbal Arroyo, Michael Wrock, Tomoya Fujita, Yadu +* Contributors: Audrow Nash, Chris Lalancette, Cristóbal Arroyo, Michael Wrock, Tomoya Fujita, Yadu -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ros2param `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ros2param `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* remove deprecated options (`#824 `__) +* Make all of the dependencies in pure Python packages exec_depend. (`#823 `__) * add timeout option for ros2param to find node. (`#802 `__) * Fix printing of integer and double arrays. (`#804 `__) * [rolling] Update maintainers - 2022-11-07 (`#776 `__) @@ -2313,45 +2389,51 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Brian, Chris Lalancette, Tomoya Fujita -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ros2pkg `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ros2pkg `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Fix typo in ros2pkg warning message. (`#828 `__) +* Make all of the dependencies in pure Python packages exec_depend. (`#823 `__) * resolve `#790 `__ (`#801 `__) * Add alias library targets for CMake (`#718 `__) * [rolling] Update maintainers - 2022-11-07 (`#776 `__) -* Contributors: Audrow Nash, Kenji Brameld, RFRIEDM-Trimble +* Contributors: Audrow Nash, Chris Lalancette, Kenji Brameld, RFRIEDM-Trimble, Tomoya Fujita -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ros2run `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ros2run `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Make all of the dependencies in pure Python packages exec_depend. (`#823 `__) * [rolling] Update maintainers - 2022-11-07 (`#776 `__) -* Contributors: Audrow Nash +* Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ros2service `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ros2service `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Make all of the dependencies in pure Python packages exec_depend. (`#823 `__) * [rolling] Update maintainers - 2022-11-07 (`#776 `__) -* Contributors: Audrow Nash +* Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ros2test `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ros2test `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#12 `__) * update maintainer * Contributors: Audrow Nash, Dharini Dutia, quarkytale -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ros2topic `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ros2topic `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* remove deprecated options (`#824 `__) +* Make all of the dependencies in pure Python packages exec_depend. (`#823 `__) * Expect type hash cli output in test (`#822 `__) * Fix the type annotation in pub.py. (`#814 `__) * Switch to using new event_handler instead of qos_event. (`#787 `__) @@ -2373,28 +2455,42 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Arjo Chakravarty, Audrow Nash, Chen Lihui, Chris Lalancette, Emerson Knapp, Esteve Fernandez, Ivan Santiago Paunovic, Lei Liu, Tomoya Fujita -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`ros_testing `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ros2trace `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +* Move ros2trace tests to new test_ros2trace package (`#63 `__) +* Error out if trace already exists unless 'append' option is used (`#58 `__) +* Improve 'ros2 trace' command error handling & add end-to-end tests (`#54 `__) +* Contributors: Christophe Bedard + + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`ros_testing `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#12 `__) * update maintainer * Contributors: Audrow Nash, Dharini Dutia, quarkytale -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosbag2 `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosbag2 `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Add Michael Orlov as maintainer in rosbag2 packages (`#1215 `__) * Move sqlite3 storage implementation to rosbag2_storage_sqlite3 package (`#1113 `__) * Contributors: Emerson Knapp, Michael Orlov -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosbag2_compression `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosbag2_compression `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Add in a missing cstdint include. (`#1321 `__) (`#1322 `__) +* Fix warning from ClassLoader in sequential compression reader and writer (`#1299 `__) (`#1316 `__) +* Add message definition read API (`#1292 `__) +* rosbag2_storage: add type description hash to topic metadata (`#1272 `__) * rosbag2_cpp: move local message definition source out of MCAP plugin (`#1265 `__) * Update rosbag2 to C++17. (`#1238 `__) * Use target_link_libraries instead of ament_target_dependencies (`#1202 `__) @@ -2405,12 +2501,12 @@ This page is a list of the complete changes in all ROS 2 core packages since the * set default metadata of compressed message (in case compressor does not set it) (`#1060 `__) * Speed optimization: Preparing copyless publish/subscribing by using const message for writing (`#1010 `__) * Add the ability to record any key/value pair in 'custom' field in metadata.yaml (`#1038 `__) -* Contributors: Chris Lalancette, Daisuke Nishimatsu, DensoADAS, Emerson Knapp, Hunter L. Allen, Joshua Hampp, Michael Orlov, Tony Peng, james-rms +* Contributors: Chris Lalancette, Daisuke Nishimatsu, DensoADAS, Emerson Knapp, Hunter L. Allen, Joshua Hampp, Michael Orlov, Tony Peng, james-rms, mergify[bot] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosbag2_compression_zstd `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosbag2_compression_zstd `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update rosbag2 to C++17. (`#1238 `__) * Use target_link_libraries instead of ament_target_dependencies (`#1202 `__) @@ -2419,10 +2515,15 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Chris Lalancette, Daisuke Nishimatsu, DensoADAS, Joshua Hampp, Michael Orlov -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosbag2_cpp `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosbag2_cpp `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Add recorder stop() API (`#1300 `__) (`#1334 `__) +* Add type_hash in MessageDefinition struct (`#1296 `__) +* Add message definition read API (`#1292 `__) +* rosbag2_storage: add type description hash to topic metadata (`#1272 `__) +* Fix for flaky ``TimeControllerClockTest::unpaused_sleep_returns_true`` test (`#1290 `__) * rosbag2_cpp: move local message definition source out of MCAP plugin (`#1265 `__) * Update rosbag2 to C++17. (`#1238 `__) * Use target_link_libraries instead of ament_target_dependencies (`#1202 `__) @@ -2450,31 +2551,33 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Notification of significant events during bag recording and playback (`#908 `__) * Bugfix for "Playing the bags recorded with split by duration/size is playing only the last recorded .db3." (`#1022 `__) * Improve test_time_controller test (`#1012 `__) -* Contributors: Chris Lalancette, Daisuke Nishimatsu, DensoADAS, Emerson Knapp, Geoffrey Biggs, Hunter L. Allen, Jorge Perez, Joshua Hampp, Kaju-Bubanja, Michael Orlov, Tony Peng, james-rms, rshanor +* Contributors: Chris Lalancette, Daisuke Nishimatsu, DensoADAS, Emerson Knapp, Geoffrey Biggs, Hunter L. Allen, Jorge Perez, Joshua Hampp, Kaju-Bubanja, Michael Orlov, Tony Peng, james-rms, mergify[bot], rshanor -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosbag2_examples_cpp `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosbag2_examples_cpp `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* rosbag2_storage: add type description hash to topic metadata (`#1272 `__) * Update rosbag2 to C++17. (`#1238 `__) * Use target_link_libraries instead of ament_target_dependencies (`#1202 `__) * Add Michael Orlov as maintainer in rosbag2 packages (`#1215 `__) * Add API samples on main branch - Rolling C++ API examples (`#1068 `__) -* Contributors: Chris Lalancette, Daisuke Nishimatsu, Emerson Knapp, Michael Orlov +* Contributors: Chris Lalancette, Daisuke Nishimatsu, Emerson Knapp, Michael Orlov, james-rms -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosbag2_examples_py `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosbag2_examples_py `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Fix a warning from python setuptools. (`#1312 `__) (`#1314 `__) * Add API samples for Python [rebased] (`#1253 `__) * Add API samples for Python * Package Renaming and Move * linting + copyright * more linting --------- Co-authored-by: Geoffrey Biggs -* Contributors: David V. Lu!! +* Contributors: David V. Lu!!, mergify[bot] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosbag2_interfaces `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosbag2_interfaces `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update rosbag2 to C++17. (`#1238 `__) * Add Michael Orlov as maintainer in rosbag2 packages (`#1215 `__) @@ -2487,10 +2590,11 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Agustin Alba Chicar, Chris Lalancette, Geoffrey Biggs, Michael Orlov, Misha Shalem, rshanor -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosbag2_performance_benchmarking `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosbag2_performance_benchmarking `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Add tests for rosbag2_performance_benchmarking pkg (`#1268 `__) * Fix expectations for rosbag2 return code in rosbag2_performance_benchmarking (`#1267 `__) * Update rosbag2 to C++17. (`#1238 `__) * Use thread pool to run benchmark publishers in rosbag2_performance_benchmarking (`#1250 `__) @@ -2503,20 +2607,26 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Chris Lalancette, Daisuke Nishimatsu, Emerson Knapp, Michael Orlov, Shane Loretz, carlossvg -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosbag2_performance_benchmarking_msgs `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosbag2_performance_benchmarking_msgs `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Add tests for rosbag2_performance_benchmarking pkg (`#1268 `__) * Skip ament_package() call when not building rosbag2_performance_benchmarking (`#1242 `__) * [rolling] Bump to 0.19.0 (`#1232 `__) * Add option to specify a message type (`#1153 `__) -* Contributors: Audrow Nash, Shane Loretz, carlossvg +* Contributors: Audrow Nash, Michael Orlov, Shane Loretz, carlossvg -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosbag2_py `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosbag2_py `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Add binding to close the writer (`#1339 `__) (`#1340 `__) +* Add type_hash in MessageDefinition struct (`#1296 `__) +* Store message definitions in SQLite3 storage plugin (`#1293 `__) +* Add message definition read API (`#1292 `__) +* rosbag2_storage: add type description hash to topic metadata (`#1272 `__) * rosbag2_cpp: move local message definition source out of MCAP plugin (`#1265 `__) * Update rosbag2 to C++17. (`#1238 `__) * Use target_link_libraries instead of ament_target_dependencies (`#1202 `__) @@ -2543,13 +2653,16 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Add play-for specified number of seconds functionality (`#960 `__) * Make unpublished topics unrecorded by default (`#968 `__) * Fix test rosbag2_py test compatibility with Python < 3.8 (`#987 `__) -* Contributors: Agustin Alba Chicar, Chris Lalancette, Daisuke Nishimatsu, Emerson Knapp, Esteve Fernandez, Geoffrey Biggs, Hunter L. Allen, Michael Orlov, Scott K Logan, Sean Kelly, Tony Peng, james-rms, kylemarcey, ricardo-manriquez +* Contributors: Agustin Alba Chicar, Chris Lalancette, Daisuke Nishimatsu, Emerson Knapp, Esteve Fernandez, Geoffrey Biggs, Hunter L. Allen, Michael Orlov, Scott K Logan, Sean Kelly, Tony Peng, james-rms, kylemarcey, mergify[bot], ricardo-manriquez -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosbag2_storage `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosbag2_storage `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Add type_hash in MessageDefinition struct (`#1296 `__) +* Add message definition read API (`#1292 `__) +* rosbag2_storage: add type description hash to topic metadata (`#1272 `__) * rosbag2_cpp: move local message definition source out of MCAP plugin (`#1265 `__) * Update rosbag2 to C++17. (`#1238 `__) * Use target_link_libraries instead of ament_target_dependencies (`#1202 `__) @@ -2572,9 +2685,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Akash, Chris Lalancette, Daisuke Nishimatsu, DensoADAS, Emerson Knapp, Esteve Fernandez, Hunter L. Allen, Joshua Hampp, Michael Orlov, Tony Peng, james-rms -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosbag2_storage_default_plugins `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosbag2_storage_default_plugins `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * rosbag2_storage: set MCAP as default plugin (`#1160 `__) * Add Michael Orlov as maintainer in rosbag2 packages (`#1215 `__) @@ -2585,10 +2698,13 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Emerson Knapp, Esteve Fernandez, Michael Orlov, james-rms -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosbag2_storage_mcap `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosbag2_storage_mcap `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Add type_hash in MessageDefinition struct (`#1296 `__) +* Add message definition read API (`#1292 `__) +* rosbag2_storage: add type description hash to topic metadata (`#1272 `__) * rosbag2_cpp: move local message definition source out of MCAP plugin (`#1265 `__) * Update rosbag2 to C++17. (`#1238 `__) * Use target_link_libraries instead of ament_target_dependencies (`#1202 `__) @@ -2646,10 +2762,14 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Andrew Symington, Chris Lalancette, Daisuke Nishimatsu, Emerson Knapp, Jacob Bandes-Storch, James Smith, John Hurliman, Michael Orlov, james-rms, wep21 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosbag2_storage_sqlite3 `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosbag2_storage_sqlite3 `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Add type_hash in MessageDefinition struct (`#1296 `__) +* Store message definitions in SQLite3 storage plugin (`#1293 `__) +* Add message definition read API (`#1292 `__) +* rosbag2_storage: add type description hash to topic metadata (`#1272 `__) * rosbag2_cpp: move local message definition source out of MCAP plugin (`#1265 `__) * Update rosbag2 to C++17. (`#1238 `__) * Use target_link_libraries instead of ament_target_dependencies (`#1202 `__) @@ -2667,31 +2787,34 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Chris Lalancette, Daisuke Nishimatsu, Emerson Knapp, Esteve Fernandez, Michael Orlov, james-rms -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosbag2_test_common `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosbag2_test_common `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Address flakiness in rosbag2_play_end_to_end tests (`#1297 `__) (`#1330 `__) * Update rosbag2 to C++17. (`#1238 `__) * Use target_link_libraries instead of ament_target_dependencies (`#1202 `__) * Add Michael Orlov as maintainer in rosbag2 packages (`#1215 `__) * rosbag2_py: parametrize tests across storage plugins (`#1203 `__) * Fix for ros2 bag play exit with non-zero code on SIGINT (`#1126 `__) * Split up the include of rclcpp.hpp (`#1027 `__) -* Contributors: Chris Lalancette, Daisuke Nishimatsu, Michael Orlov, james-rms +* Contributors: Chris Lalancette, Daisuke Nishimatsu, Michael Orlov, james-rms, mergify[bot] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosbag2_test_msgdefs `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosbag2_test_msgdefs `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * rosbag2_cpp: move local message definition source out of MCAP plugin (`#1265 `__) The intention of this PR is to move the message-definition-finding capability outside of rosbag2_storage_mcap, and allow any rosbag2 storage plugin to store message definitions. * Contributors: james-rms -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosbag2_tests `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosbag2_tests `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Address flakiness in rosbag2_play_end_to_end tests (`#1297 `__) (`#1330 `__) +* Add type_hash in MessageDefinition struct (`#1296 `__) * rosbag2_cpp: move local message definition source out of MCAP plugin (`#1265 `__) * Update rosbag2 to C++17. (`#1238 `__) * Use target_link_libraries instead of ament_target_dependencies (`#1202 `__) @@ -2704,13 +2827,19 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Move sqlite3 storage implementation to rosbag2_storage_sqlite3 package (`#1113 `__) * Readers/info can accept a single bag storage file, and detect its storage id automatically (`#1072 `__) * Add the ability to record any key/value pair in 'custom' field in metadata.yaml (`#1038 `__) -* Contributors: Chris Lalancette, Daisuke Nishimatsu, Emerson Knapp, Hunter L. Allen, Michael Orlov, Tony Peng, james-rms +* Contributors: Chris Lalancette, Daisuke Nishimatsu, Emerson Knapp, Hunter L. Allen, Michael Orlov, Tony Peng, james-rms, mergify[bot] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosbag2_transport `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosbag2_transport `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Change subscriptions from GenericSubscripton to SubscriptionBase (`#1338 `__) +* Add recorder stop() API (`#1300 `__) (`#1334 `__) +* Read message definitions from input files in bag_rewrite (`#1295 `__) +* Add message definition read API (`#1292 `__) +* Move rosbag2_transport::Recorder implementation to pimpl (`#1291 `__) +* rosbag2_storage: add type description hash to topic metadata (`#1272 `__) * rosbag2_cpp: move local message definition source out of MCAP plugin (`#1265 `__) * Use RMW methods to initialize endpoint info instead of brace initializer to guard against upcoming struct change (`#1257 `__) * Update rosbag2 to C++17. (`#1238 `__) @@ -2754,21 +2883,21 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Make unpublished topics unrecorded by default (`#968 `__) * Make peek_next_message_from_queue return a SharedPtr. (`#993 `__) * Change the topic names in test_record.cpp (`#988 `__) -* Contributors: Agustin Alba Chicar, Bernardo Taveira, Brian, Chris Lalancette, Cristóbal Arroyo, Daisuke Nishimatsu, DensoADAS, Emerson Knapp, Esteve Fernandez, Geoffrey Biggs, Jorge Perez, Joshua Hampp, Michael Orlov, Misha Shalem, Sean Kelly, Tony Peng, james-rms, kylemarcey, rshanor +* Contributors: Agustin Alba Chicar, Bernardo Taveira, Brian, Chris Lalancette, Cristóbal Arroyo, Daisuke Nishimatsu, DensoADAS, Emerson Knapp, Esteve Fernandez, Geoffrey Biggs, Jorge Perez, Joshua Hampp, Michael Orlov, Misha Shalem, Sean Kelly, Tony Peng, james-rms, kylemarcey, mergify[bot], rshanor -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosgraph_msgs `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosgraph_msgs `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update common_interfaces to C++17. (`#215 `__) (`#151 `__) * [rolling] Update maintainers - 2022-11-07 (`#150 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosidl_adapter `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_adapter `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * rosidl_adapter/cmake/rosidl_adapt_interfaces.cmake: Make ament free (`#709 `__) * [service introspection] generate service_event messages (`#700 `__) @@ -2778,18 +2907,18 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Brian, Guilherme Henrique Galelli Christmann, John Daktylidis, Yasushi SHOJI -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosidl_cli `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_cli `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Fix warnings (`#726 `__) * [rolling] Update maintainers - 2022-11-07 (`#717 `__) * Contributors: Audrow Nash, Yadu -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosidl_cmake `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_cmake `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Type Description Codegen and Typesupport (rep2011) (`#727 `__) * Type hash in interface codegen (rep2011) (`#722 `__) @@ -2802,9 +2931,27 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Brian, Chris Lalancette, Emerson Knapp, Jacob Perron, Jose Luis Rivero, Shane Loretz -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosidl_default_generators `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_core_generators `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +* [rolling] Update maintainers - 2022-11-07 (`#2 `__) +* Add generators and runtime configuration packages (`#1 `__) Moved (and renamed) from rosidl_defaults. Related PR: https://github.com/ros2/rosidl_defaults/pull/22 +* Contributors: Audrow Nash, Jacob Perron + + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_core_runtime `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +* [rolling] Update maintainers - 2022-11-07 (`#2 `__) +* Add generators and runtime configuration packages (`#1 `__) Moved (and renamed) from rosidl_defaults. Related PR: https://github.com/ros2/rosidl_defaults/pull/22 +* Contributors: Audrow Nash, Jacob Perron + + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_default_generators `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * add service_msgs depend (`#24 `__) * [rolling] Update maintainers - 2022-11-07 (`#25 `__) @@ -2812,9 +2959,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Brian, Jacob Perron -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosidl_default_runtime `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_default_runtime `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * add service_msgs depend (`#24 `__) * [rolling] Update maintainers - 2022-11-07 (`#25 `__) @@ -2822,9 +2969,30 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Brian, Jacob Perron -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosidl_generator_c `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_dynamic_typesupport `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +* Fix up the exports for rosidl_dynamic_typesupport. (`#5 `__) +* Refactor dynamic message type support impl to use allocators (`#2 `__) +* Runtime Interface Reflection: rosidl_dynamic_typesupport (`#1 `__) +* Contributors: Chris Lalancette, William Woodall, methylDragon + + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_dynamic_typesupport_fastrtps `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +* Remove more unnecessary semicolons (`#4 `__) +* Dynamic Subscription (BONUS: Allocators): rosidl_dynamic_typesupport_fastrtps (`#3 `__) +* Remove unnecessary semicolons. (`#2 `__) +* Runtime Interface Reflection: rosidl_dynamic_typesupport_fastrtps (`#1 `__) +* Contributors: Chris Lalancette, methylDragon + + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_generator_c `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Type Description Codegen and Typesupport (rep2011) (`#727 `__) * Expose type hash on typesupports (rep2011) (`#729 `__) @@ -2837,9 +3005,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Brian, Emerson Knapp, Jacob Perron, Silvio Traversaro -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosidl_generator_cpp `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_generator_cpp `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Type Description Codegen and Typesupport (rep2011) (`#727 `__) * Expose type hash on typesupports (rep2011) (`#729 `__) @@ -2852,18 +3020,18 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Brian, Emerson Knapp, Jacob Perron, Silvio Traversaro -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosidl_generator_dds_idl `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_generator_dds_idl `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#60 `__) * Replace rosidl_cmake imports with rosidl_pycommon (`#59 `__) * Contributors: Audrow Nash, Jacob Perron -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosidl_generator_py `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_generator_py `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Hides the assertions that checks the data types of the message fields. (`#194 `__) * Service introspection (`#178 `__) @@ -2883,9 +3051,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Ben Wolsieffer, Brian, Cristóbal Arroyo, Dharini Dutia, Eloy Briceno, Ivan Santiago Paunovic, Jacob Perron, Tomoya Fujita, quarkytale, Øystein Sture -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosidl_generator_tests `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_generator_tests `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Type Description Codegen and Typesupport (rep2011) (`#727 `__) * Type hash in interface codegen (rep2011) (`#722 `__) @@ -2895,9 +3063,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Brian, Emerson Knapp, Jacob Perron -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosidl_generator_type_description `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_generator_type_description `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Type Description Codegen and Typesupport (rep2011) (`#727 `__) * Expose type hash on typesupports (rep2011) (`#729 `__) @@ -2905,9 +3073,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Emerson Knapp -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosidl_parser `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_parser `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [service introspection] generate service_event messages (`#700 `__) * [rolling] Update maintainers - 2022-11-07 (`#717 `__) @@ -2915,9 +3083,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Brian, Shane Loretz -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosidl_pycommon `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_pycommon `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Type Description Codegen and Typesupport (rep2011) (`#727 `__) * Type hash in interface codegen (rep2011) (`#722 `__) @@ -2926,9 +3094,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Emerson Knapp, Jacob Perron -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosidl_runtime_c `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_runtime_c `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Dynamic Subscription (BONUS: Allocators): rosidl (`#737 `__) * Runtime Interface Reflection: rosidl (`#728 `__) @@ -2941,9 +3109,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Brian, Emerson Knapp, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosidl_runtime_cpp `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_runtime_cpp `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Type Description Codegen and Typesupport (rep2011) (`#727 `__) * Copied type_description_interfaces structs (rep2011) (`#732 `__) @@ -2955,9 +3123,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Alexander Hans, Audrow Nash, Brian, Chris Lalancette, Emerson Knapp, ralwing -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosidl_runtime_py `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_runtime_py `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Replace the use __slots_\_ for the appropiate API (`#23 `__) * fix(typing): ``get_interface_packages`` returns a dict (`#22 `__) @@ -2968,9 +3136,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Eloy Briceno, Esteve Fernandez, 兰陈昕 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosidl_typesupport_c `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_typesupport_c `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Type Description Nested Support (`#141 `__) * Fix rosidl_typesupport_c/cpp exec dependencies. (`#140 `__) @@ -2984,9 +3152,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Brian, Chris Lalancette, Emerson Knapp, Jacob Perron -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosidl_typesupport_cpp `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_typesupport_cpp `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Type Description Nested Support (`#141 `__) * Fix rosidl_typesupport_c/cpp exec dependencies. (`#140 `__) @@ -2999,9 +3167,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Brian, Chris Lalancette, Emerson Knapp, Jacob Perron -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosidl_typesupport_fastrtps_c `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_typesupport_fastrtps_c `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Type Description Nested Support (`#101 `__) * Type hashes on typesupport (rep2011) (`#98 `__) @@ -3014,9 +3182,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Brian, Chris Lalancette, Emerson Knapp, Jacob Perron -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosidl_typesupport_fastrtps_cpp `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_typesupport_fastrtps_cpp `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Type Description Nested Support (`#101 `__) * Type hashes on typesupport (rep2011) (`#98 `__) @@ -3030,18 +3198,18 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Brian, Chris Lalancette, Emerson Knapp, Jacob Perron, Tyler Weaver -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosidl_typesupport_interface `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_typesupport_interface `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [service introspection] generate service_event messages (`#700 `__) * [rolling] Update maintainers - 2022-11-07 (`#717 `__) * Contributors: Audrow Nash, Brian -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosidl_typesupport_introspection_c `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_typesupport_introspection_c `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Type Description Codegen and Typesupport (rep2011) (`#727 `__) * Expose type hash on typesupports (rep2011) (`#729 `__) @@ -3054,9 +3222,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Brian, Emerson Knapp, Jacob Perron, Silvio Traversaro -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosidl_typesupport_introspection_cpp `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_typesupport_introspection_cpp `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Type Description Codegen and Typesupport (rep2011) (`#727 `__) * Expose type hash on typesupports (rep2011) (`#729 `__) @@ -3069,9 +3237,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Brian, Chris Lalancette, Emerson Knapp, Jacob Perron, Silvio Traversaro -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosidl_typesupport_introspection_tests `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_typesupport_introspection_tests `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Fix a few more clang analysis problems. (`#731 `__) In particular, make sure to mark the fact that we are C++17 (as the emplace_back signature changed), and also add in a few more (void)_ for benchmark tests. * [service introspection] generate service_event messages (`#700 `__) @@ -3079,9 +3247,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Brian, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rosidl_typesupport_tests `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rosidl_typesupport_tests `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * typesupport_tests needs to be updated to C++17 (`#137 `__) * Fix Typesupport Introspection tests (`#133 `__) @@ -3090,9 +3258,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Brian, Chris Lalancette, Cristóbal Arroyo, Lucas Wendland -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rpyutils `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rpyutils `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#10 `__) * Mirror rolling to master @@ -3100,9 +3268,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Dharini Dutia -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rqt `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rqt `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * fix build of ``rqt`` with ``setuptools>=v61.0.0`` (`#271 `__) * [rolling] Update maintainers - 2022-11-07 (`#283 `__) @@ -3110,9 +3278,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Daniel Reuter, Dharini Dutia, quarkytale -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rqt_action `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rqt_action `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#14 `__) * Small cleanups to the rqt_action plugin (`#13 `__) @@ -3120,10 +3288,11 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rqt_bag `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rqt_bag `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Use default storage id (`#140 `__) * Use rosbag2_py API instead of direct bag parsing * [rolling] Update maintainers - 2022-11-07 (`#132 `__) * For get_entry_after, bump by 1 nanosecond otherwise always get the same message equal to the timestamp @@ -3142,86 +3311,89 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Fix tuples for bisect calls (`#67 `__) (`#76 `__) * fix long topic names (`#114 `__) * fix zoom behavior (`#76 `__) -* Contributors: Audrow Nash, Chris Lalancette, Emerson Knapp, Ivan Santiago Paunovic, Kenji Brameld +* Contributors: Audrow Nash, Chris Lalancette, Emerson Knapp, Ivan Santiago Paunovic, Kenji Brameld, Yadunund -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rqt_bag_plugins `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rqt_bag_plugins `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Changes the use of __slots_\_ for the field and field type getter (`#138 `__) * [rolling] Update maintainers - 2022-11-07 (`#132 `__) * Contributors: Audrow Nash, Eloy Briceno -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rqt_console `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rqt_console `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#39 `__) * added new maintainer * Contributors: Arne Hitzmann, Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rqt_graph `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rqt_graph `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Refresh rosgraph when params checkbox is clicked (`#87 `__) * [rolling] Update maintainers - 2022-11-07 (`#83 `__) * Minor cleanup (`#80 `__) * Mirror rolling to galactic-devel * graph load/save into DOT file corrections for py3 (`#78 `__) * Remove repeated prefixes from buttons -* Contributors: Audrow Nash, Chris Lalancette, David V. Lu!!, mergify[bot] +* Contributors: Audrow Nash, Chris Lalancette, David V. Lu!!, Yadunund, mergify[bot] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rqt_gui `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rqt_gui `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#283 `__) * Display basic help information when no plugins are loaded (`#268 `__) * Contributors: Audrow Nash, Dharini Dutia, Michael Jeronimo, quarkytale -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rqt_gui_cpp `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rqt_gui_cpp `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update rqt to C++17. (`#285 `__) * [rolling] Update maintainers - 2022-11-07 (`#283 `__) * Contributors: Audrow Nash, Chris Lalancette, Dharini Dutia, quarkytale -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rqt_gui_py `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rqt_gui_py `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Fix an exception raised when terminating with Ctrl+c (`#292 `__) * [rolling] Update maintainers - 2022-11-07 (`#283 `__) -* Contributors: Audrow Nash, Dharini Dutia, quarkytale +* Contributors: Audrow Nash, Chen Lihui, Dharini Dutia, quarkytale -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rqt_msg `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rqt_msg `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#17 `__) * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rqt_plot `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rqt_plot `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Fix regression from #87 (`#91 `__) * Changes the use of __slots_\_ for the field and field type getter (`#87 `__) * [rolling] Update maintainers - 2022-11-07 (`#83 `__) * Fix fixed-size Array visualization (`#81 `__) -* Contributors: Audrow Nash, Eloy Briceno, Jacob Perron, Michael Jeronimo +* Contributors: Audrow Nash, Eloy Briceno, Jacob Perron, Michael Jeronimo, Yadunund -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rqt_publisher `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rqt_publisher `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Changes the use of __slots_\_ for the field and field type getter * [rolling] Update maintainers - 2022-11-07 (`#36 `__) @@ -3234,26 +3406,26 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Geoffrey Biggs, Michael Jeronimo, Nicholas Badyal, Voldivh -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rqt_py_common `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rqt_py_common `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Changes the use of __slots_\_ for the field and field type getter (`#289 `__) * [rolling] Update maintainers - 2022-11-07 (`#283 `__) * Contributors: Audrow Nash, Dharini Dutia, Eloy Briceno, quarkytale -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rqt_py_console `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rqt_py_console `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#13 `__) * Contributors: Audrow Nash, Jacob Perron -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rqt_reconfigure `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rqt_reconfigure `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * reorder imports to fix flake8 warning (`#129 `__) * Fixed validator locale when float value is not bound in a range. (`#121 `__) @@ -3269,33 +3441,33 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Aris Synodinos, Audrow Nash, Christian Rauch, Dharini Dutia, Florian Vahl, Jacob Perron, Shrijit Singh, Tully Foote, quarkytale -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rqt_service_caller `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rqt_service_caller `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#25 `__) * Contributors: Audrow Nash, Jacob Perron -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rqt_shell `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rqt_shell `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#17 `__) * Contributors: Audrow Nash, Jacob Perron -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rqt_srv `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rqt_srv `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#10 `__) * Contributors: Audrow Nash, Jacob Perron -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rqt_topic `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rqt_topic `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#43 `__) * Implement bandwidth monitoring (`#40 `__) @@ -3304,18 +3476,26 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Jacob Perron -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rttest `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rti_connext_dds_cmake_module `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +* Use unified approach for checking the existence of environment variables (`#117 `__) +* Contributors: Christopher Wecht + + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rttest `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#121 `__) * Addressing issues found in Humble testing (`#116 `__) * Contributors: Audrow Nash, Michael Carroll -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rviz2 `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rviz2 `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Make rviz1_to_rviz2.py accept configs with missing values (`#945 `__) * Update rviz to C++17. (`#939 `__) @@ -3324,18 +3504,19 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Shane Loretz -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rviz_assimp_vendor `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rviz_assimp_vendor `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* If vendored assimp is present, always prefer that (`#970 `__) * [rolling] Update maintainers - 2022-11-07 (`#923 `__) * Fixes policy CMP0135 warning for CMake >= 3.24 (`#898 `__) -* Contributors: Audrow Nash, Cristóbal Arroyo +* Contributors: Audrow Nash, Cristóbal Arroyo, Scott K Logan -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rviz_common `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rviz_common `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update Frame shortcut (`#958 `__) * Update Frame shortcut * Update rviz to C++17. (`#939 `__) @@ -3349,9 +3530,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Akash, Audrow Nash, Chris Lalancette, David V. Lu!!, Kenji Brameld, Marcel Zeilinger, Shane Loretz, juchajam -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rviz_default_plugins `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rviz_default_plugins `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Fix ODR errors with gmock (`#967 `__) * Update Frame shortcut (`#958 `__) @@ -3373,9 +3554,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: AndreasR30, Audrow Nash, Chris Lalancette, David V. Lu!!, Eric, Hunter L. Allen, Jacob Perron, Kenji Brameld, Patrick Roncagliolo, Shane Loretz, Timon Engelke, Xavier BROQUERE, Xenofon Karamanos, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rviz_ogre_vendor `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rviz_ogre_vendor `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Fix build failures on macOS + Apple Silicon (`#944 `__) * [rolling] Update maintainers - 2022-11-07 (`#923 `__) @@ -3387,9 +3568,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Cristóbal Arroyo, Kenji Brameld, Scott K Logan, Shane Loretz, Yadu -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rviz_rendering `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rviz_rendering `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#923 `__) * add test to ensure binary STL files from SOLIDWORKS get imported without a warning (`#917 `__) @@ -3398,18 +3579,18 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Kenji Brameld -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rviz_rendering_tests `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rviz_rendering_tests `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#923 `__) * add test to ensure binary STL files from SOLIDWORKS get imported without a warning (`#917 `__) * Contributors: Audrow Nash, Kenji Brameld -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`rviz_visual_testing_framework `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`rviz_visual_testing_framework `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update rviz to C++17. (`#939 `__) * [rolling] Update maintainers - 2022-11-07 (`#923 `__) @@ -3417,9 +3598,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Kenji Brameld -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`sensor_msgs `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`sensor_msgs `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * update YUV format codes and documentation (`#214 `__) * sensor_msgs/Range lacks variance field (`#181 `__) @@ -3435,9 +3616,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Borong Yuan, Chris Lalancette, Christian Rauch, El Jawad Alaa, Geoffrey Biggs, Ivan Zatevakhin, Kenji Brameld, Tianyu Li -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`sensor_msgs_py `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`sensor_msgs_py `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Add missing dep for sensor_msgs_py (`#217 `__) * [rolling] Update maintainers - 2022-11-07 (`#210 `__) @@ -3446,18 +3627,18 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Florian Vahl, Yadu -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`service_msgs `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`service_msgs `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update common_interfaces to C++17. (`#215 `__) (`#151 `__) * Add service_msgs package (`#143 `__) * Contributors: Brian, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`shape_msgs `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`shape_msgs `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update common_interfaces to C++17. (`#215 `__) * [rolling] Update maintainers - 2022-11-07 (`#210 `__) @@ -3465,18 +3646,18 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, M. Fatih Cırıt -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`shared_queues_vendor `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`shared_queues_vendor `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Add Michael Orlov as maintainer in rosbag2 packages (`#1215 `__) * Fixes policy CMP0135 warning for CMake >= 3.24 (`#1084 `__) * Contributors: Cristóbal Arroyo, Michael Orlov -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`spdlog_vendor `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`spdlog_vendor `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update to spdlog 1.9.2 (`#33 `__) * [rolling] Update maintainers - 2022-11-07 (`#31 `__) @@ -3489,9 +3670,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Cristóbal Arroyo, Dharini Dutia, Scott K Logan, hannes09 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`sqlite3_vendor `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`sqlite3_vendor `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update to sqlite3 3.37.2 (`#1274 `__) This matches version distributed in Ubuntu Jammy. * Add Michael Orlov as maintainer in rosbag2 packages (`#1215 `__) @@ -3499,80 +3680,81 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Cristóbal Arroyo, Michael Orlov, Scott K Logan -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`sros2 `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`sros2 `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Fix SSH commands in SROS2_Linux.md (`#286 `__) * Make type of get_package_share_directory apparent for sphinx (`#284 `__) -* Contributors: Yadu +* Contributors: Boris Boutillier, Yadu -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`statistics_msgs `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`statistics_msgs `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update common_interfaces to C++17. (`#215 `__) (`#151 `__) * [rolling] Update maintainers - 2022-11-07 (`#150 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`std_msgs `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`std_msgs `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update common_interfaces to C++17. (`#215 `__) * [rolling] Update maintainers - 2022-11-07 (`#210 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`std_srvs `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`std_srvs `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update common_interfaces to C++17. (`#215 `__) * [rolling] Update maintainers - 2022-11-07 (`#210 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`stereo_msgs `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`stereo_msgs `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update common_interfaces to C++17. (`#215 `__) * [rolling] Update maintainers - 2022-11-07 (`#210 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`tango_icons_vendor `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`tango_icons_vendor `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#10 `__) * Mirror rolling to master * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`test_cli `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`test_cli `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update the system tests to C++17. (`#510 `__) * [rolling] Update maintainers - 2022-11-07 (`#509 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`test_cli_remapping `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`test_cli_remapping `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update the system tests to C++17. (`#510 `__) * [rolling] Update maintainers - 2022-11-07 (`#509 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`test_communication `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`test_communication `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update the system tests to C++17. (`#510 `__) * [rolling] Update maintainers - 2022-11-07 (`#509 `__) @@ -3581,18 +3763,18 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Hubert Liberacki, William Woodall -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`test_interface_files `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`test_interface_files `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#21 `__) * Mirror rolling to master * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`test_launch_ros `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`test_launch_ros `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Enable document generation using rosdoc2 (`#359 `__) * Fix normalize_parameters_dict for multiple nodes in the same namespace (`#347 `__) @@ -3608,17 +3790,17 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Aditya Pande, Alexey Merzlyakov, Audrow Nash, Christoph Hellmann Santos, Kenji Miyake, Shane Loretz, William Woodall, Yadu, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`test_launch_testing `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`test_launch_testing `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#671 `__) * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`test_msgs `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`test_msgs `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update common_interfaces to C++17. (`#215 `__) (`#151 `__) * [rolling] Update maintainers - 2022-11-07 (`#150 `__) @@ -3627,18 +3809,18 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Jacob Perron -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`test_osrf_testing_tools_cpp `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`test_osrf_testing_tools_cpp `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Changing C++ Compile Version (`#76 `__) * Update maintainers (`#74 `__) * Contributors: Audrow Nash, Lucas Wendland -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`test_quality_of_service `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`test_quality_of_service `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Fix ODR errors with gtest (`#514 `__) * Avoid flaky test (`#513 `__) @@ -3653,9 +3835,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chen Lihui, Chris Lalancette, Hubert Liberacki, Jacob Perron, Shane Loretz, William Woodall, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`test_rclcpp `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`test_rclcpp `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update the system tests to C++17. (`#510 `__) * [rolling] Update maintainers - 2022-11-07 (`#509 `__) @@ -3666,9 +3848,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Hubert Liberacki, Shane Loretz, William Woodall -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`test_rmw_implementation `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`test_rmw_implementation `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Add tests for rmw matched event (`#216 `__) * Update rmw_implementation to C++17. (`#214 `__) @@ -3677,48 +3859,61 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Barry Xu, Brian, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`test_security `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`test_ros2trace `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +* Move ros2trace tests to new test_ros2trace package (`#63 `__) +* Contributors: Christophe Bedard + + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`test_security `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#509 `__) * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`test_tf2 `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`test_tf2 `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update the demos to C++17. (`#578 `__) * Update maintainers (`#560 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`test_tracetools `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`test_tracetools `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Disable tracing on Android (`#72 `__) +* Add intra-process tracepoints (`#30 `__) * Allow requiring minimum lttng package version for is_lttng_installed (`#59 `__) * Disable tracing on macOS (`#53 `__) * Include tracepoints by default on Linux (`#31 `__) * Fix memory leak in tracetools::get_symbol() (`#43 `__) * Update tracing to C++17. (`#33 `__) -* Contributors: Chris Lalancette, Christophe Bedard +* Contributors: Chris Lalancette, Christophe Bedard, Przemysław Dąbrowski, ymski -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`test_tracetools_launch `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`test_tracetools_launch `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Error out if trace already exists unless 'append' option is used (`#58 `__) +* Make subbuffer size configurable with Trace action (`#51 `__) * Allow requiring minimum lttng package version for is_lttng_installed (`#59 `__) * Enable document generation using rosdoc2 for ament_python pkgs (`#50 `__) -* Contributors: Christophe Bedard, Yadu +* Contributors: Christophe Bedard, Christopher Wecht, Yadu -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`tf2 `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`tf2 `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Fix error code returned in BufferCore::walkToTopParent (`#602 `__) * Depend on ament_cmake_ros to default SHARED to ON (`#591 `__) * Fix a potential crash in TimeCache::findClosest (`#592 `__) * Extend TimeCache API to provide rich ExtrapolationException infos (`#586 `__) @@ -3728,27 +3923,27 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Patrick Roncagliolo, Shane Loretz, Tyler Weaver -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`tf2_bullet `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`tf2_bullet `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update the demos to C++17. (`#578 `__) * Update maintainers (`#560 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`tf2_eigen `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`tf2_eigen `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update the demos to C++17. (`#578 `__) * Update maintainers (`#560 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`tf2_eigen_kdl `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`tf2_eigen_kdl `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update geometry2 to C++17 (`#584 `__) * Update maintainers (`#560 `__) @@ -3756,9 +3951,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Scott K Logan -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`tf2_geometry_msgs `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`tf2_geometry_msgs `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Add do_transform_polygon_stamped (`#582 `__) * Update the demos to C++17. (`#578 `__) @@ -3768,9 +3963,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Paul Gesel, Scott K Logan, Tony Najjar -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`tf2_kdl `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`tf2_kdl `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update the demos to C++17. (`#578 `__) * Update maintainers (`#560 `__) @@ -3778,9 +3973,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Scott K Logan -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`tf2_msgs `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`tf2_msgs `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update geometry2 to C++17 (`#584 `__) * Update maintainers (`#560 `__) @@ -3788,19 +3983,20 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Jacob Perron -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`tf2_py `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`tf2_py `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update geometry2 to C++17 (`#584 `__) * Update maintainers (`#560 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`tf2_ros `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`tf2_ros `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Destroy callback group before node (`#595 `__) * Enable TransformListener node-based constructor in Intra-process enabled components (`#572 `__) * Fix use-after-free bug in BufferServer::cancelCB (`#579 `__) * Update the demos to C++17. (`#578 `__) @@ -3810,12 +4006,12 @@ This page is a list of the complete changes in all ROS 2 core packages since the * allow construction of tf broadcaster from node object (not a pointer) (`#555 `__) * Allow to construct ``TransformBroadcaster`` and ``TransformListener`` from node interfaces (`#552 `__) * Suppress spam from calling canTransform (`#529 `__) -* Contributors: Alberto Soragna, Alexander Hans, Audrow Nash, Chris Lalancette, Gonzo, Patrick Roncagliolo +* Contributors: Alberto Soragna, Alexander Hans, Audrow Nash, Chris Lalancette, Gonzo, Michael Carroll, Patrick Roncagliolo -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`tf2_ros_py `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`tf2_ros_py `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update sys.path with wokring directory (`#594 `__) * Enable document generation using rosdoc2 for ament_python pkgs (`#587 `__) @@ -3824,9 +4020,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Michael Carroll, Yadu -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`tf2_sensor_msgs `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`tf2_sensor_msgs `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update the demos to C++17. (`#578 `__) * Update maintainers (`#560 `__) @@ -3837,27 +4033,27 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Daisuke Nishimatsu, Florian Vahl, Jorge Perez, Michael Jeronimo -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`tf2_tools `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`tf2_tools `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Enable document generation using rosdoc2 for ament_python pkgs (`#587 `__) * Update maintainers (`#560 `__) * Contributors: Audrow Nash, Yadu -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`tlsf `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`tlsf `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#13 `__) * Update maintainers (`#12 `__) * Contributors: Audrow Nash, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`tlsf_cpp `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`tlsf_cpp `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update realtime support to C++17. (`#122 `__) * [rolling] Update maintainers - 2022-11-07 (`#121 `__) @@ -3865,28 +4061,30 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Chris Lalancette, Michael Carroll -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`topic_monitor `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`topic_monitor `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * update launch file name format to match documentation (`#588 `__) * [rolling] Update maintainers - 2022-11-07 (`#589 `__) * Contributors: Audrow Nash, Patrick Wspanialy -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`topic_statistics_demo `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`topic_statistics_demo `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update the demos to C++17. (`#594 `__) * [rolling] Update maintainers - 2022-11-07 (`#589 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`tracetools `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`tracetools `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Disable tracing on Android (`#72 `__) +* Add intra-process tracepoints (`#30 `__) * Improve tracetools rosdoc2/doxygen output (`#57 `__) * Update README and other documentation (`#55 `__) * Disable tracing on macOS (`#53 `__) @@ -3895,62 +4093,72 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Fix memory leak in tracetools::get_symbol() (`#43 `__) * Add TRACEPOINT_ENABLED() and DO_TRACEPOINT() macros (`#46 `__) * Update tracing to C++17. (`#33 `__) -* Contributors: Chris Lalancette, Christophe Bedard +* Add new rclcpp_subscription_init tracepoint to support new intra-process comms +* Contributors: Chris Lalancette, Christophe Bedard, Przemysław Dąbrowski, ymski -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`tracetools_launch `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`tracetools_launch `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Error out if trace already exists unless 'append' option is used (`#58 `__) +* Improve 'ros2 trace' command error handling & add end-to-end tests (`#54 `__) +* Make subbuffer size configurable with Trace action (`#51 `__) * Enable document generation using rosdoc2 for ament_python pkgs (`#50 `__) * Remove deprecated context_names parameter (`#38 `__) -* Contributors: Christophe Bedard, Yadu +* Contributors: Christophe Bedard, Christopher Wecht, Yadu -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`tracetools_trace `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`tracetools_trace `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Error out if trace already exists unless 'append' option is used (`#58 `__) +* Improve 'ros2 trace' command error handling & add end-to-end tests (`#54 `__) +* Make subbuffer size configurable with Trace action (`#51 `__) +* Add intra-process tracepoints (`#30 `__) * Allow requiring minimum lttng package version for is_lttng_installed (`#59 `__) * Include tracepoints by default on Linux (`#31 `__) * Enable document generation using rosdoc2 for ament_python pkgs (`#50 `__) * Replace distutils.version.StrictVersion with packaging.version.Version (`#42 `__) * Remove deprecated context_names parameter (`#38 `__) -* Contributors: Christophe Bedard, Yadu +* Contributors: Christophe Bedard, Christopher Wecht, Yadu, ymski -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`trajectory_msgs `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`trajectory_msgs `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update common_interfaces to C++17. (`#215 `__) * [rolling] Update maintainers - 2022-11-07 (`#210 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`turtlesim `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`turtlesim `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Remove the range constraints from the holonomic parameter. (`#150 `__) (`#151 `__) +* Add icon (`#148 `__) (`#149 `__) * Update turtlesim to C++17. (`#146 `__) * [rolling] Update maintainers - 2022-11-07 (`#145 `__) * Add parameter to enable holonomic motion (`#131 `__) * Add humble turtle (`#140 `__) -* Contributors: Audrow Nash, Chris Lalancette, Daisuke Sato +* Contributors: Audrow Nash, Chris Lalancette, Daisuke Sato, mergify[bot] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`type_description_interfaces `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`type_description_interfaces `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Add GetTypeDescription.srv (rep2011) (`#153 `__) * new package and interfaces for describing other types (`#146 `__) * Contributors: Emerson Knapp, William Woodall -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`unique_identifier_msgs `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`unique_identifier_msgs `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#26 `__) * Depend on rosidl_core instead of rosidl_defaults (`#24 `__) @@ -3959,9 +4167,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Jacob Perron, methylDragon -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`urdf `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`urdf `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#35 `__) * [urdf] package.xml: add missing exec_depend to urdf_parser_plugin (`#34 `__) @@ -3971,26 +4179,26 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Daniel Reuter, Tobias Neumann -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`urdf_parser_plugin `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`urdf_parser_plugin `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#35 `__) * Contributors: Audrow Nash -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`visualization_msgs `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`visualization_msgs `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Update common_interfaces to C++17. (`#215 `__) * [rolling] Update maintainers - 2022-11-07 (`#210 `__) * Contributors: Audrow Nash, Chris Lalancette -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`yaml_cpp_vendor `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`yaml_cpp_vendor `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [rolling] Update maintainers - 2022-11-07 (`#40 `__) * Export YAML_CPP_DLL define on Windows (`#30 `__) (`#38 `__) @@ -4001,9 +4209,9 @@ This page is a list of the complete changes in all ROS 2 core packages since the * Contributors: Audrow Nash, Cristóbal Arroyo, Jacob Perron, hannes09 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`zstd_vendor `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`zstd_vendor `__ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Add Michael Orlov as maintainer in rosbag2 packages (`#1215 `__) * Bump zstd to 1.4.8 in zstd_vendor package (`#1132 `__) diff --git a/source/Releases/Release-Bouncy-Bolson.rst b/source/Releases/Release-Bouncy-Bolson.rst index 748977ee162..c7c63a10765 100644 --- a/source/Releases/Release-Bouncy-Bolson.rst +++ b/source/Releases/Release-Bouncy-Bolson.rst @@ -43,7 +43,7 @@ New features in this ROS 2 release * Various improvements to the Python client library. * Support for publishing and subscribing to serialized data. This is the foundation for the upcoming work towards a native rosbag implementation. -* More `command line tools <../../Concepts/About-Command-Line-Tools>`\ , e.g. for working with parameters and lifecycle states. +* More `command line tools <../../Concepts/Basic/About-Command-Line-Tools>`\ , e.g. for working with parameters and lifecycle states. * Binary packages / fat archives support three RMW implementations by default (without the need to build from source): * eProsima's Fast RTPS (default) diff --git a/source/Releases/Release-Crystal-Clemmys.rst b/source/Releases/Release-Crystal-Clemmys.rst index 8dcf7a67f04..16ff7f3ebbb 100644 --- a/source/Releases/Release-Crystal-Clemmys.rst +++ b/source/Releases/Release-Crystal-Clemmys.rst @@ -35,7 +35,7 @@ New features in this ROS 2 release * `image_transport `__ * `navigation2 `__ * `rosbag2 `__ -* `rqt <../../Concepts/About-RQt>` +* `rqt <../../Concepts/Intermediate/About-RQt>` * Improvement in memory management * Introspection information about nodes * Launch system improvements diff --git a/source/Releases/Release-Dashing-Diademata.rst b/source/Releases/Release-Dashing-Diademata.rst index 09d48a347ba..1b715590163 100644 --- a/source/Releases/Release-Dashing-Diademata.rst +++ b/source/Releases/Release-Dashing-Diademata.rst @@ -772,7 +772,7 @@ Known Issues * `[ros2/rclcpp#715] `_ There is an inconsistency in the way that parameter YAML files are loaded between standalone ROS 2 nodes and composed ROS 2 nodes. Currently available workarounds are noted in an `issue comment `_ -* `[ros2/rclpy#360] `_ rclpy nodes ignore ``ctrl-c`` when using OpenSplice on Windows. +* `[ros2/rclpy#360] `_ rclpy nodes ignore :kbd:`ctrl-c` when using OpenSplice on Windows. * `[ros2/rosidl_typesupport_opensplice#30] `_ There is a bug preventing nesting a message inside of a service or action definition with the same name when using OpenSplice. * `[ros2/rclcpp#781] `_ Calling ``get_parameter``/``list_parameter`` from within ``on_set_parameter_callback`` causes a deadlock on Dashing. This is fixed for Eloquent, but is an ABI break so has not been backported to Dashing. * `[ros2/rclcpp#912] `_ Inter-process communication forces a message copy when intra-process communication takes place between an ``std::unique_ptr`` publisher and a single ``std::unique_ptr`` subscription (published ``std::unique_ptr`` is internally being promoted to an ``std::shared_ptr``). diff --git a/source/Releases/Release-Galactic-Geochelone.rst b/source/Releases/Release-Galactic-Geochelone.rst index 38810dad412..0e843b99787 100644 --- a/source/Releases/Release-Galactic-Geochelone.rst +++ b/source/Releases/Release-Galactic-Geochelone.rst @@ -6,7 +6,7 @@ Galactic Geochelone (``galactic``) .. toctree:: :hidden: - Galactic-Geochelone-Complete-Changelog.rst + Galactic-Geochelone-Complete-Changelog .. contents:: Table of Contents :depth: 2 @@ -240,7 +240,7 @@ Tools to check for QoS incompatibilities Built on top of new QoS compatibility check APIs, ``ros2doctor`` and ``rqt_graph`` can now detect and report QoS incompatibilities between publishers and subscriptions. -Given a publisher and a subscription with `incompatible QoS settings <../../Concepts/About-Quality-of-Service-Settings>`: +Given a publisher and a subscription with `incompatible QoS settings <../../Concepts/Intermediate/About-Quality-of-Service-Settings>`: Terminal 1: diff --git a/source/Releases/Release-Humble-Hawksbill.rst b/source/Releases/Release-Humble-Hawksbill.rst index 50bc9eb74cc..667ab11e024 100644 --- a/source/Releases/Release-Humble-Hawksbill.rst +++ b/source/Releases/Release-Humble-Hawksbill.rst @@ -1,16 +1,12 @@ -.. _latest_release: - .. _humble-release: -.. move this directive when next release page is created - Humble Hawksbill (``humble``) ============================= .. toctree:: :hidden: - Humble-Hawksbill-Complete-Changelog.rst + Humble-Hawksbill-Complete-Changelog .. contents:: Table of Contents :depth: 2 @@ -47,10 +43,6 @@ Installation `Install Humble Hawksbill <../../humble/Installation.html>`__ -New features in this ROS 2 release ----------------------------------- - - Changes in Patch Release 1 (2022-11-23) --------------------------------------- @@ -65,7 +57,7 @@ This behavior matches that of ROS 1's ``rostopic`` (http://wiki.ros.org/ROS/YAML Related PR: `ros2/ros2cli#751 `_ -Changes since the Galactic release +New features in this ROS 2 release ---------------------------------- ament_cmake_gen_version_h @@ -320,8 +312,8 @@ New actions * Related PRs: `ros2/launch_ros#260 `_ and `ros2/launch_ros#281 `_ -SROS2 Security enclaves now support Certificate Revocation Lists -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +SROS2 Security enclaves support Certificate Revocation Lists +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Certificate Revocation Lists (CRLs) are a concept where particular certificates can be revoked before their expiration. As of Humble, it is now possible to put a CRL in an SROS2 security enclave and have it be honored. @@ -450,6 +442,42 @@ See `ros2/rviz#849 `__ for more informati Changes since the Galactic release ---------------------------------- +C++ headers are installed in a subdirectory +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In ROS 2 releases prior to Humble, C++ headers for all packages were installed into a single include directory. +For instance, in Galactic, the directory structure looks like this (reduced for brevity): + +.. code:: + + /opt/ros/galactic/include/ + ├── rcl + │   ├── node.h + ├── rclcpp + │   ├── node.hpp + + +This structure can cause serious problems when trying to use overlays. +That is, it is very possible to get the wrong set of header files due to include directory order. +See https://colcon.readthedocs.io/en/released/user/overriding-packages.html for a detailed explanation of the problems. + +To help combat this, in Humble (and in all ROS 2 releases going forward), the directory structure has changed: + +.. code:: + + /opt/ros/humble/include + ├── rcl + │   └── rcl + │   ├── node.h + ├── rclcpp + │   └── rclcpp + │   ├── node.hpp + +Note that downstream packages that use these headers do *not* have to change; using ``#include `` works as it always did before. +However, when using IDEs that are looking for include directories, it may be necessary to add the individual include directories to the search path. + +See https://github.com/ros2/ros2/issues/1150 for more information, including the reasoning behind this change. + common_interfaces ^^^^^^^^^^^^^^^^^ @@ -537,7 +565,7 @@ ROS_DISABLE_LOANED_MESSAGES environment variable added """""""""""""""""""""""""""""""""""""""""""""""""""""" This environment variable can be used to disable loaned messages support, independently if the rmw supports them or not. -For more details, see the guide :doc:`Disabling Zero Copy Loaned Messages <../How-To-Guides/Disabling-ZeroCopy-loaned-messages>`. +For more details, see the guide :doc:`Configure Zero Copy Loaned Messages <../How-To-Guides/Configure-ZeroCopy-loaned-messages>`. rclcpp ^^^^^^ @@ -714,7 +742,7 @@ ros1_bridge ^^^^^^^^^^^ Since there is no official ROS 1 distribution on Ubuntu Jammy and forward, ``ros1_bridge`` is now compatible with the Ubuntu-packaged versions of ROS 1. -More details about using ``ros1_bridge`` with Jammy packages are available in `the how-to guides <../How-To-Guides/Using-ros1_bridge-Jammy-upstream.rst>`__. +More details about using ``ros1_bridge`` with Jammy packages are available in :doc:`the how-to guides <../How-To-Guides/Using-ros1_bridge-Jammy-upstream>`. ros2cli ^^^^^^^ diff --git a/source/Releases/Release-Iron-Irwini.rst b/source/Releases/Release-Iron-Irwini.rst index 221cc3ba2dc..0a59c44d147 100644 --- a/source/Releases/Release-Iron-Irwini.rst +++ b/source/Releases/Release-Iron-Irwini.rst @@ -1,9 +1,14 @@ -.. _upcoming-release: +.. _latest_release: .. _iron-release: -ROS 2 Iron Irwini (codename 'iron'; May, 2023) -============================================== +Iron Irwini (``iron``) +====================== + +.. toctree:: + :hidden: + + Iron-Irwini-Complete-Changelog .. contents:: Table of Contents :depth: 2 @@ -11,6 +16,7 @@ ROS 2 Iron Irwini (codename 'iron'; May, 2023) *Iron Irwini* is the ninth release of ROS 2. What follows is highlights of the important changes and features in Iron Irwini since the last release. +For a list of all of the changes since Humble, see the :doc:`long form changelog `. Supported Platforms ------------------- @@ -36,7 +42,7 @@ For more information about RMW implementations, compiler / interpreter versions, Installation ------------ -To come. +`Install Iron Irwini <../../iron/Installation.html>`__ New features in this ROS 2 release ---------------------------------- @@ -81,6 +87,29 @@ There are examples of this in action in https://github.com/ros2/demos/blob/iron/ See https://github.com/ros2/rclcpp/pull/1947, https://github.com/ros2/rclpy/pull/966, and https://github.com/ros2/demos/pull/565 for more information. +Improved discovery options +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Previous ROS 2 versions offered limited discovery options. +The default behavior for DDS based RMW implementations was to discover any node reachable via multicast. +It could be limited to the same machine by setting the environment variable ``ROS_LOCALHOST_ONLY``, but any additional configuration required configuring the middleware directly, usually via middleware specific XML files and environment variables. +ROS Iron retains the same default discovery behavior, but deprecates ``ROS_LOCALHOST_ONLY`` in favor of more granular options. + +* ``ROS_AUTOMATIC_DISCOVERY_RANGE`` controls how far ROS nodes will try to discover each other. Valid options are: + + * ``SUBNET`` - The default, and for DDS-based middlewares it will discover any node reachable via multicast. + * ``LOCALHOST`` - Will only try to discover other nodes on the same machine. + * ``OFF`` - Will not attempt to discover any other nodes automatically, even on the same machine. + * ``SYSTEM_DEFAULT`` - Will not change any discovery settings. This is useful when you already have custom settings for your middleware and don't want ROS to change them. + +* ``ROS_STATIC_PEERS`` - A semicolon (``;``) separated list of addresses that ROS should try to discover nodes on. This allows the user to connect to nodes on specifc machines (as long as their discovery range is not set to ``OFF``). + +For example, you might have several robots with ``ROS_AUTOMATIC_DISCOVERY_RANGE`` set to ``LOCALHOST`` so they don't communicate with each other. +When you want to connect RViz to one of them, you add it's address to ``ROS_STATIC_PEERS`` in your terminal. +Now you can use ROS 2 CLI and visualization tools to interact with the robot. + +See https://github.com/ros2/ros2/issues/1359 for more information about this feature. + Matched events ^^^^^^^^^^^^^^ @@ -92,6 +121,9 @@ Users can provide each publisher and subscription with callback functions that a See the tracking issue at https://github.com/ros2/rmw/issues/330 for more information. +* C++ Demo of Matched Events: https://github.com/ros2/demos/blob/iron/demo_nodes_cpp/src/events/matched_event_detect.cpp +* Python Demo of Matched Events: https://github.com/ros2/demos/blob/iron/demo_nodes_py/demo_nodes_py/events/matched_event_detect.py + External configuration services of loggers ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -102,6 +134,59 @@ Be advised that the ``enable_logger_service`` option is disabled by default, so See https://github.com/ros2/ros2/issues/1355 for more information. +Type Description Distribution +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +It is now possible to communicate information about the types of ROS 2 messages, so that systems with potentially-different types of the same name may discover their compatibility more transparently. +This umbrella of capabilities, which is defined by a subset of REP-2011: Evolving Message Types, has had many parts land in Iron. + +First, the introduction of the new package `type_description_interfaces `__ provides a common way to communicate the descriptions of ROS 2 communication interface types (msg, srv, action). + +Next, a method to hash type descriptions has been decided on, the ROS Interface Hashing Standard (RIHS) - starting with the first version RIHS01. +RIHS hashes are automatically calculated for all compiled ROS types at build time, and baked into the generated code so that they can be inspected. +These hashes are also communicated automatically during discovery, and included in ``rmw_topic_endpoint_info_t`` for graph introspection queries such as ``get_publishers_info_by_topic``. + +The full ``TypeDescription`` data structure, as well as the raw source text (such as ``.msg`` file) that were used to generate it are now baked in by default to the message libraries, so they can be used by ``typesupport`` or end users. +While we expect this data to provide value to most users, some users trying to minimize bytes in their install space can disable the feature when building ROS 2 Core by defining the CMake variable ``ROSIDL_GENERATOR_C_DISABLE_TYPE_DESCRIPTION_CODEGEN``. + +Finally, the new service ``type_description_interfaces/GetTypeDescription.srv`` has been defined to allow nodes, on encountering an unknown RIHS type hash, to request the full definition from the node advertising that type. +Work is in progress to provide this feature natively in ROS 2 Nodes, as an optional switch on node construction. +This feature has not yet shipped, but is expected to be backported into Iron sometime mid-2023. +Meanwhile, user nodes could implement this service indepedently, using the stable service interface. + +See `REP 2011 `__ for the design proposal. +See `Type Description Distribution `__ for tracking development on the feature set. + +Dynamic Types and Dynamic Messages +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Alongside the type description distribution feature mentioned above, is the ability to construct and access dynamically created types at runtime (i.e., dynamic types). +This feature is available in Iron for Fast DDS and ``rcl``, with new ``rmw`` interfaces for supporting the taking of messages as dynamic messages (i.e., messages built from or following the structure of the dynamic type). + +First, utilities were introduced into `rosidl `__ to aid in the construction and manipulation of type descriptions. + +Next, the `rosidl_dynamic_typesupport `__ package was written and provides a middleware-agnostic interface to construct dynamic types and dynamic messages at runtime. +Types can be constructed at runtime either programmatically, or by parsing a ``type_description_interfaces/TypeDescription`` message. + +.. note:: + + The ``rosidl_dynamic_typesupport`` library requires serialization support libraries to implement the middleware-specific dynamic type behavior. + A serialization support library for Fast DDS was implemented in `rosidl_dynamic_typesupport_fastrtps `__. + Ideally more middlewares will implement support libraries, expanding the number of middlewares that support this feature. + +Finally, to support the use of dynamic types and dynamic messages, new methods were added to `rmw `__ and `rcl `__ that support: + +- The ability to obtain of middleware-specific serialization support +- The ability to construct message type support at runtime that use dynamic types +- The ability to take dynamic messages using dynamic type + +Work is in progress to enable the use of dynamic types to create subscriptions in the client libraries (see the ``rclcpp`` issue below), though it is uncertain when the feature will land or be backported. +This will allow users to subscribe to topics whose type descriptions are only known at runtime. +In the meantime, users may write their own subscriptions that subscribe to dynamic types by using the new ``rmw`` and ``rcl`` features introduced as part of this feature set. + +See `REP 2011 `__ for the design proposal. +See `Dynamic Subscription `__ for tracking development on the feature set, with `rclcpp `__ needing the bulk of the work. + ``launch`` ^^^^^^^^^^ @@ -206,6 +291,32 @@ To make this a bit better, there is now a new ``NodeInterfaces`` class that can There are examples on how to use this in https://github.com/ros2/rclcpp/pull/2041. +Introduction of a new executor type: the Events Executor +"""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +The ``EventsExecutor`` from iRobot has been merged into the main ``rclcpp`` codebase. +This alternative executor implementation uses event-driven callbacks from the middleware implementations to fire callbacks at the ``rclcpp`` layer. +In addition to the push-based model, the ``EventsExecutor`` also moves timer management into a separate thread, which can allow for more accurate results and lower overhead, especially with many timers. + +The ``EventsExecutor`` has a substantial set of documentation and use-in-practice that make it a strong candidate for inclusion in the ``rclcpp`` codebase. +For information about the initial implementation proposal as well as performance benchmarks, see https://discourse.ros.org/t/ros2-middleware-change-proposal/15863. +For more information about the design, see the design PR: https://github.com/ros2/design/pull/305. + +Since the API is the same, trying the ``EventsExecutor`` is as straightforward as replacing your current Executor implementation (eg. ``SingleThreadedExecutor``): + +.. code-block:: C++ + + #include + using rclcpp::experimental::executors::EventsExecutor; + + EventsExecutor executor; + executor.add_node(node); + executor.spin(); + +**Note** The ``EventsExecutor`` and ``TimersManager`` are currently in the ``experimental`` namespace. +While it has been used as a standalone implementation for some time https://github.com/irobot-ros/events-executor, it was decided to use the ``experimental`` namespace for at least one release to give latitude in changing the API within the release. +Use caution as it will not be subject to the same API/ABI guarantees that the non-experimental code has. + ``rclpy`` ^^^^^^^^^ @@ -599,6 +710,71 @@ This release also allows playing back data from either the ``sqlite3`` file form See https://github.com/ros2/rosbag2/pull/1160 for more information. +Store message definitions in bag files with SQLite3 plugin +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +Now we support saving message definitions to the ``sqlite3`` database file in the same format +as we are saving it to the ``mcap`` file. +This opens an opportunity for third-party tools to have +the ability to deserialize rosbag2 files without having the correct version of all the original +.msg files on the machine that is decoding the bag file recorded with ``sqlite3`` plugin. + +See https://github.com/ros2/rosbag2/issues/782 and https://github.com/ros2/rosbag2/pull/1293 for +more information. + + +New playback and recording controls +""""""""""""""""""""""""""""""""""" + +Several pull requests have been added to enhance the user's control over playback of bags. +Pull request `960 `_ adds the ability to play bag for +a specified number of seconds. +And pull request `1005 `_ allows to play bag until specified timestamp. +Another pull request `1007 `_ adds the ability to +stop playback remotely via service call. +Stop will unpause player if it was in pause mode, stop playback and force exit from play() method if it was in progress. + +Managing recording via service calls +"""""""""""""""""""""""""""""""""""" + +There are new options to control the recording process from remote nodes. +The pull request `1131 `_ adds the ability to pause and +resume recording via service calls. +Another pull request `1115 `_ adds the ability to split +bags during recording by sending service call. + +Filtering topics via regular expression during playback +""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +Users sometimes need to replay only a subset of topics from recorded bags and the following two pull request +adds such capability. +Pull request `1034 `_ adds a new option +``--topics-regex`` that allows filtering topics via regular expressions. +The ``--topics-regex`` option accepts multiple regular expressions separated by space. +And pull request `1046 `_ adds the ability to exclude some +certain topics from being replayed by providing regular expression in a new ``--exclude`` +(and ``-x``) option. + +Allow plugins to register their own CLI verb arguments +"""""""""""""""""""""""""""""""""""""""""""""""""""""" + +Pull request `1209 `_ adds the ability for ``rosbag2`` plugins to +register an optional Python entrypoint providing plugin-specific CLI argument values. +As a result the command line option ``--storage-preset-profile`` for ``ros2 bag record`` verb will have +different valid options depending on the underlying storage plugin. + +Other changes +""""""""""""" + +The pull request `1038 `_ adds the ability to record +any key/value pair in 'custom' field in metadata.yaml file. +It is useful when users need to save some hardware specific id or coordinates where the recording was captured. +And pull request `1180 `_ adds an option to change the underlying +node name for the recorder via providing the new command line ``--node-name`` option. +This option might be used for creating remote distributed recording with multiple rosbag2 recorder instances. +It provides the ability to send service calls for managing the recording process to the dedicated +rosbag2 recorder instances. + ``rosidl_python`` ^^^^^^^^^^^^^^^^^ @@ -665,7 +841,14 @@ See https://github.com/ros2/ros2_tracing/pull/30 and https://github.com/ros2/rcl Known Issues ------------ -To come. +* ``rmw_connextdds`` does not work with Windows Binary release packages. + RTI is not longer distributing ``RTI ConnextDDS 6.0.1`` which was used by the packaging jobs to create the binaries for Windows. + Instead they now distribute ``RTI ConnextDDS 6.1.0`` which is ABI incompatible with the generated binaries. + The solution is to rely on source builds of ROS 2 and ``rmw_connextdds`` on Windows. + +* ``sros2`` on Windows requires users to downgrade the ``cryptography`` python module to ``cryptography==38.0.4`` as discussed `here `_. + +* ``ros1_bridge`` does not work with ROS Noetic packages from `upstream Ubuntu `_. The suggested workaround is to build ROS Noetic from sources, then build the ``ros1_bridge`` using that. Release Timeline ---------------- diff --git a/source/Releases/Release-Jazzy-Jalisco.rst b/source/Releases/Release-Jazzy-Jalisco.rst new file mode 100644 index 00000000000..17b7339e0f3 --- /dev/null +++ b/source/Releases/Release-Jazzy-Jalisco.rst @@ -0,0 +1,96 @@ +.. _upcoming-release: + +.. _jazzy-release: + +Jazzy Jalisco (``jazzy``) +========================= + +.. contents:: Table of Contents + :depth: 2 + :local: + +*Jazzy Jalisco* is the tenth release of ROS 2. +What follows is highlights of the important changes and features in Jazzy Jalisco since the last release. + +Supported Platforms +------------------- + +Jazzy Jalisco is primarily supported on the following platforms: + +Tier 1 platforms: + +* TODO + +Tier 2 platforms: + +* TODO + +Tier 3 platforms: + +* TODO + +For more information about RMW implementations, compiler / interpreter versions, and system dependency versions see `REP 2000 `__. + +Installation +------------ + +TODO + +New features in this ROS 2 release +---------------------------------- + +Development progress +-------------------- + +For progress on the development of Jazzy Jalisco, see `this project board `__. + +For the broad process followed by Jazzy Jalisco, see the :doc:`process description page `. + +Known Issues +------------ + +To come. + +Release Timeline +---------------- + + November, 2023 - Platform decisions + REP 2000 is updated with the target platforms and major dependency versions. + + By January, 2024 - Rolling platform shift + Build farm is updated with the new platform versions and dependency versions for Jazzy Jalisco. + + Mon. April 8, 2024 - Alpha + RMW freeze + Preliminary testing and stabilization of ROS Base [1]_ packages, and API and feature freeze for RMW provider packages. + + Mon. April 15, 2024 - Freeze + API and feature freeze for ROS Base [1]_ packages in Rolling Ridley. + Only bug fix releases should be made after this point. + New packages can be released independently. + + Mon. April 22, 2024 - Branch + Branch from Rolling Ridley. + ``rosdistro`` is reopened for Rolling PRs for ROS Base [1]_ packages. + Jazzy development shifts from ``ros-rolling-*`` packages to ``ros-jazzy-*`` packages. + + Mon. April 29, 2024 - Beta + Updated releases of ROS Desktop [2]_ packages available. + Call for general testing. + + Wed, May 1, 2024 - Kick off of Tutorial Party + Tutorials hosted at https://github.com/osrf/ros2_test_cases are open for community testing. + + Mon. May 13, 2024 - Release Candidate + Release Candidate packages are built. + Updated releases of ROS Desktop [2]_ packages available. + + Mon. May 20, 2024 - Distro Freeze + Freeze rosdistro. + No PRs for Jazzy on the ``rosdistro`` repo will be merged (reopens after the release announcement). + + Thu. May 23, 2024 - General Availability + Release announcement. + ``rosdistro`` is reopened for Jazzy PRs. + +.. [1] The ``ros_base`` variant is described in `REP 2001 (ros-base) `_. +.. [2] The ``desktop`` variant is described in `REP 2001 (desktop-variants) `_. diff --git a/source/Releases/iron-small.png b/source/Releases/iron-small.png new file mode 100644 index 00000000000..eb5e0f71347 Binary files /dev/null and b/source/Releases/iron-small.png differ diff --git a/source/The-ROS2-Project/Contributing.rst b/source/The-ROS2-Project/Contributing.rst index 23a407f861a..c57b230c6b3 100644 --- a/source/The-ROS2-Project/Contributing.rst +++ b/source/The-ROS2-Project/Contributing.rst @@ -67,7 +67,6 @@ Development Guides Contributing/Developer-Guide Contributing/Code-Style-Language-Versions Contributing/Quality-Guide - Contributing/Migration-Guide Contributing/Build-Farms Contributing/Windows-Tips-and-Tricks Contributing/Contributing-To-ROS-2-Documentation diff --git a/source/The-ROS2-Project/Contributing/Build-Farms.rst b/source/The-ROS2-Project/Contributing/Build-Farms.rst index 59792deb648..a01120bdaa6 100644 --- a/source/The-ROS2-Project/Contributing/Build-Farms.rst +++ b/source/The-ROS2-Project/Contributing/Build-Farms.rst @@ -54,7 +54,7 @@ The names of the jobs encode their type and purpose: [1]_ * ``{distro}src_{platf}__{package}__{platform}__source`` build source packages of releases * ``{distro}bin_{platf}__{package}__{platform}__binary`` build binary packages of releases - For instance, the binary packaging job of rclcpp on ROS 2 Humble (running on Ubuntu Jammy amd64) is named ``Hbin_uJ64__rclcpp__ubuntu_focal_amd64__binary``. + For instance, the binary packaging job of rclcpp on ROS 2 Iron (running on Ubuntu Jammy amd64) is named ``Ibin_uJ64__rclcpp__ubuntu_jammy_amd64__binary``. * devel jobs: @@ -64,7 +64,7 @@ The names of the jobs encode their type and purpose: [1]_ * ``{distro}pr__{package}__{platform}`` perform a CI build for a pull request - For instance, the PR job for rclcpp on ROS 2 Humble (running on Ubuntu Jammy amd64) is named ``Hpr__rclcpp__ubuntu_jammy_amd64``. + For instance, the PR job for rclcpp on ROS 2 Iron (running on Ubuntu Jammy amd64) is named ``Ipr__rclcpp__ubuntu_jammy_amd64``. Execution ......... diff --git a/source/The-ROS2-Project/Contributing/Developer-Guide.rst b/source/The-ROS2-Project/Contributing/Developer-Guide.rst index 6e42285485b..abf89eb4876 100644 --- a/source/The-ROS2-Project/Contributing/Developer-Guide.rst +++ b/source/The-ROS2-Project/Contributing/Developer-Guide.rst @@ -272,7 +272,7 @@ When filing an issue please make sure to: - **The specific version of ROS 2.** Reasoning: Some bugs may be present in a particular ROS 2 release and later fixed. It is important to know if your installation includes these fixes. - - **The DDS/RMW implementation being used** (see `this page <../../Concepts/About-Different-Middleware-Vendors>` for how to determine which one). + - **The DDS/RMW implementation being used** (see `this page <../../Concepts/Intermediate/About-Different-Middleware-Vendors>` for how to determine which one). Reasoning: Communication issues may be specific to the underlying ROS middleware being used. - **The ROS 2 client library being used.** Reasoning: This helps us narrow down the layer in the stack at which the issue might be. @@ -470,6 +470,40 @@ Repository layout Each package should be in a subfolder which has the same name as the package. If a repository contains only a single package it can optionally be in the root of the repository. +Upstream Packages +^^^^^^^^^^^^^^^^^ + +Packages in Debian and Ubuntu Upstream +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Thanks to diligent effort from Jochen Sprickerhof and Leopold Palomo-Avellaneda, some of the `ROS 2 packages are now available `_ from the main Debian and Ubuntu repositories. +`Here is a short overview of the process from Jochen at ROSCon 2015 `_. +The original ROS packages have been modified to follow Debian guidelines, which includes splitting packages into multiple pieces, changing names in some cases, installing to /usr according to FHS guidelines, and using soversions on shared libraries. + +In addition several of the bootstrap dependencies such as command line tools like ``vcstool`` and ``colcon`` as well as some libraries like ``osrf-pycommon`` and ``ament`` are also packaged upstream. + +Unlike the OSRF-provided ROS packages from http://packages.ros.org, the packages in the upstream repositories are not attached to a specific :doc:`ROS distribution <../../Releases>`. +Rather, they represent a snapshot in time that will be updated periodically within Debian unstable and then latched at various points into downstream Debian and Ubuntu distributions. + +Don't mix the streams +~~~~~~~~~~~~~~~~~~~~~ + +We strongly recommend against mixing ROS packages from upstream Debian/Ubuntu and from http://packages.ros.org on the same system. +In some cases such a mixed system will work correctly, but there can be negative interactions between the two sets of packages. +We’re working with Jochen and friends to minimize the chance of problems via documentation and package conflict specifications, but we expect some risks to remain, including some fairly subtle issues. + +As such, we recommend that you choose to either install packages from upstream or from http://packages.ros.org, but not both. +Not only should you not install packages from both at the same time, but if you intend to use the upstream packages then you should not even have the http://packages.ros.org entries in your apt sources (i.e. in any files in ``/etc/apt/sources*``). +Having both of them enabled can cause mixing of packages which overlap by name between the two sources, e.g. ``python3-rospkg``. + +Known Differences +~~~~~~~~~~~~~~~~~ + +As compared to the ROS packages from packages.ros.org, there are some differences in the upstream ROS packages that people should be aware of: + +* The package set is incomplete. +* Packages may have different names and be partitioned differently. + Developer Workflow ------------------ diff --git a/source/The-ROS2-Project/Features.rst b/source/The-ROS2-Project/Features.rst index 7b9132f6c00..6aaaa92e85c 100644 --- a/source/The-ROS2-Project/Features.rst +++ b/source/The-ROS2-Project/Features.rst @@ -20,11 +20,11 @@ For planned future development, see the :doc:`Roadmap `. * - Discovery, transport and serialization over DDS - `Article `__ - - * - Support for :doc:`multiple DDS implementations <../Concepts/About-Different-Middleware-Vendors>`, chosen at runtime - - :doc:`Concept <../Concepts/About-Different-Middleware-Vendors>`, :doc:`How-to Guide <../How-To-Guides/Working-with-multiple-RMW-implementations>` + * - Support for :doc:`multiple DDS implementations <../Concepts/Intermediate/About-Different-Middleware-Vendors>`, chosen at runtime + - :doc:`Concept <../Concepts/Intermediate/About-Different-Middleware-Vendors>`, :doc:`How-to Guide <../How-To-Guides/Working-with-multiple-RMW-implementations>` - Currently Eclipse Cyclone DDS, eProsima Fast DDS, and RTI Connext DDS are fully supported. * - Common core client library that is wrapped by language-specific libraries - - :doc:`Details <../Concepts/About-ROS-2-Client-Libraries>` + - :doc:`Details <../Concepts/Basic/About-Client-Libraries>` - * - Publish/subscribe over topics - `Sample code `__\ , `Article `__ @@ -48,7 +48,7 @@ For planned future development, see the :doc:`Roadmap `. - :doc:`Demo <../Tutorials/Intermediate/Composition>` - Currently only in C++. * - Multiple executors (at level of callback groups) in same node - - `Demo `__ + - `Demo `__ - Only in C++. * - Support for nodes with managed lifecycles - :doc:`Demo <../Tutorials/Demos/Managed-Nodes>` @@ -57,7 +57,7 @@ For planned future development, see the :doc:`Roadmap `. - `Demo `__ - * - Command-line introspection tools using an extensible framework - - :doc:`Concept <../Concepts/About-Command-Line-Tools>` + - :doc:`Concept <../Concepts/Basic/About-Command-Line-Tools>` - * - Launch system for coordinating multiple nodes - :doc:`Tutorial <../Tutorials/Intermediate/Launch/Launch-system>` diff --git a/source/The-ROS2-Project/Governance.rst b/source/The-ROS2-Project/Governance.rst index 290831e8c50..579f5925f40 100644 --- a/source/The-ROS2-Project/Governance.rst +++ b/source/The-ROS2-Project/Governance.rst @@ -41,7 +41,6 @@ The current members of the ROS 2 TSC are (23 as of 2022-02-01): .. |robotis| image:: Governance/images/robotis.png .. |ros2| image:: Governance/images/ros2_logo.png .. |rosindustrial| image:: Governance/images/ros-industrial.png -.. |samsung| image:: Governance/images/samsung.svg .. |sony| image:: Governance/images/sony.png .. |tri| image:: Governance/images/tri_logo_landscape-web.svg .. |windriver| image:: Governance/images/windriver.png @@ -107,11 +106,11 @@ The current members of the ROS 2 TSC are (23 as of 2022-02-01):

Bosch logo

-

Bosch: Ralph Lange

+

Bosch: Christian Henkel

Ubuntu logo

-

Canonical: Jeremie Deray

+

Canonical: Mirko Ferrati

eProsima logo

@@ -153,10 +152,6 @@ The current members of the ROS 2 TSC are (23 as of 2022-02-01):

ROS Industriallogo

ROS-Industrial: Matt Robinson

- -

Samsung logo

-

Samsung: TBD

-

Sony logo

Sony: Tomoya Fujita

@@ -179,15 +174,15 @@ The current members of the ROS 2 TSC are (23 as of 2022-02-01):

ROS 2 logo

-

Community Representative: Oliver Michel

+

Community Representative: David V. Lu!!

ROS 2 logo

-

Community Representative: Patrick Musau

+

Community Representative: Steve Macenski

ROS 2 logo

-

Community Representative: Francisco Martin Rico

+

Community Representative: Francisco Martin Rico

@@ -200,129 +195,14 @@ If you are interested in joining the ROS 2 TSC, please inquire via info@openrobo Governance/ROS2-TSC-Charter Governance/ROS2-TSC-Intake-process + Governance/Working-Groups Governance/How-To-Start-A-Community-Working-Group Working Groups (WGs) -------------------- As described in its :doc:`charter `, the TSC establishes working groups (WGs) to discuss and make progress on specific topics. - -The current WGs are (12 as of 2021-01-12): - -Client Libraries -^^^^^^^^^^^^^^^^ - -* Lead(s): Geoffrey Biggs, Alberto Soragna -* Note: **This working group is currently on hiatus. Meetings will resume at some point in the future TBD.** -* Resources: - - * Meeting invite group: `ros-client-libraries-working-group-invites@googlegroups.com `_ - * `Meeting minutes and agendas `_ - * Working group charter: https://github.com/ros2-client-libraries-wg/community - * Discourse tag: `wg-client-libraries `_ - -Control -^^^^^^^ - -* Lead(s): Bence Magyar -* Resources: - - * Webite link: https://control.ros.org - * Meeting invite group `ros-control-working-group-invites@googlegroups.com `_ - * Discourse tag: `wg-ros2-control `_ - -Embedded Systems -^^^^^^^^^^^^^^^^ - -* Lead(s): Lara Moreno, Pablo Garrido -* Resources: - - * `2019-07-29 meeting notes `__ - * `2019-01-15 meeting notes `__ - * Meeting invite group `ros-embedded-working-group-invites@googlegroups.com `_ - * Discourse tag: `wg-embedded `_ - -Middleware -^^^^^^^^^^ - -* Lead(s): William Woodall -* Resources: - - * Meeting invite group `ros-middleware-working-group-invites@googlegroups.com `_ - * Discourse tag: `wg-middleware `_ - -Navigation -^^^^^^^^^^ - -* Lead(s): Steve Macenski -* Resources: - - * `2019-03-17 meeting notes `__ - - * Meeting invite group `ros-navigation-working-group-invites@googlegroups.com `_ - * Discourse tag: `wg-navigation `_ - * Discourse Channel: `Navigation Stack `_ - -Manipulation -^^^^^^^^^^^^ - -* Lead(s): Henning Kayser -* Resources: - - * `About our working group meetings `__ - - * Meeting invite group `ros-manipulation-working-group-invites@googlegroups.com `_ - * Discourse tag: `wg-moveit `_ - * Discourse Channel: `MoveIt `_ - -Real-time -^^^^^^^^^ - -* Lead(s): Andrei Kholodnyi, Carlos San Vicente -* Resources: - - * `Working group website `__ - * `Working Group Community `__ - * Meeting invite group `ros-real-time-working-group-invites@googlegroups.com `_ - * Discourse tag: `wg-real-time `_ - * Matrix chat `+ros-realtime:matrix.org `_ - -.. _Security Working Group: - -Security -^^^^^^^^ - -* Lead(s): Jeremie Deray -* Resources: - - * `ROS 2 Security Working Group Community `__ - * Meeting invite group `ros-security-working-group-invites@googlegroups.com `_ - * Discourse tag: `wg-security `_ - * Matrix chat `+rosorg-security:matrix.org `_ - -Rosbag2 and Tooling -^^^^^^^^^^^^^^^^^^^ - -* Lead(s): Michael Orlov -* Resources: - - * `Charter `__ - * `Meeting Notes `__ - * Meeting invite group `ros-tooling-working-group-invites@googlegroups.com `_ - * Discourse tag: `wg-tooling `_ - * Matrix chat `+ros-tooling:matrix.org `_ - - -If you'd like to join an existing ROS 2 WG, please contact the appropriate group lead(s) directly. -If you'd like to create a new WG, please inquire via info@openrobotics.org. - - -Working Group Policies ----------------------- - - * Meetings should be posted to the Google calendar as well as announced on Discourse. - * Meetings should have notes and be posted to Discourse using appropriate working group tag. - * For attending the groups meetings please join the associated google group to get invites automatically. +More information about working groups, along with a list of active ROS 2 working groups :doc:`can be found here `. Upcoming ROS Events ------------------- @@ -332,8 +212,37 @@ It can be accessed via `iCal - - + + +
+
+ +
+
+
+
If you have an individual event or series of events that you'd like to post please contact info@openrobotics.org diff --git a/source/The-ROS2-Project/Governance/Working-Groups.rst b/source/The-ROS2-Project/Governance/Working-Groups.rst new file mode 100644 index 00000000000..9710b9f4db7 --- /dev/null +++ b/source/The-ROS2-Project/Governance/Working-Groups.rst @@ -0,0 +1,192 @@ +About Working Groups +==================== + +There are two types of ROS 2 working groups, TSC sanctioned working groups and community working groups. +Functionally, there is little distinction between the two types of working groups, the primary distinction being that TSC sanctioned working groups were created by the ROS 2 TSC and deliver regular reports to it. +Community working groups are created and administered by the ROS community for the ROS community, and are not officially sanctioned by the ROS 2 TSC. +Community working groups can become TSC working groups by a simple vote of the ROS 2 TSC. +Community working groups can be created using the process outlined in :doc:`this tutorial. `. + +If you'd like to join an existing ROS 2 working group, please contact the appropriate group lead(s) directly. +If you'd like to create a new working group, please inquire via info@openrobotics.org. + +Working Group Policies +---------------------- + + * Meetings should be posted to the Google calendar as well as announced on Discourse. + * Meetings should have notes and be posted to Discourse using an appropriate working group tag. + * For attending the groups meetings please join the associated google group to get invites automatically. + +TSC Working Groups +------------------ + +The current TSC WGs are (12 as of 2023-08-30): + +Client Libraries +^^^^^^^^^^^^^^^^ + +* Lead(s): Geoffrey Biggs, Alberto Soragna +* Note: **This working group is currently on hiatus. Meetings will resume at some point in the future TBD.** +* Resources: + + * Meeting invite group: `ros-client-libraries-working-group-invites@googlegroups.com `_ + * `Meeting minutes and agendas `_ + * Working group charter: https://github.com/ros2-client-libraries-wg/community + * Discourse tag: `wg-client-libraries `_ + +Control +^^^^^^^ + +* Lead(s): Bence Magyar +* Resources: + + * Website link: https://control.ros.org + * Meeting invite group `ros-control-working-group-invites@googlegroups.com `_ + * `Meeting notes rolling document `_ + * Discourse tag: `wg-ros2-control `_ + + +Middleware +^^^^^^^^^^ + +* Lead(s): William Woodall +* Resources: + + * Meeting invite group `ros-middleware-working-group-invites@googlegroups.com `_ + * Discourse tag: `wg-middleware `_ + +Navigation +^^^^^^^^^^ + +* Lead(s): Steve Macenski +* Resources: + + * `2019-03-17 meeting notes `__ + * Meeting invite group `ros-navigation-working-group-invites@googlegroups.com `_ + * Discourse tag: `wg-navigation `_ + * Discourse Channel: `Navigation Stack `_ + * Slack Group: `Nav2 Slack `_ + +Manipulation +^^^^^^^^^^^^ + +* Lead(s): Henning Kayser +* Resources: + + * `About our working group meetings `__ + + * Meeting invite group `ros-manipulation-working-group-invites@googlegroups.com `_ + * Discourse tag: `wg-moveit `_ + * Discourse Channel: `MoveIt `_ + +Real-time +^^^^^^^^^ + +* Lead(s): Andrei Kholodnyi, Jan Staschulat +* Resources: + + * `Working group website `__ + * `Working Group Community `__ + * Meeting invite group `ros-real-time-working-group-invites@googlegroups.com `_ + * Discourse tag: `wg-real-time `_ + * Matrix chat `+ros-realtime:matrix.org `_ + +.. _Security Working Group: + +Security +^^^^^^^^ + +* Lead(s): Florencia Cabral +* Resources: + + * `ROS 2 Security Working Group Community `__ + * Meeting invite group `ros-security-working-group-invites@googlegroups.com `_ + * Discourse tag: `wg-security `_ + * Matrix chat `+rosorg-security:matrix.org `_ + +Rosbag2 and Tooling +^^^^^^^^^^^^^^^^^^^ + +* Lead(s): Michael Orlov +* Resources: + + * `Charter `__ + * `Meeting Notes `__ + * Meeting invite group `ros-tooling-working-group-invites@googlegroups.com `_ + * Discourse tag: `wg-tooling `_ + * Matrix chat `+ros-tooling:matrix.org `_ + +Community Working Groups +------------------------ + +Community working groups are created and maintained by the ROS community to support ongoing efforts. + +Aerial Robotics (AerialRoboticsWG) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +* Lead(s): Kimberly McGuire, Ramón Roche +* Resources: + + * `Working group community `_ + * `Recordings and Meeting notes `_ + * Discourse tag: `wg-aerial-robotics `_ + * OSRF Discord channel: `#cwg-aerial `_ + +AI Integration +^^^^^^^^^^^^^^ + +* Lead(s): Lara Moreno +* Resources: + + * `Discussion thread: `_ + +Deliberation (DelibWG) +^^^^^^^^^^^^^^^^^^^^^^ + +* Lead(s): Christian Henkel +* Resources: + + * Meeting invite group `ros-wg-deliberation `__ + * Minutes: `gdocs `__ + * Recordings `@ros-wg-deliberation `__ + * Github Organization: `ros-wg-deliberation `__ + * Discourse tag: `wg-delib `__ + +Education (EdWG) +^^^^^^^^^^^^^^^^ + +* Lead(s): Katherine Scott +* Resources: + + * Discourse tag: `wg-education `_ + +Maritime (MaritimeWG) +^^^^^^^^^^^^^^^^^^^^^ + +* Lead(s): Mabel Zhang, Arjo Chakravarty +* Resources: + + * `Working Group Community `__ + * Meeting invite group `maritime-robotics-working-group-invites@googlegroups.com `_ + * Discourse tag: `wg-maritime-robotics `_ + * Matrix chat `#ros-maritime-general:matrix.org `_ + +Rust (RustWG) +^^^^^^^^^^^^^ + +* Lead(s): Esteve Fernandez, Jacob Hassold, Nikolai Morin +* Resources: + + * Discourse tag: `wg-rust `_ + * Matrix chat: `#Rust WG Room `_ + * Repository: `ros2-rust `_ + +SMACC (SMACCWG) +^^^^^^^^^^^^^^^^^^^^^ + +* Lead(s): Brett Aldrich +* Resources: + + * `Working Group Community `__ + * `Google Group `__ + * Discourse tag: `wg-smacc `_ diff --git a/source/The-ROS2-Project/Governance/images/picknik.png b/source/The-ROS2-Project/Governance/images/picknik.png index 818afac525c..6803417475d 100644 Binary files a/source/The-ROS2-Project/Governance/images/picknik.png and b/source/The-ROS2-Project/Governance/images/picknik.png differ diff --git a/source/The-ROS2-Project/Governance/images/samsung.svg b/source/The-ROS2-Project/Governance/images/samsung.svg deleted file mode 100644 index 5fe95d4f29f..00000000000 --- a/source/The-ROS2-Project/Governance/images/samsung.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/source/The-ROS2-Project/ROSCon-Content.rst b/source/The-ROS2-Project/ROSCon-Content.rst index 8f67d2d1d18..0b88df497a3 100644 --- a/source/The-ROS2-Project/ROSCon-Content.rst +++ b/source/The-ROS2-Project/ROSCon-Content.rst @@ -11,6 +11,122 @@ The following `ROSCon `__ talks have been given on ROS 2 .. tabs:: + .. group-tab:: 2023 + + .. list-table:: + :header-rows: 1 + + * - Title + - Links + * - Building the iRobot® Create® 3 Robot: Challenges and Solutions for ROS... + - `video `__ + * - The State of ROS: From the Iron Age to the Jazzy Age + - `video `__ + * - ROS 2 Types On-the-wire: Type Descriptions and Hashing in Iron and onwards + - `video `__ + * - Releasing a new ROS 2 distribution + - `video `__ + * - Panel: Getting Involved with ROS as an Organization + - `video `__ + * - Licensing of ROS Packages: Changes to package.xml and new tool support + - `video `__ + * - SDFormat: A robot description format in constant evolution + - `video `__ + * - Repeatable Reproducible Accessible ROS Development via Dev Containers + - `video `__ + * - Colcon-in-container: say bye to the "it builds on my machine" syndrome + - `video `__ + * - ROS with Kubernetes/KubeEdge + - `video `__ + * - A New ROS 2 Driver for FANUC Robots Utilizing Ethernet/IP + - `video `__ + * - A ROS 2 Package for Online Cobots Impedance Modulation + - `video `__ + * - Real-Time Motion Control in ROS: Uniting HAL with Tormach's ZA6 Robot + - `video `__ + * - A safe and secure ROS 2 multi-domain architecture for AMD embedded het... + - `video `__ + * - Optimizing MoveIt - Costs, Constraints and Betterments + - `video `__ + * - Leveraging a functional approach for more testable and maintainable ROS code + - `video `__ + * - Real-time Data-flow extension for ROS 2 + - `video `__ + * - An Integrated Modelling and Testing Architecture for ROS Nodes + - `video `__ + * - Breaking Bots: Robustness Testing for ROS + - `video `__ + * - Rclex on Nerves: a bare minimum runtime platform for ROS 2 nodes in Elixir + - `video `__ + * - On Use of Nav2 MPPI Controller + - `video `__ + * - Bidirectional navigation with Nav2 + - `video `__ + * - Autonomous Robot Navigation and Localization on 3D Mesh Surfaces in ROS + - `video `__ + * - ROS 2 powered Android VHAL. + - `video `__ + * - ⚡Lightning Talks⚡ + - `video `__ + * - Up, Up, and Away: Adventures in Aerial Robotics + - `video `__ + * - NEXUS: A ROS 2 framework for orchestrating industrial robotic lines and cells + - `video `__ + * - Aerostack2: A framework for developing Multi-Robot Aerial Systems + - `video `__ + * - Creating scalable customized robotic platforms + - `video `__ + * - Create® 3 Robot in the Classroom: Teaching ROS 2 to Undergraduates + - `video `__ + * - ROS 2 On the Browser with WebAssembly for Teaching Robotics + - `video `__ + * - ⚡Lightning Talks⚡ + - `video `__ + * - Octomap is dead: long life Bonxai + - `video `__ + * - Parameters Should be Boring + - `video `__ + * - Using Reference System to evaluate features and performance in a stand... + - `video `__ + * - RosLibRust: Why we built it, why you might want to use it... + - `video `__ + * - Leveraging Secure Discovery Server in ROS 2 + - `video `__ + * - Simulate your World: A deeper look at extending Gazebo + - `video `__ + * - Simulate robots like never before with Open 3D Engine + - `video `__ + * - Simulation of Highly Dynamic Omnidirectional Robots in Isaac Sim + - `video `__ + * - An Integrated Distributed Simulation Environment weaving by Hakoniwa and mROS 2 + - `video `__ + * - Multi-drone simulation with deep q-learning + - `video `__ + * - Supporting Robotic Deliberation: The Deliberation Working Group and To... + - `video `__ + * - FlexBE - The Flexible Behavior Engine: Collaborative Autonomy in ROS 2 + - `video `__ + * - SkiROS2 - A skill-based Robot Control Platform for ROS + - `video `__ + * - Mastering your ROS system state with Petri nets + - `video `__ + * - SpatialVision: Bringing Popping-Out RViz to Life with AirPods + - `video `__ + * - What is Robotics Observability? Scaling ROS from Prototype to Production + - `video `__ + * - Surviving the Flood (of Rosbags) + - `video `__ + * - Improving Your Application's Algorithms and Optimizing Performance Usi... + - `video `__ + * - ROSBag2NuScenes: Share the Bags, Spread the Joy - Autonomous Vehicle R... + - `video `__ + * - PostgreSQL / PostGIS to ROS 2 Bridge for Spatial Data + - `video `__ + * - Efficient data recording and replaying in ROS 2 + - `video `__ + * - Developing on ROS while Scaling + - `video `__ + .. group-tab:: 2022 .. list-table:: diff --git a/source/The-ROS2-Project/Roadmap.rst b/source/The-ROS2-Project/Roadmap.rst index 5a401b2edf8..86c1d5c9cfd 100644 --- a/source/The-ROS2-Project/Roadmap.rst +++ b/source/The-ROS2-Project/Roadmap.rst @@ -15,16 +15,16 @@ This page describes planned work for ROS 2. The set of planned features and development efforts should provide insight into the overall direction of ROS 2. If you would like to see other features on the roadmap, please get in touch with us at info@openrobotics.org. -Iron Roadmap ------------- +Jazzy Roadmap +------------- -Iron Irwini is the ROS 2 release expected in May 2023. -See :ref:`release ` for a detailed timeline. +Jazzy Jalisco is the ROS 2 release expected in May 2024. +See the :doc:`release page <../Releases/Release-Jazzy-Jalisco>` for a detailed timeline. The items in the roadmap below are the major features being worked on by the ROS 2 community. The "Size" is an estimated size of the task, where *Small* means person-days to complete, *Medium* means person-weeks to complete, and *Large* means person-months to complete. -If you are working on a feature for ROS 2 Iron and would like to have it listed, please open a pull request to `ROS 2 Documentation `__. +If you are working on a feature for ROS 2 and would like to have it listed, please open a pull request to `ROS 2 Documentation `__. If you'd like to take on one of these tasks, please :doc:`get in touch with us <../Contact>`. .. raw:: html @@ -43,84 +43,18 @@ If you'd like to take on one of these tasks, please :doc:`get in touch with us < - Size - Owner - Expected Completion - * - Various improvements and port of further functionality for Diagnostics - - Medium - - Bosch - - Q1 2023 - * - License linter and copyright file generator for binary packages - - Medium - - Bosch - - Q2 2023 - * - rclc Dispatcher Executor for non-POSIX OS - - Medium - - Bosch - - Q1 2023 - * - Improve rclcpp executor performance - - Large - - Open Robotics - - Q4 2022 - * - DDS User Experience - Improve the out-of-the-box experience + * - ``rmw_alternate`` development - Large - - Open Robotics - - Q1 2023 - * - DDS User Experience - Configuration of Initial Peers for Discovery - - Small - - Open Robotics - - Q4 2022 - * - DDS User Experience - Develop a configuration tool - - Medium - - Open Robotics - - Q4 2022 - * - Python per-package documentation generation - - Small - - Open Robotics - - Q4 2022 - * - rclpy performance with large messages - - Medium - - Open Robotics - - Q1 2023 - * - ROS 1 to ROS 2 migration documentation and tools - - Medium - - Open Robotics - - Q2 2023 - * - SDF integration - - Medium - - Open Robotics - - Q1 2023 - * - Better error message for launch (stretch goal) + - Intrinsic + - May 2024 + * - ``rosbag2 service record / play`` development - Medium - - Open Robotics - - Q2 2023 - * - Relaunch of individual nodes in a complex system (stretch goal) - - Small - - Open Robotics - - Q2 2023 - * - Logging configuration and features (stretch goal) + - Sony Corporation / Apex.AI + - Dec 2023 + * - ``rosbag2 action record / play`` development - Medium - - Open Robotics - - Q2 2023 - * - Iron release - - Large - - Open Robotics - - Q2 2023 - * - `ContentFiltering fallback in rcl `__ - - Large - - Sony Group Corporation - - Q1 2023 - * - `on_pub/sub_matched callback support `__ - - Medium - - Sony Group Corporation - - Q1 2023 - * - ROS 2 core ContentFiltering Enhancement - - Medium - - Sony Group Corporation - - Q2 2023 - -Additional project-specific roadmaps can be found in the links below: - -- MoveIt2: https://moveit.ros.org/documentation/contributing/roadmap/ -- Nav2: https://navigation.ros.org/roadmap/roadmap.html - + - Sony Corporation / Apex.AI + - May 2024 Planned releases ---------------- @@ -137,4 +71,4 @@ Looking for something to work on, or just want to help out? Here are a few resou 3. For more information on the design of ROS 2 please see `design.ros2.org `__. 4. The core code for ROS 2 is in the `ros2 GitHub organization `__. 5. The Discourse forum/mailing list for discussing ROS 2 design is `ng-ros `__. -6. Questions should be asked on `ROS answers `__\ , make sure to include at least the ``ros2`` tag and the rosdistro version you are running, e.g. ``humble``. +6. Questions should be asked on `Robotics Stack Exchange `__\ , make sure to include at least the ``ros2`` tag and the rosdistro version you are running, e.g. ``{DISTRO}``. diff --git a/source/Tutorials/Advanced.rst b/source/Tutorials/Advanced.rst index 46a5a4ed080..fca3751caca 100644 --- a/source/Tutorials/Advanced.rst +++ b/source/Tutorials/Advanced.rst @@ -8,7 +8,10 @@ Advanced Advanced/Discovery-Server/Discovery-Server Advanced/Allocator-Template-Tutorial Advanced/FastDDS-Configuration + Advanced/Improved-Dynamic-Discovery Advanced/Recording-A-Bag-From-Your-Own-Node-CPP Advanced/Recording-A-Bag-From-Your-Own-Node-Py + Advanced/Reading-From-A-Bag-File-CPP + Advanced/ROS2-Tracing-Trace-and-Analyze Advanced/Simulators/Simulation-Main Advanced/Security/Security-Main diff --git a/source/Tutorials/Advanced/Discovery-Server/figures/ds_partition_example.svg b/source/Tutorials/Advanced/Discovery-Server/figures/ds_partition_example.svg index ed6cf6d1fb1..33e1d94ebba 100644 --- a/source/Tutorials/Advanced/Discovery-Server/figures/ds_partition_example.svg +++ b/source/Tutorials/Advanced/Discovery-Server/figures/ds_partition_example.svg @@ -1,3 +1,3 @@ -
Talker1
Talker1
Server1
Server1
Server2
Server2
Tarlker2
Tarlker2
Listener2
Listener2
Listener1
Listener1
Talker1
Talker1
Tarlker2
Tarlker2
Listener2
Listener2
Listener1
Listener1
Viewer does not support full SVG 1.1
\ No newline at end of file +
Talker1
Talker1
Server1
Server1
Server2
Server2
Talker2
Talker2
Listener2
Listener2
Listener1
Listener1
Talker1
Talker1
Talker2
Talker2
Listener2
Listener2
Listener1
Listener1
Viewer does not support full SVG 1.1
diff --git a/source/Tutorials/Advanced/Discovery-Server/scripts/generate_discovery_packages.bash b/source/Tutorials/Advanced/Discovery-Server/scripts/generate_discovery_packages.bash index b4665215d5b..5d98be1da14 100644 --- a/source/Tutorials/Advanced/Discovery-Server/scripts/generate_discovery_packages.bash +++ b/source/Tutorials/Advanced/Discovery-Server/scripts/generate_discovery_packages.bash @@ -3,7 +3,7 @@ usage="usage: $(basename "$0") SETUP_FILE [PROTOCOL] [-h] -- analyze network trafic of ros2 nodes discovery messages positional arguments: - SETUP_FILE location setup.bash of ROS2 + SETUP_FILE location setup.bash of ROS 2 [optional] PROTOCOL if is SERVER it uses Discovery Service else it uses Simple Discovery options: @@ -23,7 +23,7 @@ while getopts ':h:' option; do done shift $((OPTIND - 1)) -# First argument must be setup.bash of ROS2 +# First argument must be setup.bash of ROS 2 SETUP_FILE=${1} if [ -z ${SETUP_FILE} ] diff --git a/source/Tutorials/Advanced/FastDDS-Configuration.rst b/source/Tutorials/Advanced/FastDDS-Configuration.rst index 878bf9b9a8a..19c3e6ffa51 100644 --- a/source/Tutorials/Advanced/FastDDS-Configuration.rst +++ b/source/Tutorials/Advanced/FastDDS-Configuration.rst @@ -23,7 +23,7 @@ The interface between the ROS 2 stack and *Fast DDS* is provided by the ROS 2 mi This implementation is available in all ROS 2 distributions, both from binaries and from sources. ROS 2 RMW only allows for the configuration of certain middleware QoS -(see :doc:`ROS 2 QoS policies <../../Concepts/About-Quality-of-Service-Settings>`). +(see :doc:`ROS 2 QoS policies <../../Concepts/Intermediate/About-Quality-of-Service-Settings>`). However, ``rmw_fastrtps`` offers extended configuration capabilities to take full advantage of the features in *Fast DDS*. This tutorial will guide you through a series of examples explaining how to use XML files to unlock this extended configuration. @@ -43,15 +43,15 @@ Mixing synchronous and asynchronous publications in the same node In this first example, a node with two publishers, one of them with synchronous publication mode and the other one with asynchronous publication mode, will be created. -``rmw_fastrtps`` uses asynchronous publication mode by default. -When the publisher invokes the write operation, the data is copied into a queue, -a background thread (asynchronous thread) is notified about the addition to the queue, and control of the thread is returned to the user before the data is actually sent. -The background thread is in charge of consuming the queue and sending the data to every matched reader. +``rmw_fastrtps`` uses synchronous publication mode by default. -On the other hand, with synchronous publication mode the data is sent directly within the context of the user thread. +With synchronous publication mode the data is sent directly within the context of the user thread. This entails that any blocking call occurring during the write operation would block the user thread, thus preventing the application from continuing its operation. However, this mode typically yields higher throughput rates at lower latencies, since there is no notification nor context switching between threads. +On the other hand, with asynchronous publication mode, each time the publisher invokes the write operation, the data is copied into a queue, +a background thread (asynchronous thread) is notified about the addition to the queue, and control of the thread is returned to the user before the data is actually sent. +The background thread is in charge of consuming the queue and sending the data to every matched reader. Create the node with the publishers ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -804,7 +804,7 @@ You should see the service waiting for requests: .. code-block:: console - [INFO] [1612977403.805799037] [ping_server]: Ready to serve + [INFO] [1612977403.805799037] [ping_server]: Ready to serve. On the second terminal, run the client node. @@ -824,6 +824,6 @@ At the same time, the output in the server console has been updated: .. code-block:: console - [INFO] [1612977403.805799037] [ping_server]: Ready to serve + [INFO] [1612977403.805799037] [ping_server]: Ready to serve. [INFO] [1612977404.807314904] [ping_server]: Incoming request [INFO] [1612977404.836405125] [ping_server]: Sending back response diff --git a/source/Tutorials/Advanced/Improved-Dynamic-Discovery.rst b/source/Tutorials/Advanced/Improved-Dynamic-Discovery.rst new file mode 100755 index 00000000000..c9a8cba6694 --- /dev/null +++ b/source/Tutorials/Advanced/Improved-Dynamic-Discovery.rst @@ -0,0 +1,265 @@ +.. _ImprovedDynamicDiscovery: + +Improved Dynamic Discovery +========================== + +**Goal:** This tutorial will show how to use the improved dynamic discovery configuration. + +**Tutorial level:** Advanced + +**Time:** 15 minutes + +.. contents:: Table of Contents + :depth: 2 + :local: + +Overview +-------- + +By default, ROS 2 will attempt to find all nodes on all hosts on the same subnet automatically. +However, the following options are available to control the ROS 2 discovery range. + + +Configuration Parameters +------------------------ + +* ``ROS_AUTOMATIC_DISCOVERY_RANGE``: controls how far ROS nodes will try to discover each other. + + Valid options are: + + * ``SUBNET`` is the default, and for DDS based middleware it means it will discover any node reachable via multicast. + * ``LOCALHOST`` means a node will only try to discover other nodes on the same machine. + * ``OFF`` means the node won't discover any other nodes, even on the same machine. + * ``SYSTEM_DEFAULT`` means "don't change any discovery settings". + +* ``ROS_STATIC_PEERS``: is a semicolon (``;``) separated list of addresses that ROS should try to discover nodes on. + This allows connecting to nodes on specific machines (as long as their discovery range is not set to ``OFF``). + +The combination of these two environment variables for local and remote nodes will enable and control the ROS 2 communication discovery range. +The following tables highlight the discovery range behavior for possible combination. + +A ``X`` indicates that nodes A and B will not discover each other and communicate. +A ``O`` indicates that nodes A and B will discover each other and communicate. + +.. list-table:: Node A and B running in the same host + :widths: 20 20 20 20 20 20 20 20 20 + :header-rows: 1 + + * - Same host + - + - + - Node B setting + - + - + - + - + - + * - + - + - + - No static peer + - + - + - With static peer + - + - + * - + - + - + - Off + - Localhost + - Subnet + - Off + - Localhost + - Subnet + * - Node A setting + - No static peer + - Off + - ``X`` + - ``X`` + - ``X`` + - ``X`` + - ``X`` + - ``X`` + * - + - + - Localhost + - ``X`` + - ``O`` + - ``O`` + - ``X`` + - ``O`` + - ``O`` + * - + - + - Subnet + - ``X`` + - ``O`` + - ``O`` + - ``X`` + - ``O`` + - ``O`` + * - + - With static peer + - Off + - ``X`` + - ``X`` + - ``X`` + - ``X`` + - ``X`` + - ``X`` + * - + - + - Localhost + - ``X`` + - ``O`` + - ``O`` + - ``X`` + - ``O`` + - ``O`` + * - + - + - Subnet + - ``X`` + - ``O`` + - ``O`` + - ``X`` + - ``O`` + - ``O`` + + +.. list-table:: Node A and B running in the different hosts + :widths: 20 20 20 20 20 20 20 20 20 + :header-rows: 1 + + * - Different hosts + - + - + - Node B setting + - + - + - + - + - + * - + - + - + - No static peer + - + - + - With static peer + - + - + * - + - + - + - Off + - Localhost + - Subnet + - Off + - Localhost + - Subnet + * - Node A setting + - No static peer + - Off + - ``X`` + - ``X`` + - ``X`` + - ``X`` + - ``X`` + - ``X`` + * - + - + - Localhost + - ``X`` + - ``X`` + - ``X`` + - ``X`` + - ``O`` + - ``O`` + * - + - + - Subnet + - ``X`` + - ``X`` + - ``O`` + - ``X`` + - ``O`` + - ``O`` + * - + - With static peer + - Off + - ``X`` + - ``X`` + - ``X`` + - ``X`` + - ``X`` + - ``X`` + * - + - + - Localhost + - ``X`` + - ``O`` + - ``O`` + - ``X`` + - ``O`` + - ``O`` + * - + - + - Subnet + - ``X`` + - ``O`` + - ``O`` + - ``X`` + - ``O`` + - ``O`` + + +Examples +-------- + +For example, the following commands will limit the ROS 2 communication only with localhost and specific peers: + +.. tabs:: + + .. group-tab:: Linux + + .. code-block:: console + + export ROS_AUTOMATIC_DISCOVERY_RANGE=LOCALHOST + export ROS_STATIC_PEERS=192.168.0.1;remote.com + + To maintain this setting between shell sessions, you can add the command to your shell startup script: + + .. code-block:: console + + echo "export ROS_AUTOMATIC_DISCOVERY_RANGE=LOCALHOST" >> ~/.bashrc + echo "export ROS_STATIC_PEERS=192.168.0.1;remote.com" >> ~/.bashrc + + .. group-tab:: macOS + + .. code-block:: console + + export ROS_AUTOMATIC_DISCOVERY_RANGE=LOCALHOST + export ROS_STATIC_PEERS=192.168.0.1;remote.com + + To maintain this setting between shell sessions, you can add the command to your shell startup script: + + .. code-block:: console + + echo "export ROS_AUTOMATIC_DISCOVERY_RANGE=LOCALHOST" >> ~/.bash_profile + echo "export ROS_STATIC_PEERS=192.168.0.1;remote.com" >> ~/.bash_profile + + .. group-tab:: Windows + + .. code-block:: console + + set ROS_AUTOMATIC_DISCOVERY_RANGE=LOCALHOST + set ROS_STATIC_PEERS=192.168.0.1;remote.com + + If you want to make this permanent between shell sessions, also run: + + .. code-block:: console + + setx ROS_AUTOMATIC_DISCOVERY_RANGE LOCALHOST + setx ROS_STATIC_PEERS 192.168.0.1;remote.com diff --git a/source/Tutorials/Advanced/ROS2-Tracing-Trace-and-Analyze.rst b/source/Tutorials/Advanced/ROS2-Tracing-Trace-and-Analyze.rst new file mode 100644 index 00000000000..a66272e2341 --- /dev/null +++ b/source/Tutorials/Advanced/ROS2-Tracing-Trace-and-Analyze.rst @@ -0,0 +1,191 @@ +How to use ros2_tracing to trace and analyze an application +=========================================================== + +This guide shows how to use `ros2_tracing `_ to trace and analyze a ROS 2 application. +For this guide, the application will be `performance_test `_. + +Overview +-------- + +This guide covers: + +1. running and tracing a ``performance_test`` run +2. analyzing the trace data using `tracetools_analysis `_ to plot the callback durations + +Prerequisites +------------- + +This guide is aimed at real-time Linux systems. +See the :doc:`real-time system setup guide <../Miscellaneous/Building-Realtime-rt_preempt-kernel-for-ROS-2>`. +However, the guide will work if you are using a non-real-time Linux system. + +Installing and building +----------------------- + +Install ROS 2 on Linux by following the :doc:`installation instructions <../../Installation>`. + +.. note:: + + This guide should generally work with all supported Linux distributions. + However, you might need to adapt some commands. + +Install ``babeltrace`` and ``ros2trace``. + +.. code-block:: bash + + sudo apt-get update + sudo apt-get install -y babeltrace ros-{DISTRO}-ros2trace ros-{DISTRO}-tracetools-analysis + + +Source the ROS 2 installation and verify that tracing is enabled: + +.. code-block:: bash + + source /opt/ros/{DISTRO}/setup.bash + ros2 run tracetools status + +You should see ``Tracing enabled`` in the output. + +Then create a workspace, and clone ``performance_test`` and ``tracetools_analysis``. + +.. code-block:: bash + + cd ~/ + mkdir -p tracing_ws/src + cd tracing_ws/src/ + git clone https://gitlab.com/ApexAI/performance_test.git + git clone https://github.com/ros-tracing/tracetools_analysis.git + cd .. + +Install dependencies with rosdep. + +.. code-block:: bash + + rosdep update + rosdep install --from-paths src --ignore-src -y + +Then build and configure ``performance_test`` for ROS 2. +See its `documentation `_. + +.. code-block:: bash + + colcon build --packages-select performance_test --cmake-args -DPERFORMANCE_TEST_RCLCPP_ENABLED=ON + +Next, we will run a ``performance_test`` experiment and trace it. + +Tracing +------- + +Step 1: Trace +^^^^^^^^^^^^^ + +In one terminal, source the workspace and set up tracing. +When running the command, a list of ROS 2 userspace events will be printed. +It will also print the path to the directory that will contain the resulting trace (under ``~/.ros/tracing``). + +.. code-block:: bash + + # terminal 1 + cd ~/tracing_ws + source install/setup.bash + ros2 trace --session-name perf-test --list + +Press enter to start tracing. + +Step 2: Run Application +^^^^^^^^^^^^^^^^^^^^^^^ + +In a second terminal, source the workspace. + +.. code-block:: bash + + # terminal 2 + cd ~/tracing_ws + source install/setup.bash + +Then run the ``performance_test`` experiment (or your own application). +We simply create an experiment with a node publishing ~1 MB messages to another node as fast as possible for 60 seconds using the second highest real-time priority so that we don't interfere with critical kernel threads. +We need to run ``performance_test`` as ``root`` to be able to use real-time priorities. + +.. code-block:: bash + + # terminal 2 + sudo ./install/performance_test/lib/performance_test/perf_test -c rclcpp-single-threaded-executor -p 1 -s 1 -r 0 -m Array1m --reliability RELIABLE --max-runtime 60 --use-rt-prio 98 + +If that last command doesn't work for you (with an error like: "error while loading shared libraries"), run the slightly-different command below. +This is because, for security reasons, we need to manually pass ``*PATH`` environment variables for some shared libraries to be found (see `this explanation `_). + +.. code-block:: bash + + # terminal 2 + sudo env PATH="$PATH" LD_LIBRARY_PATH="$LD_LIBRARY_PATH" ./install/performance_test/lib/performance_test/perf_test -c rclcpp-single-threaded-executor -p 1 -s 1 -r 0 -m Array1m --reliability RELIABLE --max-runtime 60 --use-rt-prio 98 + +.. note:: + + If you're not using a real-time kernel, simply run: + + .. code-block:: bash + + # terminal 2 + ./install/performance_test/lib/performance_test/perf_test -c rclcpp-single-threaded-executor -p 1 -s 1 -r 0 -m Array1m --reliability RELIABLE --max-runtime 60 + +Step 3: Validate Trace +^^^^^^^^^^^^^^^^^^^^^^ + +Once the experiment is done, in the first terminal, press enter again to stop tracing. +Use ``babeltrace`` to quickly look at the resulting trace. + +.. code-block:: bash + + babeltrace ~/.ros/tracing/perf-test | less + +The output of the above command is a human-readable version of the raw Common Trace Format (CTF) data, which is a list of trace events. +Each event has a timestamp, an event type, some information on the process that generated the event, and the values of the fields of the given event type. + +Use the arrow keys to scroll, or press ``q`` to exit. + +Next, we will analyze the trace. + +Analysis +-------- + +`tracetools_analysis `_ provides a Python API to easily analyze traces. +We can use it in a `Jupyter notebook `_ with `bokeh `_ to plot the data. +The ``tracetools_analysis`` repository contains a `few sample notebooks `_, including `one notebook to analyze subscription callback durations `_. + +For this guide, we will plot the durations of the subscription callback in the subscriber node. + +Install Jupyter notebook and bokeh, and then open the sample notebook. + +.. code-block:: bash + + pip3 install bokeh + jupyter notebook ~/tracing_ws/src/tracetools_analysis/tracetools_analysis/analysis/callback_duration.ipynb + +This will open the notebook in the browser. + +Replace the value for the ``path`` variable in the second cell to the path to the trace directory: + +.. code-block:: python + + path = '~/.ros/tracing/perf-test' + +Run the notebook by clicking the *Run* button for each cell. +Running the cell that does the trace processing might take a few minutes on the first run, but subsequent runs will be much quicker. + +You should get a plot that looks similar to this: + +.. image:: ./images/ros2_tracing_guide_result_plot.png + :alt: callback durations result plot + :align: center + +We can see that most of the callbacks take less than 0.01 ms, but there are some outliers taking over 0.02 or 0.03 ms. + +Conclusion +---------- + +This guide showed how to install tracing-related tools. +Then it showed how to trace a `performance_test `_ experiment using `ros2_tracing `_ and plot the callback durations using `tracetools_analysis `_. + +For more trace analyses, take a look at the `other sample notebooks `_ and the `tracetools_analysis API documentation `_. +The `ros2_tracing design document `_ also contains a lot of information. diff --git a/source/Tutorials/Advanced/Reading-From-A-Bag-File-CPP.rst b/source/Tutorials/Advanced/Reading-From-A-Bag-File-CPP.rst new file mode 100644 index 00000000000..10d90125b77 --- /dev/null +++ b/source/Tutorials/Advanced/Reading-From-A-Bag-File-CPP.rst @@ -0,0 +1,312 @@ +Reading from a bag file (C++) +============================= + +**Goal:** Read data from a bag without using the CLI. + +**Tutorial level:** Advanced + +**Time:** 10 minutes + +.. contents:: Contents + :depth: 2 + :local: + +Background +---------- + +``rosbag2`` doesn't just provide the ``ros2 bag`` command line tool. +It also provides a C++ API for reading from and writing to a bag from your own source code. +This allows you to read the contents from a bag without having to play the bag, which can sometimes be useful. + +Prerequisites +------------- + +You should have the ``rosbag2`` packages installed as part of your regular ROS 2 setup. + +If you need to install ROS 2, see the :doc:`Installation instructions <../../Installation>`. + +You should have already completed the :doc:`basic ROS 2 bag tutorial <../Beginner-CLI-Tools/Recording-And-Playing-Back-Data/Recording-And-Playing-Back-Data>`, and we will be using the ``subset`` bag you created there. + +Tasks +----- + +1 Create a Package +^^^^^^^^^^^^^^^^^^ + +Open a new terminal and :doc:`source your ROS 2 installation <../Beginner-CLI-Tools/Configuring-ROS2-Environment>` so that ``ros2`` commands will work. + +In a new or existing :ref:`workspace `, navigate to the ``src`` directory and create +a new package: + +.. code-block:: console + + ros2 pkg create --build-type ament_cmake --license Apache-2.0 bag_reading_cpp --dependencies rclcpp rosbag2_cpp turtlesim + +Your terminal will return a message verifying the creation of your package ``bag_reading_cpp`` and all its necessary files and folders. +The ``--dependencies`` argument will automatically add the necessary dependency lines to ``package.xml`` and ``CMakeLists.txt``. +In this case, the package will use the ``rosbag2_cpp`` package as well as the ``rclcpp`` package. +A dependency on the ``turtlesim`` package is also required for working with the custom turtlesim messages. + +1.1 Update ``package.xml`` +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Because you used the ``--dependencies`` option during package creation, you don't have to manually add dependencies to ``package.xml`` or ``CMakeLists.txt``. +As always, though, make sure to add the description, maintainer email and name, and license information to ``package.xml``. + +.. code-block:: xml + + C++ bag reading tutorial + Your Name + Apache-2.0 + +2 Write the C++ Reader +^^^^^^^^^^^^^^^^^^^^^^ + +Inside your package's ``src`` directory, create a new file called ``simple_bag_reader.cpp`` and paste the following code into it. + +.. code-block:: C++ + + #include + #include + #include + #include + #include + + #include "rclcpp/rclcpp.hpp" + #include "rclcpp/serialization.hpp" + #include "rosbag2_cpp/reader.hpp" + #include "turtlesim/msg/pose.hpp" + + using namespace std::chrono_literals; + + class PlaybackNode : public rclcpp::Node + { + public: + PlaybackNode(const std::string & bag_filename) + : Node("playback_node") + { + publisher_ = this->create_publisher("/turtle1/pose", 10); + timer_ = this->create_wall_timer( + 100ms, std::bind(&PlaybackNode::timer_callback, this)); + + reader_.open(bag_filename); + } + + private: + void timer_callback() + { + while (reader_.has_next()) { + rosbag2_storage::SerializedBagMessageSharedPtr msg = reader_.read_next(); + + if (msg->topic_name != "/turtle1/pose") { + continue; + } + + rclcpp::SerializedMessage serialized_msg(*msg->serialized_data); + turtlesim::msg::Pose::SharedPtr ros_msg = std::make_shared(); + + serialization_.deserialize_message(&serialized_msg, ros_msg.get()); + + publisher_->publish(*ros_msg); + std::cout << '(' << ros_msg->x << ", " << ros_msg->y << ")\n"; + + break; + } + } + + rclcpp::TimerBase::SharedPtr timer_; + rclcpp::Publisher::SharedPtr publisher_; + + rclcpp::Serialization serialization_; + rosbag2_cpp::Reader reader_; + }; + + int main(int argc, char ** argv) + { + if (argc != 2) { + std::cerr << "Usage: " << argv[0] << " " << std::endl; + return 1; + } + + rclcpp::init(argc, argv); + rclcpp::spin(std::make_shared(argv[1])); + rclcpp::shutdown(); + + return 0; + } + +2.1 Examine the code +~~~~~~~~~~~~~~~~~~~~ + +The ``#include`` statements at the top are the package dependencies. +Note the inclusion of headers from the ``rosbag2_cpp`` package for the functions and structures necessary to work with bag files. + +The next line creates the node which will read from the bag file and play back the data. + +.. code-block:: C++ + + class PlaybackNode : public rclcpp::Node + +Now, we can create a timer callback which will run at 10 hz. +Our goal is to replay one message to the ``/turtle1/pose`` topic each time the callback is run. +Note the constructor takes a path to the bag file as a parameter. + +.. code-block:: C++ + + public: + PlaybackNode(const std::string & bag_filename) + : Node("playback_node") + { + publisher_ = this->create_publisher("/turtle1/pose", 10); + timer_ = this->create_wall_timer( + 100ms, std::bind(&PlaybackNode::timer_callback, this)); + +We also open the bag in the constructor. + +.. code-block:: C++ + + reader_.open(bag_filename); + +Now, inside our timer callback, we loop through messages in the bag until we read a message recorded from our desired topic. +Note that the serialized message has timestamp metadata in addition to the topic name. + +.. code-block:: C++ + + void timer_callback() + { + while (reader_.has_next()) { + rosbag2_storage::SerializedBagMessageSharedPtr msg = reader_.read_next(); + + if (msg->topic_name != "/turtle1/pose") { + continue; + } + +We then construct an ``rclcpp::SerializedMessage`` object from the serialized data we just read. +Additionally, we need to create a ROS 2 deserialized message which will hold the result of our deserialization. +Then, we can pass both these objects to the ``rclcpp::Serialization::deserialize_message`` method. + +.. code-block:: C++ + + rclcpp::SerializedMessage serialized_msg(*msg->serialized_data); + turtlesim::msg::Pose::SharedPtr ros_msg = std::make_shared(); + + serialization_.deserialize_message(&serialized_msg, ros_msg.get()); + +Finally, we publish the deserialized message and print out the xy coordinate to the terminal. +We also break out of the loop so that we publish the next message during the next timer calback. + +.. code-block:: C++ + + publisher_->publish(*ros_msg); + std::cout << '(' << ros_msg->x << ", " << ros_msg->y << ")\n"; + + break; + } + +We must also declare the private variables used throughout the node. + +.. code-block:: C++ + + rclcpp::TimerBase::SharedPtr timer_; + rclcpp::Publisher::SharedPtr publisher_; + + rclcpp::Serialization serialization_; + rosbag2_cpp::Reader reader_; + }; + +Lastly, we create the main function which will check that the user passes an argument for the bag file path and spins our node. + +.. code-block:: C++ + + int main(int argc, char ** argv) + { + if (argc != 2) { + std::cerr << "Usage: " << argv[0] << " " << std::endl; + return 1; + } + + rclcpp::init(argc, argv); + rclcpp::spin(std::make_shared(argv[1])); + rclcpp::shutdown(); + + return 0; + } + +2.2 Add executable +~~~~~~~~~~~~~~~~~~ + +Now open the ``CMakeLists.txt`` file. + +Below the dependencies block, which contains ``find_package(rosbag2_cpp REQUIRED)``, add the following lines of code. + +.. code-block:: console + + add_executable(simple_bag_reader src/simple_bag_reader.cpp) + ament_target_dependencies(simple_bag_reader rclcpp rosbag2_cpp turtlesim) + + install(TARGETS + simple_bag_reader + DESTINATION lib/${PROJECT_NAME} + ) + +3 Build and run +^^^^^^^^^^^^^^^ + +Navigate back to the root of your workspace and build your new package. + +.. tabs:: + + .. group-tab:: Linux + + .. code-block:: console + + colcon build --packages-select bag_reading_cpp + + .. group-tab:: macOS + + .. code-block:: console + + colcon build --packages-select bag_reading_cpp + + .. group-tab:: Windows + + .. code-block:: console + + colcon build --merge-install --packages-select bag_reading_cpp + +Next, source the setup files. + +.. tabs:: + + .. group-tab:: Linux + + .. code-block:: console + + source install/setup.bash + + .. group-tab:: macOS + + .. code-block:: console + + source install/setup.bash + + .. group-tab:: Windows + + .. code-block:: console + + call install/setup.bat + +Now, run the script. +Make sure to replace ``/path/to/subset`` with the path to your ``subset`` bag. + +.. code-block:: console + + ros2 run bag_reading_cpp simple_bag_reader /path/to/subset + +You should see the (x, y) coordinates of the turtle printed to the console. + +Summary +------- + +You created a C++ executable that reads data from a bag. +You then compiled and ran the executable which printed some information from the bag to the console. diff --git a/source/Tutorials/Advanced/Recording-A-Bag-From-Your-Own-Node-CPP.rst b/source/Tutorials/Advanced/Recording-A-Bag-From-Your-Own-Node-CPP.rst index e36b8491d2a..6518beb8de9 100644 --- a/source/Tutorials/Advanced/Recording-A-Bag-From-Your-Own-Node-CPP.rst +++ b/source/Tutorials/Advanced/Recording-A-Bag-From-Your-Own-Node-CPP.rst @@ -134,7 +134,7 @@ In the class constructor we begin by creating the writer object we will use to w Now that we have a writer object, we can open the bag using it. We specify just the URI of the bag to create, leaving other options at their defaults. -The default storage options are used, which means that an ``sqlite3``-format bag will be created. +The default storage options are used, which means that an ``mcap``-format bag will be created. The default conversion options are used, too, which will perform no conversion, instead storing messages in the serialisation format they are received in. .. code-block:: C++ @@ -180,8 +180,6 @@ This is why we pass in the topic name and the topic type. The class contains two member variables. 1. The subscription object. - Note that the template parameter is the type of the callback, not the type of the topic. - In this case the callback receives a ``rclcpp::SerializedMessage`` shared pointer, so this is what the template parameter must be. 2. A managed pointer to the writer object used to write to the bag. Note the type of writer used here is the ``rosbag2_cpp::Writer``, the generic writer interface. Other writers may be available with different behaviours. @@ -484,7 +482,7 @@ Now run the node: ros2 run bag_recorder_nodes data_generator_node -Wait for 30 seconds or so, then terminate the node with ``ctrl-c``. +Wait for 30 seconds or so, then terminate the node with :kbd:`ctrl-c`. Next, play back the created bag. .. code-block:: console diff --git a/source/Tutorials/Advanced/Recording-A-Bag-From-Your-Own-Node-Py.rst b/source/Tutorials/Advanced/Recording-A-Bag-From-Your-Own-Node-Py.rst index 39b9b5144e4..d458b746f3d 100644 --- a/source/Tutorials/Advanced/Recording-A-Bag-From-Your-Own-Node-Py.rst +++ b/source/Tutorials/Advanced/Recording-A-Bag-From-Your-Own-Node-Py.rst @@ -59,14 +59,14 @@ Navigate into the ``ros2_ws/src`` directory and create a new package: ros2 pkg create --build-type ament_python bag_recorder_nodes_py --dependencies rclpy rosbag2_py example_interfaces std_msgs Your terminal will return a message verifying the creation of your package ``bag_recorder_nodes_py`` and all its necessary files and folders. -The ``--dependencies`` argument will automatically add the necessary dependency lines to ``package.xml``.txt``. +The ``--dependencies`` argument will automatically add the necessary dependency lines to the ``package.xml``. In this case, the package will use the ``rosbag2_py`` package as well as the ``rclpy`` package. A dependency on the ``example_interfaces`` package is also required for message definitions. 1.1 Update ``package.xml`` and ``setup.py`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Because you used the ``--dependencies`` option during package creation, you don't have to manually add dependencies to ``package.xml``.txt``. +Because you used the ``--dependencies`` option during package creation, you don't have to manually add dependencies to ``package.xml``. As always, though, make sure to add the description, maintainer email and name, and license information to ``package.xml``. .. code-block:: xml @@ -105,7 +105,7 @@ Inside the ``ros2_ws/src/bag_recorder_nodes_py/bag_recorder_nodes_py`` directory storage_options = rosbag2_py._storage.StorageOptions( uri='my_bag', - storage_id='sqlite3') + storage_id='mcap') converter_options = rosbag2_py._storage.ConverterOptions('', '') self.writer.open(storage_options, converter_options) @@ -146,22 +146,22 @@ The ``import`` statements at the top are the package dependencies. Note the importation of the ``rosbag2_py`` package for the functions and structures necessary to work with bag files. In the class constructor, we begin by creating the writer object that we will use to write to the bag. -We are creating a ``SequentialWriter``, which writes messages into the bag in the order received. -Other writers with different behaviours may be available in the `rosbag2 `__. +We are creating a ``SequentialWriter``, which writes messages into the bag in the order they are received. +Other writers with different behaviours may be available in `rosbag2 `__. .. code-block:: Python self.writer = rosbag2_py.SequentialWriter() Now that we have a writer object, we can open the bag using it. -We specify the URI of the bag to create and the format (``sqlite3``), leaving other options at their defaults. +We specify the URI of the bag to create and the format (``mcap``), leaving other options at their defaults. The default conversion options are used, which will perform no conversion and store the messages in the serialization format they are received in. .. code-block:: Python storage_options = rosbag2_py._storage.StorageOptions( uri='my_bag', - storage_id='sqlite3') + storage_id='mcap') converter_options = rosbag2_py._storage.ConverterOptions('', '') self.writer.open(storage_options, converter_options) @@ -190,7 +190,7 @@ We will write data to the bag in the callback. self.subscription The callback receives the message in unserialized form (as is standard for the ``rclpy`` API) and passes the message to the writer, specifying the topic that the data is for and the timestamp to record with the message. -However, the writer requires serialised message to store in the bag. +However, the writer requires serialised messages to store in the bag. This means that we need to serialise the data before passing it to the writer. For this reason, we call ``serialize_message()`` and pass the result of that to the writer, rather than passing in the message directly. @@ -340,7 +340,7 @@ Inside the ``ros2_ws/src/bag_recorder_nodes_py/bag_recorder_nodes_py`` directory storage_options = rosbag2_py._storage.StorageOptions( uri='timed_synthetic_bag', - storage_id='sqlite3') + storage_id='mcap') converter_options = rosbag2_py._storage.ConverterOptions('', '') self.writer.open(storage_options, converter_options) @@ -382,7 +382,7 @@ First, the name of the bag is changed. storage_options = rosbag2_py._storage.StorageOptions( uri='timed_synthetic_bag', - storage_id='sqlite3') + storage_id='mcap') The name of the topic is also changed, as is the data type stored. @@ -480,7 +480,7 @@ Now run the node: ros2 run bag_recorder_nodes_py data_generator_node -Wait for 30 seconds or so, then terminate the node with ``ctrl-c``. +Wait for 30 seconds or so, then terminate the node with :kbd:`ctrl-c`. Next, play back the created bag. .. code-block:: console @@ -521,7 +521,7 @@ Inside the ``ros2_ws/src/bag_recorder_nodes_py/bag_recorder_nodes_py`` directory storage_options = rosbag2_py._storage.StorageOptions( uri='big_synthetic_bag', - storage_id='sqlite3') + storage_id='mcap') converter_options = rosbag2_py._storage.ConverterOptions('', '') writer.open(storage_options, converter_options) diff --git a/source/Tutorials/Advanced/Security/Access-Controls.rst b/source/Tutorials/Advanced/Security/Access-Controls.rst index 9e37888a9fc..511520dc9b7 100644 --- a/source/Tutorials/Advanced/Security/Access-Controls.rst +++ b/source/Tutorials/Advanced/Security/Access-Controls.rst @@ -21,6 +21,8 @@ Setting access controls Background ---------- +Before proceeding ensure you have completed the :doc:`Introducing-ros2-security` tutorial. + Permissions are quite flexible and can be used to control many behaviors within the ROS graph. For this tutorial, we demonstrate a policy which only allows publishing messages on the default ``chatter`` topic. @@ -37,7 +39,7 @@ Begin by making a backup of your permissions files, and open ``permissions.xml`` .. code-block:: bash - cd ~/sros2_demo/demo_keys/enclaves/talker_listener/talker + cd ~/sros2_demo/demo_keystore/enclaves/talker_listener/talker mv permissions.p7s permissions.p7s~ mv permissions.xml permissions.xml~ vi permissions.xml @@ -115,7 +117,7 @@ If the private key has been protected, additional steps may be required to unloc openssl smime -sign -text -in permissions.xml -out permissions.p7s \ --signer permissions_ca.cert.pem \ - -inkey ~/sros2_demo/demo_keys/private/permissions_ca.key.pem + -inkey ~/sros2_demo/demo_keystore/private/permissions_ca.key.pem Launch the node diff --git a/source/Tutorials/Advanced/Security/Examine-Traffic.rst b/source/Tutorials/Advanced/Security/Examine-Traffic.rst index 23653de57d6..d9e666cb0f1 100644 --- a/source/Tutorials/Advanced/Security/Examine-Traffic.rst +++ b/source/Tutorials/Advanced/Security/Examine-Traffic.rst @@ -25,6 +25,12 @@ ROS 2 communications security is all about protecting communications between nod Prior tutorials enabled security, but how can you **really** tell if traffic is being encrypted? In this tutorial we'll take a look at capturing live network traffic to show the difference between encrypted and unencrypted traffic. +.. note:: + + ``rmw_fastrtps_cpp`` uses `Shared Memory Transport `_ by default to improve the performance in the transport layer when the endpoints are in the same host system. + Security enclaves are still applied, and data will be encrypted. + However, you cannot capture live network traffic since the data will not be on the network interface. + If you are using ``rmw_fastrtps_cpp``, you need to either go through this tutorial and use a different host system between the publisher and subscriber, or disable shared memory transport with `Enabling UDP Transport `_ and `How to set Fast-DDS XML configuration `_. Run the demo ------------ @@ -50,6 +56,9 @@ The security environment variables are not set so security is not enabled for th .. code-block:: bash + # Disable ROS Security for both terminals + unset ROS_SECURITY_ENABLE + # In terminal 1: ros2 run demo_nodes_cpp talker --ros-args --enclave /talker_listener/talker @@ -198,7 +207,7 @@ A typical data packet looks like the following:: 0x0150: 42ae f04d 0559 84c5 7116 1c51 91ba 3799 B..M.Y..q..Q..7. 0x0160: 0000 0000 .... -The data in this RTPS packet is all encrpyted. +The data in this RTPS packet is all encrypted. In addition to this data packet, you should see additional packets with node and enclave names; these support other ROS features such as parameters and services. Encryption options for these packets can also be controlled by security policy. diff --git a/source/Tutorials/Advanced/Security/Introducing-ros2-security.rst b/source/Tutorials/Advanced/Security/Introducing-ros2-security.rst index 394badb003d..68dea0c3d09 100644 --- a/source/Tutorials/Advanced/Security/Introducing-ros2-security.rst +++ b/source/Tutorials/Advanced/Security/Introducing-ros2-security.rst @@ -22,7 +22,7 @@ Setting up security Background ---------- -The ``sros2`` package provides the tools and instructions to use ROS2 on top of DDS-Security. +The ``sros2`` package provides the tools and instructions to use ROS 2 on top of DDS-Security. The security features have been tested across platforms (Linux, macOS, and Windows) as well as across different languages (C++ and Python). The SROS2 has been designed to work with any secure middleware, although not all middleware is open source and support varies depending on the ROS distribution in use. Please reach out to the :ref:`ROS 2 Security Working Group ` if you encounter any support issues. @@ -80,7 +80,7 @@ Selecting an alternate middleware If you choose not to use the default middleware implementation, be sure to :doc:`change your DDS implementation <../../../Installation/DDS-Implementations/>` before proceeding. -ROS2 allows you to change the DDS implementation at runtime. +ROS 2 allows you to change the DDS implementation at runtime. See `how to work with mulitple RMW implementations <../../../How-To-Guides/Working-with-multiple-RMW-implementations>` to explore different middleware implementations. Note that secure communication between vendors is not supported. diff --git a/source/Tutorials/Advanced/Security/Security-on-Two.rst b/source/Tutorials/Advanced/Security/Security-on-Two.rst index 0d7b6f98221..b005a312ec0 100644 --- a/source/Tutorials/Advanced/Security/Security-on-Two.rst +++ b/source/Tutorials/Advanced/Security/Security-on-Two.rst @@ -21,6 +21,8 @@ Ensuring security across machines Background ---------- +Before proceeding ensure you have completed the :doc:`Introducing-ros2-security` tutorial. + The previous tutorials have used two ROS nodes on the same machine sending all network communications over the localhost interface. Let's extend that scenario to involve multiple machines, since the benefits of authentication and encryption then become more obvious. diff --git a/source/Tutorials/Advanced/Security/The-Keystore.rst b/source/Tutorials/Advanced/Security/The-Keystore.rst index 79e75736f0d..cae9b5b607b 100644 --- a/source/Tutorials/Advanced/Security/The-Keystore.rst +++ b/source/Tutorials/Advanced/Security/The-Keystore.rst @@ -21,6 +21,8 @@ Understanding the security keystore Background ---------- +Before proceeding ensure you have completed the :doc:`Introducing-ros2-security` tutorial. + The ``sros2`` package can be used to create keys, certificates and policies necessary to enable ROS 2 security. However, the security configuration is extrememly flexible. A basic understanding of the ROS 2 Security Keystore will allow integration with an existing PKI (Public Key Infrastructure) and managment of sensitive key materials consistent with organizational policies. @@ -41,7 +43,7 @@ For this tutorial, we use the directory ``~/sros2_demo/demo_keystore``. Public Key Materials ^^^^^^^^^^^^^^^^^^^^ -You will find three encryption certificates in the public directory at ``~/sros2_demo/demo_keys/public``; however, the identity and permissions certificates are actually just a link to the Certificate Authority (CA) certificate. +You will find three encryption certificates in the public directory at ``~/sros2_demo/demo_keystore/public``; however, the identity and permissions certificates are actually just a link to the Certificate Authority (CA) certificate. In a public key infrastructure, the `Certificate Authority `_ acts as a trust anchor: it validates the identities and permissions of participants. For ROS, that means all the nodes that participate in the ROS graph (which may extend to an entire fleet of individual robots). @@ -58,7 +60,7 @@ Use ``openssl`` to view this x509 certificate and display it as text: .. code-block:: bash - cd ~/sros2_demo/demo_keys/public + cd ~/sros2_demo/demo_keystore/public openssl x509 -in ca.cert.pem -text -noout The output should look similar to the following:: @@ -106,7 +108,7 @@ Since this is a public certificate, it can be freely copied as needed to establi Private Key Materials ^^^^^^^^^^^^^^^^^^^^^ -Private key materials can be found in the keystore directory ``~/sros2_demo/demo_keys/private``. +Private key materials can be found in the keystore directory ``~/sros2_demo/demo_keystore/private``. Similar to the ``public`` directory, this contains one certificate authority key ``ca.key.pem`` and symbolic links to it to be used as both an Identity and a Permissions CA private key. .. warning:: @@ -128,7 +130,7 @@ Use the following command to show details about this elliptic curve private key: .. code-block:: bash - cd ~/sros2_demo/demo_keys/private + cd ~/sros2_demo/demo_keystore/private openssl ec -in ca.key.pem -text -noout Your output should look similar to the following:: @@ -154,7 +156,7 @@ In addition to the private key itself, note that the public key is listed, and i Domain Governance Policy ^^^^^^^^^^^^^^^^^^^^^^^^ -Find the domain governance policy in the enclave directory within the keystore, ``~/sros2_demo/demo_keys/enclaves``. +Find the domain governance policy in the enclave directory within the keystore, ``~/sros2_demo/demo_keystore/enclaves``. The ``enclave`` directory contains XML governance policy document ``governance.xml``, as well as a copy of the document which has been signed by the Permissions CA as ``governance.p7s``. The ``governance.p7s`` file contains domain-wide settings such as how to handle unauthenticated participants, whether to encrypt discovery, and default rules for access to topics. @@ -211,7 +213,7 @@ Begin with a new terminal session and enable security with the keystore created export ROS_SECURITY_ENABLE=true export ROS_SECURITY_STRATEGY=Enforce - cd ~/sros2_demo/demo_keys/enclaves/talker_listener/listener + cd ~/sros2_demo/demo_keystore/enclaves/talker_listener/listener Make a backup copy of ``permissions.p7s`` before beginning. diff --git a/source/Tutorials/Advanced/Security/resources/deployment_gd/Dockerfile b/source/Tutorials/Advanced/Security/resources/deployment_gd/Dockerfile index 2e624b5d305..aee52f967af 100644 --- a/source/Tutorials/Advanced/Security/resources/deployment_gd/Dockerfile +++ b/source/Tutorials/Advanced/Security/resources/deployment_gd/Dockerfile @@ -1,4 +1,4 @@ -ARG ROS_DISTRO=humble +ARG ROS_DISTRO=iron FROM ros:${ROS_DISTRO}-ros-base # Install required packages diff --git a/source/Tutorials/Advanced/Simulators/Gazebo.rst b/source/Tutorials/Advanced/Simulators/Gazebo/Gazebo.rst similarity index 99% rename from source/Tutorials/Advanced/Simulators/Gazebo.rst rename to source/Tutorials/Advanced/Simulators/Gazebo/Gazebo.rst index 294ce1d2d23..a0b02327b99 100644 --- a/source/Tutorials/Advanced/Simulators/Gazebo.rst +++ b/source/Tutorials/Advanced/Simulators/Gazebo/Gazebo.rst @@ -2,6 +2,7 @@ Tutorials/Simulators/Ignition/Setting-up-a-Robot-Simulation-Ignition Tutorials/Advanced/Simulators/Ignition + Tutorials/Advanced/Simulators/Gazebo Setting up a robot simulation (Gazebo) ====================================== diff --git a/source/Tutorials/Advanced/Simulators/Image/add_lidar.png b/source/Tutorials/Advanced/Simulators/Gazebo/Image/add_lidar.png similarity index 100% rename from source/Tutorials/Advanced/Simulators/Image/add_lidar.png rename to source/Tutorials/Advanced/Simulators/Gazebo/Image/add_lidar.png diff --git a/source/Tutorials/Advanced/Simulators/Image/fixed_frame.png b/source/Tutorials/Advanced/Simulators/Gazebo/Image/fixed_frame.png similarity index 100% rename from source/Tutorials/Advanced/Simulators/Image/fixed_frame.png rename to source/Tutorials/Advanced/Simulators/Gazebo/Image/fixed_frame.png diff --git a/source/Tutorials/Advanced/Simulators/Image/gazebo_diff_drive.png b/source/Tutorials/Advanced/Simulators/Gazebo/Image/gazebo_diff_drive.png similarity index 100% rename from source/Tutorials/Advanced/Simulators/Image/gazebo_diff_drive.png rename to source/Tutorials/Advanced/Simulators/Gazebo/Image/gazebo_diff_drive.png diff --git a/source/Tutorials/Advanced/Simulators/Image/rviz2.png b/source/Tutorials/Advanced/Simulators/Gazebo/Image/rviz2.png similarity index 100% rename from source/Tutorials/Advanced/Simulators/Image/rviz2.png rename to source/Tutorials/Advanced/Simulators/Gazebo/Image/rviz2.png diff --git a/source/Tutorials/Advanced/Simulators/Gazebo/Simulation-Gazebo.rst b/source/Tutorials/Advanced/Simulators/Gazebo/Simulation-Gazebo.rst new file mode 100644 index 00000000000..2b31880dd62 --- /dev/null +++ b/source/Tutorials/Advanced/Simulators/Gazebo/Simulation-Gazebo.rst @@ -0,0 +1,13 @@ +Gazebo +====== + +This set of tutorials will teach you how to configure the Gazebo simulator with ROS 2. + +.. contents:: Contents + :depth: 2 + :local: + +.. toctree:: + :maxdepth: 1 + + Gazebo diff --git a/source/Tutorials/Advanced/Simulators/Simulation-Main.rst b/source/Tutorials/Advanced/Simulators/Simulation-Main.rst index b7477c25fdf..8aaf9611921 100644 --- a/source/Tutorials/Advanced/Simulators/Simulation-Main.rst +++ b/source/Tutorials/Advanced/Simulators/Simulation-Main.rst @@ -4,9 +4,13 @@ .. _SimulationMain: -Simulation +Simulators ========== +Several advanced robot simulators can be used with ROS 2, such as Gazebo, Webots, etc. +Unlike turtlesim, they provide fairly realistic results relying on physics-based models for robots, sensors, actuators and objects. +Hence, what you observe in simulation is very close to what you will get when transferring your ROS 2 controllers to a real robot. + This set of tutorials will teach you how to configure different simulators with ROS 2. .. contents:: Contents @@ -16,5 +20,5 @@ This set of tutorials will teach you how to configure different simulators with .. toctree:: :maxdepth: 1 - Webots - Gazebo + Webots/Simulation-Webots + Gazebo/Simulation-Gazebo diff --git a/source/Tutorials/Advanced/Simulators/Webots.rst b/source/Tutorials/Advanced/Simulators/Webots.rst deleted file mode 100644 index aeff6652d34..00000000000 --- a/source/Tutorials/Advanced/Simulators/Webots.rst +++ /dev/null @@ -1,471 +0,0 @@ -.. redirect-from:: - - Tutorials/Simulators/Webots/Setting-up-a-Robot-Simulation-Webots - -.. _Simulators: - -Setting up a robot simulation (Webots) -====================================== - -**Goal:** Setup a robot simulation and control it from ROS 2. - -**Tutorial level:** Advanced - -**Time:** 20 minutes - -.. contents:: Contents - :depth: 2 - :local: - -Background ----------- - -Several robot simulators can be used with ROS 2, such as Gazebo, Webots, etc. -Unlike turtlesim, they provide fairly realistic results relying on physics-based models for robots, sensors, actuators and objects. -Hence, what you observe in simulation is very close to what you will get when transferring your ROS 2 controllers to a real robot. -In this tutorial, you are going to use the Webots robot simulator to set-up and run a very simple ROS 2 simulation scenario. - -The ``webots_ros2`` package provides an interface between ROS 2 and Webots. -It includes several sub-packages, but in this tutorial, you are going to use only the ``webots_ros2_driver`` sub-package to implement a Python plugin controlling a simulated robot. -Some other sub-packages contain demos with different robots such as the TurtleBot3. -They are documented in the :doc:`../../Demos` page. - -Prerequisites -------------- - -It is recommended to understand basic ROS principles covered in the beginner :doc:`../../../Tutorials`. -In particular, :doc:`../../Beginner-CLI-Tools/Introducing-Turtlesim/Introducing-Turtlesim`, :doc:`../../Beginner-CLI-Tools/Understanding-ROS2-Topics/Understanding-ROS2-Topics`, :doc:`../../Beginner-Client-Libraries/Creating-A-Workspace/Creating-A-Workspace`, :doc:`../../Beginner-Client-Libraries/Creating-Your-First-ROS2-Package` and :doc:`../../Intermediate/Launch/Creating-Launch-Files` are useful prerequisites. - -.. tabs:: - - .. group-tab:: Linux - - The Linux and ROS commands of this tutorial can be run in a standard Linux terminal. - See the `Webots ROS 2 Linux installation instructions `_. - - .. group-tab:: Windows - - The Linux and ROS commands of this tutorial must be run in a WSL (Windows Subsystem for Linux) environment. - See the `Webots ROS 2 Windows installation instructions `_. - - .. group-tab:: macOS - - The Linux and ROS commands of this tutorial must be run in a pre-configured Linux Virtual Machine (VM). - See the `Webots ROS 2 macOS installation instructions `_. - -To install ``webots_ros2_driver`` from a terminal, proceed with the following commands. - -.. code-block:: console - - sudo apt update - sudo apt install ros-{DISTRO}-webots-ros2-driver - source /opt/ros/{DISTRO}/setup.bash - -.. note:: - - If you want to install the whole ``webots_ros2`` package, follow these `instructions `_. - -Tasks ------ - -1 Create the package structure -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Let's organize the code in a custom ROS 2 package. -Create a new package named ``my_package`` from the ``src`` folder of your ROS 2 workspace. -Change the current directory of your terminal to ``ros2_ws/src`` and run: - -.. code-block:: console - - ros2 pkg create --build-type ament_python --node-name my_robot_driver my_package --dependencies rclpy geometry_msgs webots_ros2_driver - -The ``--node-name my_robot_driver`` option will create a ``my_robot_driver.py`` template Python plugin in the ``my_package`` subfolder that you will modify later. -The ``--dependencies rclpy geometry_msgs webots_ros2_driver`` option specifies the packages needed by the ``my_robot_driver.py`` plugin in the ``package.xml`` file. -Let's add a ``launch`` and a ``worlds`` folder inside the ``my_package`` folder. - -.. code-block:: console - - cd my_package - mkdir launch - mkdir worlds - -You should end up with the following folder structure: - -.. code-block:: console - - src/ - └── my_package/ - ├── launch/ - ├── my_package/ - │ ├── __init__.py - │ └── my_robot_driver.py - ├── resource/ - │ └── my_package - ├── test/ - │ ├── test_copyright.py - │ ├── test_flake8.py - │ └── test_pep257.py - ├── worlds/ - ├── package.xml - ├── setup.cfg - └── setup.py - -2 Setup the simulation world -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -You will need a world file containing a robot to launch your simulation. -:download:`Download this world file ` and move it inside ``my_package/worlds/``. - -This is actually a fairly simple text file you can visualize in a text editor. -A simple robot is already included in this ``my_world.wbt`` world file. - -.. note:: - - In case you want to learn how to create your own robot model in Webots, you can check this `tutorial `_. - -3 Change the my_robot_driver.py file -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The ``webots_ros2_driver`` sub-package automatically creates a ROS 2 interface for most sensors. -In this task, you will extend this interface by changing the ``my_robot_driver.py`` file. - -.. note:: - - The purpose of this tutorial is to show a basic example with a minimum number of dependencies. - However, you could avoid the use of this Python plugin by using another ``webots_ros2`` sub-package named ``webots_ros2_control``, introducing a new dependency. - This other sub-package creates an interface with the ``ros2_control`` package that facilitates the control of a differential wheeled robot. - -Open ``my_package/my_package/my_robot_driver.py`` in your favorite editor and replace its contents with the following: - -.. literalinclude:: Code/my_robot_driver.py - :language: python - -As you can see, the ``MyRobotDriver`` class implements three methods. - -The first method, named ``init(self, ...)``, is actually the ROS node counterpart of the Python ``__init__(self, ...)`` constructor. -It first gets the robot instance from the simulation (which can be used to access the `Webots robot API `_). -Then, it gets the two motor instances and initializes them with a target position and a target velocity. -Finally a ROS node is created and a callback method is registered for a ROS topic named ``/cmd_vel`` that will handle ``Twist`` messages. - -.. literalinclude:: Code/my_robot_driver.py - :language: python - :dedent: 4 - :lines: 8-24 - -Then comes the implementation of the ``__cmd_vel_callback(self, twist)`` callback private method that will be called for each ``Twist`` message received on the ``/cmd_vel`` topic and will save it in the ``self.__target_twist`` member variable. - -.. literalinclude:: Code/my_robot_driver.py - :language: python - :dedent: 4 - :lines: 26-27 - -Finally, the ``step(self)`` method is called at every time step of the simulation. -The call to ``rclpy.spin_once()`` is needed to keep the ROS node running smoothly. -At each time step, the method will retrieve the desired ``forward_speed`` and ``angular_speed`` from ``self.__target_twist``. -As the motors are controlled with angular velocities, the method will then convert the ``forward_speed`` and ``angular_speed`` into individual commands for each wheel. -This conversion depends on the structure of the robot, more specifically on the radius of the wheel and the distance between them. - -.. literalinclude:: Code/my_robot_driver.py - :language: python - :dedent: 4 - :lines: 29-39 - -4 Create the my_robot.urdf file -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -You now have to create a URDF file to declare the ``my_robot_driver.py`` Python plugin. -This will allow the ``webots_ros2_driver`` ROS node to launch the plugin. - -In the ``my_package/resource`` folder create a text file named ``my_robot.urdf`` with this contents: - -.. literalinclude:: Code/my_robot.urdf - :language: xml - -.. note:: - - This simple URDF file doesn't contain any link or joint information about the robot as it is not needed in this tutorial. - However, URDF files usually contain much more information as explained in the :doc:`../../Intermediate/URDF/URDF-Main`. - -5 Create the launch file -^^^^^^^^^^^^^^^^^^^^^^^^ - -Let's create now the launch file to easily launch the simulation and the ROS controller with a single command. -In the ``my_package/launch`` folder create a new text file named ``robot_launch.py`` with this code: - -.. literalinclude:: Code/robot_launch.py - :language: python - -The ``WebotsLauncher`` object is a custom action that allows you to start a Webots simulation instance. -You have to specify in the constructor which world file the simulator will open. - -.. literalinclude:: Code/robot_launch.py - :language: python - :dedent: 4 - :lines: 15-17 - -Then, the ROS node interacting with the simulated robot is created. -This node, named ``driver``, is located in the ``webots_ros2_driver`` package. - -.. tabs:: - - .. group-tab:: Linux - - The node will be able to communicate with the simulated robot by using a custom protocol based on IPC and shared memory. - - .. group-tab:: Windows - - The node (in WSL) will be able to communicate with the simulated robot (in Webots on native Windows) through a TCP connection. - - .. group-tab:: macOS - - The node (in the docker container) will be able to communicate with the simulated robot (in Webots on native macOS) through a TCP connection. - - -In your case, you need to run a single instance of this node, because you have a single robot in the simulation. -But if you had more robots in the simulation, you would have to run one instance of this node per robot. -``WEBOTS_CONTROLLER_URL`` is used to define the name of the robot the driver should connect to. -The ``controller_url_prefix()`` method is mandatory, as it allows ``webots_ros2_driver`` to add the correct protocol prefix depending on your platform. -The ``robot_description`` parameter holds the contents of the URDF file which refers to the ``my_robot_driver.py`` Python plugin. - -.. literalinclude:: Code/robot_launch.py - :language: python - :dedent: 4 - :lines: 19-27 - -After that, the three nodes are set to be launched in the ``LaunchDescription`` constructor: - -.. literalinclude:: Code/robot_launch.py - :language: python - :dedent: 4 - :lines: 29-31 - -Finally, an optional part is added in order to shutdown all the nodes once Webots terminates (e.g., when it gets closed from the graphical user interface). - -.. literalinclude:: Code/robot_launch.py - :language: python - :dedent: 8 - :lines: 32-37 - -6 Modify the setup.py file -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Finally, before you can start the launch file, you have to modify the ``setup.py`` file to include the extra files you added. -Open ``my_package/setup.py`` and replace its contents with: - -.. literalinclude:: Code/setup.py - :language: python - -This sets-up the package and adds in the ``data_files`` variable the newly added files: ``my_world.wbt``, ``my_robot.urdf`` and ``robot_launch.py``. - -7 Test the code -^^^^^^^^^^^^^^^ - -.. tabs:: - - .. group-tab:: Linux - - From a terminal in your ROS 2 workspace run: - - .. code-block:: console - - colcon build - source install/local_setup.bash - ros2 launch my_package robot_launch.py - - This will launch the simulation. - Webots will be automatically installed on the first run in case it was not already installed. - - .. group-tab:: Windows - - From a terminal in your WSL ROS 2 workspace run: - - .. code-block:: console - - colcon build - export WEBOTS_HOME=/mnt/c/Program\ Files/Webots - source install/local_setup.bash - ros2 launch my_package robot_launch.py - - Be sure to use the ``/mnt`` prefix in front of your path to the Webots installation folder to access the Windows file system from WSL. - - This will launch the simulation. - Webots will be automatically installed on the first run in case it was not already installed. - - .. group-tab:: macOS - - On macOS, a local server must be started on the host to start Webots from the Docker container. - The local server can be downloaded `on the webots-server repository `_. - - In a terminal of the host machine (not in the VM), specify the Webots installation folder (e.g. ``/Applications/Webots.app``) and start the server using the following commands: - - .. code-block:: console - - export WEBOTS_HOME=/Applications/Webots.app - python3 local_simulation_server.py - - From a terminal in the Linux VM in your ROS 2 workspace, build and launch your custom package with: - - .. code-block:: console - - colcon build - source install/local_setup.bash - ros2 launch my_package robot_launch.py - - -.. note:: - - If you want to install Webots manually, you can download it `here `_. - - -Then, open a second terminal and send a command with: - -.. code-block:: console - - ros2 topic pub /cmd_vel geometry_msgs/Twist "linear: { x: 0.1 }" - -The robot is now moving forward. - -.. image:: Image/Robot_moving_forward.png - -At this point, the robot is able to blindly follow your motor commands. -But it will eventually bump into the wall as you order it to move forwards. - -.. image:: Image/Robot_colliding_wall.png - -To prevent this, let's use the sensors of the robot to detect the obstacles and avoid them. -Close the Webots window, this should also shutdown your ROS nodes started from the launcher. -Close also the topic command with ``Ctrl+C`` in the second terminal. - -8 Updating my_robot.urdf -^^^^^^^^^^^^^^^^^^^^^^^^ - -You have to modify the URDF file in order to enable the sensors. -In ``my_robot.urdf`` replace the whole contents with: - -.. literalinclude:: Code/my_robot_with_sensors.urdf - :language: xml - -The ROS 2 interface will parse the ```` tags referring to the **DistanceSensor** nodes and use the standard parameters in the ```` tags to enable the sensors and name their topics. - -9 Creating a ROS node to avoid obstacles -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The robot will use a standard ROS node to detect the wall and send motor commands to avoid it. -In the ``my_package/my_package/`` folder, create a file named ``obstacle_avoider.py`` with this code: - -.. literalinclude:: Code/obstacle_avoider.py - :language: python - -This node will create a publisher for the command and subscribe to the sensors topics here: - -.. literalinclude:: Code/obstacle_avoider.py - :language: python - :dedent: 8 - :lines: 14-17 - -When a measurement is received from the left sensor it will be copied to a member field: - -.. literalinclude:: Code/obstacle_avoider.py - :language: python - :dedent: 4 - :lines: 19-20 - -Finally, a message will be sent to the ``/cmd_vel`` topic when a measurement from the right sensor is received. -The ``command_message`` will register at least a forward speed in ``linear.x`` in order to make the robot move when no obstacle is detected. -If any of the two sensors detect an obstacle, ``command_message`` will also register a rotational speed in ``angular.z`` in order to make the robot turn right. - -.. literalinclude:: Code/obstacle_avoider.py - :language: python - :dedent: 4 - :lines: 22-32 - -10 Updating setup.py and robot_launch.py -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -You have to modify these two other files to launch your new node. -Edit ``setup.py`` and replace ``'console_scripts'`` with: - -.. literalinclude:: Code/setup_sensor.py - :language: python - :dedent: 8 - :lines: 24-27 - -This will add an entry point for the ``obstacle_avoider`` node. - -Go to the file ``robot_launch.py`` and replace ``def generate_launch_description():`` with: - -.. literalinclude:: Code/robot_launch_sensor.py - :language: python - :lines: 11-44 - -This will create an ``obstacle_avoider`` node that will be included in the ``LaunchDescription``. - -11 Test the obstacle avoidance code -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -As in task ``7``, launch the simulation from a terminal in your ROS 2 workspace: - -.. tabs:: - - .. group-tab:: Linux - - From a terminal in your ROS 2 workspace run: - - .. code-block:: console - - colcon build - source install/local_setup.bash - ros2 launch my_package robot_launch.py - - .. group-tab:: Windows - - From a terminal in your WSL ROS 2 workspace run: - - .. code-block:: console - - colcon build - export WEBOTS_HOME=/mnt/c/Program\ Files/Webots - source install/local_setup.bash - ros2 launch my_package robot_launch.py - - Be sure to use the ``/mnt`` prefix in front of your path to the Webots installation folder to access the Windows file system from WSL. - - .. group-tab:: macOS - - In a terminal of the host machine (not in the VM), if not done already, specify the Webots installation folder (e.g. ``/Applications/Webots.app``) and start the server using the following commands: - - .. code-block:: console - - export WEBOTS_HOME=/Applications/Webots.app - python3 local_simulation_server.py - - Note that the server keeps running once the ROS 2 nodes are ended. - You don't need to restart it every time you want to launch a new simulation. - From a terminal in the Linux VM in your ROS 2 workspace, build and launch your custom package with: - - .. code-block:: console - - cd ~/ros2_ws - colcon build - source install/local_setup.bash - ros2 launch my_package robot_launch.py - -Your robot should go forward and before hitting the wall it should turn clockwise. -You can press ``Ctrl+F10`` in Webots or go to the ``View`` menu, ``Optional Rendering`` and ``Show DistanceSensor Rays`` to display the range of the distance sensors of the robot. - -.. image:: Image/Robot_turning_clockwise.png - -Summary -------- - -In this tutorial, you set-up a realistic robot simulation with Webots, implemented a Python plugin to control the motors of the robot, and implemented a ROS node using the sensors to avoid the obstacles. - -Next steps ----------- - -You might want to improve the plugin or create new nodes to change the behavior of the robot. -Taking inspiration from these previous tutorials could be a starting point: - -* :doc:`../Recording-A-Bag-From-Your-Own-Node-Py`. - -* :doc:`../../Intermediate/Tf2/Tf2-Main`. diff --git a/source/Tutorials/Advanced/Simulators/Webots/Code/CMakeLists.txt b/source/Tutorials/Advanced/Simulators/Webots/Code/CMakeLists.txt new file mode 100644 index 00000000000..60de84971ae --- /dev/null +++ b/source/Tutorials/Advanced/Simulators/Webots/Code/CMakeLists.txt @@ -0,0 +1,55 @@ +cmake_minimum_required(VERSION 3.5) +project(my_package) + +if(NOT CMAKE_CXX_STANDARD) + set(CMAKE_CXX_STANDARD 14) +endif() + +# Besides the package specific dependencies we also need the `pluginlib` and `webots_ros2_driver` +find_package(ament_cmake REQUIRED) +find_package(rclcpp REQUIRED) +find_package(std_msgs REQUIRED) +find_package(geometry_msgs REQUIRED) +find_package(pluginlib REQUIRED) +find_package(webots_ros2_driver REQUIRED) + +# Export the plugin configuration file +pluginlib_export_plugin_description_file(webots_ros2_driver my_robot_driver.xml) + +# MyRobotDriver library +add_library( + ${PROJECT_NAME} + SHARED + src/MyRobotDriver.cpp +) +target_include_directories( + ${PROJECT_NAME} + PRIVATE + include +) +ament_target_dependencies( + ${PROJECT_NAME} + pluginlib + rclcpp + webots_ros2_driver +) +install(TARGETS + ${PROJECT_NAME} + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib + RUNTIME DESTINATION bin +) +# Install additional directories. +install(DIRECTORY + launch + resource + worlds + DESTINATION share/${PROJECT_NAME}/ +) +ament_export_include_directories( + include +) +ament_export_libraries( + ${PROJECT_NAME} +) +ament_package() diff --git a/source/Tutorials/Advanced/Simulators/Webots/Code/CMakeLists_sensor.txt b/source/Tutorials/Advanced/Simulators/Webots/Code/CMakeLists_sensor.txt new file mode 100644 index 00000000000..1108a474d14 --- /dev/null +++ b/source/Tutorials/Advanced/Simulators/Webots/Code/CMakeLists_sensor.txt @@ -0,0 +1,77 @@ +cmake_minimum_required(VERSION 3.5) +project(my_package) + +if(NOT CMAKE_CXX_STANDARD) + set(CMAKE_CXX_STANDARD 14) +endif() + +# Besides the package specific dependencies we also need the `pluginlib` and `webots_ros2_driver` +find_package(ament_cmake REQUIRED) +find_package(rclcpp REQUIRED) +find_package(std_msgs REQUIRED) +find_package(geometry_msgs REQUIRED) +find_package(pluginlib REQUIRED) +find_package(webots_ros2_driver REQUIRED) + +# Export the plugin configuration file +pluginlib_export_plugin_description_file(webots_ros2_driver my_robot_driver.xml) + +# Obstacle avoider +include_directories( + include +) +add_executable(obstacle_avoider + src/ObstacleAvoider.cpp +) +ament_target_dependencies(obstacle_avoider + rclcpp + geometry_msgs + sensor_msgs +) +install(TARGETS + obstacle_avoider + DESTINATION lib/${PROJECT_NAME} +) +install( + DIRECTORY include/ + DESTINATION include +) + +# MyRobotDriver library +add_library( + ${PROJECT_NAME} + SHARED + src/MyRobotDriver.cpp +) +target_include_directories( + ${PROJECT_NAME} + PRIVATE + include +) +ament_target_dependencies( + ${PROJECT_NAME} + pluginlib + rclcpp + webots_ros2_driver +) +install(TARGETS + ${PROJECT_NAME} + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib + RUNTIME DESTINATION bin +) +# Install additional directories. +install(DIRECTORY + launch + resource + worlds + DESTINATION share/${PROJECT_NAME}/ +) + +ament_export_include_directories( + include +) +ament_export_libraries( + ${PROJECT_NAME} +) +ament_package() diff --git a/source/Tutorials/Advanced/Simulators/Webots/Code/MyRobotDriver.cpp b/source/Tutorials/Advanced/Simulators/Webots/Code/MyRobotDriver.cpp new file mode 100644 index 00000000000..56fdf7a64a5 --- /dev/null +++ b/source/Tutorials/Advanced/Simulators/Webots/Code/MyRobotDriver.cpp @@ -0,0 +1,55 @@ +#include "my_package/MyRobotDriver.hpp" + +#include "rclcpp/rclcpp.hpp" +#include +#include +#include +#include + +#define HALF_DISTANCE_BETWEEN_WHEELS 0.045 +#define WHEEL_RADIUS 0.025 + +namespace my_robot_driver { +void MyRobotDriver::init( + webots_ros2_driver::WebotsNode *node, + std::unordered_map ¶meters) { + + right_motor = wb_robot_get_device("right wheel motor"); + left_motor = wb_robot_get_device("left wheel motor"); + + wb_motor_set_position(left_motor, INFINITY); + wb_motor_set_velocity(left_motor, 0.0); + + wb_motor_set_position(right_motor, INFINITY); + wb_motor_set_velocity(right_motor, 0.0); + + cmd_vel_subscription_ = node->create_subscription( + "/cmd_vel", rclcpp::SensorDataQoS().reliable(), + std::bind(&MyRobotDriver::cmdVelCallback, this, std::placeholders::_1)); +} + +void MyRobotDriver::cmdVelCallback( + const geometry_msgs::msg::Twist::SharedPtr msg) { + cmd_vel_msg.linear = msg->linear; + cmd_vel_msg.angular = msg->angular; +} + +void MyRobotDriver::step() { + auto forward_speed = cmd_vel_msg.linear.x; + auto angular_speed = cmd_vel_msg.angular.z; + + auto command_motor_left = + (forward_speed - angular_speed * HALF_DISTANCE_BETWEEN_WHEELS) / + WHEEL_RADIUS; + auto command_motor_right = + (forward_speed + angular_speed * HALF_DISTANCE_BETWEEN_WHEELS) / + WHEEL_RADIUS; + + wb_motor_set_velocity(left_motor, command_motor_left); + wb_motor_set_velocity(right_motor, command_motor_right); +} +} // namespace my_robot_driver + +#include "pluginlib/class_list_macros.hpp" +PLUGINLIB_EXPORT_CLASS(my_robot_driver::MyRobotDriver, + webots_ros2_driver::PluginInterface) diff --git a/source/Tutorials/Advanced/Simulators/Webots/Code/MyRobotDriver.hpp b/source/Tutorials/Advanced/Simulators/Webots/Code/MyRobotDriver.hpp new file mode 100644 index 00000000000..8868a145916 --- /dev/null +++ b/source/Tutorials/Advanced/Simulators/Webots/Code/MyRobotDriver.hpp @@ -0,0 +1,29 @@ +#ifndef WEBOTS_ROS2_PLUGIN_EXAMPLE_HPP +#define WEBOTS_ROS2_PLUGIN_EXAMPLE_HPP + +#include "rclcpp/macros.hpp" +#include "webots_ros2_driver/PluginInterface.hpp" +#include "webots_ros2_driver/WebotsNode.hpp" + +#include "geometry_msgs/msg/twist.hpp" +#include "rclcpp/rclcpp.hpp" + +namespace my_robot_driver { +class MyRobotDriver : public webots_ros2_driver::PluginInterface { +public: + void step() override; + void init(webots_ros2_driver::WebotsNode *node, + std::unordered_map ¶meters) override; + +private: + void cmdVelCallback(const geometry_msgs::msg::Twist::SharedPtr msg); + + rclcpp::Subscription::SharedPtr + cmd_vel_subscription_; + geometry_msgs::msg::Twist cmd_vel_msg; + + WbDeviceTag right_motor; + WbDeviceTag left_motor; +}; +} // namespace my_robot_driver +#endif diff --git a/source/Tutorials/Advanced/Simulators/Webots/Code/ObstacleAvoider.cpp b/source/Tutorials/Advanced/Simulators/Webots/Code/ObstacleAvoider.cpp new file mode 100644 index 00000000000..b584975e63b --- /dev/null +++ b/source/Tutorials/Advanced/Simulators/Webots/Code/ObstacleAvoider.cpp @@ -0,0 +1,46 @@ +#include "my_package/ObstacleAvoider.hpp" + +#define MAX_RANGE 0.15 + +ObstacleAvoider::ObstacleAvoider() : Node("obstacle_avoider") { + publisher_ = create_publisher("/cmd_vel", 1); + + left_sensor_sub_ = create_subscription( + "/left_sensor", 1, + std::bind(&ObstacleAvoider::leftSensorCallback, this, + std::placeholders::_1)); + + right_sensor_sub_ = create_subscription( + "/right_sensor", 1, + std::bind(&ObstacleAvoider::rightSensorCallback, this, + std::placeholders::_1)); +} + +void ObstacleAvoider::leftSensorCallback( + const sensor_msgs::msg::Range::SharedPtr msg) { + left_sensor_value = msg->range; +} + +void ObstacleAvoider::rightSensorCallback( + const sensor_msgs::msg::Range::SharedPtr msg) { + right_sensor_value = msg->range; + + auto command_message = std::make_unique(); + + command_message->linear.x = 0.1; + + if (left_sensor_value < 0.9 * MAX_RANGE || + right_sensor_value < 0.9 * MAX_RANGE) { + command_message->angular.z = -2.0; + } + + publisher_->publish(std::move(command_message)); +} + +int main(int argc, char *argv[]) { + rclcpp::init(argc, argv); + auto avoider = std::make_shared(); + rclcpp::spin(avoider); + rclcpp::shutdown(); + return 0; +} diff --git a/source/Tutorials/Advanced/Simulators/Webots/Code/ObstacleAvoider.hpp b/source/Tutorials/Advanced/Simulators/Webots/Code/ObstacleAvoider.hpp new file mode 100644 index 00000000000..51c2b3e8703 --- /dev/null +++ b/source/Tutorials/Advanced/Simulators/Webots/Code/ObstacleAvoider.hpp @@ -0,0 +1,21 @@ +#include + +#include "geometry_msgs/msg/twist.hpp" +#include "rclcpp/rclcpp.hpp" +#include "sensor_msgs/msg/range.hpp" + +class ObstacleAvoider : public rclcpp::Node { +public: + explicit ObstacleAvoider(); + +private: + void leftSensorCallback(const sensor_msgs::msg::Range::SharedPtr msg); + void rightSensorCallback(const sensor_msgs::msg::Range::SharedPtr msg); + + rclcpp::Publisher::SharedPtr publisher_; + rclcpp::Subscription::SharedPtr left_sensor_sub_; + rclcpp::Subscription::SharedPtr right_sensor_sub_; + + double left_sensor_value{0.0}; + double right_sensor_value{0.0}; +}; diff --git a/source/Tutorials/Advanced/Simulators/Webots/Code/my_robot_cpp.urdf b/source/Tutorials/Advanced/Simulators/Webots/Code/my_robot_cpp.urdf new file mode 100644 index 00000000000..6c468c34d7e --- /dev/null +++ b/source/Tutorials/Advanced/Simulators/Webots/Code/my_robot_cpp.urdf @@ -0,0 +1,6 @@ + + + + + + diff --git a/source/Tutorials/Advanced/Simulators/Code/my_robot_driver.py b/source/Tutorials/Advanced/Simulators/Webots/Code/my_robot_driver.py similarity index 100% rename from source/Tutorials/Advanced/Simulators/Code/my_robot_driver.py rename to source/Tutorials/Advanced/Simulators/Webots/Code/my_robot_driver.py diff --git a/source/Tutorials/Advanced/Simulators/Webots/Code/my_robot_driver.xml b/source/Tutorials/Advanced/Simulators/Webots/Code/my_robot_driver.xml new file mode 100644 index 00000000000..d4c189002f7 --- /dev/null +++ b/source/Tutorials/Advanced/Simulators/Webots/Code/my_robot_driver.xml @@ -0,0 +1,9 @@ + + + + + + This is a Webots ROS 2 plugin example + + + diff --git a/source/Tutorials/Advanced/Simulators/Code/my_robot.urdf b/source/Tutorials/Advanced/Simulators/Webots/Code/my_robot_python.urdf similarity index 100% rename from source/Tutorials/Advanced/Simulators/Code/my_robot.urdf rename to source/Tutorials/Advanced/Simulators/Webots/Code/my_robot_python.urdf diff --git a/source/Tutorials/Advanced/Simulators/Webots/Code/my_robot_with_sensors_cpp.urdf b/source/Tutorials/Advanced/Simulators/Webots/Code/my_robot_with_sensors_cpp.urdf new file mode 100644 index 00000000000..e3a5ffe5e17 --- /dev/null +++ b/source/Tutorials/Advanced/Simulators/Webots/Code/my_robot_with_sensors_cpp.urdf @@ -0,0 +1,18 @@ + + + + + + /left_sensor + true + + + + + /right_sensor + true + + + + + diff --git a/source/Tutorials/Advanced/Simulators/Code/my_robot_with_sensors.urdf b/source/Tutorials/Advanced/Simulators/Webots/Code/my_robot_with_sensors_python.urdf similarity index 100% rename from source/Tutorials/Advanced/Simulators/Code/my_robot_with_sensors.urdf rename to source/Tutorials/Advanced/Simulators/Webots/Code/my_robot_with_sensors_python.urdf diff --git a/source/Tutorials/Advanced/Simulators/Code/my_world.wbt b/source/Tutorials/Advanced/Simulators/Webots/Code/my_world.wbt similarity index 100% rename from source/Tutorials/Advanced/Simulators/Code/my_world.wbt rename to source/Tutorials/Advanced/Simulators/Webots/Code/my_world.wbt diff --git a/source/Tutorials/Advanced/Simulators/Code/obstacle_avoider.py b/source/Tutorials/Advanced/Simulators/Webots/Code/obstacle_avoider.py similarity index 100% rename from source/Tutorials/Advanced/Simulators/Code/obstacle_avoider.py rename to source/Tutorials/Advanced/Simulators/Webots/Code/obstacle_avoider.py diff --git a/source/Tutorials/Advanced/Simulators/Code/robot_launch.py b/source/Tutorials/Advanced/Simulators/Webots/Code/robot_launch.py similarity index 55% rename from source/Tutorials/Advanced/Simulators/Code/robot_launch.py rename to source/Tutorials/Advanced/Simulators/Webots/Code/robot_launch.py index ff7b520b177..1da53550109 100644 --- a/source/Tutorials/Advanced/Simulators/Code/robot_launch.py +++ b/source/Tutorials/Advanced/Simulators/Webots/Code/robot_launch.py @@ -1,28 +1,23 @@ import os -import pathlib import launch -from launch_ros.actions import Node from launch import LaunchDescription from ament_index_python.packages import get_package_share_directory -from webots_ros2_driver.webots_launcher import WebotsLauncher, Ros2SupervisorLauncher -from webots_ros2_driver.utils import controller_url_prefix +from webots_ros2_driver.webots_launcher import WebotsLauncher +from webots_ros2_driver.webots_controller import WebotsController def generate_launch_description(): package_dir = get_package_share_directory('my_package') - robot_description = pathlib.Path(os.path.join(package_dir, 'resource', 'my_robot.urdf')).read_text() + robot_description_path = os.path.join(package_dir, 'resource', 'my_robot.urdf') webots = WebotsLauncher( world=os.path.join(package_dir, 'worlds', 'my_world.wbt') ) - my_robot_driver = Node( - package='webots_ros2_driver', - executable='driver', - output='screen', - additional_env={'WEBOTS_CONTROLLER_URL': controller_url_prefix() + 'my_robot'}, + my_robot_driver = WebotsController( + robot_name='my_robot', parameters=[ - {'robot_description': robot_description}, + {'robot_description': robot_description_path}, ] ) diff --git a/source/Tutorials/Advanced/Simulators/Code/robot_launch_sensor.py b/source/Tutorials/Advanced/Simulators/Webots/Code/robot_launch_sensor.py similarity index 62% rename from source/Tutorials/Advanced/Simulators/Code/robot_launch_sensor.py rename to source/Tutorials/Advanced/Simulators/Webots/Code/robot_launch_sensor.py index 3644f32e180..fe72ea6a094 100644 --- a/source/Tutorials/Advanced/Simulators/Code/robot_launch_sensor.py +++ b/source/Tutorials/Advanced/Simulators/Webots/Code/robot_launch_sensor.py @@ -1,28 +1,24 @@ import os -import pathlib import launch from launch_ros.actions import Node from launch import LaunchDescription from ament_index_python.packages import get_package_share_directory -from webots_ros2_driver.webots_launcher import WebotsLauncher, Ros2SupervisorLauncher -from webots_ros2_driver.utils import controller_url_prefix +from webots_ros2_driver.webots_launcher import WebotsLauncher +from webots_ros2_driver.webots_controller import WebotsController def generate_launch_description(): package_dir = get_package_share_directory('my_package') - robot_description = pathlib.Path(os.path.join(package_dir, 'resource', 'my_robot.urdf')).read_text() + robot_description_path = os.path.join(package_dir, 'resource', 'my_robot.urdf') webots = WebotsLauncher( world=os.path.join(package_dir, 'worlds', 'my_world.wbt') ) - my_robot_driver = Node( - package='webots_ros2_driver', - executable='driver', - output='screen', - additional_env={'WEBOTS_CONTROLLER_URL': controller_url_prefix() + 'my_robot'}, + my_robot_driver = WebotsController( + robot_name='my_robot', parameters=[ - {'robot_description': robot_description}, + {'robot_description': robot_description_path}, ] ) diff --git a/source/Tutorials/Advanced/Simulators/Code/setup.py b/source/Tutorials/Advanced/Simulators/Webots/Code/setup.py similarity index 100% rename from source/Tutorials/Advanced/Simulators/Code/setup.py rename to source/Tutorials/Advanced/Simulators/Webots/Code/setup.py diff --git a/source/Tutorials/Advanced/Simulators/Code/setup_sensor.py b/source/Tutorials/Advanced/Simulators/Webots/Code/setup_sensor.py similarity index 100% rename from source/Tutorials/Advanced/Simulators/Code/setup_sensor.py rename to source/Tutorials/Advanced/Simulators/Webots/Code/setup_sensor.py diff --git a/source/Tutorials/Advanced/Simulators/Image/Robot_colliding_wall.png b/source/Tutorials/Advanced/Simulators/Webots/Image/Robot_colliding_wall.png similarity index 100% rename from source/Tutorials/Advanced/Simulators/Image/Robot_colliding_wall.png rename to source/Tutorials/Advanced/Simulators/Webots/Image/Robot_colliding_wall.png diff --git a/source/Tutorials/Advanced/Simulators/Image/Robot_moving_forward.png b/source/Tutorials/Advanced/Simulators/Webots/Image/Robot_moving_forward.png similarity index 100% rename from source/Tutorials/Advanced/Simulators/Image/Robot_moving_forward.png rename to source/Tutorials/Advanced/Simulators/Webots/Image/Robot_moving_forward.png diff --git a/source/Tutorials/Advanced/Simulators/Image/Robot_turning_clockwise.png b/source/Tutorials/Advanced/Simulators/Webots/Image/Robot_turning_clockwise.png similarity index 100% rename from source/Tutorials/Advanced/Simulators/Image/Robot_turning_clockwise.png rename to source/Tutorials/Advanced/Simulators/Webots/Image/Robot_turning_clockwise.png diff --git a/source/Tutorials/Advanced/Simulators/Webots/Installation-MacOS.rst b/source/Tutorials/Advanced/Simulators/Webots/Installation-MacOS.rst new file mode 100644 index 00000000000..9b0e118d253 --- /dev/null +++ b/source/Tutorials/Advanced/Simulators/Webots/Installation-MacOS.rst @@ -0,0 +1,208 @@ +Installation (macOS) +==================== + +**Goal:** Install the ``webots_ros2`` package and run simulation examples on macOS. + +**Tutorial level:** Advanced + +**Time:** 10 minutes + +.. contents:: Contents + :depth: 2 + :local: + +Background +---------- + +The ``webots_ros2`` package provides an interface between ROS 2 and Webots. +It includes several sub-packages, including ``webots_ros2_driver``, which allows you to start Webots and communicate with it. +Other sub-packages are mainly examples that show multiple possible implementations using the interface. +In this tutorial, you are going to install the package and learn how to run one of these examples. + +Prerequisites +------------- + +It is recommended to understand basic ROS principles covered in the beginner :doc:`../../../../Tutorials`. +In particular, :doc:`../../../Beginner-Client-Libraries/Creating-A-Workspace/Creating-A-Workspace` and :doc:`../../../Beginner-Client-Libraries/Creating-Your-First-ROS2-Package` are useful prerequisites. + +It is necessary to install Webots natively on the mac in order to use the ``webots_ros2`` package in the virtual machine as explained below. +You can follow the `installation procedure `_ or `build it from sources `_. + +Tasks +----- + +On macOS, a solution based on UTM virtual machines provides an improved user experience with ROS 2 compared to native macOS installation, as it runs ROS in a Linux environment. +However, Webots should be installed natively on macOS and it will be able to communicate with the ROS nodes running in the Virtual Machine (VM). +This solution allows for native 3D hardware acceleration for Webots. +The VM runs all the ROS part (including RViz) and connects to the host machine through TCP to start Webots. +A shared folder allows the script to transfer the world and other resource files from the VM to macOS where Webots is running. + +The following steps explain how to create the VM image with the installation of the ``webots_ros2`` released package. +It is also possible to install it from sources. + +1 Create the VM image +^^^^^^^^^^^^^^^^^^^^^^ + +Install UTM on your macOS machine. +The link can be found on the `official UTM website `_. + +Download the .iso image of `Ubuntu 22.04 `_ for Humble and Rolling or `Ubuntu 20.04 `_ for Foxy. +Be sure to download the image corresponding to your CPU architecture. + +In the UTM software: + +* Create a new image and choose ``Virtualize`` option. +* Select the ISO image you have downloaded in the ``Boot ISO Image`` field. +* Leave all hardware settings at default (including hardware acceleration disabled). +* In the ``Shared Directory`` window, select a folder that will be used by ``webots_ros2`` to transfer all the Webots assets to the host. + In this example, the selected folder is ``/Users/username/shared``. +* Leave all the remaining parameters as default. +* Start the VM. + Note that you can select another shared folder each time you start the VM. +* During the first launch of the VM, install Ubuntu and choose a username for your account. In this example, the username is ``ubuntu``. +* Once Ubuntu is installed, close the VM, remove the iso image from the CD/DVD field and restart the VM. + +2 Configure the VM +^^^^^^^^^^^^^^^^^^ +In this section, ROS 2 is installed in the VM and the shared folder is configured. +The following instructions and commands are all run inside the VM. + +* Open a terminal in the started VM and install the ROS 2 distribution you need by following the instructions in :doc:`../../../../Installation/Ubuntu-Install-Debians`: +* Create a folder in the VM to use as a shared folder. + In this example, the shared folder in the VM is ``/home/ubuntu/shared``. + + .. code-block:: console + + mkdir /home/ubuntu/shared + +* To mount this folder to the host, execute the following command. + Don't forget to modify the path to the shared folder, if it is different in your case. + + .. code-block:: console + + sudo mount -t 9p -o trans=virtio share /home/ubuntu/shared -oversion=9p2000.L + +* To automatically mount this folder to the host when starting the VM, add the following line to ``/etc/fstab``. + Don't forget to modify the path to the shared folder, if it is different in your case. + + .. code-block:: console + + share /home/ubuntu/shared 9p trans=virtio,version=9p2000.L,rw,_netdev,nofail 0 0 + +* The environment variable ``WEBOTS_SHARED_FOLDER`` must always be set in order for the package to work properly in the VM. + This variable specifies the location of the shared folder that is used to exchange data between the host machine and the virtual machine (VM) to the ``webots_ros2`` package. + The value to use for this variable should be in the format of ``:``, where ```` is the path to the shared folder on the host machine and ```` is the path to the same shared folder on the VM. + + In this example: + + .. code-block:: console + + export WEBOTS_SHARED_FOLDER=/Users/username/shared:/home/ubuntu/shared + + You can add this command line to the ``~/.bashrc`` file to automatically set this environment variable when starting a new terminal. + +3 Install ``webots_ros2`` +^^^^^^^^^^^^^^^^^^^^^^^^^ + +You can either install ``webots_ros2`` from the official released package, or install it from the latest up-to-date sources from `Github `_. + +.. tabs:: + + .. group-tab:: Install ``webots_ros2`` distributed package + + Run the following command in the VM terminal. + + .. code-block:: console + + sudo apt-get install ros-{DISTRO}-webots-ros2 + + .. group-tab:: Install ``webots_ros2`` from sources + + Install git. + + .. code-block:: console + + sudo apt-get install git + + Create a ROS 2 workspace with its ``src`` directory. + + .. code-block:: console + + mkdir -p ~/ros2_ws/src + + Source the ROS 2 environment. + + .. code-block:: console + + source /opt/ros/{DISTRO}/setup.bash + + Retrieve the sources from Github. + + .. code-block:: console + + cd ~/ros2_ws + git clone --recurse-submodules https://github.com/cyberbotics/webots_ros2.git src/webots_ros2 + + Install the package dependencies. + + .. code-block:: console + + sudo apt install python3-pip python3-rosdep python3-colcon-common-extensions + sudo rosdep init && rosdep update + rosdep install --from-paths src --ignore-src --rosdistro {DISTRO} + + Build the package using ``colcon``. + + .. code-block:: console + + colcon build + + Source this workspace. + + .. code-block:: console + + source install/local_setup.bash + +4 Launch the ``webots_ros2_universal_robot`` example +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +As mentioned in previous sections, the package uses the shared folder to communicate with Webots from the VM to the host. +In order for Webots to be started on the host from the VM's ROS package, a local TCP simulation server must be run. + +The server can be downloaded here: `local_simulation_server.py `_. +Specify the Webots installation folder in ``WEBOTS_HOME`` environment variable (e.g. ``/Applications/Webots.app``) and run the server using the following commands in a new terminal on the host (not in the VM): + +.. code-block:: console + + export WEBOTS_HOME=/Applications/Webots.app + python3 local_simulation_server.py + +In the VM, open a terminal and execute the following commands to start a package: + +First source the ROS 2 environment, if not done already. + +.. code-block:: console + + source /opt/ros/{DISTRO}/setup.bash + +If installed from sources, source your ROS 2 workspace, if not done already. + +.. code-block:: console + + cd ~/ros2_ws + source install/local_setup.bash + +If not already set in ``~/.bashrc``, set ``WEBOTS_SHARED_FOLDER`` (see previous sections for details). +Be sure to change the paths according to the location of your respective directories. + +.. code-block:: console + + export WEBOTS_SHARED_FOLDER=/Users/username/shared:/home/ubuntu/shared + +Use the ROS 2 launch command to start demo packages (e.g. ``webots_ros2_universal_robot``). + +.. code-block:: console + + ros2 launch webots_ros2_universal_robot multirobot_launch.py + +If Webots is closed or the ROS 2 process is interrupted, the local server will automatically wait for a new package launch and the shared folder will be cleaned for the next run. diff --git a/source/Tutorials/Advanced/Simulators/Webots/Installation-Ubuntu.rst b/source/Tutorials/Advanced/Simulators/Webots/Installation-Ubuntu.rst new file mode 100644 index 00000000000..b5208301cbc --- /dev/null +++ b/source/Tutorials/Advanced/Simulators/Webots/Installation-Ubuntu.rst @@ -0,0 +1,131 @@ +Installation (Ubuntu) +====================================== + +**Goal:** Install the ``webots_ros2`` package and run simulation examples on Ubuntu. + +**Tutorial level:** Advanced + +**Time:** 10 minutes + +.. contents:: Contents + :depth: 2 + :local: + +Background +---------- + +The ``webots_ros2`` package provides an interface between ROS 2 and Webots. +It includes several sub-packages, including ``webots_ros2_driver``, which allows you to start Webots and communicate with it. +This interface is used in most of the following tutorials, so it is required to install it beforehand. +Other sub-packages are mainly examples that show multiple possible implementations using the interface. +In this tutorial, you are going to install the package and learn how to run one of these examples. + +Prerequisites +------------- + +It is recommended to understand basic ROS principles covered in the beginner :doc:`../../../../Tutorials`. +In particular, :doc:`../../../Beginner-Client-Libraries/Creating-A-Workspace/Creating-A-Workspace` and :doc:`../../../Beginner-Client-Libraries/Creating-Your-First-ROS2-Package` are useful prerequisites. + +The Webots software should be installed in order to use the ``webots_ros2`` interface. +You can follow the `installation procedure `_ or `build it from sources `_. + +Alternatively, you can also let ``webots_ros2`` download and install Webots automatically. +This option appears when you launch an example of the package and no Webots installation is found. + +Multiple Installations of Webots +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If you have installed different versions of Webots on your computer, ``webots_ros2`` will look for Webots at the following locations (in this order): + +1. If the ``ROS2_WEBOTS_HOME`` environment variable is set, ROS 2 will use the Webots in this folder, regardless of its version. +2. If the ``WEBOTS_HOME`` environment variable is set, ROS 2 will use the Webots in this folder, regardless of its version. +3. If none of these variables is set, ``webots_ros2`` will look for Webots in the default installation paths for a compatible version: ``/usr/local/webots`` and ``/snap/webots/current/usr/share/webots``. +4. If Webots couldn't be found, ``webots_ros2`` will show a window offering the automatic installation of the latest compatible version of Webots. + +Tasks +----- + +1 Install ``webots_ros2`` +^^^^^^^^^^^^^^^^^^^^^^^^^ +You can either install the official released package, or install it from the latest up-to-date sources from `Github `_. + +.. tabs:: + + .. group-tab:: Install ``webots_ros2`` distributed package + + Run the following command in a terminal. + + .. code-block:: console + + sudo apt-get install ros-{DISTRO}-webots-ros2 + + .. group-tab:: Install ``webots_ros2`` from sources + + Create a ROS 2 workspace with its ``src`` directory. + + .. code-block:: console + + mkdir -p ~/ros2_ws/src + + Source the ROS 2 environment. + + .. code-block:: console + + source /opt/ros/{DISTRO}/setup.bash + + Retrieve the sources from Github. + + .. code-block:: console + + cd ~/ros2_ws + git clone --recurse-submodules https://github.com/cyberbotics/webots_ros2.git src/webots_ros2 + + Install the package dependencies. + + .. code-block:: console + + sudo apt install python3-pip python3-rosdep python3-colcon-common-extensions + sudo rosdep init && rosdep update + rosdep install --from-paths src --ignore-src --rosdistro {DISTRO} + + Build the package using ``colcon``. + + .. code-block:: console + + colcon build + + Source this workspace. + + .. code-block:: console + + source install/local_setup.bash + +2 Launch the ``webots_ros2_universal_robot`` example +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The following instructions explain how to start a provided example. + +First source the ROS 2 environment, if not done already. + +.. code-block:: console + + source /opt/ros/{DISTRO}/setup.bash + +Setting the ``WEBOTS_HOME`` environment variable allows you to start a specific Webots installation. + +.. code-block:: console + + export WEBOTS_HOME=/usr/local/webots + +If installed from sources, source your ROS 2 workspace, if not done already. + +.. code-block:: console + + cd ~/ros2_ws + source install/local_setup.bash + +Use the ROS 2 launch command to start demo packages (e.g. ``webots_ros2_universal_robot``). + +.. code-block:: console + + ros2 launch webots_ros2_universal_robot multirobot_launch.py diff --git a/source/Tutorials/Advanced/Simulators/Webots/Installation-Windows.rst b/source/Tutorials/Advanced/Simulators/Webots/Installation-Windows.rst new file mode 100644 index 00000000000..20a2e35b0b7 --- /dev/null +++ b/source/Tutorials/Advanced/Simulators/Webots/Installation-Windows.rst @@ -0,0 +1,197 @@ +Installation (Windows) +====================================== + +**Goal:** Install the ``webots_ros2`` package and run simulation examples on Windows. + +**Tutorial level:** Advanced + +**Time:** 10 minutes + +.. contents:: Contents + :depth: 2 + :local: + +Background +---------- + +The ``webots_ros2`` package provides an interface between ROS 2 and Webots. +It includes several sub-packages, including ``webots_ros2_driver``, which allows ROS nodes to communicate with Webots. +Other sub-packages are mainly examples that show multiple possible implementations using the interface. +In this tutorial, you are going to install the package and learn how to run one of these examples. + +Prerequisites +------------- + +It is recommended to understand basic ROS principles covered in the beginner :doc:`../../../../Tutorials`. +In particular, :doc:`../../../Beginner-Client-Libraries/Creating-A-Workspace/Creating-A-Workspace` and :doc:`../../../Beginner-Client-Libraries/Creating-Your-First-ROS2-Package` are useful prerequisites. + +Webots is a prerequisite to use the ``webots_ros2`` package. +You can follow the `installation procedure `_ or `build it from sources `_. + +Alternatively, you can also let ``webots_ros2`` download Webots automatically. +This option appears when you launch an example of the package and no Webots installation is found. + +Multiple Installations of Webots +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If you have more than one installation of Webots, ROS 2 will look for Webots at the following locations (in this order): + +1. If the ``ROS2_WEBOTS_HOME`` environment variable is set, ROS 2 will use the Webots in this folder, regardless of its version. +2. If the ``WEBOTS_HOME`` environment variable is set, ROS 2 will use the Webots in this folder, regardless of its version. +3. If none of the previous points is set/installed ROS 2 will look for Webots in the default installation paths for a compatible version: ``C:\Program Files\Webots``. +4. If Webots couldn't be found, ``webots_ros2`` will show a window and offer automatic Webots installation of the last compatible version. + +Tasks +----- + +1 Install WSL2 +^^^^^^^^^^^^^^^ + +On Windows, WSL (Windows Subsystem for Linux) improves the user experience with ROS 2 compared to native Windows installation, as it runs on a Linux platform. +Install WSL with an Ubuntu version which is compatible with your ROS distribution and upgrade to WSL2 following the `official Microsoft tutorial `_. + +2 Install ROS 2 in WSL +^^^^^^^^^^^^^^^^^^^^^^ + +Install ROS 2 inside Ubuntu WSL, following :doc:`../../../../Installation/Ubuntu-Install-Debians`. + +3 Install ``webots_ros2`` +^^^^^^^^^^^^^^^^^^^^^^^^^ +You can then either install ``webots_ros2`` from the official released package, or install it from the latest up-to-date sources from `Github `_. + +The following commands must be run inside the WSL environment. + +.. tabs:: + + .. group-tab:: Install ``webots_ros2`` distributed package + + Run the following command in a terminal. + + .. code-block:: console + + sudo apt-get install ros-{DISTRO}-webots-ros2 + + .. group-tab:: Install ``webots_ros2`` from sources + + Create a ROS 2 workspace with its ``src`` directory. + + .. code-block:: console + + mkdir -p ~/ros2_ws/src + + Source the ROS 2 environment. + + .. code-block:: console + + source /opt/ros/{DISTRO}/setup.bash + + Retrieve the sources from Github. + + .. code-block:: console + + cd ~/ros2_ws + git clone --recurse-submodules https://github.com/cyberbotics/webots_ros2.git src/webots_ros2 + + Install the package dependencies. + + .. code-block:: console + + sudo apt install python3-pip python3-rosdep python3-colcon-common-extensions + sudo rosdep init && rosdep update + rosdep install --from-paths src --ignore-src --rosdistro {DISTRO} + + Build the package using ``colcon``. + + .. code-block:: console + + colcon build + + Source this workspace. + + .. code-block:: console + + source install/local_setup.bash + + +4 Launch the ``webots_ros2_universal_robot`` example +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +WSL doesn't support hardware acceleration (yet). +Therefore, Webots should be started on Windows, while the ROS part is running inside WSL. +To do so, the following commands must be run inside the WSL environment. + +First source the ROS 2 environment, if not done already. + +.. code-block:: console + + source /opt/ros/{DISTRO}/setup.bash + +Setting the ``WEBOTS_HOME`` environment variable allows you to start a specific Webots installation (e.g. ``C:\Program Files\Webots``). +Use the mount point "/mnt" to refer to a path on native Windows. + +.. code-block:: console + + export WEBOTS_HOME=/mnt/c/Program\ Files/Webots + +If installed from sources, source your ROS 2 workspace, if not done already. + +.. code-block:: console + + cd ~/ros2_ws + source install/local_setup.bash + +Use the ROS 2 launch command to start demo packages (e.g. ``webots_ros2_universal_robot``). + +.. code-block:: console + + ros2 launch webots_ros2_universal_robot multirobot_launch.py + + +5 RViz troubleshooting +^^^^^^^^^^^^^^^^^^^^^^ + +With recent versions of WSL2, RViz should work out of the box. + +You can check if it works correctly by running any example that uses RViz, for example: + +.. code-block:: console + + sudo apt install ros-{DISTRO}-slam-toolbox + ros2 launch webots_ros2_tiago robot_launch.py rviz:=true slam:=true + +The Tiago robot can be controlled using: + +.. code-block:: console + + ros2 run teleop_twist_keyboard teleop_twist_keyboard + +With older WSL versions, RViz2 may not work directly, as no display is available. To use RViz, you can either upgrade WSL or enable X11 forwarding. + +.. tabs:: + .. group-tab:: Upgrade WSL + + In a Windows shell: + + .. code-block:: console + + wsl --update + + .. group-tab:: Enable X11 forwarding + + For older versions of WSL, the following steps can be followed: + + 1. Install `VcXsrv `_. + 2. Launch VcXsrv. You can leave most of the parameters default, except the ``Extra settings`` page, where you must set ``Clipboard``, ``Primary Selection`` and ``Disable access control`` and unset ``Native opengl``. + 3. You can save the configuration for future launches. + 4. Click on ``Finish``, you will see that the X11 server is running in the icon tray. + 5. In your WSL environment, export the ``DISPLAY`` variable. + + .. code-block:: console + + export DISPLAY=$(ip route list default | awk '{print }'):0 + + You can add this to your ``.bashrc``, so that it is set for every future WSL environment. + + .. code-block:: console + + echo "export DISPLAY=$(ip route list default | awk '{print }'):0" >> ~/.bashrc diff --git a/source/Tutorials/Advanced/Simulators/Webots/Setting-Up-Simulation-Webots-Advanced.rst b/source/Tutorials/Advanced/Simulators/Webots/Setting-Up-Simulation-Webots-Advanced.rst new file mode 100644 index 00000000000..cac545fa34b --- /dev/null +++ b/source/Tutorials/Advanced/Simulators/Webots/Setting-Up-Simulation-Webots-Advanced.rst @@ -0,0 +1,228 @@ +Setting up a robot simulation (Advanced) +======================================== + +**Goal:** Extend a robot simulation with an obstacle avoider node. + +**Tutorial level:** Advanced + +**Time:** 20 minutes + +.. contents:: Contents + :depth: 2 + :local: + +Background +---------- + +In this tutorial you will extend the package created in the first part of the tutorial: :doc:`./Setting-Up-Simulation-Webots-Basic`. +The aim is to implement a ROS 2 node that avoids obstacles using the robot's distance sensors. +This tutorial focuses on using robot devices with the ``webots_ros2_driver`` interface. + +Prerequisites +------------- + +This is a continuation of the first part of the tutorial: :doc:`./Setting-Up-Simulation-Webots-Basic`. +It is mandatory to start with the first part to set up the custom packages and necessary files. + +This tutorial is compatible with version 2023.1.0 of ``webots_ros2`` and Webots R2023b, as well as upcoming versions. + +Tasks +----- + +1 Updating ``my_robot.urdf`` +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +As mentioned in :doc:`./Setting-Up-Simulation-Webots-Basic`, ``webots_ros2_driver`` contains plugins to interface most of Webots devices with ROS 2 directly. +These plugins can be loaded using the ```` tag in the URDF file of the robot. +The ``reference`` attribute should match the Webots device ``name`` parameter. +The list of all existing interfaces and the corresponding parameters can be found `on the devices reference page `_. +For available devices that are not configured in the URDF file, the interface will be automatically created and default values will be used for ROS parameters (e.g. ``update rate``, ``topic name``, and ``frame name``). + +In ``my_robot.urdf`` replace the whole contents with: + +.. tabs:: + + .. group-tab:: Python + + .. literalinclude:: Code/my_robot_with_sensors_python.urdf + :language: xml + + .. group-tab:: C++ + + .. literalinclude:: Code/my_robot_with_sensors_cpp.urdf + :language: xml + + +In addition to your custom plugin, the ``webots_ros2_driver`` will parse the ```` tags referring to the **DistanceSensor** nodes and use the standard parameters in the ```` tags to enable the sensors and name their topics. + +2 Creating a ROS node to avoid obstacles +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. tabs:: + + .. group-tab:: Python + + The robot will use a standard ROS node to detect the wall and send motor commands to avoid it. + In the ``my_package/my_package/`` folder, create a file named ``obstacle_avoider.py`` with this code: + + .. literalinclude:: Code/obstacle_avoider.py + :language: python + + This node will create a publisher for the command and subscribe to the sensors topics here: + + .. literalinclude:: Code/obstacle_avoider.py + :language: python + :dedent: 8 + :lines: 14-17 + + When a measurement is received from the left sensor it will be copied to a member field: + + .. literalinclude:: Code/obstacle_avoider.py + :language: python + :dedent: 4 + :lines: 19-20 + + Finally, a message will be sent to the ``/cmd_vel`` topic when a measurement from the right sensor is received. + The ``command_message`` will register at least a forward speed in ``linear.x`` in order to make the robot move when no obstacle is detected. + If any of the two sensors detect an obstacle, ``command_message`` will also register a rotational speed in ``angular.z`` in order to make the robot turn right. + + .. literalinclude:: Code/obstacle_avoider.py + :language: python + :dedent: 4 + :lines: 22-32 + + .. group-tab:: C++ + + The robot will use a standard ROS node to detect the wall and send motor commands to avoid it. + In the ``my_package/include/my_package`` folder, create a header file named ``ObstacleAvoider.hpp`` with this code: + + .. literalinclude:: Code/ObstacleAvoider.hpp + :language: cpp + + In the ``my_package/src`` folder, create a source file named ``ObstacleAvoider.cpp`` with this code: + + .. literalinclude:: Code/ObstacleAvoider.cpp + :language: cpp + + This node will create a publisher for the command and subscribe to the sensors topics here: + + .. literalinclude:: Code/ObstacleAvoider.cpp + :language: cpp + :lines: 6-16 + + When a measurement is received from the left sensor it will be copied to a member field: + + .. literalinclude:: Code/ObstacleAvoider.cpp + :language: cpp + :lines: 19-22 + + Finally, a message will be sent to the ``/cmd_vel`` topic when a measurement from the right sensor is received. + The ``command_message`` will register at least a forward speed in ``linear.x`` in order to make the robot move when no obstacle is detected. + If any of the two sensors detect an obstacle, ``command_message`` will also register a rotational speed in ``angular.z`` in order to make the robot turn right. + + .. literalinclude:: Code/ObstacleAvoider.cpp + :language: cpp + :lines: 24-38 + + +3 Updating additional files +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +You have to modify these two other files to launch your new node. + +.. tabs:: + + .. group-tab:: Python + + Edit ``setup.py`` and replace ``'console_scripts'`` with: + + .. literalinclude:: Code/setup_sensor.py + :language: python + :dedent: 8 + :lines: 24-27 + + This will add an entry point for the ``obstacle_avoider`` node. + + .. group-tab:: C++ + + Edit ``CMakeLists.txt`` and add the compilation and installation of the ``obstacle_avoider``: + + .. literalinclude:: Code/CMakeLists_sensor.txt + :language: cmake + + +Go to the file ``robot_launch.py`` and replace ``def generate_launch_description():`` with: + +.. literalinclude:: Code/robot_launch_sensor.py + :language: python + :lines: 10-40 + +This will create an ``obstacle_avoider`` node that will be included in the ``LaunchDescription``. + +4 Test the obstacle avoidance code +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Launch the simulation from a terminal in your ROS 2 workspace: + +.. tabs:: + + .. group-tab:: Linux + + From a terminal in your ROS 2 workspace run: + + .. code-block:: console + + colcon build + source install/local_setup.bash + ros2 launch my_package robot_launch.py + + .. group-tab:: Windows + + From a terminal in your WSL ROS 2 workspace run: + + .. code-block:: console + + colcon build + export WEBOTS_HOME=/mnt/c/Program\ Files/Webots + source install/local_setup.bash + ros2 launch my_package robot_launch.py + + Be sure to use the ``/mnt`` prefix in front of your path to the Webots installation folder to access the Windows file system from WSL. + + .. group-tab:: macOS + + In a terminal of the host machine (not in the VM), if not done already, specify the Webots installation folder (e.g. ``/Applications/Webots.app``) and start the server using the following commands: + + .. code-block:: console + + export WEBOTS_HOME=/Applications/Webots.app + python3 local_simulation_server.py + + Note that the server keeps running once the ROS 2 nodes are ended. + You don't need to restart it every time you want to launch a new simulation. + From a terminal in the Linux VM in your ROS 2 workspace, build and launch your custom package with: + + .. code-block:: console + + cd ~/ros2_ws + colcon build + source install/local_setup.bash + ros2 launch my_package robot_launch.py + +Your robot should go forward and before hitting the wall it should turn clockwise. +You can press ``Ctrl+F10`` in Webots or go to the ``View`` menu, ``Optional Rendering`` and ``Show DistanceSensor Rays`` to display the range of the distance sensors of the robot. + +.. image:: Image/Robot_turning_clockwise.png + +Summary +------- + +In this tutorial, you extended the basic simulation with a obstacle avoider ROS 2 node that publishes velocity commands based on the distance sensor values of the robot. + +Next steps +---------- + +You might want to improve the plugin or create new nodes to change the behavior of the robot. +You can also implement a reset handler to automatically restart your ROS nodes when the simulation is reset from the Webots interface: + +* :doc:`./Simulation-Reset-Handler`. diff --git a/source/Tutorials/Advanced/Simulators/Webots/Setting-Up-Simulation-Webots-Basic.rst b/source/Tutorials/Advanced/Simulators/Webots/Setting-Up-Simulation-Webots-Basic.rst new file mode 100644 index 00000000000..376f77b788f --- /dev/null +++ b/source/Tutorials/Advanced/Simulators/Webots/Setting-Up-Simulation-Webots-Basic.rst @@ -0,0 +1,525 @@ +.. redirect-from:: + + Tutorials/Simulators/Webots/Setting-up-a-Robot-Simulation-Webots + Tutorials/Advanced/Simulators/Webots + +Setting up a robot simulation (Basic) +====================================== + +**Goal:** Setup a robot simulation and control it from ROS 2. + +**Tutorial level:** Advanced + +**Time:** 30 minutes + +.. contents:: Contents + :depth: 2 + :local: + +Background +---------- + +In this tutorial, you are going to use the Webots robot simulator to set-up and run a very simple ROS 2 simulation scenario. + +The ``webots_ros2`` package provides an interface between ROS 2 and Webots. +It includes several sub-packages, but in this tutorial, you are going to use only the ``webots_ros2_driver`` sub-package to implement a Python or C++ plugin controlling a simulated robot. +Some other sub-packages contain demos with different robots such as the TurtleBot3. +They are documented in the `Webots ROS 2 examples `_ page. + +Prerequisites +------------- + +It is recommended to understand basic ROS principles covered in the beginner :doc:`../../../../Tutorials`. +In particular, :doc:`../../../Beginner-CLI-Tools/Introducing-Turtlesim/Introducing-Turtlesim`, :doc:`../../../Beginner-CLI-Tools/Understanding-ROS2-Topics/Understanding-ROS2-Topics`, :doc:`../../../Beginner-Client-Libraries/Creating-A-Workspace/Creating-A-Workspace`, :doc:`../../../Beginner-Client-Libraries/Creating-Your-First-ROS2-Package` and :doc:`../../../Intermediate/Launch/Creating-Launch-Files` are useful prerequisites. + +.. tabs:: + + .. group-tab:: Linux + + The Linux and ROS commands of this tutorial can be run in a standard Linux terminal. + The following page :doc:`./Installation-Ubuntu` explains how to install the ``webots_ros2`` package on Linux. + + .. group-tab:: Windows + + The Linux and ROS commands of this tutorial must be run in a WSL (Windows Subsystem for Linux) environment. + The following page :doc:`./Installation-Windows` explains how to install the ``webots_ros2`` package on Windows. + + .. group-tab:: macOS + + The Linux and ROS commands of this tutorial must be run in a pre-configured Linux Virtual Machine (VM). + The following page :doc:`./Installation-MacOS` explains how to install the ``webots_ros2`` package on macOS. + +This tutorial is compatible with version 2023.1.0 of ``webots_ros2`` and Webots R2023b, as well as upcoming versions. + +Tasks +----- + +1 Create the package structure +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Let's organize the code in a custom ROS 2 package. +Create a new package named ``my_package`` from the ``src`` folder of your ROS 2 workspace. +Change the current directory of your terminal to ``ros2_ws/src`` and run: + +.. tabs:: + + .. group-tab:: Python + + .. code-block:: console + + ros2 pkg create --build-type ament_python --license Apache-2.0 --node-name my_robot_driver my_package --dependencies rclpy geometry_msgs webots_ros2_driver + + The ``--node-name my_robot_driver`` option will create a ``my_robot_driver.py`` template Python plugin in the ``my_package`` subfolder that you will modify later. + The ``--dependencies rclpy geometry_msgs webots_ros2_driver`` option specifies the packages needed by the ``my_robot_driver.py`` plugin in the ``package.xml`` file. + + Let's add a ``launch`` and a ``worlds`` folder inside the ``my_package`` folder. + + .. code-block:: console + + cd my_package + mkdir launch + mkdir worlds + + You should end up with the following folder structure: + + .. code-block:: console + + src/ + └── my_package/ + ├── launch/ + ├── my_package/ + │ ├── __init__.py + │ └── my_robot_driver.py + ├── resource/ + │ └── my_package + ├── test/ + │ ├── test_copyright.py + │ ├── test_flake8.py + │ └── test_pep257.py + ├── worlds/ + ├── package.xml + ├── setup.cfg + └── setup.py + + .. group-tab:: C++ + + .. code-block:: console + + ros2 pkg create --build-type ament_cmake --license Apache-2.0 --node-name MyRobotDriver my_package --dependencies rclcpp geometry_msgs webots_ros2_driver pluginlib + + The ``--node-name MyRobotDriver`` option will create a ``MyRobotDriver.cpp`` template C++ plugin in the ``my_package/src`` subfolder that you will modify later. + The ``--dependencies rclcpp geometry_msgs webots_ros2_driver pluginlib`` option specifies the packages needed by the ``MyRobotDriver`` plugin in the ``package.xml`` file. + + + Let's add a ``launch``, a ``worlds`` and a ``resource`` folder inside the ``my_package`` folder. + + .. code-block:: console + + cd my_package + mkdir launch + mkdir worlds + mkdir resource + + Two additional files must be created: the header file for ``MyRobotDriver`` and the ``my_robot_driver.xml`` pluginlib description file. + + .. code-block:: console + + touch my_robot_driver.xml + touch include/my_package/MyRobotDriver.hpp + + You should end up with the following folder structure: + + .. code-block:: console + + src/ + └── my_package/ + ├── include/ + │ └── my_package/ + │ └── MyRobotDriver.hpp + ├── launch/ + ├── resource/ + ├── src/ + │ └── MyRobotDriver.cpp + ├── worlds/ + ├── CMakeList.txt + ├── my_robot_driver.xml + └── package.xml + +2 Setup the simulation world +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +You will need a world file containing a robot to launch your simulation. +:download:`Download this world file ` and move it inside ``my_package/worlds/``. + +This is actually a fairly simple text file you can visualize in a text editor. +A simple robot is already included in this ``my_world.wbt`` world file. + +.. note:: + + In case you want to learn how to create your own robot model in Webots, you can check this `tutorial `_. + +3 Edit the ``my_robot_driver`` plugin +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The ``webots_ros2_driver`` sub-package automatically creates a ROS 2 interface for most sensors. +More details on existing device interfaces and how to configure them is given in the second part of the tutorial: :doc:`./Setting-Up-Simulation-Webots-Advanced`. +In this task, you will extend this interface by creating your own custom plugin. +This custom plugin is a ROS node equivalent to a robot controller. +You can use it to access the `Webots robot API `_ and create your own topics and services to control your robot. + +.. note:: + + The purpose of this tutorial is to show a basic example with a minimum number of dependencies. + However, you could avoid the use of this plugin by using another ``webots_ros2`` sub-package named ``webots_ros2_control``, introducing a new dependency. + This other sub-package creates an interface with the ``ros2_control`` package that facilitates the control of a differential wheeled robot. + + +.. tabs:: + + .. group-tab:: Python + + Open ``my_package/my_package/my_robot_driver.py`` in your favorite editor and replace its contents with the following: + + .. literalinclude:: Code/my_robot_driver.py + :language: python + + As you can see, the ``MyRobotDriver`` class implements three methods. + + The first method, named ``init(self, ...)``, is actually the ROS node counterpart of the Python ``__init__(self, ...)`` constructor. + The ``init`` method always takes two arguments: + + - The ``webots_node`` argument contains a reference on the Webots instance. + - The ``properties`` argument is a dictionary created from the XML tags given in the URDF files (:ref:`4 Create the my_robot.urdf file`) and allows you to pass parameters to the controller. + + The robot instance from the simulation ``self.__robot`` can be used to access the `Webots robot API `_. + Then, it gets the two motor instances and initializes them with a target position and a target velocity. + Finally a ROS node is created and a callback method is registered for a ROS topic named ``/cmd_vel`` that will handle ``Twist`` messages. + + .. literalinclude:: Code/my_robot_driver.py + :language: python + :dedent: 4 + :lines: 8-24 + + Then comes the implementation of the ``__cmd_vel_callback(self, twist)`` callback private method that will be called for each ``Twist`` message received on the ``/cmd_vel`` topic and will save it in the ``self.__target_twist`` member variable. + + .. literalinclude:: Code/my_robot_driver.py + :language: python + :dedent: 4 + :lines: 26-27 + + Finally, the ``step(self)`` method is called at every time step of the simulation. + The call to ``rclpy.spin_once()`` is needed to keep the ROS node running smoothly. + At each time step, the method will retrieve the desired ``forward_speed`` and ``angular_speed`` from ``self.__target_twist``. + As the motors are controlled with angular velocities, the method will then convert the ``forward_speed`` and ``angular_speed`` into individual commands for each wheel. + This conversion depends on the structure of the robot, more specifically on the radius of the wheel and the distance between them. + + .. literalinclude:: Code/my_robot_driver.py + :language: python + :dedent: 4 + :lines: 29-39 + + .. group-tab:: C++ + + Open ``my_package/include/my_package/MyRobotDriver.hpp`` in your favorite editor and replace its contents with the following: + + .. literalinclude:: Code/MyRobotDriver.hpp + :language: cpp + + The class ``MyRobotDriver`` is defined, which inherits from the ``webots_ros2_driver::PluginInterface`` class. + The plugin has to override ``step(...)`` and ``init(...)`` functions. + More details are given in the ``MyRobotDriver.cpp`` file. + Several helper methods, callbacks and member variables that will be used internally by the plugin are declared privately. + + Then, open ``my_package/src/MyRobotDriver.cpp`` in your favorite editor and replace its contents with the following: + + .. literalinclude:: Code/MyRobotDriver.cpp + :language: cpp + + The ``MyRobotDriver::init`` method is executed once the plugin is loaded by the ``webots_ros2_driver`` package. + It takes two arguments: + + * A pointer to the ``WebotsNode`` defined by ``webots_ros2_driver``, which allows to access the ROS 2 node functions. + * The ``parameters`` argument is an unordered map of strings, created from the XML tags given in the URDF files (:ref:`4 Create the my_robot.urdf file`) and allows to pass parameters to the controller. It is not used in this example. + + It initializes the plugin by setting up the robot motors, setting their positions and velocities, and subscribing to the ``/cmd_vel`` topic. + + .. literalinclude:: Code/MyRobotDriver.cpp + :language: cpp + :lines: 13-29 + + Then comes the implementation of the ``cmdVelCallback()`` callback function that will be called for each Twist message received on the ``/cmd_vel`` topic and will save it in the ``cmd_vel_msg`` member variable. + + .. literalinclude:: Code/MyRobotDriver.cpp + :language: cpp + :lines: 31-35 + + The ``step()`` method is called at every time step of the simulation. + At each time step, the method will retrieve the desired ``forward_speed`` and ``angular_speed`` from ``cmd_vel_msg``. + As the motors are controlled with angular velocities, the method will then convert the ``forward_speed`` and ``angular_speed`` into individual commands for each wheel. + This conversion depends on the structure of the robot, more specifically on the radius of the wheel and the distance between them. + + .. literalinclude:: Code/MyRobotDriver.cpp + :language: cpp + :lines: 37-50 + + The final lines of the file define the end of the ``my_robot_driver`` namespace and include a macro to export the ``MyRobotDriver`` class as a plugin using the ``PLUGINLIB_EXPORT_CLASS`` macro. + This allows the plugin to be loaded by the Webots ROS2 driver at runtime. + + .. literalinclude:: Code/MyRobotDriver.cpp + :language: cpp + :lines: 53-55 + + .. note:: + + While the plugin is implemented in C++, the C API must be used to interact with the Webots controller library. + +.. _4 Create the my_robot.urdf file: + +4 Create the ``my_robot.urdf`` file +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +You now have to create a URDF file to declare the ``MyRobotDriver`` plugin. +This will allow the ``webots_ros2_driver`` ROS node to launch the plugin and connect it to the target robot. + +In the ``my_package/resource`` folder create a text file named ``my_robot.urdf`` with this content: + +.. tabs:: + + .. group-tab:: Python + + .. literalinclude:: Code/my_robot_python.urdf + :language: xml + + The ``type`` attribute specifies the path to the class given by the hierarchical structure of files. + ``webots_ros2_driver`` is responsible for loading the class based on the specified package and modules. + + .. group-tab:: C++ + + .. literalinclude:: Code/my_robot_cpp.urdf + :language: xml + + The ``type`` attribute specifies the namespace and class name to load. + ``pluginlib`` is responsible for loading the class based on the specified information. + +.. note:: + + This simple URDF file doesn't contain any link or joint information about the robot as it is not needed in this tutorial. + However, URDF files usually contain much more information as explained in the :doc:`../../../Intermediate/URDF/URDF-Main` tutorial. + +.. note:: + + Here the plugin does not take any input parameter, but this can be achieved with a tag containing the parameter name. + + .. tabs:: + + .. group-tab:: Python + + .. code-block:: xml + + + someValue + + + .. group-tab:: C++ + + .. code-block:: xml + + + someValue + + + + This is namely used to pass parameters to existing Webots device plugins (see :doc:`./Setting-Up-Simulation-Webots-Advanced`). + +5 Create the launch file +^^^^^^^^^^^^^^^^^^^^^^^^ + +Let's create the launch file to easily launch the simulation and the ROS controller with a single command. +In the ``my_package/launch`` folder create a new text file named ``robot_launch.py`` with this code: + +.. literalinclude:: Code/robot_launch.py + :language: python + +The ``WebotsLauncher`` object is a custom action that allows you to start a Webots simulation instance. +You have to specify in the constructor which world file the simulator will open. + +.. literalinclude:: Code/robot_launch.py + :language: python + :dedent: 4 + :lines: 13-15 + +Then, the ROS node interacting with the simulated robot is created. +This node, named ``WebotsController``, is located in the ``webots_ros2_driver`` package. + +.. tabs:: + + .. group-tab:: Linux + + The node will be able to communicate with the simulated robot by using a custom protocol based on IPC and shared memory. + + .. group-tab:: Windows + + The node (in WSL) will be able to communicate with the simulated robot (in Webots on native Windows) through a TCP connection. + + .. group-tab:: macOS + + The node (in the docker container) will be able to communicate with the simulated robot (in Webots on native macOS) through a TCP connection. + + +In your case, you need to run a single instance of this node, because you have a single robot in the simulation. +But if you had more robots in the simulation, you would have to run one instance of this node per robot. +The ``robot_name`` parameter is used to define the name of the robot the driver should connect to. +The ``robot_description`` parameter holds the path to the URDF file which refers to the ``MyRobotDriver`` plugin. +You can see the ``WebotsController`` node as the interface that connects your controller plugin to the target robot. + +.. literalinclude:: Code/robot_launch.py + :language: python + :dedent: 4 + :lines: 17-22 + +After that, the two nodes are set to be launched in the ``LaunchDescription`` constructor: + +.. literalinclude:: Code/robot_launch.py + :language: python + :dedent: 4 + :lines: 24-26 + +Finally, an optional part is added in order to shutdown all the nodes once Webots terminates (e.g., when it gets closed from the graphical user interface). + +.. literalinclude:: Code/robot_launch.py + :language: python + :dedent: 8 + :lines: 27-32 + +.. note:: + + More details on ``WebotsController`` and ``WebotsLauncher`` arguments can be found `on the nodes reference page `_. + +6 Edit additional files +^^^^^^^^^^^^^^^^^^^^^^^ + +.. tabs:: + + .. group-tab:: Python + + Before you can start the launch file, you have to modify the ``setup.py`` file to include the extra files you added. + Open ``my_package/setup.py`` and replace its contents with: + + .. literalinclude:: Code/setup.py + :language: python + + This sets-up the package and adds in the ``data_files`` variable the newly added files: ``my_world.wbt``, ``my_robot.urdf`` and ``robot_launch.py``. + + .. group-tab:: C++ + + Before you can start the launch file, you have to modify ``CMakeLists.txt`` and ``my_robot_driver.xml`` files: + + * ``CMakeLists.txt`` defines the compilation rules of your plugin. + * ``my_robot_driver.xml`` is necessary for the pluginlib to find your Webots ROS 2 plugin. + + Open ``my_package/my_robot_driver.xml`` and replace its contents with: + + .. literalinclude:: Code/my_robot_driver.xml + :language: xml + + Open ``my_package/CMakeLists.txt`` and replace its contents with: + + .. literalinclude:: Code/CMakeLists.txt + :language: cmake + + The CMakeLists.txt exports the plugin configuration file with the ``pluginlib_export_plugin_description_file()``, defines a shared library of the C++ plugin ``src/MyRobotDriver.cpp``, and sets the include and library dependencies using ``ament_target_dependencies()``. + + The file then installs the library, the directories ``launch``, ``resource``, and ``worlds`` to the ``share/my_package`` directory. + Finally, it exports the include directories and libraries using ``ament_export_include_directories()`` and ``ament_export_libraries()``, respectively, and declares the package using ``ament_package()``. + + +7 Test the code +^^^^^^^^^^^^^^^ + +.. tabs:: + + .. group-tab:: Linux + + From a terminal in your ROS 2 workspace run: + + .. code-block:: console + + colcon build + source install/local_setup.bash + ros2 launch my_package robot_launch.py + + This will launch the simulation. + Webots will be automatically installed on the first run in case it was not already installed. + + .. group-tab:: Windows + + From a terminal in your WSL ROS 2 workspace run: + + .. code-block:: console + + colcon build + export WEBOTS_HOME=/mnt/c/Program\ Files/Webots + source install/local_setup.bash + ros2 launch my_package robot_launch.py + + Be sure to use the ``/mnt`` prefix in front of your path to the Webots installation folder to access the Windows file system from WSL. + + This will launch the simulation. + Webots will be automatically installed on the first run in case it was not already installed. + + .. group-tab:: macOS + + On macOS, a local server must be started on the host to start Webots from the VM. + The local server can be downloaded `on the webots-server repository `_. + + In a terminal of the host machine (not in the VM), specify the Webots installation folder (e.g. ``/Applications/Webots.app``) and start the server using the following commands: + + .. code-block:: console + + export WEBOTS_HOME=/Applications/Webots.app + python3 local_simulation_server.py + + From a terminal in the Linux VM in your ROS 2 workspace, build and launch your custom package with: + + .. code-block:: console + + colcon build + source install/local_setup.bash + ros2 launch my_package robot_launch.py + + +.. note:: + + If you want to install Webots manually, you can download it `here `_. + + +Then, open a second terminal and send a command with: + +.. code-block:: console + + ros2 topic pub /cmd_vel geometry_msgs/Twist "linear: { x: 0.1 }" + +The robot is now moving forward. + +.. image:: Image/Robot_moving_forward.png + +At this point, the robot is able to blindly follow your motor commands. +But it will eventually bump into the wall as you order it to move forwards. + +.. image:: Image/Robot_colliding_wall.png + +Close the Webots window, this should also shutdown your ROS nodes started from the launcher. +Close also the topic command with ``Ctrl+C`` in the second terminal. + +Summary +------- + +In this tutorial, you set-up a realistic robot simulation with Webots and implemented a custom plugin to control the motors of the robot. + +Next steps +---------- + +To improve the simulation, the robot's sensors can be used to detect obstacles and avoid them. +The second part of the tutorial shows how to implement such behaviour: + +* :doc:`./Setting-Up-Simulation-Webots-Advanced`. diff --git a/source/Tutorials/Advanced/Simulators/Webots/Simulation-Reset-Handler.rst b/source/Tutorials/Advanced/Simulators/Webots/Simulation-Reset-Handler.rst new file mode 100644 index 00000000000..4a20c781177 --- /dev/null +++ b/source/Tutorials/Advanced/Simulators/Webots/Simulation-Reset-Handler.rst @@ -0,0 +1,193 @@ +Setting up a Reset Handler +========================== + +**Goal:** Extend a robot simulation with a reset handler to restart nodes when the reset button of Webots is pressed. + +**Tutorial level:** Advanced + +**Time:** 10 minutes + +.. contents:: Contents + :depth: 2 + :local: + +Background +---------- + +In this tutorial, you will learn how to implement a reset handler in a robot simulation using Webots. +The Webots reset button reverts the world to the initial state and restarts controllers. +It is convenient as it quickly resets the simulation, but in the context of ROS 2, robot controllers are not started again making the simulation stop. +The reset handler allows you to restart specific nodes or perform additional actions when the reset button in Webots is pressed. +This can be useful for scenarios where you need to reset the state of your simulation or restart specific components without completely restarting the complete ROS system. + +Prerequisites +------------- + +Before proceeding with this tutorial, make sure you have completed the following: + +- Understanding of ROS 2 nodes and topics covered in the beginner :doc:`../../../../Tutorials`. +- Knowledge of Webots and ROS 2 and its interface package. +- Familiarity with :doc:`./Setting-Up-Simulation-Webots-Basic`. + + +Reset Handler for Simple Cases (Controllers Only) +------------------------------------------------- + +In the launch file of your package, add the ``respawn`` parameter. + +.. code-block:: python + + def generate_launch_description(): + robot_driver = WebotsController( + robot_name='my_robot', + parameters=[ + {'robot_description': robot_description_path} + ], + + # Every time one resets the simulation the controller is automatically respawned + respawn=True + ) + + # Starts Webots + webots = WebotsLauncher(world=PathJoinSubstitution([package_dir, 'worlds', world])) + + return LaunchDescription([ + webots, + robot_driver + ]) + +On reset, Webots kills all driver nodes. +Therefore, to start them again after reset, you should set the ``respawn`` property of the driver node to ``True``. +It will ensure driver nodes are up and running after the reset. + +Reset Handler for Multiple Nodes (No Shutdown Required) +------------------------------------------------------- + +If you have some other nodes that have to be started along with the driver node (e.g. ``ros2_control`` nodes), then you can use the ``OnProcessExit`` event handler: + +.. code-block:: python + + def get_ros2_control_spawners(*args): + # Declare here all nodes that must be restarted at simulation reset + ros_control_node = Node( + package='controller_manager', + executable='spawner', + arguments=['diffdrive_controller'] + ) + return [ + ros_control_node + ] + + def generate_launch_description(): + robot_driver = WebotsController( + robot_name='my_robot', + parameters=[ + {'robot_description': robot_description_path} + ], + + # Every time one resets the simulation the controller is automatically respawned + respawn=True + ) + + # Starts Webots + webots = WebotsLauncher(world=PathJoinSubstitution([package_dir, 'worlds', world])) + + # Declare the reset handler that respawns nodes when robot_driver exits + reset_handler = launch.actions.RegisterEventHandler( + event_handler=launch.event_handlers.OnProcessExit( + target_action=robot_driver, + on_exit=get_ros2_control_spawners, + ) + ) + + return LaunchDescription([ + webots, + robot_driver, + reset_handler + ] + get_ros2_control_spawners()) + +It is not possible to use the ``respawn`` property on the ``ros2_control`` node, as the spawner exits during launch time and not when the simulation is reset. +Instead we should declare a list of nodes in a function (e.g. ``get_ros2_control_spawners``). +The nodes of this list are started along other nodes when executing the launch file. +With the ``reset_handler``, the function is also declared as action to start when the ``robot_driver`` node exits, which corresponds to the moment when the simulation is reset in the Webots interface. +The ``robot_driver`` node still has the ``respawn`` property set to ``True``, so that it gets restarted along with ``ros2_control`` nodes. + +Reset Handler Requiring Node Shutdown +------------------------------------- + +With the current ROS 2 launch API, there is no way to make the reset work in launch files where nodes need to be shutdown before the restart (e.g. ``Nav2`` or ``RViz``). +The reason is that currently, ROS 2 doesn't allow to shutdown specific nodes from a launch file. +There is a solution, but it requires to manually restart nodes after pushing the reset button. + +Webots needs to be started in a specific launch file without other nodes. + +.. code-block:: python + + def generate_launch_description(): + # Starts Webots + webots = WebotsLauncher(world=PathJoinSubstitution([package_dir, 'worlds', world])) + + return LaunchDescription([ + webots + ]) + + +A second launch file must be started from another process. +This launch file contains all other nodes, including robot controllers/plugins, Navigation2 nodes, RViz, state publishers, etc. + +.. code-block:: python + + def generate_launch_description(): + robot_driver = WebotsController( + robot_name='my_robot', + parameters=[ + {'robot_description': robot_description_path} + ] + ) + + ros_control_node = Node( + package='controller_manager', + executable='spawner', + arguments=['diffdrive_controller'] + ) + + nav2_node = IncludeLaunchDescription( + PythonLaunchDescriptionSource(os.path.join( + get_package_share_directory('nav2_bringup'), 'launch', 'bringup_launch.py')), + launch_arguments=[ + ('map', nav2_map), + ('params_file', nav2_params), + ], + ) + + rviz = Node( + package='rviz2', + executable='rviz2', + output='screen' + ) + + # Declare the handler that shuts all nodes down when robot_driver exits + shutdown_handler = launch.actions.RegisterEventHandler( + event_handler=launch.event_handlers.OnProcessExit( + target_action=robot_driver, + on_exit=[launch.actions.EmitEvent(event=launch.events.Shutdown())], + ) + ) + + return LaunchDescription([ + robot_driver, + ros_control_node, + nav2_node, + rviz, + shutdown_handler + ]) + +The second launch file contains a handler that triggers a shutdown event when the driver node exits (which is the case when the simulation is reset). +This second launch file must be manually restarted from the command line after pressing the reset button. + +Summary +------- + +In this tutorial, you learned how to implement a reset handler in a robot simulation using Webots. +The reset handler allows you to restart specific nodes or perform additional actions when the reset button in Webots is pressed. +You explored different approaches based on the complexity of your simulation and the requirements of your nodes. diff --git a/source/Tutorials/Advanced/Simulators/Webots/Simulation-Supervisor.rst b/source/Tutorials/Advanced/Simulators/Webots/Simulation-Supervisor.rst new file mode 100644 index 00000000000..d16b4980b6e --- /dev/null +++ b/source/Tutorials/Advanced/Simulators/Webots/Simulation-Supervisor.rst @@ -0,0 +1,144 @@ +The Ros2Supervisor Node +======================= + +**Goal:** Extend the interface with a default Supervisor robot, named ``Ros2Supervisor``. + +**Tutorial level:** Advanced + +**Time:** 10 minutes + +.. contents:: Contents + :depth: 2 + :local: + +Background +---------- + +In this tutorial, you will learn how to enable the ``Ros2Supervisor`` node which enhances the interface by creating additional services and topics to interact with the simulation. +You can, for example, record animations or spawn Webots nodes directly from the ROS 2 interface while the simulation is running. +These instructions list in details the current implemented features and how to use them. + +Prerequisites +------------- + +Before proceeding with this tutorial, make sure you have completed the following: + +- Understanding of ROS 2 nodes and topics covered in the beginner :doc:`../../../../Tutorials`. +- Knowledge of Webots and ROS 2 and its interface package. +- Familiarity with :doc:`./Setting-Up-Simulation-Webots-Basic`. + +The ``Ros2Supervisor`` +---------------------- + +The ``Ros2Supervisor`` is made of two main parts: + +* A Webots Robot node added to the simulation world. Its ``supervisor`` field is set to TRUE. +* A ROS 2 node that connects to the Webots Robot as an extern controller (in a similar way to your own robot plugin). + +The ROS 2 node acts as a controller that calls Supervisor API functions to control or interact with the simulation world. +User interactions with the ROS 2 node are mainly performed through services and topics. + +These nodes can be automatically created at the Webots launch using the ``ros2_supervisor`` parameter in the ``WebotsLauncher``. + +.. code-block:: python + + webots = WebotsLauncher( + world=PathJoinSubstitution([package_dir, 'worlds', world]), + mode=mode, + ros2_supervisor=True + ) + +The ``webots._supervisor`` object must also be included in the ``LaunchDescription`` returned by the launch file. + +.. code-block:: python + + return LaunchDescription([ + webots, + webots._supervisor, + + # This action will kill all nodes once the Webots simulation has exited + launch.actions.RegisterEventHandler( + event_handler=launch.event_handlers.OnProcessExit( + target_action=webots, + on_exit=[ + launch.actions.EmitEvent(event=launch.events.Shutdown()) + ], + ) + ) + ]) + +More information about launch files for ``webots_ros2`` projects can be found in :doc:`./Setting-Up-Simulation-Webots-Basic`. + +Clock topic +----------- + +The ``Ros2Supervisor`` node is responsible to get the time of the Webots simulation and publish it to the ``/clock`` topic. +This means that it is mandatory to spawn the ``Ros2Supervisor`` if some other nodes have their ``use_sim_time`` parameter set to ``true``. +More information about the ``/clock`` topic can be found in the `ROS wiki `_. + +Import a Webots node +-------------------- + +The ``Ros2Supervisor`` node also allows you to spawn Webots nodes from strings through a service. + +The service is named ``/Ros2Supervisor/spawn_node_from_string`` and is of type ``webots_ros2_msgs/srv/SpawnNodeFromString``. +The ``SpawnNodeFromString`` type expects a ``data`` string as input and returns a ``success`` boolean. + +From the given string, the Supervisor node is getting the name of the imported node and adding it to an intern list for potential later removal (see :ref:`Remove a Webots imported node`). + +The node is imported using the ``importMFNodeFromString(nodeString)`` `API function `_. + +Here is an example to import a simple Robot named ``imported_robot``: + +.. code-block:: bash + + ros2 service call /Ros2Supervisor/spawn_node_from_string webots_ros2_msgs/srv/SpawnNodeFromString "data: Robot { name \"imported_robot\" }" + +.. note:: + If you try to import some PROTOs in the node string, their respective URLs must be declared in the .wbt world file as EXTERNPROTO or as IMPORTABLE EXTERNPROTO. + +.. _Remove a Webots imported node: + +Remove a Webots imported node +----------------------------- + +Once a node has been imported with the ``/Ros2Supervisor/spawn_node_from_string`` service, it can also be removed. + +This can be achieved by sending the name of the node to the topic named ``/Ros2Supervisor/remove_node`` of type ``std_msgs/msg/String``. + +If the node is indeed in the imported list, it is removed with the ``remove()`` `API method `_. + +Here is an example on how to remove the ``imported_robot`` Robot: + +.. code-block:: bash + + ros2 topic pub --once /Ros2Supervisor/remove_node std_msgs/msg/String "{data: imported_robot}" + +Record animations +----------------- + +The ``Ros2Supervisor`` node also creates two additional services to record HTML5 animations. + +The ``/Ros2Supervisor/animation_start_recording`` service is of type ``webots_ros2_msgs/srv/SetString`` and allows to start the animation. +The ``SetString`` type expects a ``value`` string as input and returns a ``success`` boolean. +The input ``value`` represents the absolute path to the directory where the animations files should be saved. + +Here is an example on how to start an animation: + +.. code-block:: bash + + ros2 service call /Ros2Supervisor/animation_start_recording webots_ros2_msgs/srv/SetString "{value: "/index.html"}" + + +The ``/Ros2Supervisor/animation_stop_recording`` service is of type ``webots_ros2_msgs/srv/GetBool`` and allows to stop the animation. + +.. code-block:: bash + + ros2 service call /Ros2Supervisor/animation_stop_recording webots_ros2_msgs/srv/GetBool "{ask: True}" + + +Summary +------- + +In this tutorial, you learned how to enable the ``Ros2Supervisor`` and how to extend the interface with the Webots simulation. +The node creates multiple services and topics to interact with and modify the simulation. diff --git a/source/Tutorials/Advanced/Simulators/Webots/Simulation-Webots.rst b/source/Tutorials/Advanced/Simulators/Webots/Simulation-Webots.rst new file mode 100644 index 00000000000..6120e8b1456 --- /dev/null +++ b/source/Tutorials/Advanced/Simulators/Webots/Simulation-Webots.rst @@ -0,0 +1,19 @@ +Webots +====== + +This set of tutorials will teach you how to configure the Webots simulator with ROS 2. + +.. contents:: Contents + :depth: 2 + :local: + +.. toctree:: + :maxdepth: 1 + + Installation-Ubuntu + Installation-Windows + Installation-MacOS + Setting-Up-Simulation-Webots-Basic + Setting-Up-Simulation-Webots-Advanced + Simulation-Reset-Handler + Simulation-Supervisor diff --git a/source/Tutorials/Advanced/Topic-Statistics-Tutorial/Topic-Statistics-Tutorial.rst b/source/Tutorials/Advanced/Topic-Statistics-Tutorial/Topic-Statistics-Tutorial.rst index d2fcecb1eff..9fc850fc956 100644 --- a/source/Tutorials/Advanced/Topic-Statistics-Tutorial/Topic-Statistics-Tutorial.rst +++ b/source/Tutorials/Advanced/Topic-Statistics-Tutorial/Topic-Statistics-Tutorial.rst @@ -18,15 +18,14 @@ Enabling topic statistics (C++) Background ---------- -This is a short tutorial of how to enable :doc:`Topic Statistics<../../../Concepts/About-Topic-Statistics>` -in ROS 2 and view the published statistics output using command line tools (:doc:`ros2topic<../../Beginner-CLI-Tools/Understanding-ROS2-Topics/Understanding-ROS2-Topics>`). +This is a short tutorial on how to enable topic statistics in ROS 2 and view the published statistics output using command line tools (:doc:`ros2topic <../../Beginner-CLI-Tools/Understanding-ROS2-Topics/Understanding-ROS2-Topics>`). ROS 2 provides the integrated measurement of statistics for messages received by any subscription, called Topic Statistics. With Topic Statistics enabled for your subscription, you can characterize the performance of your system or use the data to help diagnose any present issues. -For more details please see the :doc:`Topic Statistics Concepts Page<../../../Concepts/About-Topic-Statistics>`. +For more details please see the :doc:`Topic Statistics Concepts Page <../../../Concepts/Intermediate/About-Topic-Statistics>`. Prerequisites ------------- @@ -242,7 +241,7 @@ then you will see that name instead of ``/statistics``. The subscriber node you created is publishing statistics, for the topic ``topic``, to the output topic ``/statistics``. -We can visualize this using :doc:`RQt <../../../Concepts/About-RQt>` +We can visualize this using :doc:`RQt <../../../Concepts/Intermediate/About-RQt>` .. image:: images/topic_stats_rqt.png diff --git a/source/Tutorials/Advanced/images/ros2_tracing_guide_result_plot.png b/source/Tutorials/Advanced/images/ros2_tracing_guide_result_plot.png new file mode 100644 index 00000000000..a3de6b90a4f Binary files /dev/null and b/source/Tutorials/Advanced/images/ros2_tracing_guide_result_plot.png differ diff --git a/source/Tutorials/Beginner-CLI-Tools/Configuring-ROS2-Environment.rst b/source/Tutorials/Beginner-CLI-Tools/Configuring-ROS2-Environment.rst index 59f925aab85..973df008796 100644 --- a/source/Tutorials/Beginner-CLI-Tools/Configuring-ROS2-Environment.rst +++ b/source/Tutorials/Beginner-CLI-Tools/Configuring-ROS2-Environment.rst @@ -155,12 +155,12 @@ Check that variables like ``ROS_DISTRO`` and ``ROS_VERSION`` are set. ROS_DISTRO={DISTRO} If the environment variables are not set correctly, return to the ROS 2 package installation section of the installation guide you followed. -If you need more specific help (because environment setup files can come from different places), you can `get answers `__ from the community. +If you need more specific help (because environment setup files can come from different places), you can `get answers `__ from the community. 3.1 The ``ROS_DOMAIN_ID`` variable ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -See the `domain ID <../../Concepts/About-Domain-ID>` article for details on ROS domain IDs. +See the `domain ID <../../Concepts/Intermediate/About-Domain-ID>` article for details on ROS domain IDs. Once you have determined a unique integer for your group of ROS 2 nodes, you can set the environment variable with the following command: @@ -202,53 +202,13 @@ Once you have determined a unique integer for your group of ROS 2 nodes, you can setx ROS_DOMAIN_ID -3.2 The ``ROS_LOCALHOST_ONLY`` variable -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +3.2 The ``ROS_AUTOMATIC_DISCOVERY_RANGE`` variable +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ By default, ROS 2 communication is not limited to localhost. -``ROS_LOCALHOST_ONLY`` environment variable allows you to limit ROS 2 communication to localhost only. -This means your ROS 2 system, and its topics, services, and actions will not be visible to other computers on the local network. -Using ``ROS_LOCALHOST_ONLY`` is helpful in certain settings, such as classrooms, where multiple robots may publish to the same topic causing strange behaviors. -You can set the environment variable with the following command: - -.. tabs:: - - .. group-tab:: Linux - - .. code-block:: console - - export ROS_LOCALHOST_ONLY=1 - - To maintain this setting between shell sessions, you can add the command to your shell startup script: - - .. code-block:: console - - echo "export ROS_LOCALHOST_ONLY=1" >> ~/.bashrc - - .. group-tab:: macOS - - .. code-block:: console - - export ROS_LOCALHOST_ONLY=1 - - To maintain this setting between shell sessions, you can add the command to your shell startup script: - - .. code-block:: console - - echo "export ROS_LOCALHOST_ONLY=1" >> ~/.bash_profile - - .. group-tab:: Windows - - .. code-block:: console - - set ROS_LOCALHOST_ONLY=1 - - If you want to make this permanent between shell sessions, also run: - - .. code-block:: console - - setx ROS_LOCALHOST_ONLY 1 - +``ROS_AUTOMATIC_DISCOVERY_RANGE`` environment variable allows you to limit ROS 2 discovery range. +Using ``ROS_AUTOMATIC_DISCOVERY_RANGE`` is helpful in certain settings, such as classrooms, where multiple robots may publish to the same topic causing strange behaviors. +See :ref:`Improved Dynamic Discovery ` for more details. Summary ------- diff --git a/source/Tutorials/Beginner-CLI-Tools/Recording-And-Playing-Back-Data/Recording-And-Playing-Back-Data.rst b/source/Tutorials/Beginner-CLI-Tools/Recording-And-Playing-Back-Data/Recording-And-Playing-Back-Data.rst index 1f52b5250d9..7a7d9805d61 100644 --- a/source/Tutorials/Beginner-CLI-Tools/Recording-And-Playing-Back-Data/Recording-And-Playing-Back-Data.rst +++ b/source/Tutorials/Beginner-CLI-Tools/Recording-And-Playing-Back-Data/Recording-And-Playing-Back-Data.rst @@ -31,12 +31,7 @@ Prerequisites You should have ``ros2 bag`` installed as a part of your regular ROS 2 setup. -If you installed ROS from Debian packages on Linux and your system doesn't recognize the command, install it like so: - -.. code-block:: console - - sudo apt-get install ros-{DISTRO}-ros2bag \ - ros-{DISTRO}-rosbag2-storage-default-plugins +If you need to install ROS 2, see the :doc:`Installation instructions <../../../Installation>`. This tutorial talks about concepts covered in previous tutorials, like :doc:`nodes <../Understanding-ROS2-Nodes/Understanding-ROS2-Nodes>` and :doc:`topics <../Understanding-ROS2-Topics/Understanding-ROS2-Topics>`. It also uses the :doc:`turtlesim package <../Introducing-Turtlesim/Introducing-Turtlesim>`. @@ -65,10 +60,29 @@ Open another terminal and run: Let's also make a new directory to store our saved recordings, just as good practice: -.. code-block:: console +.. tabs:: + + .. group-tab:: Linux + + .. code-block:: console + + mkdir bag_files + cd bag_files + + .. group-tab:: macOS + + .. code-block:: console + + mkdir bag_files + cd bag_files + + .. group-tab:: Windows + + .. code-block:: console + + md bag_files + cd bag_files - mkdir bag_files - cd bag_files 2 Choose a topic ^^^^^^^^^^^^^^^^ @@ -115,24 +129,10 @@ Use the arrow keys to move the turtle around, and you will see data being publis --- - 3 ros2 bag record ^^^^^^^^^^^^^^^^^ -3.1 Recording formats -~~~~~~~~~~~~~~~~~~~~~ - -By default, ``ros2 bag record`` will record data files using the `MCAP file format `_ (``.mcap``). - -To record files using the `SQLite3 file format `_ (``.db3``), add the ``--storage sqlite3`` flag (or ``-s sqlite3``) to your ``ros2 bag record`` commands. - -For more information on `ROS 2 storage plugin options `_, check out the following resources: - -* `MCAP `_ -* `SQLite3 `_ - - -3.2 Record a single topic +3.1 Record a single topic ~~~~~~~~~~~~~~~~~~~~~~~~~ To record the data published to a topic use the command syntax: @@ -166,9 +166,10 @@ The movements don't matter, but try to make a recognizable pattern to see when y Press ``Ctrl+C`` to stop recording. -The data will be accumulated in a bag file with a name in the pattern of ``rosbag2_year_month_day-hour_minute_second`` +The data will be accumulated in a new bag directory with a name in the pattern of ``rosbag2_year_month_day-hour_minute_second``. +This directory will contain a ``metadata.yaml`` along with the bag file in the recorded format. -3.3 Record multiple topics +3.2 Record multiple topics ~~~~~~~~~~~~~~~~~~~~~~~~~~ You can also record multiple topics, as well as change the name of the file ``ros2 bag`` saves to. @@ -227,8 +228,6 @@ Running this command on the ``subset`` bag file will return a list of informatio Topic information: Topic: /turtle1/cmd_vel | Type: geometry_msgs/msg/Twist | Count: 9 | Serialization Format: cdr Topic: /turtle1/pose | Type: turtlesim/msg/Pose | Count: 3004 | Serialization Format: cdr -To view the individual messages, you would have to open up the database, in this case sqlite3, to examine it, which is beyond the scope of ROS 2. - 5 ros2 bag play ^^^^^^^^^^^^^^^ diff --git a/source/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Parameters/Understanding-ROS2-Parameters.rst b/source/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Parameters/Understanding-ROS2-Parameters.rst index 0089c3d1b6c..5d28b52f8ec 100644 --- a/source/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Parameters/Understanding-ROS2-Parameters.rst +++ b/source/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Parameters/Understanding-ROS2-Parameters.rst @@ -24,7 +24,7 @@ A parameter is a configuration value of a node. You can think of parameters as node settings. A node can store parameters as integers, floats, booleans, strings, and lists. In ROS 2, each node maintains its own parameters. -For more background on parameters, please see :doc:`the concept document <../../../Concepts/About-ROS-2-Parameters>`. +For more background on parameters, please see :doc:`the concept document <../../../Concepts/Basic/About-Parameters>`. Prerequisites ------------- diff --git a/source/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Topics/Understanding-ROS2-Topics.rst b/source/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Topics/Understanding-ROS2-Topics.rst index 7321618b05e..46b0215ba1a 100644 --- a/source/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Topics/Understanding-ROS2-Topics.rst +++ b/source/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Topics/Understanding-ROS2-Topics.rst @@ -236,7 +236,7 @@ If you recall the data we saw ``/teleop_turtle`` passing to ``/turtlesim`` with 7 ros2 topic pub ^^^^^^^^^^^^^^^^ -Now that you have the message structure, you can publish data onto a topic directly from the command line using: +Now that you have the message structure, you can publish data to a topic directly from the command line using: .. code-block:: console @@ -290,6 +290,19 @@ Finally, you can run ``echo`` on the ``pose`` topic and recheck rqt_graph: You can see that the ``/turtlesim`` node is also publishing to the ``pose`` topic, which the new ``echo`` node has subscribed to. +When publishing messages with timestamps, ``pub`` has two methods to automatically fill them out with the current time. +For messages with a ``std_msgs/msg/Header``, the header field can be set to ``auto`` to fill out the ``stamp`` field. + +.. code-block:: console + + ros2 topic pub /pose geometry_msgs/msg/PoseStamped '{header: "auto", pose: {position: {x: 1.0, y: 2.0, z: 3.0}}}' + +If the message does not use a full header, but just has a field with type ``builtin_interfaces/msg/Time``, that can be set to the value ``now``. + +.. code-block:: console + + ros2 topic pub /reference sensor_msgs/msg/TimeReference '{header: "auto", time_ref: "now", source: "dumy"}' + 8 ros2 topic hz ^^^^^^^^^^^^^^^ diff --git a/source/Tutorials/Beginner-Client-Libraries/Colcon-Tutorial.rst b/source/Tutorials/Beginner-Client-Libraries/Colcon-Tutorial.rst index a9c3c903468..82a06538922 100644 --- a/source/Tutorials/Beginner-Client-Libraries/Colcon-Tutorial.rst +++ b/source/Tutorials/Beginner-Client-Libraries/Colcon-Tutorial.rst @@ -231,6 +231,8 @@ To run tests for the packages we just built, run the following: You also need to specify ``--merge-install`` here since we used it for building above. +.. _colcon-tutorial-source-the-environment: + Source the environment ^^^^^^^^^^^^^^^^^^^^^^ diff --git a/source/Tutorials/Beginner-Client-Libraries/Creating-A-Workspace/Creating-A-Workspace.rst b/source/Tutorials/Beginner-Client-Libraries/Creating-A-Workspace/Creating-A-Workspace.rst index 395b0eae5a8..363c4180020 100644 --- a/source/Tutorials/Beginner-Client-Libraries/Creating-A-Workspace/Creating-A-Workspace.rst +++ b/source/Tutorials/Beginner-Client-Libraries/Creating-A-Workspace/Creating-A-Workspace.rst @@ -130,7 +130,7 @@ In the ``ros2_ws/src`` directory, run the following command: .. code-block:: console - git clone https://github.com/ros/ros_tutorials.git -b {DISTRO}-devel + git clone https://github.com/ros/ros_tutorials.git -b {DISTRO} Now ``ros_tutorials`` is cloned in your workspace. The ``ros_tutorials`` repository contains the ``turtlesim`` package, which we'll use in the rest of this tutorial. The other packages in this repository are not built because they contain a ``COLCON_IGNORE`` file. @@ -222,7 +222,29 @@ The console will return the following message: * ``--symlink-install`` saves you from having to rebuild every time you tweak python scripts * ``--event-handlers console_direct+`` shows console output while building (can otherwise be found in the ``log`` directory) -Once the build is finished, enter ``ls`` in the workspace root (``~/ros2_ws``) and you will see that colcon has created new directories: +Once the build is finished, enter the command in the workspace root (``~/ros2_ws``): + +.. tabs:: + + .. group-tab:: Linux + + .. code-block:: console + + ls + + .. group-tab:: macOS + + .. code-block:: console + + ls + + .. group-tab:: Windows + + .. code-block:: console + + dir + +And you will see that colcon has created new directories: .. code-block:: console diff --git a/source/Tutorials/Beginner-Client-Libraries/Creating-Your-First-ROS2-Package.rst b/source/Tutorials/Beginner-Client-Libraries/Creating-Your-First-ROS2-Package.rst index 662d0b1a9a5..7fd8365fcf4 100644 --- a/source/Tutorials/Beginner-Client-Libraries/Creating-Your-First-ROS2-Package.rst +++ b/source/Tutorials/Beginner-Client-Libraries/Creating-Your-First-ROS2-Package.rst @@ -23,7 +23,7 @@ Background 1 What is a ROS 2 package? ^^^^^^^^^^^^^^^^^^^^^^^^^^ -A package can be considered a container for your ROS 2 code. +A package is an organizational unit for your ROS 2 code. If you want to be able to install your code or share it with others, then you'll need it organized in a package. With packages, you can release your ROS 2 work and allow others to build and use it easily. @@ -39,15 +39,18 @@ ROS 2 Python and CMake packages each have their own minimum required contents: .. group-tab:: CMake - * ``package.xml`` file containing meta information about the package * ``CMakeLists.txt`` file that describes how to build the code within the package + * ``include/`` directory containing the public headers for the package + * ``package.xml`` file containing meta information about the package + * ``src`` directory containing the source code for the package .. group-tab:: Python * ``package.xml`` file containing meta information about the package - * ``setup.py`` containing instructions for how to install the package + * ``resource/`` marker file for the package * ``setup.cfg`` is required when a package has executables, so ``ros2 run`` can find them - * ``/`` - a directory with the same name as your package, used by ROS 2 tools to find your package, contains ``__init__.py`` + * ``setup.py`` containing instructions for how to install the package + * ```` - a directory with the same name as your package, used by ROS 2 tools to find your package, contains ``__init__.py`` The simplest possible package may have a file structure that looks like: @@ -59,16 +62,20 @@ The simplest possible package may have a file structure that looks like: my_package/ CMakeLists.txt + include/my_package/ package.xml + src/ .. group-tab:: Python .. code-block:: console my_package/ - setup.py package.xml resource/my_package + setup.cfg + setup.py + my_package/ 3 Packages in a workspace @@ -87,18 +94,24 @@ A trivial workspace might look like: workspace_folder/ src/ - package_1/ + cpp_package_1/ CMakeLists.txt + include/cpp_package_1/ package.xml + src/ - package_2/ - setup.py + py_package_1/ package.xml - resource/package_2 + resource/py_package_1 + setup.cfg + setup.py + py_package_1/ ... - package_n/ + cpp_package_n/ CMakeLists.txt + include/cpp_package_n/ package.xml + src/ Prerequisites @@ -156,7 +169,8 @@ The command syntax for creating a new package in ROS 2 is: ros2 pkg create --build-type ament_python -For this tutorial, you will use the optional argument ``--node-name`` which creates a simple Hello World type executable in the package. +For this tutorial, you will use the optional arguments ``--node-name`` and ``--license``. +``--node-name`` option creates a simple Hello World type executable in the package, and ``--license`` declares the license information for the package. Enter the following command in your terminal: @@ -166,13 +180,13 @@ Enter the following command in your terminal: .. code-block:: console - ros2 pkg create --build-type ament_cmake --node-name my_node my_package + ros2 pkg create --build-type ament_cmake --node-name my_node my_package --license Apache-2.0 .. group-tab:: Python .. code-block:: console - ros2 pkg create --build-type ament_python --node-name my_node my_package + ros2 pkg create --build-type ament_python --node-name my_node my_package --license Apache-2.0 You will now have a new folder within your workspace's ``src`` directory called ``my_package``. @@ -191,7 +205,7 @@ After running the command, your terminal will return the message: version: 0.0.0 description: TODO: Package description maintainer: [' '] - licenses: ['TODO: License declaration'] + licenses: ['Apache-2.0'] build type: ament_cmake dependencies: [] node_name: my_node @@ -214,7 +228,7 @@ After running the command, your terminal will return the message: version: 0.0.0 description: TODO: Package description maintainer: [' '] - licenses: ['TODO: License declaration'] + licenses: ['Apache-2.0'] build type: ament_python dependencies: [] node_name: my_node diff --git a/source/Tutorials/Beginner-Client-Libraries/Custom-ROS2-Interfaces.rst b/source/Tutorials/Beginner-Client-Libraries/Custom-ROS2-Interfaces.rst index 138d9af5b07..0bf6b9f34dc 100644 --- a/source/Tutorials/Beginner-Client-Libraries/Custom-ROS2-Interfaces.rst +++ b/source/Tutorials/Beginner-Client-Libraries/Custom-ROS2-Interfaces.rst @@ -1,6 +1,6 @@ .. redirect-from:: - Tutorials/Custom-ROS2-Interfaces.rst + Tutorials/Custom-ROS2-Interfaces .. _CustomInterfaces: @@ -824,7 +824,7 @@ Summary In this tutorial, you learned how to create custom interfaces in their own package and how to utilize those interfaces in other packages. This tutorial only scratches the surface about defining custom interfaces. -You can learn more about it in :doc:`About ROS 2 interfaces <../../Concepts/About-ROS-Interfaces>`. +You can learn more about it in :doc:`About ROS 2 interfaces <../../Concepts/Basic/About-Interfaces>`. Next steps ---------- diff --git a/source/Tutorials/Beginner-Client-Libraries/Pluginlib.rst b/source/Tutorials/Beginner-Client-Libraries/Pluginlib.rst index 3125d732e03..5bc60bb4948 100644 --- a/source/Tutorials/Beginner-Client-Libraries/Pluginlib.rst +++ b/source/Tutorials/Beginner-Client-Libraries/Pluginlib.rst @@ -5,7 +5,7 @@ Creating and using plugins (C++) ================================ -**Goal:** Learn to create and load a simple plugin using pluginlib. +**Goal:** Learn to create and load a simple plugin using ``pluginlib``. **Tutorial level:** Beginner @@ -20,20 +20,15 @@ Background This tutorial is derived from ``_ and `Writing and Using a Simple Plugin Tutorial `_. -pluginlib is a C++ library for loading and unloading plugins from within a ROS package. +``pluginlib`` is a C++ library for loading and unloading plugins from within a ROS package. Plugins are dynamically loadable classes that are loaded from a runtime library (i.e. shared object, dynamically linked library). -With pluginlib, one does not have to explicitly link their application against the library containing the classes -- instead pluginlib can open a library containing exported classes at any point without the application having any prior awareness of the library or the header file containing the class definition. +With pluginlib, you do not have to explicitly link your application against the library containing the classes -- instead ``pluginlib`` can open a library containing exported classes at any point without the application having any prior awareness of the library or the header file containing the class definition. Plugins are useful for extending/modifying application behavior without needing the application source code. Prerequisites ------------- -This tutorial assumes basic C++ knowledge and that you have ``pluginlib`` installed. - -.. code-block:: console - - sudo apt-get install ros-{DISTRO}-pluginlib - +This tutorial assumes basic C++ knowledge and that you have successfully :doc:`installed ROS 2 <../../Installation>`. Tasks ----- @@ -48,7 +43,7 @@ Create a new empty package in your ``ros2_ws/src`` folder with the following com .. code-block:: console - ros2 pkg create --build-type ament_cmake polygon_base --dependencies pluginlib --node-name area_node + ros2 pkg create --build-type ament_cmake --dependencies pluginlib --node-name area_node --license Apache-2.0 polygon_base Open your favorite editor, edit ``ros2_ws/src/polygon_base/include/polygon_base/regular_polygon.hpp``, and paste the following inside of it: @@ -74,7 +69,7 @@ Open your favorite editor, edit ``ros2_ws/src/polygon_base/include/polygon_base/ #endif // POLYGON_BASE_REGULAR_POLYGON_HPP -This code above should be pretty self-explanatory... we're creating an abstract class called ``RegularPolygon``. +The code above creates an abstract class called ``RegularPolygon``. One thing to notice is the presence of the initialize method. With ``pluginlib``, a constructor without parameters is required, so if any parameters to the class are needed, we use the initialize method to pass them to the object. @@ -106,7 +101,7 @@ Create a second empty package in your ``ros2_ws/src`` folder with the following .. code-block:: console - ros2 pkg create --build-type ament_cmake polygon_plugins --dependencies polygon_base pluginlib --library-name polygon_plugins + ros2 pkg create --build-type ament_cmake --dependencies polygon_base pluginlib --library-name polygon_plugins --license Apache-2.0 polygon_plugins 2.1 Source code for the plugins ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -165,7 +160,7 @@ Open ``ros2_ws/src/polygon_plugins/src/polygon_plugins.cpp`` for editing, and pa PLUGINLIB_EXPORT_CLASS(polygon_plugins::Square, polygon_base::RegularPolygon) PLUGINLIB_EXPORT_CLASS(polygon_plugins::Triangle, polygon_base::RegularPolygon) -The implementation of the Square and Triangle classes should be fairly straightforward: save the side length, and use it to calculate the area. +The implementation of the Square and Triangle classes is fairly straightforward: save the side length, and use it to calculate the area. The only piece that is pluginlib specific is the last three lines, which invokes some magical macros that register the classes as actual plugins. Let's go through the arguments to the ``PLUGINLIB_EXPORT_CLASS`` macro: @@ -175,7 +170,7 @@ Let's go through the arguments to the ``PLUGINLIB_EXPORT_CLASS`` macro: 2.2 Plugin Declaration XML ~~~~~~~~~~~~~~~~~~~~~~~~~~ -The steps above make it so that instances of our plugins can be created once the library they exist in is loaded, but the plugin loader still needs a way to find that library and to know what to reference within that library. +The steps above enable plugin instances to be created when the containing library is loaded, but the plugin loader still needs a way to find that library and to know what to reference within that library. To this end, we'll also create an XML file that, along with a special export line in the package manifest, makes all the necessary information about our plugins available to the ROS toolchain. Create ``ros2_ws/src/polygon_plugins/plugins.xml`` with the following code: @@ -201,53 +196,23 @@ A couple things to note: * ``type``: The fully qualified type of the plugin. For us, that's ``polygon_plugins::Square``. * ``base_class``: The fully qualified base class type for the plugin. For us, that's ``polygon_base::RegularPolygon``. * ``description``: A description of the plugin and what it does. - * ``name``: There used to be a name attribute, but it is no longer required. 2.3 CMake Plugin Declaration ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The last step is to export your plugins via ``CMakeLists.txt``. This is a change from ROS 1, where the exporting was done via ``package.xml``. -Add the following block to your ``ros2_ws/src/polygon_plugins/CMakeLists.txt`` after the line reading ``find_package(pluginlib REQUIRED)``: +Add the following line to your ``ros2_ws/src/polygon_plugins/CMakeLists.txt`` after the line reading ``find_package(pluginlib REQUIRED)``: .. code-block:: cmake - add_library(polygon_plugins src/polygon_plugins.cpp) - target_include_directories(polygon_plugins PUBLIC - $ - $) - ament_target_dependencies( - polygon_plugins - polygon_base - pluginlib - ) - pluginlib_export_plugin_description_file(polygon_base plugins.xml) - install( - TARGETS polygon_plugins - EXPORT export_${PROJECT_NAME} - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib - RUNTIME DESTINATION bin - ) - The arguments to the ``pluginlib_export_plugin_description_file`` command are: 1. The package with the base class, i.e. ``polygon_base``. 2. The relative path to the Plugin Declaration xml, i.e. ``plugins.xml``. -Lastly, before the ``ament_package`` command, add: - -.. code-block:: cmake - - ament_export_libraries( - polygon_plugins - ) - ament_export_targets( - export_${PROJECT_NAME} - ) - 3 Use the Plugins ^^^^^^^^^^^^^^^^^ diff --git a/source/Tutorials/Beginner-Client-Libraries/Single-Package-Define-And-Use-Interface.rst b/source/Tutorials/Beginner-Client-Libraries/Single-Package-Define-And-Use-Interface.rst index 95b1f1e5c06..0c0cbd187b5 100644 --- a/source/Tutorials/Beginner-Client-Libraries/Single-Package-Define-And-Use-Interface.rst +++ b/source/Tutorials/Beginner-Client-Libraries/Single-Package-Define-And-Use-Interface.rst @@ -60,25 +60,24 @@ Inside ``more_interfaces/msg``, create a new file ``AddressBook.msg``, and paste :: - bool FEMALE=true - bool MALE=false + uint8 PHONE_TYPE_HOME=0 + uint8 PHONE_TYPE_WORK=1 + uint8 PHONE_TYPE_MOBILE=2 string first_name string last_name - bool gender - uint8 age - string address + string phone_number + uint8 phone_type -This message is composed of 5 fields: +This message is composed of these fields: * first_name: of type string * last_name: of type string -* gender: of type bool, that can be either MALE or FEMALE -* age: of type uint8 -* address: of type string +* phone_number: of type string +* phone_type: of type uint8, with several named constant values defined Note that it's possible to set default values for fields within a message definition. -See :doc:`../../Concepts/About-ROS-Interfaces` for more ways you can customize interfaces. +See :doc:`../../Concepts/Basic/About-Interfaces` for more ways you can customize interfaces. Next, we need to make sure that the msg file is turned into source code for C++, Python, and other languages. @@ -194,9 +193,8 @@ In ``more_interfaces/src`` create a file called ``publish_address_book.cpp`` and message.first_name = "John"; message.last_name = "Doe"; - message.age = 30; - message.gender = message.MALE; - message.address = "unknown"; + message.phone_number = "1234567890"; + message.phone_type = message.PHONE_TYPE_MOBILE; std::cout << "Publishing Contact\nFirst:" << message.first_name << " Last:" << message.last_name << std::endl; @@ -263,9 +261,8 @@ Populate ``AddressBook`` fields. message.first_name = "John"; message.last_name = "Doe"; - message.age = 30; - message.gender = message.MALE; - message.address = "unknown"; + message.phone_number = "1234567890"; + message.phone_type = message.PHONE_TYPE_MOBILE; Finally send the message periodically. @@ -446,7 +443,7 @@ We won't create a subscriber in this tutorial, but you can try to write one your DEPENDENCIES rosidl_tutorials_msgs ) - You would also need to include the header of ``Contact.msg`` in you publisher node in order to be able to add ``contacts`` to your ``address_book``. + You would also need to include the header of ``Contact.msg`` in your publisher node in order to be able to add ``contacts`` to your ``address_book``. .. code-block:: c++ @@ -462,18 +459,16 @@ We won't create a subscriber in this tutorial, but you can try to write one your rosidl_tutorials_msgs::msg::Contact contact; contact.first_name = "John"; contact.last_name = "Doe"; - contact.age = 30; - contact.gender = contact.MALE; - contact.address = "unknown"; + contact.phone_number = "1234567890"; + contact.phone_type = message.PHONE_TYPE_MOBILE; msg->address_book.push_back(contact); } { rosidl_tutorials_msgs::msg::Contact contact; contact.first_name = "Jane"; contact.last_name = "Doe"; - contact.age = 20; - contact.gender = contact.FEMALE; - contact.address = "unknown"; + contact.phone_number = "4254242424"; + contact.phone_type = message.PHONE_TYPE_HOME; msg->address_book.push_back(contact); } diff --git a/source/Tutorials/Beginner-Client-Libraries/Using-Parameters-In-A-Class-CPP.rst b/source/Tutorials/Beginner-Client-Libraries/Using-Parameters-In-A-Class-CPP.rst index 133a4d29909..3a1805783d3 100644 --- a/source/Tutorials/Beginner-Client-Libraries/Using-Parameters-In-A-Class-CPP.rst +++ b/source/Tutorials/Beginner-Client-Libraries/Using-Parameters-In-A-Class-CPP.rst @@ -419,12 +419,14 @@ Now run the node using the launch file we have just created: ros2 launch cpp_parameters cpp_parameters_launch.py -The terminal should return the following message every second: +The terminal should return the following message the first time: .. code-block:: console [INFO] [custom_minimal_param_node]: Hello earth! +Further outputs should show ``[INFO] [minimal_param_node]: Hello world!`` every second. + Summary ------- diff --git a/source/Tutorials/Beginner-Client-Libraries/Using-Parameters-In-A-Class-Python.rst b/source/Tutorials/Beginner-Client-Libraries/Using-Parameters-In-A-Class-Python.rst index f4c93bbb4ff..4118fc08f28 100644 --- a/source/Tutorials/Beginner-Client-Libraries/Using-Parameters-In-A-Class-Python.rst +++ b/source/Tutorials/Beginner-Client-Libraries/Using-Parameters-In-A-Class-Python.rst @@ -419,12 +419,13 @@ Now run the node using the launch file we have just created: ros2 launch python_parameters python_parameters_launch.py -The terminal should return the following message every second: +The terminal should return the following message the first time: .. code-block:: console [INFO] [custom_minimal_param_node]: Hello earth! +Further outputs should show ``[INFO] [minimal_param_node]: Hello world!`` every second. Summary ------- diff --git a/source/Tutorials/Beginner-Client-Libraries/Writing-A-Simple-Cpp-Publisher-And-Subscriber.rst b/source/Tutorials/Beginner-Client-Libraries/Writing-A-Simple-Cpp-Publisher-And-Subscriber.rst index 95a1b384216..99eabf64949 100644 --- a/source/Tutorials/Beginner-Client-Libraries/Writing-A-Simple-Cpp-Publisher-And-Subscriber.rst +++ b/source/Tutorials/Beginner-Client-Libraries/Writing-A-Simple-Cpp-Publisher-And-Subscriber.rst @@ -333,7 +333,7 @@ Enter the following code in your terminal: curl https://raw.githubusercontent.com/ros2/examples/{REPOS_FILE_BRANCH}/rclcpp/topics/minimal_subscriber/member_function.cpp -o subscriber_member_function.cpp -Entering ``ls`` in the console will now return: +Check to ensure that these files exist: .. code-block:: console diff --git a/source/Tutorials/Beginner-Client-Libraries/Writing-A-Simple-Py-Service-And-Client.rst b/source/Tutorials/Beginner-Client-Libraries/Writing-A-Simple-Py-Service-And-Client.rst index 98f871e1101..cd333924869 100644 --- a/source/Tutorials/Beginner-Client-Libraries/Writing-A-Simple-Py-Service-And-Client.rst +++ b/source/Tutorials/Beginner-Client-Libraries/Writing-A-Simple-Py-Service-And-Client.rst @@ -221,19 +221,57 @@ Inside the ``ros2_ws/src/py_srvcli/py_srvcli`` directory, create a new file call 3.1 Examine the code ~~~~~~~~~~~~~~~~~~~~ -The only different ``import`` statement for the client is ``import sys``. -The client node code uses `sys.argv `__ to get access to command line input arguments for the request. +As with the service code, we first ``import`` the necessary libraries. +.. code-block:: python + + import sys + + from example_interfaces.srv import AddTwoInts + import rclpy + from rclpy.node import Node + +The ``MinimalClientAsync`` class constructor initializes the node with the name ``minimal_client_async``. The constructor definition creates a client with the same type and name as the service node. The type and name must match for the client and service to be able to communicate. - The ``while`` loop in the constructor checks if a service matching the type and name of the client is available once a second. +Finally it creates a new ``AddTwoInts`` request object. + +.. code-block:: python + + def __init__(self): + super().__init__('minimal_client_async') + self.cli = self.create_client(AddTwoInts, 'add_two_ints') + while not self.cli.wait_for_service(timeout_sec=1.0): + self.get_logger().info('service not available, waiting again...') + self.req = AddTwoInts.Request() + +Below the constructor is the ``send_request`` method, which will send the request and spin until it receives the response or fails. + +.. code-block:: python + + def send_request(self, a, b): + self.req.a = a + self.req.b = b + self.future = self.cli.call_async(self.req) + rclpy.spin_until_future_complete(self, self.future) + return self.future.result() + +Finally we have the ``main`` method, which constructs a ``MinimalClientAsync`` object, sends the request using the passed-in command-line arguments, and logs the results. + +.. code-block:: python -Below the constructor is the request definition, followed by ``main``. + def main(): + rclpy.init() -The only significant difference in the client's ``main`` is the ``while`` loop. -The loop checks the ``future`` to see if there is a response from the service, as long as the system is running. -If the service has sent a response, the result will be written in a log message. + minimal_client = MinimalClientAsync() + response = minimal_client.send_request(int(sys.argv[1]), int(sys.argv[2])) + minimal_client.get_logger().info( + 'Result of add_two_ints: for %d + %d = %d' % + (int(sys.argv[1]), int(sys.argv[2]), response.sum)) + + minimal_client.destroy_node() + rclpy.shutdown() 3.2 Add an entry point diff --git a/source/Tutorials/Demos.rst b/source/Tutorials/Demos.rst index 662daa96ac8..bacbaf8c7e1 100644 --- a/source/Tutorials/Demos.rst +++ b/source/Tutorials/Demos.rst @@ -17,8 +17,7 @@ External resources ------------------ * `Bridging communication between ROS 1 and ROS 2 `__ -* `Motion planning for a MoveIt 2 arm `__ -* `Using Turtlebot 2 `__ +* `Motion planning for a MoveIt 2 arm `__ * Using Turtlebot 3 (community-contributed) - `Getting started `__ diff --git a/source/Tutorials/Demos/Intra-Process-Communication.rst b/source/Tutorials/Demos/Intra-Process-Communication.rst index 83114234aa4..50a5217c4ac 100644 --- a/source/Tutorials/Demos/Intra-Process-Communication.rst +++ b/source/Tutorials/Demos/Intra-Process-Communication.rst @@ -210,7 +210,7 @@ https://github.com/ros2/demos/blob/{REPOS_FILE_BRANCH}/intra_process_demo/src/cy reinterpret_cast(msg.get())); printf(" sleeping for 1 second...\n"); if (!rclcpp::sleep_for(1s)) { - return; // Return if the sleep failed (e.g. on ctrl-c). + return; // Return if the sleep failed (e.g. on :kbd:`ctrl-c`). } printf(" done.\n"); msg->data++; // Increment the message's data. diff --git a/source/Tutorials/Demos/Logging-and-logger-configuration.rst b/source/Tutorials/Demos/Logging-and-logger-configuration.rst index 52bb7140e1a..9698afc7d11 100644 --- a/source/Tutorials/Demos/Logging-and-logger-configuration.rst +++ b/source/Tutorials/Demos/Logging-and-logger-configuration.rst @@ -10,7 +10,7 @@ Logging :depth: 2 :local: -See `the logging page <../../Concepts/About-Logging>` for details on available functionality. +See `the logging page <../../Concepts/Intermediate/About-Logging>` for details on available functionality. Using log statements in code ---------------------------- @@ -232,26 +232,86 @@ See `the source code `__ in ROS 1 allows logger configuration via remote procedural calls). -**This concept is not yet officially supported in ROS 2.** -In the meantime, this demo provides an **example** service that can be called externally to request configuration of logger levels for known names of loggers in the process. +ROS 2 nodes have services available to configure the logging level externally at runtime. +These services are disabled by default. +The following code shows how to enable the logger service while creating the node. -The demo previously started is already running this example service. -To set the level of the demo's logger back to ``INFO``\ , call the service with: +.. tabs:: -.. code-block:: bash + .. group-tab:: Linux + + .. code-block:: C++ + + // Create a node with logger service enabled + auto node = std::make_shared("NodeWithLoggerService", rclcpp::NodeOptions().enable_logger_service(true)) - ros2 service call /config_logger logging_demo/srv/ConfigLogger "{logger_name: 'logger_usage_demo', level: INFO}" + .. group-tab:: Python -This service call will work on any logger that is running in the process provided that you know its name. -This includes the loggers in the ROS 2 core, such as ``rcl`` (the common client library package). -To enable debug logging for ``rcl``, call: + .. code-block:: python + + # Create a node with logger service enabled + node = Node('NodeWithLoggerService', enable_logger_service=True) + +If you run one of the nodes as configured above, you will find 2 services when running ``ros2 service list``: .. code-block:: bash - ros2 service call /config_logger logging_demo/srv/ConfigLogger "{logger_name: 'rcl', level: DEBUG}" + $ ros2 service list + ... + /NodeWithLoggerService/get_logger_levels + /NodeWithLoggerService/set_logger_levels + ... + +* get_logger_levels + + Use this service to get logger levels for specified logger names. + + Run ``ros2 service call`` to get logger levels for ``NodeWithLoggerService`` and ``rcl``. + + .. code-block:: bash + + $ ros2 service call /NodeWithLoggerService/get_logger_levels rcl_interfaces/srv/GetLoggerLevels '{names: ["NodeWithLoggerService", "rcl"]}' + + requester: making request: rcl_interfaces.srv.GetLoggerLevels_Request(names=['NodeWithLoggerService', 'rcl']) + + response: + rcl_interfaces.srv.GetLoggerLevels_Response(levels=[rcl_interfaces.msg.LoggerLevel(name='NodeWithLoggerService', level=0), rcl_interfaces.msg.LoggerLevel(name='rcl', level=0)]) + +* set_logger_levels + + Use this service to set logger levels for specified logger names. + + Run ``ros2 service call`` to set logger levels for ``NodeWithLoggerService`` and ``rcl``. + + .. code-block:: bash + + $ ros2 service call /NodeWithLoggerService/set_logger_levels rcl_interfaces/srv/SetLoggerLevels '{levels: [{name: "NodeWithLoggerService", level: 20}, {name: "rcl", level: 10}]}' + + requester: making request: rcl_interfaces.srv.SetLoggerLevels_Request(levels=[rcl_interfaces.msg.LoggerLevel(name='NodeWithLoggerService', level=20), rcl_interfaces.msg.LoggerLevel(name='rcl', level=10)]) + + response: + rcl_interfaces.srv.SetLoggerLevels_Response(results=[rcl_interfaces.msg.SetLoggerLevelsResult(successful=True, reason=''), rcl_interfaces.msg.SetLoggerLevelsResult(successful=True, reason='')]) + + +There is also demo code showing how to set or get the logger level via the logger service. + + * rclcpp: `demo code `__ + + .. code-block:: bash + + $ ros2 run demo_nodes_cpp use_logger_service + + * rclpy: `demo code `__ -You should see debug output from ``rcl`` start to show. + .. code-block:: bash + + $ ros2 run demo_nodes_py use_logger_service + +.. warning:: + + Currently, there is a limitation that ``get_logger_levels`` and ``set_logger_levels`` services are not thread-safe. + This means that you need to ensure that only one thread is calling the services at a time. + Please see the details in https://github.com/ros2/rcutils/issues/397 Using the logger config component ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -327,19 +387,21 @@ For example, to additionally get the timestamp and location of the log calls, st .. code-block:: bash export RCUTILS_CONSOLE_OUTPUT_FORMAT="[{severity} {time}] [{name}]: {message} ({function_name}() at {file_name}:{line_number})" + ros2 run logging_demo logging_demo_main .. group-tab:: macOS .. code-block:: bash export RCUTILS_CONSOLE_OUTPUT_FORMAT="[{severity} {time}] [{name}]: {message} ({function_name}() at {file_name}:{line_number})" + ros2 run logging_demo logging_demo_main .. group-tab:: Windows .. code-block:: bash - # set "RCUTILS_CONSOLE_OUTPUT_FORMAT=[{severity} {time}] [{name}]: {message} ({function_name}() at {file_name}:{line_number})" - ros2 run logging_demo logging_demo_main + set "RCUTILS_CONSOLE_OUTPUT_FORMAT=[{severity} {time}] [{name}]: {message} ({function_name}() at {file_name}:{line_number})" + ros2 run logging_demo logging_demo_main You should see the timestamp in seconds and the function name, filename and line number additionally printed with each message. *The ``time`` option is only supported as of the ROS 2 Bouncy release.* @@ -358,19 +420,21 @@ For example: .. code-block:: bash export RCUTILS_COLORIZED_OUTPUT=0 # 1 for forcing it + ros2 run logging_demo logging_demo_main .. group-tab:: macOS .. code-block:: bash export RCUTILS_COLORIZED_OUTPUT=0 # 1 for forcing it + ros2 run logging_demo logging_demo_main .. group-tab:: Windows .. code-block:: bash - # set "RCUTILS_COLORIZED_OUTPUT=0" - ros2 run logging_demo logging_demo_main + set "RCUTILS_COLORIZED_OUTPUT=0" :: 1 for forcing it + ros2 run logging_demo logging_demo_main You should see that debug, warn, error and fatal logs aren't colorized now. diff --git a/source/Tutorials/Demos/Quality-of-Service.rst b/source/Tutorials/Demos/Quality-of-Service.rst index 8d85bdf2d75..72982efde74 100644 --- a/source/Tutorials/Demos/Quality-of-Service.rst +++ b/source/Tutorials/Demos/Quality-of-Service.rst @@ -13,7 +13,7 @@ Using quality-of-service settings for lossy networks Background ---------- -Please read the documentation page `about QoS settings <../../Concepts/About-Quality-of-Service-Settings>` for background information on available support in ROS 2. +Please read the documentation page `about QoS settings <../../Concepts/Intermediate/About-Quality-of-Service-Settings>` for background information on available support in ROS 2. In this demo, we will spawn a node that publishes a camera image and another that subscribes to the image and shows it on the screen. We will then simulate a lossy network connection between them and show how different quality of service settings handle the bad link. diff --git a/source/Tutorials/Demos/Real-Time-Programming.rst b/source/Tutorials/Demos/Real-Time-Programming.rst index c71e52b8633..e92832ef9a0 100644 --- a/source/Tutorials/Demos/Real-Time-Programming.rst +++ b/source/Tutorials/Demos/Real-Time-Programming.rst @@ -88,7 +88,7 @@ Add to ``/etc/security/limits.conf`` (as sudo): - memlock A limit of ``-1`` is unlimited. -If you choose this, you may need to accompany it with ``ulimit -l unlimited`` after editing the file. +If you choose this, you may need to accompany it with ``ulimit -l unlimited`` (as root) after editing the file. After saving the file, log out and log back in. Then rerun the ``pendulum_demo`` invocation. @@ -217,13 +217,14 @@ Then run the ``rttest_plot`` script on the resulting file: .. code-block:: bash - rttest_plot pendulum_demo_results + ros2 run rttest rttest_plot pendulum_demo_results -This script will produce three files: +This script will produce a number of files: :: pendulum_demo_results_plot_latency.svg + pendulum_demo_results_plot_latency_hist.svg pendulum_demo_results_plot_majflts.svg pendulum_demo_results_plot_minflts.svg diff --git a/source/Tutorials/Intermediate/Composition.rst b/source/Tutorials/Intermediate/Composition.rst index 51c2b37a43e..c85ef30bb07 100644 --- a/source/Tutorials/Intermediate/Composition.rst +++ b/source/Tutorials/Intermediate/Composition.rst @@ -19,7 +19,7 @@ Composing multiple nodes in a single process Background ---------- -See the :doc:`conceptual article <../../Concepts/About-Composition>`. +See the :doc:`conceptual article <../../Concepts/Intermediate/About-Composition>`. Run the demos ------------- @@ -194,7 +194,7 @@ Composition using launch actions ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ While the command line tools are useful for debugging and diagnosing component configurations, it is frequently more convenient to start a set of components at the same time. -To automate this action, we can use the functionality in ``ros2 launch``. +To automate this action, we can use a `launch file `__: .. code-block:: bash diff --git a/source/Tutorials/Intermediate/Creating-an-Action.rst b/source/Tutorials/Intermediate/Creating-an-Action.rst index ab7994923f0..88b89ae27ef 100644 --- a/source/Tutorials/Intermediate/Creating-an-Action.rst +++ b/source/Tutorials/Intermediate/Creating-an-Action.rst @@ -31,9 +31,15 @@ Prerequisites You should have :doc:`ROS 2 <../../Installation>` and `colcon `__ installed. -Set up a :doc:`workspace <../Beginner-Client-Libraries/Creating-A-Workspace/Creating-A-Workspace>` and create a package named ``action_tutorials_interfaces``: +You should know how to set up a :doc:`workspace <../Beginner-Client-Libraries/Creating-A-Workspace/Creating-A-Workspace>` and create packages. -(Remember to :doc:`source your ROS 2 installation <../Beginner-CLI-Tools/Configuring-ROS2-Environment>` first.) +Remember to :doc:`source your ROS 2 installation <../Beginner-CLI-Tools/Configuring-ROS2-Environment>` first. + +Tasks +----- + +1 Creating an interface package +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. tabs:: @@ -41,30 +47,28 @@ Set up a :doc:`workspace <../Beginner-Client-Libraries/Creating-A-Workspace/Crea .. code-block:: bash - mkdir -p ros2_ws/src #you can reuse existing workspace with this naming convention - cd ros2_ws/src - ros2 pkg create action_tutorials_interfaces + mkdir -p ~/ros2_ws/src # you can reuse an existing workspace with this naming convention + cd ~/ros2_ws/src + ros2 pkg create --license Apache-2.0 custom_action_interfaces .. group-tab:: macOS .. code-block:: bash - mkdir -p ros2_ws/src - cd ros2_ws/src - ros2 pkg create action_tutorials_interfaces + mkdir -p ~/ros2_ws/src + cd ~/ros2_ws/src + ros2 pkg create --license Apache-2.0 custom_action_interfaces .. group-tab:: Windows .. code-block:: bash - md ros2_ws\src - cd ros2_ws\src - ros2 pkg create action_tutorials_interfaces + md \ros2_ws\src + cd \ros2_ws\src + ros2 pkg create --license Apache-2.0 custom_action_interfaces -Tasks ------ -1 Defining an action +2 Defining an action ^^^^^^^^^^^^^^^^^^^^ Actions are defined in ``.action`` files of the form: @@ -87,7 +91,7 @@ An instance of an action is typically referred to as a *goal*. Say we want to define a new action "Fibonacci" for computing the `Fibonacci sequence `__. -Create an ``action`` directory in our ROS 2 package ``action_tutorials_interfaces``: +Create an ``action`` directory in our ROS 2 package ``custom_action_interfaces``: .. tabs:: @@ -95,21 +99,21 @@ Create an ``action`` directory in our ROS 2 package ``action_tutorials_interface .. code-block:: bash - cd action_tutorials_interfaces + cd custom_action_interfaces mkdir action .. group-tab:: macOS .. code-block:: bash - cd action_tutorials_interfaces + cd custom_action_interfaces mkdir action .. group-tab:: Windows .. code-block:: bash - cd action_tutorials_interfaces + cd custom_action_interfaces md action Within the ``action`` directory, create a file called ``Fibonacci.action`` with the following contents: @@ -124,12 +128,12 @@ Within the ``action`` directory, create a file called ``Fibonacci.action`` with The goal request is the ``order`` of the Fibonacci sequence we want to compute, the result is the final ``sequence``, and the feedback is the ``partial_sequence`` computed so far. -2 Building an action +3 Building an action ^^^^^^^^^^^^^^^^^^^^ Before we can use the new Fibonacci action type in our code, we must pass the definition to the rosidl code generation pipeline. -This is accomplished by adding the following lines to our ``CMakeLists.txt`` before the ``ament_package()`` line, in the ``action_tutorials_interfaces``: +This is accomplished by adding the following lines to our ``CMakeLists.txt`` before the ``ament_package()`` line, in the ``custom_action_interfaces``: .. code-block:: cmake @@ -159,19 +163,36 @@ We should now be able to build the package containing the ``Fibonacci`` action d We're done! By convention, action types will be prefixed by their package name and the word ``action``. -So when we want to refer to our new action, it will have the full name ``action_tutorials_interfaces/action/Fibonacci``. +So when we want to refer to our new action, it will have the full name ``custom_action_interfaces/action/Fibonacci``. -We can check that our action built successfully with the command line tool: +We can check that our action built successfully with the command line tool. +First source our workspace: +.. tabs:: -.. code-block:: bash + .. group-tab:: Linux + + .. code-block:: bash + + source install/local_setup.bash - # Source our workspace - # On Windows: call install/setup.bat - . install/setup.bash - # Check that our action definition exists - ros2 interface show action_tutorials_interfaces/action/Fibonacci + .. group-tab:: macOS + + .. code-block:: bash + + source install/local_setup.bash + + .. group-tab:: Windows + + .. code-block:: bash + + call install\local_setup.bat + +Now check that our action definition exists: + +.. code-block:: bash + ros2 interface show custom_action_interfaces/action/Fibonacci You should see the Fibonacci action definition printed to the screen. diff --git a/source/Tutorials/Intermediate/Launch/Launch-Main.rst b/source/Tutorials/Intermediate/Launch/Launch-Main.rst index 435d4369a63..7a49b296aa9 100644 --- a/source/Tutorials/Intermediate/Launch/Launch-Main.rst +++ b/source/Tutorials/Intermediate/Launch/Launch-Main.rst @@ -42,4 +42,4 @@ ROS 2 Launch files allow you to start up and configure a number of executables c .. note:: - If you are coming from ROS 1, you can use the :doc:`ROS Launch Migration guide <../../../How-To-Guides/Launch-files-migration-guide>` to help you migrate your launch files to ROS 2. + If you are coming from ROS 1, you can use the :doc:`ROS Launch Migration guide <../../../How-To-Guides/Migrating-from-ROS1/Migrating-Launch-Files>` to help you migrate your launch files to ROS 2. diff --git a/source/Tutorials/Intermediate/Launch/Launch-system.rst b/source/Tutorials/Intermediate/Launch/Launch-system.rst index d1977c1116d..53376bc0815 100644 --- a/source/Tutorials/Intermediate/Launch/Launch-system.rst +++ b/source/Tutorials/Intermediate/Launch/Launch-system.rst @@ -116,7 +116,7 @@ Make sure to create a ``launch`` directory at the top-level of the package you c data_files=[ # ... Other data files # Include all launch files. - (os.path.join('share', package_name), glob('launch/*launch.[pxy][yma]*')) + (os.path.join('share', package_name, 'launch'), glob(os.path.join('launch', '*launch.[pxy][yma]*'))) ] ) diff --git a/source/Tutorials/Intermediate/Launch/Using-Event-Handlers.rst b/source/Tutorials/Intermediate/Launch/Using-Event-Handlers.rst index 00dec040cb6..b5520472a57 100644 --- a/source/Tutorials/Intermediate/Launch/Using-Event-Handlers.rst +++ b/source/Tutorials/Intermediate/Launch/Using-Event-Handlers.rst @@ -251,7 +251,7 @@ It means that the launch process will shutdown when the turtlesim window is clos Finally, the ``OnShutdown`` event handler is used to register a callback function that is executed when the launch file is asked to shutdown. It logs a message to the console why the launch file is asked to shutdown. -It logs the message with a reason for shutdown like the closure of turtlesim window or ``ctrl-c`` signal made by the user. +It logs the message with a reason for shutdown like the closure of turtlesim window or :kbd:`ctrl-c` signal made by the user. .. code-block:: python diff --git a/source/Tutorials/Intermediate/Launch/Using-ROS2-Launch-For-Large-Projects.rst b/source/Tutorials/Intermediate/Launch/Using-ROS2-Launch-For-Large-Projects.rst index 673e7776346..bbf25af74c7 100644 --- a/source/Tutorials/Intermediate/Launch/Using-ROS2-Launch-For-Large-Projects.rst +++ b/source/Tutorials/Intermediate/Launch/Using-ROS2-Launch-For-Large-Projects.rst @@ -486,6 +486,11 @@ The ``data_files`` field should now look like this: .. code-block:: Python + import os + from glob import glob + from setuptools import setup + ... + data_files=[ ... (os.path.join('share', package_name, 'launch'), diff --git a/source/Tutorials/Intermediate/Launch/Using-Substitutions.rst b/source/Tutorials/Intermediate/Launch/Using-Substitutions.rst index 8cbfd6fcaaa..8bc300bfbb7 100644 --- a/source/Tutorials/Intermediate/Launch/Using-Substitutions.rst +++ b/source/Tutorials/Intermediate/Launch/Using-Substitutions.rst @@ -83,7 +83,7 @@ Finally, make sure to add in changes to the ``setup.py`` of the package so that data_files=[ # ... Other data files # Include all launch files. - (os.path.join('share', package_name), glob('launch/*launch.[pxy][yma]*')) + (os.path.join('share', package_name, 'launch'), glob(os.path.join('launch', '*launch.[pxy][yma]*'))) ] ) @@ -114,6 +114,7 @@ To do this, create an ``example_main_launch.py`` file in the ``launch`` folder o PythonLaunchDescriptionSource([ PathJoinSubstitution([ FindPackageShare('launch_tutorial'), + 'launch', 'example_substitutions_launch.py' ]) ]), @@ -133,6 +134,7 @@ The ``PathJoinSubstitution`` substitution is then used to join the path to that PathJoinSubstitution([ FindPackageShare('launch_tutorial'), + 'launch', 'example_substitutions_launch.py' ]) diff --git a/source/Tutorials/Intermediate/Monitoring-For-Parameter-Changes-CPP.rst b/source/Tutorials/Intermediate/Monitoring-For-Parameter-Changes-CPP.rst index 137c018fcb9..2cdd34b3aa9 100644 --- a/source/Tutorials/Intermediate/Monitoring-For-Parameter-Changes-CPP.rst +++ b/source/Tutorials/Intermediate/Monitoring-For-Parameter-Changes-CPP.rst @@ -348,6 +348,6 @@ The ParameterEventHandler is a convenient way to monitor for parameter changes s Related content --------------- -To learn how to adapt ROS 1 parameter files for ROS 2, see the :doc:`Migrating YAML parameter files from ROS 1 to ROS2 <../../How-To-Guides/Parameters-YAML-files-migration-guide>` tutorial. +To learn how to adapt ROS 1 parameter files for ROS 2, see the :doc:`Migrating YAML parameter files from ROS 1 to ROS2 <../../How-To-Guides/Migrating-from-ROS1/Migrating-Parameters>` tutorial. diff --git a/source/Tutorials/Intermediate/Rosdep.rst b/source/Tutorials/Intermediate/Rosdep.rst index 814db4a1041..c7dda3a3fc7 100644 --- a/source/Tutorials/Intermediate/Rosdep.rst +++ b/source/Tutorials/Intermediate/Rosdep.rst @@ -2,54 +2,91 @@ Tutorials/Rosdep -.. _rosdep: - Managing Dependencies with rosdep ================================= +.. contents:: Table of Contents + :depth: 2 + :local: + **Goal:** Manage external dependencies using ``rosdep``. **Tutorial level:** Intermediate **Time:** 5 minutes -.. contents:: Contents - :depth: 2 - :local: +This tutorial will explain how to manage external dependencies using ``rosdep``. -Author: Steve Macenski +.. warning:: -This tutorial will explain how to manage external dependencies using ``rosdep``. + Currently rosdep only works on Linux and macOS; Windows is not supported. + There are long-term plans to add support for Windows to https://github.com/ros-infrastructure/rosdep. What is rosdep? --------------- -``rosdep`` is ROS's dependency management utility that can work with ROS packages and external libraries. -``rosdep`` is a command-line utility for identifying and installing dependencies to build or install a package. -It can be or is invoked when: +``rosdep`` is a dependency management utility that can work with packages and external libraries. +It is a command-line utility for identifying and installing dependencies to build or install a package. +``rosdep`` is *not* a package manager in its own right; it is a meta-package manager that uses its own knowledge of the system and the dependencies to find the appropriate package to install on a particular platform. +The actual installation is done using the system package manager (e.g. ``apt`` on Debian/Ubuntu, ``dnf`` on Fedora/RHEL, etc). -- Building a workspace and needing appropriate dependencies to build the packages within -- Install packages (e.g. ``sudo apt install ros-{DISTRO}-demo-nodes-cpp``) to check the dependencies needed for it to execute -- and more! +It is most often invoked before building a workspace, where it is used to install the dependencies of the packages within that workspace. It has the ability to work over a single package or over a directory of packages (e.g. workspace). +.. note:: + + While the name suggests it is for ROS, ``rosdep`` is semi-agnostic to ROS. + You can utilize this powerful tool in non-ROS software projects by installing it as a standalone Python package. + Successfully running ``rosdep`` relies on ``rosdep keys`` to be available, which can be downloaded from a public git repository with a few simple commands. + A little about package.xml files -------------------------------- -A package's ``package.xml`` file contains a set of dependencies. -The dependencies in this file are generally referred to as "rosdep keys". -These are represented in the tags ````, ````, ````, ````, and ````. -They specify in what situation each of the dependencies are required in. - -- For dependencies only used in testing the code (e.g. ``gtest``), use ``test_depend``. -- For dependencies only used in building the code, use ``build_depend``. -- For dependencies needed by headers the code exports, use ``build_export_depend``. -- For dependencies only used when running the code, use ``exec_depend``. -- For mixed purposes, use ``depend``, which covers build, export, and execution time dependencies. +The ``package.xml`` is the file in your software where ``rosdep`` finds the set of dependencies. +It is important that the list of dependencies in the ``package.xml`` is complete and correct, which allows all of the tooling to determine the packages dependencies. +Missing or incorrect dependencies can lead to users not being able to use your package, to packages in a workspace being built out-of-order, and to packages not being able to be released. +The dependencies in the ``package.xml`` file are generally referred to as "rosdep keys". These dependencies are manually populated in the ``package.xml`` file by the package's creators and should be an exhaustive list of any non-builtin libraries and packages it requires. +These are represented in the following tags (see `REP-149 `__ for the full specification): + +```` +^^^^^^^^^^^^ + +These are dependencies that should be provided at both build time and run time for your package. +For C++ packages, if in doubt, use this tag. +Pure Python packages generally don't have a build phase, so should never use this and should use ```` instead. + +```` +^^^^^^^^^^^^^^^^^^ + +If you only use a particular dependency for building your package, and not at execution time, you can use the ```` tag. + +With this type of dependency, an installed binary of your package does not require that particular package to be installed. + +However, that can create a problem if your package exports a header that includes a header from this dependency. +In that case you also need a ````. + +```` +^^^^^^^^^^^^^^^^^^^^^^^^^ + +If you export a header that includes a header from a dependency, it will be needed by other packages that ```` on yours. +This mainly applies to headers and CMake configuration files. +Library packages referenced by libraries you export should normally specify ````, because they are also needed at execution time. + +```` +^^^^^^^^^^^^^^^^^ + +This tag declares dependencies for shared libraries, executables, Python modules, launch scripts and other files required when running your package. + +```` +^^^^^^^^^^^^^^^^^ + +This tag declares dependencies needed only by tests. +Dependencies here should *not* be duplicated with keys specified by ````, ````, or ````. + How does rosdep work? --------------------- @@ -57,7 +94,9 @@ How does rosdep work? These keys are then cross-referenced against a central index to find the appropriate ROS package or software library in various package managers. Finally, once the packages are found, they are installed and ready to go! -The central index is known as ``rosdistro``, which `may be found here `_. +``rosdep`` works by retrieving the central index on to your local machine so that it doesn't have to access the network every time it runs (on Debian/Ubuntu the configuration for it is stored in ``/etc/ros/rosdep/sources.list.d/20-default.list``). + +The central index is known as ``rosdistro``, which `may be found online `_. We'll explore that more in the next section. How do I know what keys to put in my package.xml? @@ -65,19 +104,17 @@ How do I know what keys to put in my package.xml? Great question, I'm glad you asked! -For ROS packages (e.g. ``nav2_bt_navigator``), you may simply place the name of the package. -You can find a list of all released ROS packages in ``rosdistro`` at ``/distribution.yaml`` for your given ROS distribution. +* If the package you want to depend in your package is ROS-based, AND has been released into the ROS ecosystem [1]_, e.g. ``nav2_bt_navigator``, you may simply use the name of the package. You can find a list of all released ROS packages in https://github.com/ros/rosdistro at ``/distribution.yaml`` (e.g. ``humble/distribution.yaml``) for your given ROS distribution. +* If you want to depend on a non-ROS package, something often called "system dependencies", you will need to find the keys for a particular library. In general, there are two files of interest: -For non-ROS package system dependencies, we will need to find the keys for a particular library. -In general, there are two files of interest: ``rosdep/base.yaml`` and ``rosdep/python.yaml``. -``base.yaml`` in general contains the ``apt`` system dependencies. -``python.yaml`` in general contains the ``pip`` python dependencies. + * `rosdep/base.yaml `_ contains the ``apt`` system dependencies + * `rosdep/python.yaml `_ contains the Python dependencies -To find a key, search for your library in this file (preferably ctrl+F, its long) and find the name in ``yaml`` that contains it. +To find a key, search for your library in these files and find the name. This is the key to put in a ``package.xml`` file. For example, imagine a package had a dependency on ``doxygen`` because it is a great piece of software that cares about quality documentation (hint hint). -We would search ``base.yaml`` for ``doxygen`` and come across: +We would search ``rosdep/base.yaml`` for ``doxygen`` and come across: .. code-block:: yaml @@ -105,10 +142,35 @@ Pull requests for rosdistro are typically merged well within a week. `Detailed instructions may be found here `_ for how to contribute new rosdep keys. If for some reason these may not be contributed openly, it is possible to fork rosdistro and maintain a alternate index for use. - How do I use the rosdep tool? ----------------------------- +rosdep installation +^^^^^^^^^^^^^^^^^^^ + +If you are using ``rosdep`` with ROS, it is conveniently packaged along with the ROS distribution. +This is the recommended way to get ``rosdep``. +You can install it with: + +.. code-block:: bash + + apt-get install python3-rosdep + +.. note:: + + On Debian and Ubuntu, there is another, similarly named package called ``python3-rosdep2``. + If that package is installed, make sure to remove it before installing ``python3-rosdep``. + +If you are using ``rosdep`` outside of ROS, the system package may not be available. +In that case, you can install it directly from https://pypi.org: + +.. code-block:: bash + + pip install rosdep + +rosdep operation +^^^^^^^^^^^^^^^^ + Now that we have some understanding of ``rosdep``, ``package.xml``, and ``rosdistro``, we're ready to use the utility itself! Firstly, if this is the first time using ``rosdep``, it must be initialized via: @@ -135,4 +197,6 @@ Breaking that down: - ``--ignore-src`` means to ignore installing dependencies, even if a rosdep key exists, if the package itself is also in the workspace. There are additional arguments and options available. -Use ``rosdep -h`` to see them. +Use ``rosdep -h`` to see them, or look at the more complete documentation for rosdep at http://docs.ros.org/en/independent/api/rosdep/html/ . + +.. [1] "released into the ROS ecosystem" means the package is listed in one or more of the ``/distribution.yaml`` directories in the `rosdistro database `_. diff --git a/source/Tutorials/Intermediate/Testing/CLI.rst b/source/Tutorials/Intermediate/Testing/CLI.rst index ffd8765c9c2..3579c52b2fb 100644 --- a/source/Tutorials/Intermediate/Testing/CLI.rst +++ b/source/Tutorials/Intermediate/Testing/CLI.rst @@ -14,6 +14,9 @@ To compile and run the tests, simply run the `test ` before testing should not be necessary. +``colcon test`` makes sure that the tests run with the right environment, have access to their dependencies, etc. + Examine Test Results ^^^^^^^^^^^^^^^^^^^^ @@ -28,3 +31,21 @@ To see the exact test cases which fail, use the ``--verbose`` flag: .. code-block:: console colcon test-result --all --verbose + +Debugging tests with GDB +^^^^^^^^^^^^^^^^^^^^^^^^ + +If a C++ test is failing, gdb can be used directly on the test executable in the build directory. +Ensure to build the code in debug mode. +Since the previous build type may be cached by CMake, clean the cache and rebuild. + +.. code-block:: console + + colcon build --cmake-clean-cache --mixin debug + +Next, run the test directly through gdb. +For example: + +.. code-block:: console + + gdb -ex run ./build/rcl/test/test_logging diff --git a/source/Tutorials/Intermediate/Tf2/Adding-A-Frame-Py.rst b/source/Tutorials/Intermediate/Tf2/Adding-A-Frame-Py.rst index ddd0d3b1b6c..b363ccaa727 100644 --- a/source/Tutorials/Intermediate/Tf2/Adding-A-Frame-Py.rst +++ b/source/Tutorials/Intermediate/Tf2/Adding-A-Frame-Py.rst @@ -49,8 +49,9 @@ Tasks In our turtle example, we'll add a new frame ``carrot1``, which will be the child of the ``turtle1``. This frame will serve as the goal for the second turtle. -Let's first create the source files. Go to the ``learning_tf2_py`` package we created in the previous tutorials. -Download the fixed frame broadcaster code by entering the following command: +Let's first create the source files. +Go to the ``learning_tf2_py`` package we created in the previous tutorials. +Inside the ``src/learning_tf2_py/learning_tf2_py`` directory download the fixed frame broadcaster code by entering the following command: .. tabs:: @@ -149,10 +150,9 @@ The ``carrot1`` frame is 2 meters offset in y axis in terms of the ``turtle1`` f 1.2 Add an entry point ~~~~~~~~~~~~~~~~~~~~~~ -To allow the ``ros2 run`` command to run your node, you must add the entry point -to ``setup.py`` (located in the ``src/learning_tf2_py`` directory). +To allow the ``ros2 run`` command to run your node, you must add the entry point to ``setup.py`` (located in the ``src/learning_tf2_py`` directory). -Finally, add the following line between the ``'console_scripts':`` brackets: +Add the following line between the ``'console_scripts':`` brackets: .. code-block:: python @@ -321,7 +321,8 @@ Now just rebuild the package, restart the ``turtle_tf2_fixed_frame_demo_launch.p The extra frame we published in this tutorial is a fixed frame that doesn't change over time in relation to the parent frame. However, if you want to publish a moving frame you can code the broadcaster to change the frame over time. Let's change our ``carrot1`` frame so that it changes relative to ``turtle1`` frame over time. -Now download the dynamic frame broadcaster code by entering the following command: +Go to the ``learning_tf2_py`` package we created in the previous tutorial. +Inside the ``src/learning_tf2_py/learning_tf2_py`` directory download the dynamic frame broadcaster code by entering the following command: .. tabs:: @@ -417,10 +418,9 @@ Instead of a fixed definition of our x and y offsets, we are using the ``sin()`` 2.2 Add an entry point ~~~~~~~~~~~~~~~~~~~~~~ -To allow the ``ros2 run`` command to run your node, you must add the entry point -to ``setup.py`` (located in the ``src/learning_tf2_py`` directory). +To allow the ``ros2 run`` command to run your node, you must add the entry point to ``setup.py`` (located in the ``src/learning_tf2_py`` directory). -Finally, add the following line between the ``'console_scripts':`` brackets: +Add the following line between the ``'console_scripts':`` brackets: .. code-block:: python diff --git a/source/Tutorials/Intermediate/Tf2/Debugging-Tf2-Problems.rst b/source/Tutorials/Intermediate/Tf2/Debugging-Tf2-Problems.rst index 73159860581..4ada3a4a743 100644 --- a/source/Tutorials/Intermediate/Tf2/Debugging-Tf2-Problems.rst +++ b/source/Tutorials/Intermediate/Tf2/Debugging-Tf2-Problems.rst @@ -37,7 +37,7 @@ First, let's create the source file. Go to the ``learning_tf2_cpp`` package we created in :doc:`tf2 tutorials <./Tf2-Main>`. Inside the ``src`` directory make a copy of the source file ``turtle_tf2_listener.cpp`` and rename it to ``turtle_tf2_listener_debug.cpp``. -Open the file using your preferred text editor, and change line 67 from +Open the file using your preferred text editor, and change line 65 from .. code-block:: C++ @@ -49,27 +49,25 @@ to std::string toFrameRel = "turtle3"; -and change ``lookupTransform()`` call in lines 75-79 from +and change ``lookupTransform()`` call in lines 73-77 from .. code-block:: C++ - try { - transformStamped = tf_buffer_->lookupTransform( - toFrameRel, - fromFrameRel, + try { + t = tf_buffer_->lookupTransform( + toFrameRel, fromFrameRel, tf2::TimePointZero); - } catch (tf2::TransformException & ex) { + } catch (const tf2::TransformException & ex) { to .. code-block:: C++ - try { - transformStamped = tf_buffer_->lookupTransform( - toFrameRel, - fromFrameRel, + try { + t = tf_buffer_->lookupTransform( + toFrameRel, fromFrameRel, this->now()); - } catch (tf2::TransformException & ex) { + } catch (const tf2::TransformException & ex) { And save changes to the file. In order to run this demo, we need to create a launch file ``start_tf2_debug_demo_launch.py`` in the ``launch`` subdirectory of package ``learning_tf2_cpp``: @@ -151,22 +149,21 @@ You should notice the following message: Firstly, we need to find out what exactly we are asking tf2 to do. Therefore, we go into the part of the code that is using tf2. -Open the ``src/turtle_tf2_listener_debug.cpp`` file, and take a look at line 67: +Open the ``src/turtle_tf2_listener_debug.cpp`` file, and take a look at line 65: .. code-block:: C++ std::string to_frame_rel = "turtle3"; -and lines 75-79: +and lines 73-77: .. code-block:: C++ - try { - transformStamped = tf_buffer_->lookupTransform( - toFrameRel, - fromFrameRel, + try { + t = tf_buffer_->lookupTransform( + toFrameRel, fromFrameRel, this->now()); - } catch (tf2::TransformException & ex) { + } catch (const tf2::TransformException & ex) { Here we do the actual request to tf2. The three arguments tell us directly what we are asking tf2: transform from frame ``turtle3`` to frame ``turtle1`` at time ``now``. @@ -202,7 +199,7 @@ Open the generated ``frames.pdf`` file to see the following output: .. image:: images/turtlesim_frames.png So obviously the problem is that we are requesting transform from frame ``turtle3``, which does not exist. -To fix this bug, just replace ``turtle3`` with ``turtle2`` in line 67. +To fix this bug, just replace ``turtle3`` with ``turtle2`` in line 65. And now stop the running demo, build it, and run it again: @@ -248,16 +245,15 @@ The key part here is the delay for the chain from ``turtle2`` to ``turtle1``. The output shows there is an average delay of about 3 milliseconds. This means that tf2 can only transform between the turtles after 3 milliseconds are passed. So, if we would be asking tf2 for the transformation between the turtles 3 milliseconds ago instead of ``now``, tf2 would be able to give us an answer sometimes. -Let's test this quickly by changing lines 75-79 to: +Let's test this quickly by changing lines 73-77 to: .. code-block:: C++ - try { - transformStamped = tf_buffer_->lookupTransform( - toFrameRel, - fromFrameRel, + try { + t = tf_buffer_->lookupTransform( + toFrameRel, fromFrameRel, this->now() - rclcpp::Duration::from_seconds(0.1)); - } catch (tf2::TransformException & ex) { + } catch (const tf2::TransformException & ex) { In the new code we are asking for the transform between the turtles 100 milliseconds ago. It is usual to use a longer periods, just to make sure that the transform will arrive. @@ -276,35 +272,32 @@ The real fix would look like this: .. code-block:: C++ - try { - transformStamped = tf_buffer_->lookupTransform( - toFrameRel, - fromFrameRel, + try { + t = tf_buffer_->lookupTransform( + toFrameRel, fromFrameRel, tf2::TimePointZero); - } catch (tf2::TransformException & ex) { + } catch (const tf2::TransformException & ex) { Or like this: .. code-block:: C++ - try { - transformStamped = tf_buffer_->lookupTransform( - toFrameRel, - fromFrameRel, + try { + t = tf_buffer_->lookupTransform( + toFrameRel, fromFrameRel, tf2::TimePoint()); - } catch (tf2::TransformException & ex) { + } catch (const tf2::TransformException & ex) { You can learn more about timeouts in the :doc:`Using time <./Learning-About-Tf2-And-Time-Cpp>` tutorial, and use them as below: .. code-block:: C++ - try { - transformStamped = tf_buffer_->lookupTransform( - toFrameRel, - fromFrameRel, + try { + t = tf_buffer_->lookupTransform( + toFrameRel, fromFrameRel, this->now(), rclcpp::Duration::from_seconds(0.05)); - } catch (tf2::TransformException & ex) { + } catch (const tf2::TransformException & ex) { Summary ------- diff --git a/source/Tutorials/Intermediate/Tf2/Introduction-To-Tf2.rst b/source/Tutorials/Intermediate/Tf2/Introduction-To-Tf2.rst index baa3eeb0db7..59026394b44 100644 --- a/source/Tutorials/Intermediate/Tf2/Introduction-To-Tf2.rst +++ b/source/Tutorials/Intermediate/Tf2/Introduction-To-Tf2.rst @@ -80,7 +80,7 @@ We can use ``tf2_tools`` to look at what tf2 is doing behind the scenes. 1 Using view_frames ^^^^^^^^^^^^^^^^^^^ -``view_frames`` creates a diagram of the frames being broadcasted by tf2 over ROS. +``view_frames`` creates a diagram of the frames being broadcast by tf2 over ROS. .. code-block:: console @@ -93,7 +93,7 @@ You will see: Listening to tf data during 5 seconds... Generating graph in frames.pdf file... -Here a tf2 listener is listening to the frames that are being broadcasted over ROS and drawing a tree of how the frames are connected. +Here a tf2 listener is listening to the frames that are being broadcast over ROS and drawing a tree of how the frames are connected. To view the tree, open the resulting ``frames.pdf`` with your favorite PDF viewer. .. image:: images/turtlesim_frames.png @@ -112,7 +112,7 @@ Usage: .. code-block:: console - ros2 run tf2_ros tf2_echo [reference_frame] [target_frame] + ros2 run tf2_ros tf2_echo [source_frame] [target_frame] Let's look at the transform of the ``turtle2`` frame with respect to ``turtle1`` frame which is equivalent to: @@ -120,16 +120,30 @@ Let's look at the transform of the ``turtle2`` frame with respect to ``turtle1`` ros2 run tf2_ros tf2_echo turtle2 turtle1 -You will see the transform displayed as the ``tf2_echo`` listener receives the frames broadcasted over ROS2. +You will see the transform displayed as the ``tf2_echo`` listener receives the frames broadcasted over ROS 2. .. code-block:: console - At time 1622031731.625364060 - - Translation: [2.796, 1.039, 0.000] - - Rotation: in Quaternion [0.000, 0.000, 0.202, 0.979] - At time 1622031732.614745114 - - Translation: [1.608, 0.250, 0.000] - - Rotation: in Quaternion [0.000, 0.000, 0.032, 0.999] + At time 1683385337.850619099 + - Translation: [2.157, 0.901, 0.000] + - Rotation: in Quaternion [0.000, 0.000, 0.172, 0.985] + - Rotation: in RPY (radian) [0.000, -0.000, 0.345] + - Rotation: in RPY (degree) [0.000, -0.000, 19.760] + - Matrix: + 0.941 -0.338 0.000 2.157 + 0.338 0.941 0.000 0.901 + 0.000 0.000 1.000 0.000 + 0.000 0.000 0.000 1.000 + At time 1683385338.841997774 + - Translation: [1.256, 0.216, 0.000] + - Rotation: in Quaternion [0.000, 0.000, -0.016, 1.000] + - Rotation: in RPY (radian) [0.000, 0.000, -0.032] + - Rotation: in RPY (degree) [0.000, 0.000, -1.839] + - Matrix: + 0.999 0.032 0.000 1.256 + -0.032 0.999 -0.000 0.216 + -0.000 0.000 1.000 0.000 + 0.000 0.000 0.000 1.000 As you drive your turtle around you will see the transform change as the two turtles move relative to each other. diff --git a/source/Tutorials/Intermediate/Tf2/Learning-About-Tf2-And-Time-Cpp.rst b/source/Tutorials/Intermediate/Tf2/Learning-About-Tf2-And-Time-Cpp.rst index 9dd718065a9..a45a7f86552 100644 --- a/source/Tutorials/Intermediate/Tf2/Learning-About-Tf2-And-Time-Cpp.rst +++ b/source/Tutorials/Intermediate/Tf2/Learning-About-Tf2-And-Time-Cpp.rst @@ -38,10 +38,12 @@ Open ``turtle_tf2_listener.cpp`` and take a look at the ``lookupTransform()`` ca .. code-block:: C++ - transformStamped = tf_buffer_->lookupTransform( - toFrameRel, - fromFrameRel, - tf2::TimePointZero); + try { + t = tf_buffer_->lookupTransform( + toFrameRel, + fromFrameRel, + tf2::TimePointZero); + } catch (const tf2::TransformException & ex) { You can see that we specified a time equal to 0 by calling ``tf2::TimePointZero``. @@ -58,12 +60,13 @@ Now, change this line to get the transform at the current time, ``this->get_cloc .. code-block:: C++ rclcpp::Time now = this->get_clock()->now(); - transformStamped = tf_buffer_->lookupTransform( - toFrameRel, - fromFrameRel, - now); + try { + t = tf_buffer_->lookupTransform( + toFrameRel, fromFrameRel, + now); + } catch (const tf2::TransformException & ex) { -Now try to run the launch file. +Now build the package and try to run the launch file. .. code-block:: console @@ -94,11 +97,13 @@ To fix this, edit your code as shown below (add the last timeout parameter): .. code-block:: C++ rclcpp::Time now = this->get_clock()->now(); - transformStamped = tf_buffer_->lookupTransform( - toFrameRel, - fromFrameRel, - now, - 50ms); + try { + t = tf_buffer_->lookupTransform( + toFrameRel, + fromFrameRel, + now, + 50ms); + } catch (const tf2::TransformException & ex) { The ``lookupTransform()`` can take four arguments, where the last one is an optional timeout. It will block for up to that duration waiting for it to timeout. @@ -106,7 +111,7 @@ It will block for up to that duration waiting for it to timeout. 3 Checking the results ^^^^^^^^^^^^^^^^^^^^^^ -You can now run the launch file. +You can now build the package and run the launch file. .. code-block:: console diff --git a/source/Tutorials/Intermediate/Tf2/Time-Travel-With-Tf2-Cpp.rst b/source/Tutorials/Intermediate/Tf2/Time-Travel-With-Tf2-Cpp.rst index bb656547568..635145b29cb 100644 --- a/source/Tutorials/Intermediate/Tf2/Time-Travel-With-Tf2-Cpp.rst +++ b/source/Tutorials/Intermediate/Tf2/Time-Travel-With-Tf2-Cpp.rst @@ -39,14 +39,16 @@ Edit the ``lookupTransform()`` call in ``turtle_tf2_listener.cpp`` file to .. code-block:: C++ rclcpp::Time when = this->get_clock()->now() - rclcpp::Duration(5, 0); - t = tf_buffer_->lookupTransform( - toFrameRel, - fromFrameRel, - when, - 50ms); + try { + t = tf_buffer_->lookupTransform( + toFrameRel, + fromFrameRel, + when, + 50ms); + } catch (const tf2::TransformException & ex) { Now if you run this, during the first 5 seconds, the second turtle would not know where to go because we do not yet have a 5-second history of poses of the carrot. -But what happens after these 5 seconds? Let's just give it a try: +But what happens after these 5 seconds? Build the package then let's just give it a try: .. code-block:: console @@ -71,13 +73,15 @@ Your code now would look like this: rclcpp::Time now = this->get_clock()->now(); rclcpp::Time when = now - rclcpp::Duration(5, 0); - t = tf_buffer_->lookupTransform( - toFrameRel, - now, - fromFrameRel, - when, - "world", - 50ms); + try { + t = tf_buffer_->lookupTransform( + toFrameRel, + now, + fromFrameRel, + when, + "world", + 50ms); + } catch (const tf2::TransformException & ex) { The advanced API for ``lookupTransform()`` takes six arguments: @@ -101,7 +105,7 @@ And at the current time, tf2 computes the transform from the ``world`` to the `` Checking the results -------------------- -Let's run the simulation again, this time with the advanced time-travel API: +Build the package then let's run the simulation again, this time with the advanced time-travel API: .. code-block:: console diff --git a/source/Tutorials/Intermediate/Tf2/Time-Travel-With-Tf2-Py.rst b/source/Tutorials/Intermediate/Tf2/Time-Travel-With-Tf2-Py.rst index 9d47749f656..71ac258449d 100644 --- a/source/Tutorials/Intermediate/Tf2/Time-Travel-With-Tf2-Py.rst +++ b/source/Tutorials/Intermediate/Tf2/Time-Travel-With-Tf2-Py.rst @@ -39,14 +39,16 @@ Edit the ``lookup_transform()`` call in ``turtle_tf2_listener.py`` file to .. code-block:: python when = self.get_clock().now() - rclpy.time.Duration(seconds=5.0) - trans = self.tf_buffer.lookup_transform( - to_frame_rel, - from_frame_rel, - when, - timeout=rclpy.duration.Duration(seconds=0.05)) + try: + t = self.tf_buffer.lookup_transform( + to_frame_rel, + from_frame_rel, + when, + timeout=rclpy.duration.Duration(seconds=0.05)) + except TransformException as ex: Now if you run this, during the first 5 seconds, the second turtle would not know where to go because we do not yet have a 5-second history of poses of the carrot. -But what happens after these 5 seconds? Let's just give it a try: +But what happens after these 5 seconds? Build the package as usual then let's just give it a try: .. code-block:: console @@ -70,13 +72,15 @@ Your code now would look like this: .. code-block:: python when = self.get_clock().now() - rclpy.time.Duration(seconds=5.0) - trans = self.tf_buffer.lookup_transform_full( + try: + t = self.tf_buffer.lookup_transform_full( target_frame=to_frame_rel, target_time=rclpy.time.Time(), source_frame=from_frame_rel, source_time=when, fixed_frame='world', timeout=rclpy.duration.Duration(seconds=0.05)) + except TransformException as ex: The advanced API for ``lookup_transform_full()`` takes six arguments: @@ -100,7 +104,7 @@ And at the current time, tf2 computes the transform from the ``world`` to the `` Checking the results -------------------- -Let's run the simulation again, this time with the advanced time-travel API: +Build the package as usual then let's run the simulation again, this time with the advanced time-travel API: .. code-block:: console diff --git a/source/Tutorials/Intermediate/Tf2/Using-Stamped-Datatypes-With-Tf2-Ros-MessageFilter.rst b/source/Tutorials/Intermediate/Tf2/Using-Stamped-Datatypes-With-Tf2-Ros-MessageFilter.rst index ea47949ffcc..de0881706aa 100644 --- a/source/Tutorials/Intermediate/Tf2/Using-Stamped-Datatypes-With-Tf2-Ros-MessageFilter.rst +++ b/source/Tutorials/Intermediate/Tf2/Using-Stamped-Datatypes-With-Tf2-Ros-MessageFilter.rst @@ -340,7 +340,7 @@ Inside the ``src/learning_tf2_cpp/src`` directory download file ``turtle_tf2_mes .. code-block:: console - curl -sk wget https://raw.githubusercontent.com/ros/geometry_tutorials/ros2/turtle_tf2_cpp/src/turtle_tf2_message_filter.cpp -o turtle_tf2_message_filter.cpp + curl -sk https://raw.githubusercontent.com/ros/geometry_tutorials/ros2/turtle_tf2_cpp/src/turtle_tf2_message_filter.cpp -o turtle_tf2_message_filter.cpp Or in powershell: diff --git a/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Broadcaster-Py.rst b/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Broadcaster-Py.rst index cf36aa996f4..1503a56b5fd 100644 --- a/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Broadcaster-Py.rst +++ b/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Broadcaster-Py.rst @@ -339,7 +339,7 @@ The ``data_files`` field should now look like this: data_files=[ ... - (os.path.join('share', package_name, 'launch'), glob(os.path.join('launch', '*.launch.py'))), + (os.path.join('share', package_name, 'launch'), glob(os.path.join('launch', '*launch.[pxy][yma]*'))), ], Also add the appropriate imports at the top of the file: diff --git a/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Listener-Py.rst b/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Listener-Py.rst index e5d1342e81c..0be10320d4b 100644 --- a/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Listener-Py.rst +++ b/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Listener-Py.rst @@ -36,7 +36,8 @@ Tasks 1 Write the listener node ^^^^^^^^^^^^^^^^^^^^^^^^^ -Let's first create the source files. Go to the ``learning_tf2_py`` package we created in the previous tutorial. +Let's first create the source files. +Go to the ``learning_tf2_py`` package we created in the previous tutorial. Inside the ``src/learning_tf2_py/learning_tf2_py`` directory download the example listener code by entering the following command: .. tabs:: @@ -67,7 +68,7 @@ Inside the ``src/learning_tf2_py/learning_tf2_py`` directory download the exampl curl https://raw.githubusercontent.com/ros/geometry_tutorials/ros2/turtle_tf2_py/turtle_tf2_py/turtle_tf2_listener.py -o turtle_tf2_listener.py -Open the file using your preferred text editor. +Now open the file called ``turtle_tf2_listener.py``. .. code-block:: python @@ -216,8 +217,9 @@ All this is wrapped in a try-except block to handle possible exceptions. 1.2 Add an entry point ~~~~~~~~~~~~~~~~~~~~~~ -To allow the ``ros2 run`` command to run your node, you must add the entry point -to ``setup.py`` (located in the ``src/learning_tf2_py`` directory). +To allow the ``ros2 run`` command to run your node, you must add the entry point to ``setup.py`` (located in the ``src/learning_tf2_py`` directory). + +Add the following line between the ``'console_scripts':`` brackets: .. code-block:: python @@ -226,7 +228,8 @@ to ``setup.py`` (located in the ``src/learning_tf2_py`` directory). 2 Update the launch file ^^^^^^^^^^^^^^^^^^^^^^^^ -Open the launch file called ``turtle_tf2_demo_launch.py`` with your text editor, add two new nodes to the launch description, add a launch argument, and add the imports. The resulting file should look like: +Open the launch file called ``turtle_tf2_demo_launch.py`` with your text editor, add two new nodes to the launch description, add a launch argument, and add the imports. +The resulting file should look like: .. code-block:: python diff --git a/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Static-Broadcaster-Cpp.rst b/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Static-Broadcaster-Cpp.rst index 200aaa023d4..289fe8f0994 100644 --- a/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Static-Broadcaster-Cpp.rst +++ b/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Static-Broadcaster-Cpp.rst @@ -80,13 +80,13 @@ Inside the ``src/learning_tf2_cpp/src`` directory download the example static br .. code-block:: console - curl -sk https://raw.githubusercontent.com/ros/geometry_tutorials/ros2/turtle_tf2_cpp/src/static_turtle_tf2_broadcaster.cpp -o static_turtle_tf2_broadcaster.py + curl -sk https://raw.githubusercontent.com/ros/geometry_tutorials/ros2/turtle_tf2_cpp/src/static_turtle_tf2_broadcaster.cpp -o static_turtle_tf2_broadcaster.cpp Or in powershell: .. code-block:: console - curl https://raw.githubusercontent.com/ros/geometry_tutorials/ros2/turtle_tf2_cpp/src/static_turtle_tf2_broadcaster.cpp -o static_turtle_tf2_broadcaster.py + curl https://raw.githubusercontent.com/ros/geometry_tutorials/ros2/turtle_tf2_cpp/src/static_turtle_tf2_broadcaster.cpp -o static_turtle_tf2_broadcaster.cpp Open the file using your preferred text editor. diff --git a/source/Tutorials/Intermediate/URDF/Building-a-Visual-Robot-Model-with-URDF-from-Scratch.rst b/source/Tutorials/Intermediate/URDF/Building-a-Visual-Robot-Model-with-URDF-from-Scratch.rst index de2eaf6e27e..d28a955fd24 100644 --- a/source/Tutorials/Intermediate/URDF/Building-a-Visual-Robot-Model-with-URDF-from-Scratch.rst +++ b/source/Tutorials/Intermediate/URDF/Building-a-Visual-Robot-Model-with-URDF-from-Scratch.rst @@ -59,21 +59,10 @@ To examine the model, launch the ``display.launch.py`` file: This does three things: - * Loads the specified model and saves it as a parameter - * Runs nodes to publish `sensor_msgs/msg/JointState `_ and transforms (more on these later) + * Loads the specified model and saves it as a parameter for the ``robot_state_publisher`` node. + * Runs nodes to publish `sensor_msgs/msg/JointState `_ and transforms (more on these later) * Starts Rviz with a configuration file -Note that the launch command above assumes that you are executing it from the `urdf_tutorial `_ package directory (ie: the ``urdf`` directory is a direct child of the current working directory). -If that is not the case, the relative path to ``01-myfirst.urdf`` will not be valid, and you'll receive an error as soon as the launcher tries to load the urdf as a parameter. - -A slightly modified argument allows this to work regardless of the current working directory: - -.. code-block:: console - - ros2 launch urdf_tutorial display.launch.py model:=`ros2 pkg prefix --share urdf_tutorial`/urdf/01-myfirst.urdf - -You'll have to change all example launch commands given in these tutorials if you are not running them from the ``urdf_tutorial`` package location. - After launching ``display.launch.py``, you should end up with RViz showing you the following: .. image:: https://raw.githubusercontent.com/ros/urdf_tutorial/ros2/images/myfirst.png diff --git a/source/Tutorials/Intermediate/URDF/Using-URDF-with-Robot-State-Publisher.rst b/source/Tutorials/Intermediate/URDF/Using-URDF-with-Robot-State-Publisher.rst index 955f38295cd..1467f1fa300 100644 --- a/source/Tutorials/Intermediate/URDF/Using-URDF-with-Robot-State-Publisher.rst +++ b/source/Tutorials/Intermediate/URDF/Using-URDF-with-Robot-State-Publisher.rst @@ -39,13 +39,35 @@ Tasks 1 Create a package ^^^^^^^^^^^^^^^^^^ +Create the directory: + +.. tabs:: + + .. group-tab:: Linux + + .. code-block:: console + + mkdir -p second_ros2_ws/src + + .. group-tab:: macOS + + .. code-block:: console + + mkdir -p second_ros2_ws/src + + .. group-tab:: Windows + + .. code-block:: console + + md second_ros2_ws/src + +Then create the package: .. code-block:: console - mkdir -p ~/second_ros2_ws/src # change as needed - cd ~/second_ros2_ws/src - ros2 pkg create urdf_tutorial_r2d2 --build-type ament_python --dependencies rclpy - cd urdf_tutorial_r2d2 + cd second_ros2_ws/src + ros2 pkg create urdf_tutorial_r2d2 --build-type ament_python --dependencies rclpy --license Apache-2.0 + cd urdf_tutorial_r2d2 You should now see a ``urdf_tutorial_r2d2`` folder. Next you will make several changes to it. @@ -55,12 +77,28 @@ Next you will make several changes to it. Create the directory where we will store some assets: -.. code-block:: console +.. tabs:: + + .. group-tab:: Linux + + .. code-block:: console + + mkdir -p urdf + + .. group-tab:: macOS - mkdir -p urdf + .. code-block:: console -Download the :download:`URDF file ` and save it as ``~/second_ros2_ws/src/urdf_tutorial_r2d2/urdf/r2d2.urdf.xml``. -Download the :download:`Rviz configuration file ` and save it as ``~/second_ros2_ws/src/urdf_tutorial_r2d2/urdf/r2d2.rviz``. + mkdir -p urdf + + .. group-tab:: Windows + + .. code-block:: console + + md urdf + +Download the :download:`URDF file ` and save it as ``second_ros2_ws/src/urdf_tutorial_r2d2/urdf/r2d2.urdf.xml``. +Download the :download:`Rviz configuration file ` and save it as ``second_ros2_ws/src/urdf_tutorial_r2d2/urdf/r2d2.rviz``. 3 Publish the state ^^^^^^^^^^^^^^^^^^^ @@ -68,7 +106,7 @@ Download the :download:`Rviz configuration file ` and save Now we need a method for specifying what state the robot is in. To do this, we must specify all three joints and the overall odometry. -Fire up your favorite editor and paste the following code into ``~/second_ros2_ws/src/urdf_tutorial_r2d2/urdf_tutorial_r2d2/state_publisher.py`` +Fire up your favorite editor and paste the following code into ``second_ros2_ws/src/urdf_tutorial_r2d2/urdf_tutorial_r2d2/state_publisher.py`` .. code-block:: python @@ -164,8 +202,8 @@ Fire up your favorite editor and paste the following code into ``~/second_ros2_w 4 Create a launch file ^^^^^^^^^^^^^^^^^^^^^^ -Create a new ``~/second_ros2_ws/src/urdf_tutorial_r2d2/launch`` folder. -Open your editor and paste the following code, saving it as ``~/second_ros2_ws/src/urdf_tutorial_r2d2/launch/demo_launch.py`` +Create a new ``second_ros2_ws/src/urdf_tutorial_r2d2/launch`` folder. +Open your editor and paste the following code, saving it as ``second_ros2_ws/src/urdf_tutorial_r2d2/launch/demo_launch.py`` .. code-block:: python @@ -211,7 +249,7 @@ Open your editor and paste the following code, saving it as ``~/second_ros2_ws/s ^^^^^^^^^^^^^^^^^^^^^^^^ You must tell the **colcon** build tool how to install your Python package. -Edit the ``~/second_ros2_ws/src/urdf_tutorial_r2d2/setup.py`` file as follows: +Edit the ``second_ros2_ws/src/urdf_tutorial_r2d2/setup.py`` file as follows: - include these import statements @@ -228,8 +266,8 @@ Edit the ``~/second_ros2_ws/src/urdf_tutorial_r2d2/setup.py`` file as follows: data_files=[ ... - (os.path.join('share', package_name), glob('launch/*.py')), - (os.path.join('share', package_name), glob('urdf/*')) + (os.path.join('share', package_name, 'launch'), glob(os.path.join('launch', '*launch.[pxy][yma]*'))), + (os.path.join('share', package_name), glob('urdf/*')), ], - modify the ``entry_points`` table so you can later run 'state_publisher' from a console @@ -244,12 +282,32 @@ Save the ``setup.py`` file with your changes. 6 Install the package ^^^^^^^^^^^^^^^^^^^^^ - .. code-block:: console - cd ~/second_ros2_ws - colcon build --symlink-install --packages-select urdf_tutorial_r2d2 - source install/setup.bash + cd second_ros2_ws + colcon build --symlink-install --packages-select urdf_tutorial_r2d2 + +Source the setup files: + +.. tabs:: + + .. group-tab:: Linux + + .. code-block:: console + + source install/setup.bash + + .. group-tab:: macOS + + .. code-block:: console + + source install/setup.bash + + .. group-tab:: Windows + + .. code-block:: console + + call install/setup.bat 7 View the results @@ -265,15 +323,15 @@ Open a new terminal, the run Rviz using .. code-block:: console - rviz2 -d ~/second_ros2_ws/install/urdf_tutorial_r2d2/share/urdf_tutorial_r2d2/r2d2.rviz + rviz2 -d second_ros2_ws/install/urdf_tutorial_r2d2/share/urdf_tutorial_r2d2/r2d2.rviz See the `User Guide `__ for details on how to use Rviz. Summary ------- -You created a JointState publisher node and coupled it with ``robot_state_publisher`` to simulate a walking robot. -The code used in these examples can be found `here `__. +You created a ``JointState`` publisher node and coupled it with ``robot_state_publisher`` to simulate a walking robot. +The code used in these examples is originally from `here `__. Credit is given to the authors of this `ROS 1 tutorial `__ diff --git a/source/Tutorials/Intermediate/URDF/Using-Xacro-to-Clean-Up-a-URDF-File.rst b/source/Tutorials/Intermediate/URDF/Using-Xacro-to-Clean-Up-a-URDF-File.rst index 59a3272ed2d..a36d89be212 100644 --- a/source/Tutorials/Intermediate/URDF/Using-Xacro-to-Clean-Up-a-URDF-File.rst +++ b/source/Tutorials/Intermediate/URDF/Using-Xacro-to-Clean-Up-a-URDF-File.rst @@ -41,9 +41,11 @@ You can also automatically generate the urdf in a launch file. This is convenient because it stays up to date and doesn’t use up hard drive space. However, it does take time to generate, so be aware that your launch file might take longer to start up. +To run xacro within your launch file, you need to put the ``Command`` substitution as a parameter to the ``robot_state_publisher``. + .. code-block:: python - path_to_urdf = get_package_share_path('pr2_description') / 'robots' / 'pr2.urdf.xacro' + path_to_urdf = get_package_share_path('turtlebot3_description') / 'urdf' / 'turtlebot3_burger.urdf' robot_state_publisher_node = launch_ros.actions.Node( package='robot_state_publisher', executable='robot_state_publisher', @@ -54,6 +56,27 @@ However, it does take time to generate, so be aware that your launch file might }] ) +An easier way to load the robot model is to use the `urdf_launch `_ package to automatically load the xacro/urdf. + +.. code-block:: python + + from launch import LaunchDescription + from launch.actions import IncludeLaunchDescription + from launch.substitutions import PathJoinSubstitution + from launch_ros.substitutions import FindPackageShare + + + def generate_launch_description(): + ld = LaunchDescription() + + ld.add_action(IncludeLaunchDescription( + PathJoinSubstitution([FindPackageShare('urdf_launch'), 'launch', 'display.launch.py']), + launch_arguments={ + 'urdf_package': 'turtlebot3_description', + 'urdf_package_path': PathJoinSubstitution(['urdf', 'turtlebot3_burger.urdf'])}.items() + )) + return ld + At the top of the URDF file, you must specify a namespace in order for the file to parse properly. For example, these are the first two lines of a valid xacro file: diff --git a/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/Cpp.rst b/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/Cpp.rst index 2af7167a065..3ada605427a 100644 --- a/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/Cpp.rst +++ b/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/Cpp.rst @@ -27,19 +27,19 @@ Actions are a form of asynchronous communication in ROS. Prerequisites ------------- -You will need the ``action_tutorials_interfaces`` package and the ``Fibonacci.action`` +You will need the ``custom_action_interfaces`` package and the ``Fibonacci.action`` interface defined in the previous tutorial, :doc:`../Creating-an-Action`. Tasks ----- -1 Creating the action_tutorials_cpp package -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +1 Creating the custom_action_cpp package +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ As we saw in the :doc:`../../Beginner-Client-Libraries/Creating-Your-First-ROS2-Package` tutorial, we need to create a new package to hold our C++ and supporting code. -1.1 Creating the action_tutorials_cpp package -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +1.1 Creating the custom_action_cpp package +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Go into the action workspace you created in the :doc:`previous tutorial <../Creating-an-Action>` (remember to source the workspace), and create a new package for the C++ action server: @@ -51,21 +51,21 @@ Go into the action workspace you created in the :doc:`previous tutorial <../Crea .. code-block:: bash cd ~/ros2_ws/src - ros2 pkg create --dependencies action_tutorials_interfaces rclcpp rclcpp_action rclcpp_components -- action_tutorials_cpp + ros2 pkg create --dependencies custom_action_interfaces rclcpp rclcpp_action rclcpp_components --license Apache-2.0 -- custom_action_cpp .. group-tab:: macOS .. code-block:: bash cd ~/ros2_ws/src - ros2 pkg create --dependencies action_tutorials_interfaces rclcpp rclcpp_action rclcpp_components -- action_tutorials_cpp + ros2 pkg create --dependencies custom_action_interfaces rclcpp rclcpp_action rclcpp_components --license Apache-2.0 -- custom_action_cpp .. group-tab:: Windows .. code-block:: bash - cd \dev\ros2_ws\src - ros2 pkg create --dependencies action_tutorials_interfaces rclcpp rclcpp_action rclcpp_components -- action_tutorials_cpp + cd \ros2_ws\src + ros2 pkg create --dependencies custom_action_interfaces rclcpp rclcpp_action rclcpp_components --license Apache-2.0 -- custom_action_cpp 1.2 Adding in visibility control ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -73,12 +73,12 @@ Go into the action workspace you created in the :doc:`previous tutorial <../Crea In order to make the package compile and work on Windows, we need to add in some "visibility control". For more details, see :ref:`Windows Symbol Visibility in the Windows Tips and Tricks document `. -Open up ``action_tutorials_cpp/include/action_tutorials_cpp/visibility_control.h``, and put the following code in: +Open up ``custom_action_cpp/include/custom_action_cpp/visibility_control.h``, and put the following code in: .. code-block:: c++ - #ifndef ACTION_TUTORIALS_CPP__VISIBILITY_CONTROL_H_ - #define ACTION_TUTORIALS_CPP__VISIBILITY_CONTROL_H_ + #ifndef CUSTOM_ACTION_CPP__VISIBILITY_CONTROL_H_ + #define CUSTOM_ACTION_CPP__VISIBILITY_CONTROL_H_ #ifdef __cplusplus extern "C" @@ -90,37 +90,37 @@ Open up ``action_tutorials_cpp/include/action_tutorials_cpp/visibility_control.h #if defined _WIN32 || defined __CYGWIN__ #ifdef __GNUC__ - #define ACTION_TUTORIALS_CPP_EXPORT __attribute__ ((dllexport)) - #define ACTION_TUTORIALS_CPP_IMPORT __attribute__ ((dllimport)) + #define CUSTOM_ACTION_CPP_EXPORT __attribute__ ((dllexport)) + #define CUSTOM_ACTION_CPP_IMPORT __attribute__ ((dllimport)) #else - #define ACTION_TUTORIALS_CPP_EXPORT __declspec(dllexport) - #define ACTION_TUTORIALS_CPP_IMPORT __declspec(dllimport) + #define CUSTOM_ACTION_CPP_EXPORT __declspec(dllexport) + #define CUSTOM_ACTION_CPP_IMPORT __declspec(dllimport) #endif - #ifdef ACTION_TUTORIALS_CPP_BUILDING_DLL - #define ACTION_TUTORIALS_CPP_PUBLIC ACTION_TUTORIALS_CPP_EXPORT + #ifdef CUSTOM_ACTION_CPP_BUILDING_DLL + #define CUSTOM_ACTION_CPP_PUBLIC CUSTOM_ACTION_CPP_EXPORT #else - #define ACTION_TUTORIALS_CPP_PUBLIC ACTION_TUTORIALS_CPP_IMPORT + #define CUSTOM_ACTION_CPP_PUBLIC CUSTOM_ACTION_CPP_IMPORT #endif - #define ACTION_TUTORIALS_CPP_PUBLIC_TYPE ACTION_TUTORIALS_CPP_PUBLIC - #define ACTION_TUTORIALS_CPP_LOCAL + #define CUSTOM_ACTION_CPP_PUBLIC_TYPE CUSTOM_ACTION_CPP_PUBLIC + #define CUSTOM_ACTION_CPP_LOCAL #else - #define ACTION_TUTORIALS_CPP_EXPORT __attribute__ ((visibility("default"))) - #define ACTION_TUTORIALS_CPP_IMPORT + #define CUSTOM_ACTION_CPP_EXPORT __attribute__ ((visibility("default"))) + #define CUSTOM_ACTION_CPP_IMPORT #if __GNUC__ >= 4 - #define ACTION_TUTORIALS_CPP_PUBLIC __attribute__ ((visibility("default"))) - #define ACTION_TUTORIALS_CPP_LOCAL __attribute__ ((visibility("hidden"))) + #define CUSTOM_ACTION_CPP_PUBLIC __attribute__ ((visibility("default"))) + #define CUSTOM_ACTION_CPP_LOCAL __attribute__ ((visibility("hidden"))) #else - #define ACTION_TUTORIALS_CPP_PUBLIC - #define ACTION_TUTORIALS_CPP_LOCAL + #define CUSTOM_ACTION_CPP_PUBLIC + #define CUSTOM_ACTION_CPP_LOCAL #endif - #define ACTION_TUTORIALS_CPP_PUBLIC_TYPE + #define CUSTOM_ACTION_CPP_PUBLIC_TYPE #endif #ifdef __cplusplus } #endif - #endif // ACTION_TUTORIALS_CPP__VISIBILITY_CONTROL_H_ + #endif // CUSTOM_ACTION_CPP__VISIBILITY_CONTROL_H_ 2 Writing an action server ^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -130,7 +130,7 @@ Let's focus on writing an action server that computes the Fibonacci sequence usi 2.1 Writing the action server code ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Open up ``action_tutorials_cpp/src/fibonacci_action_server.cpp``, and put the following code in: +Open up ``custom_action_cpp/src/fibonacci_action_server.cpp``, and put the following code in: .. literalinclude:: scripts/server.cpp :language: c++ @@ -209,7 +209,7 @@ In the previous section we put the action server code into place. To get it to compile and run, we need to do a couple of additional things. First we need to setup the CMakeLists.txt so that the action server is compiled. -Open up ``action_tutorials_cpp/CMakeLists.txt``, and add the following right after the ``find_package`` calls: +Open up ``custom_action_cpp/CMakeLists.txt``, and add the following right after the ``find_package`` calls: .. code-block:: cmake @@ -219,13 +219,13 @@ Open up ``action_tutorials_cpp/CMakeLists.txt``, and add the following right aft $ $) target_compile_definitions(action_server - PRIVATE "ACTION_TUTORIALS_CPP_BUILDING_DLL") + PRIVATE "CUSTOM_ACTION_CPP_BUILDING_DLL") ament_target_dependencies(action_server - "action_tutorials_interfaces" + "custom_action_interfaces" "rclcpp" "rclcpp_action" "rclcpp_components") - rclcpp_components_register_node(action_server PLUGIN "action_tutorials_cpp::FibonacciActionServer" EXECUTABLE fibonacci_action_server) + rclcpp_components_register_node(action_server PLUGIN "custom_action_cpp::FibonacciActionServer" EXECUTABLE fibonacci_action_server) install(TARGETS action_server ARCHIVE DESTINATION lib @@ -238,7 +238,7 @@ And now we can compile the package. Go to the top-level of the ``ros2_ws``, and colcon build -This should compile the entire workspace, including the ``fibonacci_action_server`` in the ``action_tutorials_cpp`` package. +This should compile the entire workspace, including the ``fibonacci_action_server`` in the ``custom_action_cpp`` package. 2.3 Running the action server ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -248,7 +248,7 @@ Source the workspace we just built (``ros2_ws``), and try to run the action serv .. code-block:: bash - ros2 run action_tutorials_cpp fibonacci_action_server + ros2 run custom_action_cpp fibonacci_action_server 3 Writing an action client ^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -256,7 +256,7 @@ Source the workspace we just built (``ros2_ws``), and try to run the action serv 3.1 Writing the action client code ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Open up ``action_tutorials_cpp/src/fibonacci_action_client.cpp``, and put the following code in: +Open up ``custom_action_cpp/src/fibonacci_action_client.cpp``, and put the following code in: .. literalinclude:: scripts/client.cpp :language: c++ @@ -337,7 +337,7 @@ In the previous section we put the action client code into place. To get it to compile and run, we need to do a couple of additional things. First we need to setup the CMakeLists.txt so that the action client is compiled. -Open up ``action_tutorials_cpp/CMakeLists.txt``, and add the following right after the ``find_package`` calls: +Open up ``custom_action_cpp/CMakeLists.txt``, and add the following right after the ``find_package`` calls: .. code-block:: cmake @@ -347,13 +347,13 @@ Open up ``action_tutorials_cpp/CMakeLists.txt``, and add the following right aft $ $) target_compile_definitions(action_client - PRIVATE "ACTION_TUTORIALS_CPP_BUILDING_DLL") + PRIVATE "CUSTOM_ACTION_CPP_BUILDING_DLL") ament_target_dependencies(action_client - "action_tutorials_interfaces" + "custom_action_interfaces" "rclcpp" "rclcpp_action" "rclcpp_components") - rclcpp_components_register_node(action_client PLUGIN "action_tutorials_cpp::FibonacciActionClient" EXECUTABLE fibonacci_action_client) + rclcpp_components_register_node(action_client PLUGIN "custom_action_cpp::FibonacciActionClient" EXECUTABLE fibonacci_action_client) install(TARGETS action_client ARCHIVE DESTINATION lib @@ -366,7 +366,7 @@ And now we can compile the package. Go to the top-level of the ``ros2_ws``, and colcon build -This should compile the entire workspace, including the ``fibonacci_action_client`` in the ``action_tutorials_cpp`` package. +This should compile the entire workspace, including the ``fibonacci_action_client`` in the ``custom_action_cpp`` package. 3.3 Running the action client ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -377,7 +377,7 @@ Now source the workspace we just built (``ros2_ws``), and try to run the action .. code-block:: bash - ros2 run action_tutorials_cpp fibonacci_action_client + ros2 run custom_action_cpp fibonacci_action_client You should see logged messages for the goal being accepted, feedback being printed, and the final result. diff --git a/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/Py.rst b/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/Py.rst index e6b19b721f8..96df40ddcc4 100644 --- a/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/Py.rst +++ b/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/Py.rst @@ -27,7 +27,7 @@ Actions are a form of asynchronous communication in ROS 2. Prerequisites ------------- -You will need the ``action_tutorials_interfaces`` package and the ``Fibonacci.action`` +You will need the ``custom_action_interfaces`` package and the ``Fibonacci.action`` interface defined in the previous tutorial, :doc:`../Creating-an-Action`. Tasks @@ -105,7 +105,7 @@ In another terminal, we can use the command line interface to send a goal: .. code-block:: bash - ros2 action send_goal fibonacci action_tutorials_interfaces/action/Fibonacci "{order: 5}" + ros2 action send_goal fibonacci custom_action_interfaces/action/Fibonacci "{order: 5}" In the terminal that is running the action server, you should see a logged message "Executing goal..." followed by a warning that the goal state was not set. By default, if the goal handle state is not set in the execute callback it assumes the *aborted* state. @@ -148,7 +148,7 @@ After restarting the action server, we can confirm that feedback is now publishe .. code-block:: bash - ros2 action send_goal --feedback fibonacci action_tutorials_interfaces/action/Fibonacci "{order: 5}" + ros2 action send_goal --feedback fibonacci custom_action_interfaces/action/Fibonacci "{order: 5}" 2 Writing an action client ^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/client.cpp b/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/client.cpp index 89f9a0a069d..4ec691ba82c 100644 --- a/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/client.cpp +++ b/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/client.cpp @@ -4,18 +4,18 @@ #include #include -#include "action_tutorials_interfaces/action/fibonacci.hpp" +#include "custom_action_interfaces/action/fibonacci.hpp" #include "rclcpp/rclcpp.hpp" #include "rclcpp_action/rclcpp_action.hpp" #include "rclcpp_components/register_node_macro.hpp" -namespace action_tutorials_cpp +namespace custom_action_cpp { class FibonacciActionClient : public rclcpp::Node { public: - using Fibonacci = action_tutorials_interfaces::action::Fibonacci; + using Fibonacci = custom_action_interfaces::action::Fibonacci; using GoalHandleFibonacci = rclcpp_action::ClientGoalHandle; explicit FibonacciActionClient(const rclcpp::NodeOptions & options) @@ -106,6 +106,6 @@ class FibonacciActionClient : public rclcpp::Node } }; // class FibonacciActionClient -} // namespace action_tutorials_cpp +} // namespace custom_action_cpp -RCLCPP_COMPONENTS_REGISTER_NODE(action_tutorials_cpp::FibonacciActionClient) +RCLCPP_COMPONENTS_REGISTER_NODE(custom_action_cpp::FibonacciActionClient) diff --git a/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/client_0.py b/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/client_0.py index 7fb602d2e2a..da1e6a50c8a 100644 --- a/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/client_0.py +++ b/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/client_0.py @@ -2,7 +2,7 @@ from rclpy.action import ActionClient from rclpy.node import Node -from action_tutorials_interfaces.action import Fibonacci +from custom_action_interfaces.action import Fibonacci class FibonacciActionClient(Node): diff --git a/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/client_1.py b/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/client_1.py index ebebb174771..3dd6188dae1 100644 --- a/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/client_1.py +++ b/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/client_1.py @@ -2,7 +2,7 @@ from rclpy.action import ActionClient from rclpy.node import Node -from action_tutorials_interfaces.action import Fibonacci +from custom_action_interfaces.action import Fibonacci class FibonacciActionClient(Node): diff --git a/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/client_2.py b/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/client_2.py index a7f95b40ddd..23a6dc37845 100644 --- a/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/client_2.py +++ b/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/client_2.py @@ -2,7 +2,7 @@ from rclpy.action import ActionClient from rclpy.node import Node -from action_tutorials_interfaces.action import Fibonacci +from custom_action_interfaces.action import Fibonacci class FibonacciActionClient(Node): diff --git a/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/server.cpp b/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/server.cpp index 599532da69f..be8dcb8aa81 100644 --- a/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/server.cpp +++ b/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/server.cpp @@ -2,22 +2,22 @@ #include #include -#include "action_tutorials_interfaces/action/fibonacci.hpp" +#include "custom_action_interfaces/action/fibonacci.hpp" #include "rclcpp/rclcpp.hpp" #include "rclcpp_action/rclcpp_action.hpp" #include "rclcpp_components/register_node_macro.hpp" -#include "action_tutorials_cpp/visibility_control.h" +#include "custom_action_cpp/visibility_control.h" -namespace action_tutorials_cpp +namespace custom_action_cpp { class FibonacciActionServer : public rclcpp::Node { public: - using Fibonacci = action_tutorials_interfaces::action::Fibonacci; + using Fibonacci = custom_action_interfaces::action::Fibonacci; using GoalHandleFibonacci = rclcpp_action::ServerGoalHandle; - ACTION_TUTORIALS_CPP_PUBLIC + CUSTOM_ACTION_CPP_PUBLIC explicit FibonacciActionServer(const rclcpp::NodeOptions & options = rclcpp::NodeOptions()) : Node("fibonacci_action_server", options) { @@ -95,6 +95,6 @@ class FibonacciActionServer : public rclcpp::Node } }; // class FibonacciActionServer -} // namespace action_tutorials_cpp +} // namespace custom_action_cpp -RCLCPP_COMPONENTS_REGISTER_NODE(action_tutorials_cpp::FibonacciActionServer) +RCLCPP_COMPONENTS_REGISTER_NODE(custom_action_cpp::FibonacciActionServer) diff --git a/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/server_0.py b/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/server_0.py index 61a3045e6c9..c8129d4b6bf 100644 --- a/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/server_0.py +++ b/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/server_0.py @@ -2,7 +2,7 @@ from rclpy.action import ActionServer from rclpy.node import Node -from action_tutorials_interfaces.action import Fibonacci +from custom_action_interfaces.action import Fibonacci class FibonacciActionServer(Node): diff --git a/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/server_1.py b/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/server_1.py index 385d7a718d6..f08dc5c8aaa 100644 --- a/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/server_1.py +++ b/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/server_1.py @@ -2,7 +2,7 @@ from rclpy.action import ActionServer from rclpy.node import Node -from action_tutorials_interfaces.action import Fibonacci +from custom_action_interfaces.action import Fibonacci class FibonacciActionServer(Node): diff --git a/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/server_2.py b/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/server_2.py index 2888452c78e..53031e430f6 100644 --- a/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/server_2.py +++ b/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/server_2.py @@ -2,7 +2,7 @@ from rclpy.action import ActionServer from rclpy.node import Node -from action_tutorials_interfaces.action import Fibonacci +from custom_action_interfaces.action import Fibonacci class FibonacciActionServer(Node): diff --git a/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/server_3.py b/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/server_3.py index 32e0ddb787b..fb2ce45a92c 100644 --- a/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/server_3.py +++ b/source/Tutorials/Intermediate/Writing-an-Action-Server-Client/scripts/server_3.py @@ -4,7 +4,7 @@ from rclpy.action import ActionServer from rclpy.node import Node -from action_tutorials_interfaces.action import Fibonacci +from custom_action_interfaces.action import Fibonacci class FibonacciActionServer(Node): diff --git a/source/Tutorials/Miscellaneous/Building-ROS2-Package-with-eclipse-2021-06.rst b/source/Tutorials/Miscellaneous/Building-ROS2-Package-with-eclipse-2021-06.rst index cd854423770..7f5f559759a 100644 --- a/source/Tutorials/Miscellaneous/Building-ROS2-Package-with-eclipse-2021-06.rst +++ b/source/Tutorials/Miscellaneous/Building-ROS2-Package-with-eclipse-2021-06.rst @@ -48,6 +48,7 @@ We now import our ROS 2 project. The code is still in the old place. :target: images/eclipse_import_filesystem.png :alt: eclipse_import_filesystem +Click the Advanced in the Options and check the **Create links in worksapce**. .. image:: images/eclipse_import_select_my_package.png :target: images/eclipse_import_select_my_package.png @@ -66,6 +67,8 @@ We see in the source code that the C++ includes got resolved but not the ROS 2 o :target: images/eclipse_c++_path_and_symbols.png :alt: eclipse_c++_path_and_symbols +Add include paths of needed packages. +(e.g. **/opt/ros/iron/include/rclcpp**, **/opt/ros/iron/include/std_msgs**, etc.) .. image:: images/eclipse_c++_add_directory_path.png :target: images/eclipse_c++_add_directory_path.png diff --git a/source/Tutorials/Miscellaneous/Deploying-ROS-2-on-IBM-Cloud.rst b/source/Tutorials/Miscellaneous/Deploying-ROS-2-on-IBM-Cloud.rst index c80b8f875fc..708cf5d0661 100644 --- a/source/Tutorials/Miscellaneous/Deploying-ROS-2-on-IBM-Cloud.rst +++ b/source/Tutorials/Miscellaneous/Deploying-ROS-2-on-IBM-Cloud.rst @@ -14,23 +14,23 @@ Deploying on IBM Cloud Kubernetes [community-contributed] About ----- -This article describes how to get ROS2 running on IBM Cloud using Docker files. It first gives a brief overview of docker images and how they work locally and then explores IBM Cloud and how the user can deploy their containers on it. -Afterwards, a short description of how the user can use their own custom packages for ROS2 from github on IBM Cloud is provided. +This article describes how to get ROS 2 running on IBM Cloud using Docker files. It first gives a brief overview of docker images and how they work locally and then explores IBM Cloud and how the user can deploy their containers on it. +Afterwards, a short description of how the user can use their own custom packages for ROS 2 from github on IBM Cloud is provided. A walkthrough of how to create a cluster and utilize Kubernetes on IBM Cloud is provided and finally the Docker image is deployed on the cluster. Originally published `here `__ and `here `__. -ROS2 on IBM Cloud ------------------ +ROS 2 on IBM Cloud +------------------ -In this tutorial, we show how you can easily integrate and run ROS2 on +In this tutorial, we show how you can easily integrate and run ROS 2 on IBM Cloud with your custom packages. -ROS2 is the new generation of ROS which gives more control over +ROS 2 is the new generation of ROS which gives more control over multi-robot formations. With the advancements of cloud computing, cloud robotics are becoming more important in today's age. In this tutorial, -we will go through a short introduction on running ROS2 on IBM Cloud. By +we will go through a short introduction on running ROS 2 on IBM Cloud. By the end of the tutorial, you will be able to create your own packages in -ROS2 and deploy them to the cloud using docker files. +ROS 2 and deploy them to the cloud using docker files. The following instructions assume you're using Linux and have been tested with Ubuntu 18.04 (Bionic Beaver). @@ -91,17 +91,17 @@ You should obtain the following output: For more examples and ideas, visit: https://docs.docker.com/get-started/ -b) ROS2 Image -^^^^^^^^^^^^^ +b) ROS 2 Image +^^^^^^^^^^^^^^ ROS `announced `__ image containers for several ROS distributions in January 2019. More -detailed instructions on the use of ROS2 docker images can be found +detailed instructions on the use of ROS 2 docker images can be found `here `__. Let's skip through that and get to real-deal right away; creating a -local ROS2 docker. We'll create our own Dockerfile (instead of using a +local ROS 2 docker. We'll create our own Dockerfile (instead of using a ready Image) since we'll need this method for deployment on IBM Cloud. First, we create a new directory which will hold our Dockerfile and any other files we need later on and navigate to it. Using your favorite @@ -148,7 +148,7 @@ in action in just a few, but they act very similar to the publisher-subscriber example found in the `ROS wiki `__ -Now, we are ready to build the docker image to run ROS2 in it (yes, it +Now, we are ready to build the docker image to run ROS 2 in it (yes, it is THAT easy!). **Note**: if you have errors due to insufficient privileges or @@ -273,15 +273,15 @@ explained previously. You should now see your docker file running and providing similar output to that you saw when you ran it locally on your machine. -Step 3: Using Custom ROS2 Packages ------------------------------------- +Step 3: Using Custom ROS 2 Packages +----------------------------------- So now we have the full pipeline working, from creating the Dockerfile, all the way to deploying it and seeing it work on IBM Cloud. But, what if we want to use a custom set of packages we (or someone else) created? Well that all has to do with how you set-up your Dockerfile. Lets use -the example provided by ROS2 `here `__. +the example provided by ROS 2 `here `__. Create a new directory with a new Dockerfile (or overwrite the existing one) and add the following in it (or download the file `here `__) @@ -436,7 +436,7 @@ image: You should see, again, the same output. However, this time we did it through custom packages from github, which allows us to utilize our -personally created packages for ROS2 on IBM Cloud. +personally created packages for ROS 2 on IBM Cloud. Extra: Deleting Docker Images ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -589,7 +589,7 @@ parameters of your cluster as well as its CPU and Memory Usage. 4. On the top right corner, click on *Exec into pod* Now you are inside your docker image! You can source your workspace (if -needed) and run ROS2! For example: +needed) and run ROS 2! For example: .. code-block:: bash @@ -599,4 +599,4 @@ needed) and run ROS2! For example: Final Remarks --------------- -At this point, you are capable of creating your own docker image using ROS2 packages on github. It is also possible, with little changes to utilize local ROS2 packages as well. This could be the topic of another article. However, you are encouraged to check out the following `Dockerfile `__ which uses a local copy of the demos repository. Similarly, you can use your own local package. +At this point, you are capable of creating your own docker image using ROS 2 packages on github. It is also possible, with little changes to utilize local ROS 2 packages as well. This could be the topic of another article. However, you are encouraged to check out the following `Dockerfile `__ which uses a local copy of the demos repository. Similarly, you can use your own local package. diff --git a/source/Tutorials/Miscellaneous/images/eclipse_c++_add_directory_path.png b/source/Tutorials/Miscellaneous/images/eclipse_c++_add_directory_path.png index 1f99a12e829..3552280b5a8 100644 Binary files a/source/Tutorials/Miscellaneous/images/eclipse_c++_add_directory_path.png and b/source/Tutorials/Miscellaneous/images/eclipse_c++_add_directory_path.png differ diff --git a/source/Tutorials/Miscellaneous/images/eclipse_c++_build_project_with_colcon.png b/source/Tutorials/Miscellaneous/images/eclipse_c++_build_project_with_colcon.png index f3506d086d5..c45103bace5 100644 Binary files a/source/Tutorials/Miscellaneous/images/eclipse_c++_build_project_with_colcon.png and b/source/Tutorials/Miscellaneous/images/eclipse_c++_build_project_with_colcon.png differ diff --git a/source/Tutorials/Miscellaneous/images/eclipse_c++_builder_env.png b/source/Tutorials/Miscellaneous/images/eclipse_c++_builder_env.png index 4d62618cdbb..9e7d023cddb 100644 Binary files a/source/Tutorials/Miscellaneous/images/eclipse_c++_builder_env.png and b/source/Tutorials/Miscellaneous/images/eclipse_c++_builder_env.png differ diff --git a/source/Tutorials/Miscellaneous/images/eclipse_c++_builder_main.png b/source/Tutorials/Miscellaneous/images/eclipse_c++_builder_main.png index 27db386dd27..3a4aa549f47 100644 Binary files a/source/Tutorials/Miscellaneous/images/eclipse_c++_builder_main.png and b/source/Tutorials/Miscellaneous/images/eclipse_c++_builder_main.png differ diff --git a/source/Tutorials/Miscellaneous/images/eclipse_c++_choose_config_type.png b/source/Tutorials/Miscellaneous/images/eclipse_c++_choose_config_type.png deleted file mode 100644 index 6f174921bbf..00000000000 Binary files a/source/Tutorials/Miscellaneous/images/eclipse_c++_choose_config_type.png and /dev/null differ diff --git a/source/Tutorials/Miscellaneous/images/eclipse_c++_indexer_ok.png b/source/Tutorials/Miscellaneous/images/eclipse_c++_indexer_ok.png index 0fe400b528a..c2b436f3392 100644 Binary files a/source/Tutorials/Miscellaneous/images/eclipse_c++_indexer_ok.png and b/source/Tutorials/Miscellaneous/images/eclipse_c++_indexer_ok.png differ diff --git a/source/Tutorials/Miscellaneous/images/eclipse_c++_path_and_symbols.png b/source/Tutorials/Miscellaneous/images/eclipse_c++_path_and_symbols.png index 9efe53aa805..e5c9afeac30 100644 Binary files a/source/Tutorials/Miscellaneous/images/eclipse_c++_path_and_symbols.png and b/source/Tutorials/Miscellaneous/images/eclipse_c++_path_and_symbols.png differ diff --git a/source/Tutorials/Miscellaneous/images/eclipse_c++_project_includes.png b/source/Tutorials/Miscellaneous/images/eclipse_c++_project_includes.png index d648e94e175..a80aec45ce6 100644 Binary files a/source/Tutorials/Miscellaneous/images/eclipse_c++_project_includes.png and b/source/Tutorials/Miscellaneous/images/eclipse_c++_project_includes.png differ diff --git a/source/Tutorials/Miscellaneous/images/eclipse_c++_project_select_type.png b/source/Tutorials/Miscellaneous/images/eclipse_c++_project_select_type.png index 2b9a2c445aa..eb16c6895ef 100644 Binary files a/source/Tutorials/Miscellaneous/images/eclipse_c++_project_select_type.png and b/source/Tutorials/Miscellaneous/images/eclipse_c++_project_select_type.png differ diff --git a/source/Tutorials/Miscellaneous/images/eclipse_c++_properties_builders.png b/source/Tutorials/Miscellaneous/images/eclipse_c++_properties_builders.png index efca4adc521..2f167e6a5e6 100644 Binary files a/source/Tutorials/Miscellaneous/images/eclipse_c++_properties_builders.png and b/source/Tutorials/Miscellaneous/images/eclipse_c++_properties_builders.png differ diff --git a/source/Tutorials/Miscellaneous/images/eclipse_c++_properties_builders_with_colcon.png b/source/Tutorials/Miscellaneous/images/eclipse_c++_properties_builders_with_colcon.png index a101d5bc5d2..bc64b1dace2 100644 Binary files a/source/Tutorials/Miscellaneous/images/eclipse_c++_properties_builders_with_colcon.png and b/source/Tutorials/Miscellaneous/images/eclipse_c++_properties_builders_with_colcon.png differ diff --git a/source/Tutorials/Miscellaneous/images/eclipse_c++_wo_ros_includes.png b/source/Tutorials/Miscellaneous/images/eclipse_c++_wo_ros_includes.png index b8a280f1e58..8c910b897b3 100644 Binary files a/source/Tutorials/Miscellaneous/images/eclipse_c++_wo_ros_includes.png and b/source/Tutorials/Miscellaneous/images/eclipse_c++_wo_ros_includes.png differ diff --git a/source/Tutorials/Miscellaneous/images/eclipse_create_c++_project.png b/source/Tutorials/Miscellaneous/images/eclipse_create_c++_project.png index 6ec1cf1e063..ddd5446e6ab 100644 Binary files a/source/Tutorials/Miscellaneous/images/eclipse_create_c++_project.png and b/source/Tutorials/Miscellaneous/images/eclipse_create_c++_project.png differ diff --git a/source/Tutorials/Miscellaneous/images/eclipse_create_new_project.png b/source/Tutorials/Miscellaneous/images/eclipse_create_new_project.png deleted file mode 100644 index f138bef269a..00000000000 Binary files a/source/Tutorials/Miscellaneous/images/eclipse_create_new_project.png and /dev/null differ diff --git a/source/Tutorials/Miscellaneous/images/eclipse_create_project_resource.png b/source/Tutorials/Miscellaneous/images/eclipse_create_project_resource.png deleted file mode 100644 index d6a884d0bb0..00000000000 Binary files a/source/Tutorials/Miscellaneous/images/eclipse_create_project_resource.png and /dev/null differ diff --git a/source/Tutorials/Miscellaneous/images/eclipse_import_filesystem.png b/source/Tutorials/Miscellaneous/images/eclipse_import_filesystem.png index b45c5b71565..3cf802a45c9 100644 Binary files a/source/Tutorials/Miscellaneous/images/eclipse_import_filesystem.png and b/source/Tutorials/Miscellaneous/images/eclipse_import_filesystem.png differ diff --git a/source/Tutorials/Miscellaneous/images/eclipse_import_over.png b/source/Tutorials/Miscellaneous/images/eclipse_import_over.png deleted file mode 100644 index b631c034897..00000000000 Binary files a/source/Tutorials/Miscellaneous/images/eclipse_import_over.png and /dev/null differ diff --git a/source/Tutorials/Miscellaneous/images/eclipse_import_project.png b/source/Tutorials/Miscellaneous/images/eclipse_import_project.png index bc381654593..d9f89be9d56 100644 Binary files a/source/Tutorials/Miscellaneous/images/eclipse_import_project.png and b/source/Tutorials/Miscellaneous/images/eclipse_import_project.png differ diff --git a/source/Tutorials/Miscellaneous/images/eclipse_import_select_my_package.png b/source/Tutorials/Miscellaneous/images/eclipse_import_select_my_package.png index 9bcf9d847ab..42fce982ab8 100644 Binary files a/source/Tutorials/Miscellaneous/images/eclipse_import_select_my_package.png and b/source/Tutorials/Miscellaneous/images/eclipse_import_select_my_package.png differ diff --git a/source/Tutorials/Miscellaneous/images/eclipse_work_dir.png b/source/Tutorials/Miscellaneous/images/eclipse_work_dir.png index d48567e6019..c5a3fcf623e 100644 Binary files a/source/Tutorials/Miscellaneous/images/eclipse_work_dir.png and b/source/Tutorials/Miscellaneous/images/eclipse_work_dir.png differ diff --git a/source/_templates/page.html b/source/_templates/page.html index f9891bc38c7..9236eb85d68 100644 --- a/source/_templates/page.html +++ b/source/_templates/page.html @@ -11,7 +11,7 @@ | Service Status | - Q&A answers.ros.org + Q&A Robotics Stack Exchange diff --git a/source/index.rst b/source/index.rst index a9dc6e23cd1..c2bec4d1cc1 100644 --- a/source/index.rst +++ b/source/index.rst @@ -94,18 +94,18 @@ If you're interested in the advancement of the ROS 2 project: * :doc:`Marketing ` - Downloadable marketing materials + - `Information about the ROS trademark `__ -Other ROS resources -------------------- +ROS community resources +----------------------- -* `ROS Answers `__ (ROS 1, ROS 2) +If you need help, have an idea, or would like to contribute to the project, please visit our ROS community resources. - - Q&A community website, similar to `Stack Exchange `_ - - See :ref:`Contact Page ` for more information +* `Official ROS Discord Channel for discussion and support `__ (ROS 1, ROS 2) -* `ROS Enhancement Proposals (REPs) `__ (ROS 1, ROS 2) +* `Robotics Stack Exchange - community Q&A website `__ (ROS 1, ROS 2) - - Proposals for new designs and conventions + - See :ref:`Contact Page ` for more information * `ROS Discourse `__ (ROS 1, ROS 2) @@ -118,12 +118,18 @@ Other ROS resources - See which ROS distributions a package supports - Link to a package's repository, API documentation, or website - Inspect a package's license, build type, maintainers, status, and dependencies - - Get more info for a package on `ROS Answers `__ + - Get more info for a package on `Robotics Stack Exchange `__ + +* `ROS resource status page `__ (ROS 1, ROS 2) + + - Check the current status of ROS resources like Discourse or the ROS build farm. + +General ROS project resources +----------------------------- -* `ROS Prerelease `__ (ROS 1) +* `ROS Enhancement Proposals (REPs) `__ (ROS 1, ROS 2) - - Generates commands to emulate the `ROS Buildfarm `_ on your local machine - - Currently only shows ROS 1 distributions + - Proposals for new designs and conventions * `ROS Robots `__ (ROS 1, ROS 2) @@ -139,8 +145,46 @@ Other ROS resources - ROS 1 and ROS 2 product landing page, with high-level description of ROS and links to other ROS sites +Events +------ + +* `Official ROS Vimeo Channel `__ (ROS 1, ROS 2) + + - Videos of ROSCon Talks, community and working group meetings, and project demos. + +* `ROSCon website `__ (ROS 1, ROS 2) + + - ROSCon is our annual ROS developer conference. + - This page also lists regional ROS events like ROSConJP and ROSConFr. + +* `Open Source Robotics Foundation official events calendar `__ + + - This calendar is for official OSRF Events and working group meetings. + - `Submit your events here `__. + +* `Open Source Robotics Foundation community calendar `__ + + - This calendar is for unofficial ROS community events. + - `Submit your events here `__ . + +Miscellaneous +------------- +* `Purchase official ROS swag `__ + +* ROS on social media + + - `@OpenRoboticsOrg `__ and `@ROSOrg `__ on Twitter + - `Open Robotics on LinkedIn `__ + +* Visit the `Open Source Robotics Foundation website `__ + + - Tax deductible charitable donations to the Open Source Robotics Foundation can be sent via `DonorBox. `__ + Deprecated -^^^^^^^^^^ +---------- +* `ROS Answers `__ (ROS 1, ROS 2) + + - ROS Answers was the ROS community Q&A website, until August, 2023. ROS Answers is currently available as a read-only resource. * `ROS 2 Docs `_