# embeddings_queue

created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b00e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Dev Container Guide\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Dev Container Guide\uf0c1\n\nURL: https://docs.nav2.org/development_guides/devcontainer_docs/devcontainer_guide.html#creating\n\ndev\n\ncontainers\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Creating Dev Containers\uf0c1 Before creating a dev container, you\u2019ll want to choose the exact configuration to use. By default the.devcontainer/devcontainer.jsonconfiguration is selected, however you can also choose any otherdevcontainer.jsonfile in the.devcontainer/directory, where such configurations can be nested to provide greater customization: either by targeting different stages within different Dockerfiles, overriding any merged metadata or default properties, or inclusion of additional extensions and alternate commands."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b022-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Dev Container Guide\uf0c1.txt", "start_index": 798, "chroma:document": "## Building the image\uf0c1 When first creating Dev Containers, any supporting tool or service used will download and build the docker images needed to run the container. This includes pulling any parent images the project\u2019s Dockerfile buildsFROM, as well as any tags or layers declared viacacheFrom, as specified in the chosendevcontainer.jsonconfig file. This can take a while, but only needs to be done once, or at least not again until such layers are updated and pushed to the image registry. Specifically, for this project, the defaultdevcontainer.jsonfile targets thedeverstage within the project\u2019s root Dockerfile, the stage that also includes handy tools for developing the project, such as bash auto completion. This stage is in turn builtFROMthebuilderstage, the stage that only includes the dependencies needed for building the project, as reused by the project\u2019s CI. For example, thedeverstage modifies/etc/bash.bashrcto automatically sourceinstall/setup.bashfrom the underlay workspace, ensuring all VS Code"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b036-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Dev Container Guide\uf0c1.txt", "start_index": 1770, "chroma:document": "the underlay workspace, ensuring all VS Code extensions are loaded with the correct environment, while avoiding any race conditions during installation and startup. To speed up the initial build, images layers from thisbuilderstage are cached by pulling the same image tag used by the project\u2019s CI, hosted from the image registry. This ensures your local dev container replicates our CI environment as close as possible, while benefiting from any cached work preemptively performed by the CI. Yet, this still allows you to customize the project\u2019s Dockerfile and rebuild the container, without needing to update CI images to reflect your local modifications. Once the base image from the target stage is built, the supporting tool or service may then add additional layers to the image, such as installing additionalfeaturesor customizations. For VS Code, this also includes some fancy file caching for any extensions to install later. Once this custom image is built, it is then used to start the dev container."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b04a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Dev Container Guide\uf0c1.txt", "start_index": 2783, "chroma:document": "## Starting the container\uf0c1 When first creating Dev Containers, any supporting tool or service will invoke a sequence of commands specified in the chosendevcontainer.jsonconfig file. This can take a while, but only needs to be done once, or at least not again until the container is rebuilt, triggered by either updating the Dockerfile, base image, or.devcontainer/config. Specifically, for this project, the defaultdevcontainer.jsonconfig executes theonCreateCommandto initially colcon cache, clean, and build the overlay workspace for the project. This ensures the workspace is precompiled and ready to use, while also ensuring any changes to the project\u2019s source code are reflected in the container. This is useful for: While the colcon workspace is being built, VS Code will simultaneously install any specified extensions and settings. Next theupdateContentCommandis executed, which reruns whenever the container is started or restarted. Specifically, for this project, this command re-cleans and re-builds the same"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b05e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Dev Container Guide\uf0c1.txt", "start_index": 3739, "chroma:document": "for this project, this command re-cleans and re-builds the same colcon workspace as before, but only for invalidated packages detected by colcon cache using the lockfiles initialized during theonCreateCommand. This caching behavior also replicates the project\u2019s CI workflow. This is useful for: Finally, thepostCreateCommandis executed, which also reruns whenever the container is started or restarted. Specifically, for this project, this command makes a last few tweaks to the user\u2019s environment to improve the development experience. To speed up subsequent startups, volumes that are mounted to the container store a persistent ccache and colcon workspace, while the environment is set to enableccacheviacolcon mixins. These volumes are labeled using thedevcontainerIdvariable, which uniquely identify the dev container on a Docker host, allowing us to refer to a common identifier that is unique to the dev container, while remaining stable across rebuilds. This is useful for: Additionally, the container can be"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b07c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Dev Container Guide\uf0c1.txt", "start_index": 4701, "chroma:document": "This is useful for: Additionally, the container can be grantedprivilegedand non-defaultLinux capabilities, connected using thehostnetwork mode andIPCandPIDspaces, with a relaxedsecurity configurationand seccomp confinement for native debugging and external connectivity. This is useful for:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b090-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Dev Container Guide\uf0c1.txt", "start_index": 4993, "chroma:document": "## Using Dev Containers\uf0c1 Once the dev container has been created and setup completed, VS Code will open a new workspace directly from the project\u2019s root directory, which itself is mounted within the source directory in the overlay colcon workspace. From here you can build, test, and debug the project as you normally would, with the added benefit of having the project\u2019s dependencies, intellisense, linters, and other extensions pre-configured and ready to use. Simply open a new terminal (Crtl+Shift+`), cd to the root of the colcon workspace, and run the usual colcon commands.\n\n## Terminals\uf0c1 If you prefer using an alternate terminal emulator, rather than the built-in VS Code terminal, you can open a separate shell session by simply using the Dev Container CLI or directly using the Docker CLI via theexecsubcommands."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b0a4-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Dev Container Guide\uf0c1.txt", "start_index": 5818, "chroma:document": "## Lifecycle\uf0c1 While using the dev container, try and keep in mind the lifecycle of the container itself. Specifically, containers are ephemeral, meaning they are normally destroyed and recreated whenever the dev environment is rebuilt or updated. Subsequently, a best practice is to avoid storing any persistent data within the container, and instead utilize the project\u2019s source directory, or a separate mounted volume. When altering the development environment inside the container, try to remember to codify your changes into the Dockerfile, or thedevcontainer.jsonconfig file, so that they can be easily reproduced and shared with others."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b0b8-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Dev Container Guide\uf0c1.txt", "start_index": 6462, "chroma:document": "## Rebuilding\uf0c1 From time to time, you may need to rebuild the dev container, either because the base image, or.devcontainer/config was updated, or simply out of wanting a new fresh development environment. To do so, simply open the Command Palette (Ctrl+Shift+P) and select theRemote-Containers:RebuildContainercommand. For example, you may need to rebuild the dev container when: When necessary, you can also rebuild the container from scratch, e.i. without caching from docker, by selecting theRemote-Containers:RebuildContainerWithoutCachecommand. This instead omits the--cache-fromflag from thedockerbuildxcommand, while also adding the--no-cacheand--pullflags to prevent caching from any existing image layers, using only the latest images from a container registry. Rebuilding without caching may be necessary when: Specifically, for this project, volumes remain unaffected by this rebuilding process: i.e. those used to mount the ccache directory or colcon workspace. While volume management is left to the user\u2019s"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b0cc-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Dev Container Guide\uf0c1.txt", "start_index": 7419, "chroma:document": "colcon workspace. While volume management is left to the user\u2019s discretion, other projects may of course handle this differently, so be sure to check the./devcontainerconfiguration to inspect how various container resources may be managed."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b0e0-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Dev Container Guide\uf0c1.txt", "start_index": 7660, "chroma:document": "Code Examples:\n\nLanguage: unknown File: loginInteractiveShell ``` find /tmp -type f -path \"*/devcontainers-*/env-loginInteractiveShell.json\" -exec \\ jq -r 'to_entries | .[] | \"\\(.key)=\\(.value | @sh)\"' {} \\; > .env\n\nsource\n\n.env\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b0fe-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/SmootherSelector\uf0c1.txt", "start_index": 0, "chroma:document": "Title: SmootherSelector\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/actions/SmootherSelector.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Ports\uf0c1\n\n## Output Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: transientlocal\n\n```\n\n<SmootherSelector\n\nselected_smoother=\n\n\"{selected_smoother}\"\n\ndefault_smoother=\n\n\"SimpleSmoother\"\n\ntopic_name=\n\n\"smoother_selector\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b112-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Transformations\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Setting Up Transformations\uf0c1\n\nURL: https://docs.nav2.org/setup_guides/transformation/setup_transforms.html#transforms\n\nin\n\nnavigation2\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b126-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Transformations\uf0c1.txt", "start_index": 261, "chroma:document": "## Transforms Introduction\uf0c1 Many ROS packages require the transform tree of a robot to be published using the TF2 ROS package. A transformation tree defines the relations between different coordinate systems, in terms of translation, rotation, and relative motion. To make this more concrete, let us apply an example of a simple robot that has a mobile base with a single laser sensor mounted on top of it. This robot has two defined coordinate frames: one corresponding to the center point of the mobile base of the robot, and one for the center point of the laser that is mounted on top of the base. We\u2019ll call the coordinate frame attached to the mobile basebase_linkand we\u2019ll call the coordinate frame attached to the laserbase_laser. Note that will be talking more about the naming and conventions of these coordinate frames in the next section. At this point, let\u2019s assume that we have some data from the laser in the form of distance measurements from the laser\u2019s center point. In other words, we have some data in"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b13a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Transformations\uf0c1.txt", "start_index": 1220, "chroma:document": "the laser\u2019s center point. In other words, we have some data in thebase_lasercoordinate frame. Now, suppose we want to take this data and use it to help the mobile base avoid obstacles in the world. To do this successfully, we need a way to transform the laser scan we\u2019ve received from thebase_laserframe to thebase_linkframe. In essence, we need to define a relationship between thebase_laserandbase_linkcoordinate frames. In defining this relationship, let us assume that the only data we have is that the laser is mounted 10cm forward and 20cm above the center point of the mobile base. This gives us a translational offset that relates thebase_linkframe to thebase_laserframe. Specifically, we know that to get data from thebase_linkframe to thebase_laserframe, we must apply a translation of (x: 0.1m, y: 0.0m, z: 0.2m), and transversely, to get data from thebase_laserframe to thebase_linkframe, we must apply the opposite translation (x: -0.1m, y: 0.0m, z: -0.20m). We could choose to manage this relationship"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b14e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Transformations\uf0c1.txt", "start_index": 2174, "chroma:document": "0.0m, z: -0.20m). We could choose to manage this relationship ourselves, meaning to store and apply the appropriate translations between the frames when necessary, but this becomes a real pain as the number of coordinate frames increases. Luckily, we don\u2019t have to do this work ourselves. Instead, we\u2019ll define the relationship betweenbase_linkandbase_laseronce using TF2 and let it manage the transformation between the two coordinate frames for us. This is especially useful when working with non-static transformations, such as a set of frames that are moving relative to each other, like a robot base frame in a map frame. To define and store the relationship between thebase_linkandbase_laserframes using TF2, we need to add them to a transform tree. Conceptually, each node in the transform tree corresponds to a coordinate frame, and each edge corresponds to the transform that needs to be applied to move from the current node to its child. TF2 uses a tree structure to guarantee that there is only a single"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b162-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Transformations\uf0c1.txt", "start_index": 3127, "chroma:document": "uses a tree structure to guarantee that there is only a single traversal that links any two coordinate frames together, and assumes that all edges in the tree are directed from parent to child nodes. To create a transform tree for our simple example, we\u2019ll create two nodes: one for thebase_linkcoordinate frame and one for thebase_lasercoordinate frame. To create the edge between them, we first need to decide which node will be the parent and which will be the child. Remember \u2014 this distinction is important because TF2 assumes that all transforms move from parent to child. Let\u2019s choose thebase_linkcoordinate frame as the parent because when other pieces/sensors are added to the robot, it will make the most sense for them to relate to thebase_laserframe by traversing through thebase_linkframe. This means that the transform associated with the edge connectingbase_linkandbase_lasershould be (x: 0.1m, y: 0.0m, z: 0.2m). With this transform tree set up, converting the laser scan received in thebase_laserframe to"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b180-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Transformations\uf0c1.txt", "start_index": 4085, "chroma:document": "up, converting the laser scan received in thebase_laserframe to thebase_linkframe is as simple as making a call to the TF2 library. Our robot can now use this information to reason about laser scans in thebase_linkframe and safely plan around obstacles in its environment."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b194-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Transformations\uf0c1.txt", "start_index": 4359, "chroma:document": "## Static Transform Publisher Demo\uf0c1 Now let\u2019s try publishing a very simple transform using the static_transform_publisher tool provided by TF2. We will be publishing a transformation from the linkbase_linkto the linkbase_laserwith a translation of (x: 0.1m, y: 0.0m, z: 0.2m). Note that we will be building the transform from the diagram earlier in this tutorial. Open up your command line and execute the following command: With this, we are now successfully publishing ourbase_linktobase_lasertransform in TF2. Let us now check if it is working properly throughtf2_echo. Open up a separate command line window and execute the following: You should be able to observe a repeated output similar to the one below. And that\u2019s it for this short demo - we were able to successfully publish a transform frombase_linktobase_laserusing the TF2 library. Note that we do not recommend using the above demo in publishing transforms for your actual robotics projects, it is just a quick demo to see TF2 in action. For a real robot"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b1a8-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Transformations\uf0c1.txt", "start_index": 5316, "chroma:document": "it is just a quick demo to see TF2 in action. For a real robot system, we would create a URDF file which embeds this information and more about your robot for use of the robot_state_publisher rather than the static_transform_publisher. There are more suitable and practical ways to go about this which will be discussed in theSetting Up The URDFtutorial."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b1bc-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Transformations\uf0c1.txt", "start_index": 5672, "chroma:document": "## Transforms in Navigation2\uf0c1 There are two important ROS REPs which we highly suggest for you to check out. These documents detail some standards set about by the ROS community to ensure proper operation across different packages. Nav2 also adheres to these standards and conventions. To quickly summarize REP 105, this document specifies the naming conventions and semantic meanings of the different coordinate frames used in ROS. Of interest to this tutorial are thebase_link,odomandmapcoordinate frames. Thebase_linkis a coordinate frame that is attached to a fixed position on the robot, typically at its main chassis and its rotational center. Theodomcoordinate frame is a fixed frame relative to the robot\u2019s starting position and is mainly used for locally-consistent representations of distances. Lastly, themapcoordinate frame is a world fixed frame that is used for globally-consistent representations of distances. REP 103, on the other hand, discusses some standard units of measure and other related"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b1d0-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Transformations\uf0c1.txt", "start_index": 6626, "chroma:document": "discusses some standard units of measure and other related conventions to keep integration issues between different ROS packages to a minimum. The basic overview is that frames are defined using the right hand rule, with Z up and X forward, and units should be standard SI units. Now let\u2019s move on to some specifics for the Navigation2 package to function correctly. Nav2 requires the following transformations to be published in ROS: The first transformmap=>odomis usually provided by a different ROS package dealing with localization and mapping such as AMCL. This transform updates live in use so we don\u2019t set static values for this in our robot\u2019s TF tree. Further detail about how to set this up may be pretty complex, so we highly suggest to have a look at the documentation of the mapping or localization package you are using for your platform. All ROS compliant SLAM and localization packages will provide you with this transformation automatically on launch. Theodom=>base_linkis usually published by our odometry"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b1e4-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Transformations\uf0c1.txt", "start_index": 7586, "chroma:document": "launch. Theodom=>base_linkis usually published by our odometry system using sensors such as wheel encoders. This is typically computed via sensor fusion of odometry sensors (IMU, wheel encoders, VIO, etc) using therobot_localizationpackage. All other statically defined transforms (e.g.base_link=>base_laser,base_link=>wheels,wheels=>IMU, etc) is what we will be talking about for the rest of this guide. This transformation tree is used by Nav2 to properly relate the information from sensors or other frame of interest to the rest of the robot. The transformation between these two coordinate frames is usually provided to Nav2 through the Robot State Publisher and the Universal Robot Descriptor File (URDF). In cases where there are more sensor coordinate frames on your platform, then a transform tree frombase_linkto each sensor coordinate frame needs to be published."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b202-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Transformations\uf0c1.txt", "start_index": 8462, "chroma:document": "## Conclusion\uf0c1 In this tutorial, we have discussed about the concept of transforms and how they are used in Nav2. In the last section, we have also explored using the static_transform_publisher of TF2 to publish our transforms. You may use this to set up your transforms for Nav2, but this is generally not the best way to do it. In most robotics projects, we make use of the Robot State Publisher since it is much easier to use and scales well as our robot gets more complex. We will be talking about the Robot State Publisher, URDF, and how to set it up in the next tutorial onSetting Up The URDF. Lastly, we also discussed the three published transform requirements of Nav2 and the necessary REPs to keep in mind when setting them up.\n\nCode Examples:\n\nLanguage: unknown\n\nFile: base_laser\n\n```\n\nros2\n\nrun\n\ntf2_ros\n\nstatic_transform_publisher\n\n0\n\n.1\n\n0\n\n0\n\n.2\n\n0\n\n0\n\n0\n\nbase_link\n\nbase_laser\n\n```\n\nLanguage: unknown\n\nFile: tf2_echo\n\n```\n\nros2\n\nrun\n\ntf2_ros\n\ntf2_echo\n\nbase_link\n\nbase_laser\n\n```\n\nLanguage: unknown"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b216-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Transformations\uf0c1.txt", "start_index": 9421, "chroma:document": "tf2_echo\n\nbase_link\n\nbase_laser\n\n```\n\nLanguage: unknown\n\nFile: tf2_echo\n\n```\n\nAt\n\ntime\n\n0\n\n.0\n\nTranslation:\n\n[\n\n0\n\n.100,\n\n0\n\n.000,\n\n0\n\n.200\n\n]\n\nRotation: in Quaternion [ 0 .000, 0 .000, 0 .000, 1 .000 ] ```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b22a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docker for Development: Zero to Hero\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Docker for Development: Zero to Hero\uf0c1 URL: https://docs.nav2.org/tutorials/docs/docker_dev.html#nav2-development-image Section: getting_started/index.html --------------------------------------------------------------------------------\n\n## Overview\uf0c1 This tutorial is a hands on walkthrough from your first Docker usage to commands and processes you can use for development of ROS 2 applications using Docker. This is not an exhaustive introduction by any stretch, but should help you go from nothing to a functional process you can use on a daily basis for development and testing. If you know some basics about Docker already, you can skip to later sections about development and deployment. You\u2019ll also find a set of Docker images in the Appendix to this tutorial which are useful for developing with Nav2 or a containerized deployment of it. The same process template can be used for other company applications and projects as well. Some other useful resources:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b23e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docker for Development: Zero to Hero\uf0c1.txt", "start_index": 973, "chroma:document": "## Preliminaries\uf0c1 Docker is a tool used to build, deploy, test, and otherwise work with software in an isolated environment, called acontainer. This diffs from a VM in that it shares the same linux kernel as your host operating system, making it faster to spin up and share host resources. By building or deploying software in this isolated environment, you can ensure many users, robots, or servers are running the same software with the same software versions across many instances. It gives you a controlled environment to work in that is reproducible on other developer\u2019s machines and even work in a different (linux-based) operating system than your computer currently runs. For example, you can run a 22.04 Docker container that contains ROS 2 Humble on Nvidia Jetson\u2019s Jetpack 5.1 (which is a flavor of 20.04) and deploy that container to a fleet of robots. In common Docker language, animageis the builtDockerfilewhich can be used to createcontainers. Thus,containersare self-contained, runnable instances of the"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b252-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docker for Development: Zero to Hero\uf0c1.txt", "start_index": 1933, "chroma:document": "Thus,containersare self-contained, runnable instances of the dockerimage. TheDockerfileis a set of instructions for how to build an image to create some kind of environment to work in - and often contain applications to deploy in that environment. The Dockerfile instruct sets have a number of options such as: Most of these are self explanatory, but you can reference the Docker documentation to learn more and see the full set. Two special commands worth highlighting areCMDandENTRYPOINTwhich you will see at the bottom of manyDockerfiles. In the context of ROS Docker containers, you\u2019ll see that these create a bash session and execute aros_entrypoint.shscript. This script simply sources the ROS environment/opt/ros/.../setup.bashfor your distribution so when you open the container, you\u2019re ready to go. But these can be used to do more advanced things like run your application or trigger other events."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b266-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docker for Development: Zero to Hero\uf0c1.txt", "start_index": 2842, "chroma:document": "## Important Docker Commands\uf0c1 Similarly unexhaustively, it is important to discuss a few docker commandline commands before we move forward. There are many others, but these are the basic commands which we will use in this walkthrough and likely the most common you\u2019ll use on the day-to-day. Over the tutorial, build up some important option flags for each, but for now lets talk about the basics:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b28e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docker for Development: Zero to Hero\uf0c1.txt", "start_index": 3241, "chroma:document": "## Exploring Your First Container\uf0c1 Lets start this tutorial with getting the latest-and-greatest of ROS 2 Rolling. Using the OSRF DockerHub server, we can pull down a number of different ROS 2 docker images to work with without having to create a Dockerfile or build them ourselves. You should then see the following, where the image is being pulled down in multiple layers and finally returning the terminal once complete. If you then attempt to run this image as a container (the instance of the image): You should see that it runs for a second then exits the terminal. Yay! It works! But\u2026 that\u2019s not very useful, now is it? OurENTRYPOINTfor the ROS 2 Docker images only sources the ROS 2 installation and so the program returns as completed. If we want to get into the container to do something useful for ourselves in that environment, we need to open an interactive terminal session with the container. This is easy to do with the-itflags: You should now see a terminal session open with a command prompt"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b2a2-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docker for Development: Zero to Hero\uf0c1.txt", "start_index": 4190, "chroma:document": "should now see a terminal session open with a command prompt ofroot@<somehash>:/#. This is your docker container. Take a look around, it should look like any other linux OS. If you go into/opt/ros/rolling, it should look familiar to you! If you open a new terminal and runsudodockerps, you should see now one container instance running on your system. The ID of this container should match the hash in your command prompt. We mentioned before that the container on spin up will automatically source the ROS installation, so we should be able to immediately play around: Nice! It all works. Now, if we exit our interactive session (typeexit), we should reenter our computer. In that second terminal, if you rerunsudodockerps, you should see that the list of containers is now empty since our container is no longer running. If you want to see a full list of containers, including exited containers, you can use the flag-ato display all containers. You can see that our container exited successfully. If we now run our docker"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b2b6-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docker for Development: Zero to Hero\uf0c1.txt", "start_index": 5154, "chroma:document": "our container exited successfully. If we now run our docker image again, you should see it back listed without-a. While we\u2019re here, letslsour container. Oh no! Ournavigator_dockerlayer.txtfile is missing! That\u2019s completely to be expected. When we exit the container, that instance of the image is destroyed - never again to be seen. When we run the image again, we\u2019re generating a brand new, clean instance of the image. Nothing persists. This is an important behavior to understand moving forward. For development, this is nightmare fuel of losing a day\u2019s work by hitting the wrong button. For deployment, this is a blessing as you can cleanly restart with no artifacts from a previously failed session and start with a clean slate. We\u2019ll discuss how to persist data between sessions later on in the tutorial, so fear not! With our new container still open, lets explore how to work with one container across multiple terminals. If you were to run thedockerruncommand in two terminals, you\u2019d make two separate containers"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b2d4-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docker for Development: Zero to Hero\uf0c1.txt", "start_index": 6123, "chroma:document": "in two terminals, you\u2019d make two separate containers isolated from each other. Instead, we need to open a new session in the container. Looking at the terminal\u2019s hash orsudodockerpsto find its ID, use theexeccommand to execute the commandbashin the container. This opens a new interactive session to the container andexec-utes the commandbashto give us a shell to work with (CMDin our Dockerfile does this for us for the spin up terminal). Since this isn\u2019t a newly spun up container, theENTRYPOINTscript wasn\u2019t run. If you try to run the talker demo again, it won\u2019t find theros2command. Fear not, simply source your/opt/ros/rolling/setup.bashinstall and you\u2019re good to go. In either terminal session in the container, if you create a new file, you should be able to see it in the other since this is the same container! Now we can do something fun while we have both terminals of the same docker container open. Lets run the classic talker/listener demo. In each of the two terminals, run one of these commands. If you now"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b2e8-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docker for Development: Zero to Hero\uf0c1.txt", "start_index": 7086, "chroma:document": "of the two terminals, run one of these commands. If you now open a third terminal to your computer and runros2topiclist, you\u2019ll see a notable lack of topics. What gives? The container is isolated from your host system, so anything happening in the container is currently unavailable to your main computer. Lets exit our two container terminal instances (exit) and talk about some moredockerrunflags that are useful to know. This time, we want to expose ROS to our broader system, including our host computer. This time, we\u2019ll use the flag--net=host, this sets the network to look like the host system (i.e. your computer). In this session, if we run the talkerros2rundemo_nodes_pytalker, now we should be able to subscribe to it from our host computer! Lets talk about how to keep a container running for longer than than your interactive terminal session. There are many reasons you want a container to outlive you or run in the background, so that\u2019s what the-dflag is for, or detached. Lets start off by showing that"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b2fc-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docker for Development: Zero to Hero\uf0c1.txt", "start_index": 8043, "chroma:document": "the-dflag is for, or detached. Lets start off by showing that there are no containers running withsudodockerps. Next start a new container with the flag. You\u2019ll see the command run for a moment and return.sudodockerpsshould now show a container running. Copy that container ID and we can nowattachto it: You should now be in the terminal session. After you do your work, if you want to stop the container, you can exit as we have been in this tutorial (exit) and that will also stop the container. If you wish to leave the container running, you can use the key sequence Control+P+Q to exit but leave the container running. In either case, you can show that to yourself usingps. If you left it running and now wish to stop it externally, you can do so with the following. It may take a few moments to exit. Finally,dockerimagesis a command used to tell you what docker images you have built or pulled which are available for use. This list will expand over time and is a useful resource to see what you have to work with."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b310-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docker for Development: Zero to Hero\uf0c1.txt", "start_index": 9066, "chroma:document": "## Understanding ROS Docker Images\uf0c1 Now that we know a bit about Docker\u2019s basic features and explored the Rolling Desktop Full container, lets look at the Docker images you have to work with in ROS in more detail. OSRF hosts a DockerHub server containing images of all ROS distributions which you can pull and use. For each distribution, there are a couple of variants: These are the same as if you were to useapt install ros-rolling-desktop-full, but in container form. Each of those containers build off of the previous one usingFROMand then install the binaries described to serve to the container user. Which you use depends on your application and needs, butosrf/ros:<distro>-ros-baseis a good default for development and deployment. We\u2019re using desktop-full in the context of this tutorial for ease of having rviz2 and such built-in batteries-included. You can pull and use them the same way as before, for example: Note that some containers may requireosrf/and others may not. Theosrf/images are released by osrf"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b324-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docker for Development: Zero to Hero\uf0c1.txt", "start_index": 10034, "chroma:document": "others may not. Theosrf/images are released by osrf while the non-prefixed are a part of the official docker libraries. In general, the desktop installs are withosrf/`and the ros core and base are without."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b342-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docker for Development: Zero to Hero\uf0c1.txt", "start_index": 10241, "chroma:document": "## For Docker-Based Development\uf0c1 As mentioned previously, if we create and modify files in the Docker container, these do not persist after the container is exited. If we want to do some development work that will persist between images, it is wise tomountavolumeto the docker container when we run it. That is just fancy talk for linking a given set of directories from your host company to the container so that they can be read, modified, and deleted within the container and reflected on the outside. That way, your work will persist even if you close a container in your local filesystem as if it were developed without the use of a container. An awesome feature of this is that you can actually build your workspace in one container, destroy that container, and then continue development and rebuild in a new container instance later provided that (1) the same image is used both times and (2) the mounted location within the container is the same each time. We accomplish this using the-vflag (for volume). There are"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b356-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docker for Development: Zero to Hero\uf0c1.txt", "start_index": 11206, "chroma:document": "We accomplish this using the-vflag (for volume). There are other options to do this as well, but this is the most straight forward. It takes in the argument in the form-vwhat/local/dir:/absolute/path/in/container. If we start a container in our workspace\u2019s root, the following will launch the docker container, sharing the host\u2019s network, and putting your workspace (.) into the container under the directory/my_ws_docker: If you go to your workspace in another terminal, you should now see that file reflected on your computer! If we run rosdep to install our dependencies in the docker container, we should now be able to build your workspace. Now, you can make any changes to your code using VSCode or your favorite code editor and have it reflected in the container for building and testing! This is especially powerful if you\u2019re working with multiple ROS distributions or with a ROS distribution which your host OS doesn\u2019t natively support (such as Humble on Jetpack 5.1 on Nvidia Jetsons). However, it does get"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b36a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docker for Development: Zero to Hero\uf0c1.txt", "start_index": 12160, "chroma:document": "Humble on Jetpack 5.1 on Nvidia Jetsons). However, it does get annoying over time to have to wait for all of your dependencies to install manually when you spin up a new container. Thus, it is useful to build atop one of the provided ROS Docker images to create your own custom development image containing the packages and environment you need to build your application. That way, you can simply jump into the container and immediately start building."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b37e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docker for Development: Zero to Hero\uf0c1.txt", "start_index": 12614, "chroma:document": "## Building a Development Image\uf0c1 Building a new container is easy. The organization instructions of Docker images are outlined inDockerfiles. Typically, they start with an importFROMto set the starting container to build off of. In our case, a ROS 2 Rolling image. Then, we run a series ofRUNcommands to perform actions to setup our dependencies so we can have them ready for use when we launch a container. In theAppendix, you\u2019ll find an example development image that you can use to develop on Nav2. It starts with Rollingros-base, downloads Nav2, and runs rosdep over its packages to install all dependencies. Once these steps conclude, the image is all setup for any later Nav2 build. You can build this image usingdockerbuild Where-tsets the tagged name of the container for later use. Its important to note that even though your install and build spaces will be reflected in your host workspace, they cannot be run locally when compiled inside of a docker container. This example development image also upgrades"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b39c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docker for Development: Zero to Hero\uf0c1.txt", "start_index": 13569, "chroma:document": "docker container. This example development image also upgrades packages which breaks strict version controlling of system andros-baseinstalled packages. For a deployment situation, you want to ensure you have the same version of all packages \u2013 however for ROS 2 Rolling where ABI and API are not promised to be stable due to live development, it is useful to upgrade so that your source code can build against the latest and greatest."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b3b0-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docker for Development: Zero to Hero\uf0c1.txt", "start_index": 14005, "chroma:document": "## Visualizations from Docker\uf0c1 Some that skip ahead at this point might notice that when launching their applications which involve a GUI (RQT, Rviz2, Gazebo), it crashes and never appears. Docker\u2019s isolation isn\u2019t just for networking, but also in visualization and other assets. Thus, we must specifically enable carve outs for GUIs to appear on our screens. Putting it altogether, you should now be able to open rviz2 inside of the docker container! At this point, if you have an error remaining, please check docs for the right flags to use. (Even if you copy+paste around, it shouldn\u2019t take you more than 10 minutes to find a combo that works.) If you\u2019re on Nvidia Jetson hardware, reference their documentation for the correct set of flags for your Jetpack version."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b3c4-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docker for Development: Zero to Hero\uf0c1.txt", "start_index": 14777, "chroma:document": "## For Docker-Based Deployment\uf0c1 We won\u2019t belabor the details, but Docker is not just for development, but for application deployment as well. You can run instances of your image on robots, cloud servers, etc as self-containing micro-services or robot application systems. Typically speaking, you would set yourENTRYPOINTto launch a script which brings up and runs your server(s) for your application. For example, you could use the deployment image in theAppendixwith anENTRYPOINTto launch your root robot navigation launch filetb3_simulation_gazebo_launch.py, or similar. You could even have the container launch on bringup usingsystemdin order to have your application automatically launch, containerized, on system startup."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b3d8-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docker for Development: Zero to Hero\uf0c1.txt", "start_index": 15505, "chroma:document": "## Conclusion\uf0c1 At the end of this, you should be able to now: Its useful to note at this point that the--privilegedflag is a real hammer. If you want to avoid running this, you can find all the individual areas you need to enable for visualization to work. Also note that--privilegedalso makes it easier to run hardware interfaces like joysticks and sensors by enabling inputs from the host operating system that are processing those inputs. If in production, you cannot use a hammer, you may need to dig into your system a bit to allow through only the interfaces required for your hardware. As for potential steps forward: We hope that\u2019s enough to get you started! \u2013 Your Friendly Neighborhood Navigators\n\n## Appendix\uf0c1\n\n## Nav2 Development Image\uf0c1 This container downloads, but does not install Nav2. Instead, it pulls the dependencies so that when you run this container, you obtain everything needed to immediately start building and working with Nav2 on any ROS 2 distribution, including Rolling."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b3ec-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docker for Development: Zero to Hero\uf0c1.txt", "start_index": 16507, "chroma:document": "## Nav2 Deployment Image\uf0c1 This image either downloads and installs Nav2 (Rolling; from source) or installs it (from binaries) to have a self contained image of everything you need to run Nav2. From here, you can go to theGetting Startedto test it out!\n\nCode Examples:\n\nLanguage: unknown\n\nFile: dockerimages\n\n```\n\nsudo\n\ndocker\n\npull\n\nosrf/ros:rolling\n\ndesktop\n\nfull\n\n```\n\nLanguage: unknown\n\nFile: dockerimages\n\n```\n\nsteve@reese:~$\n\nsudo\n\ndocker\n\npull\n\nosrf/ros:rolling\n\ndesktop\n\nfull\n\nrolling\n\ndesktop\n\nfull:\n\nPulling\n\nfrom\n\nosrf/ros\n\n31bd5f451a84:\n\nAlready\n\nexists\n\nd36cae3fb404:\n\nAlready\n\nexists\n\n8d68f36a56a7:\n\nAlready\n\nexists\n\n299f725c4bf1:\n\nAlready\n\nexists\n\n6e16227afc48:\n\nAlready\n\nexists\n\n02457a85146c:\n\nDownloading\n\n83\n\n.7MB/106.5MB\n\nfe0cbdee2808:\n\nDownload\n\ncomplete\n\n4b4dbddf506a:\n\nDownloading\n\n92\n\n.86MB/98.14MB\n\n0da90b52c355:\n\nDownload\n\ncomplete\n\n64de492566b2:\n\nDownload\n\ncomplete\n\n167d95ac0fce:\n\nDownload\n\ncomplete\n\ne727072615d0:\n\nDownloading\n\n82\n\n.61MB/809.8MB\n\nd15e176ed0af:\n\nWaiting\n\n```\n\nLanguage: unknown"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b400-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docker for Development: Zero to Hero\uf0c1.txt", "start_index": 17466, "chroma:document": ".61MB/809.8MB\n\nd15e176ed0af:\n\nWaiting\n\n```\n\nLanguage: unknown\n\nFile: dockerimages\n\n```\n\nsudo\n\ndocker\n\nrun\n\nosrf/ros:rolling\n\ndesktop\n\nfull\n\n```\n\nLanguage: unknown\n\nFile:\n\nit\n\n```\n\nsudo\n\ndocker\n\nrun\n\nit\n\nosrf/ros:rolling\n\ndesktop\n\nfull\n\n```\n\nLanguage: unknown\n\nFile: sudodockerps\n\n```\n\necho\n\n$ROS_DISTRO\n\n# -\n\n> rolling\n\nros2 run demo_nodes_cpp talker # --> [INFO] [1707513434.798456374] [talker]: Publishing: 'Hello World: 1'\n\ntouch navigator_dockerlayer.txt l # <-- you should see this file ```\n\nLanguage: unknown\n\nFile:\n\na\n\n```\n\nsteve@reese:~$\n\nsudo\n\ndocker\n\nps\n\na\n\nCONTAINER\n\nID\n\nIMAGE\n\nCOMMAND\n\nCREATED\n\nSTATUS\n\nPORTS\n\nNAMES\n\n7ec0e0b7487f\n\nosrf/ros:rolling\n\ndesktop\n\nfull\n\n\"/ros_entrypoint.sh \u2026\"\n\n5\n\nminutes\n\nago\n\nExited\n\n(\n\n0\n\n)\n\nAbout\n\na\n\nminute\n\nago\n\nstrange_tesla\n\n9ccd97ac14f9\n\nosrf/ros:rolling\n\ndesktop\n\nfull\n\n\"/ros_entrypoint.sh \u2026\"\n\n7\n\nminutes\n\nago\n\nExited\n\n(\n\n0\n\n)\n\n7\n\nminutes\n\nago\n\nzen_perlman\n\n```\n\nLanguage: unknown\n\nFile:\n\na\n\n```\n\nsudo\n\ndocker\n\nrun\n\nit\n\nosrf/ros:rolling\n\ndesktop\n\nfull\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b414-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docker for Development: Zero to Hero\uf0c1.txt", "start_index": 18413, "chroma:document": "sudo\n\ndocker\n\nrun\n\nit\n\nosrf/ros:rolling\n\ndesktop\n\nfull\n\n```\n\nLanguage: unknown\n\nFile: bash\n\n```\n\nsudo\n\ndocker\n\nexec\n\nit\n\nbce2ad161bf7\n\nbash\n\n# <-\n\nuse your ID\n\n```\n\nLanguage: unknown File: /opt/ros/rolling/setup.bash ``` touch navigator_alligator.txt ls # <-- see the new file # move to the other terminal\n\nls\n\n# <-\n\nalso see new file\n\n```\n\nLanguage: unknown\n\nFile: /opt/ros/rolling/setup.bash\n\n```\n\nros2\n\nrun\n\nros2\n\nrun\n\ndemo_nodes_cpp\n\ntalker\n\nros2\n\nrun\n\ndemo_nodes_py\n\nlistener\n\n```\n\nLanguage: unknown\n\nFile: ros2topiclist\n\n```\n\nsteve@reese:~$\n\nros2\n\ntopic\n\nlist\n\n/parameter_events\n\n/rosout\n\n```\n\nLanguage: unknown\n\nFile: -\n\nnet=host\n\n```\n\nsudo\n\ndocker\n\nrun\n\nit\n\nnet\n\n=\n\nhost\n\nosrf/ros:rolling\n\ndesktop\n\nfull\n\n```\n\nLanguage: unknown\n\nFile: ros2rundemo_nodes_pytalker\n\n```\n\nsteve@reese:~$\n\nros2\n\ntopic\n\necho\n\n/chatter\n\ndata:\n\n'Hello World: 0'\n\n--\n\ndata:\n\n'Hello World: 1'\n\n--\n\ndata:\n\n'Hello World: 2'\n\n---\n\n```\n\nLanguage: unknown\n\nFile: sudodockerps\n\n```\n\nsudo\n\ndocker\n\nrun\n\nit\n\nnet\n\n=\n\nhost\n\nd\n\nosrf/ros:rolling"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b428-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docker for Development: Zero to Hero\uf0c1.txt", "start_index": 19366, "chroma:document": "```\n\nsudo\n\ndocker\n\nrun\n\nit\n\nnet\n\n=\n\nhost\n\nd\n\nosrf/ros:rolling\n\ndesktop\n\nfull\n\n```\n\nLanguage: unknown\n\nFile: attach\n\n```\n\nsudo\n\ndocker\n\nattach\n\ne1d7e035a824\n\n# <-\n\nuse your ID\n\n```\n\nLanguage: unknown\n\nFile: ps\n\n```\n\nsudo\n\ndocker\n\nstop\n\ne1d7e035a824\n\n# <-\n\nuse your ID\n\n```\n\nLanguage: unknown\n\nFile: dockerimages\n\n```\n\nsteve@reese:~$\n\nsudo\n\ndocker\n\nimages\n\nREPOSITORY\n\nTAG\n\nIMAGE\n\nID\n\nCREATED\n\nSIZE\n\nosrf/ros\n\nrolling\n\ndesktop\n\nfull\n\n7cd0c5068235\n\n6\n\ndays\n\nago\n\n3\n\n.86GB\n\n```\n\nLanguage: unknown\n\nFile: osrf/ros:<distro>\n\nros\n\nbase\n\n```\n\nsudo\n\ndocker\n\npull\n\nros:rolling\n\nros\n\nbase\n\nsudo\n\ndocker\n\npull\n\nosrf/ros:humble\n\ndesktop\n\n```\n\nLanguage: unknown\n\nFile: /my_ws_docker\n\n```\n\nsudo\n\ndocker\n\nrun\n\nit\n\nnet\n\n=\n\nhost\n\nv\n\n.:/my_ws_docker\n\nosrf/ros:rolling\n\ndesktop\n\nfull\n\nls\n\ncd\n\nmy_ws_docker\n\ntouch\n\nnavigator_activator.txt\n\n```\n\nLanguage: unknown\n\nFile: /my_ws_docker\n\n```\n\napt\n\nupdate\n\nrosdep\n\ninit\n\nrosdep\n\nupdate\n\nrosdep\n\ninstall\n\nr\n\ny\n\nfrom\n\npaths\n\n.\n\nignore\n\nsrc\n\ncolcon\n\nbuild\n\n```\n\nLanguage: unknown\n\nFile: dockerbuild"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b43c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docker for Development: Zero to Hero\uf0c1.txt", "start_index": 20325, "chroma:document": "src\n\ncolcon\n\nbuild\n\n```\n\nLanguage: unknown\n\nFile: dockerbuild\n\n```\n\nsudo\n\ndocker\n\nbuild\n\nt\n\nnav2deps:rolling\n\n.\n\n```\n\nLanguage: unknown\n\nFile: -\n\nvolume=\"${XAUTHORITY}:/root/.Xauthority\"\n\n```\n\nsudo\n\ndocker\n\nrun\n\nit\n\nnet\n\n=\n\nhost\n\nprivileged\n\n\\\n\nenv\n\n=\n\n\"DISPLAY=\n\n$DISPLAY\n\n\"\n\n\\\n\nvolume\n\n=\n\n\"\n\n${\n\nXAUTHORITY\n\n}\n\n:/root/.Xauthority\"\n\n\\\n\nosrf/ros:rolling\n\ndesktop\n\nfull\n\n```\n\nLanguage: unknown\n\nFile: -\n\nvolume=\"${XAUTHORITY}:/root/.Xauthority\"\n\n```\n\nrviz2\n\n```\n\nLanguage: unknown\n\nFile: sudo\n\n```\n\nARG\n\nROS_DISTRO\n\n=\n\nrolling\n\nFROM\n\nros:\n\n${\n\nROS_DISTRO\n\n}\n\nros\n\ncore\n\nRUN\n\napt\n\nupdate\n\n\\\n\n&&\n\nDEBIAN_FRONTEND\n\n=\n\nnoninteractive\n\napt\n\ninstall\n\ny\n\nno\n\ninstall\n\nrecommends\n\nno\n\ninstall\n\nsuggests\n\n\\\n\nros\n\ndev\n\ntools\n\n\\\n\nwget\n\nWORKDIR\n\n/root/nav2_ws\n\nRUN\n\nmkdir\n\np\n\n~/nav2_ws/src\n\nRUN\n\ngit\n\nclone\n\nhttps://github.com/ros\n\nnavigation/navigation2.git\n\nbranch\n\nmain\n\n./src/navigation2\n\nRUN\n\nrosdep\n\ninit\n\nRUN\n\napt\n\nupdate\n\n&&\n\napt\n\nupgrade\n\ny\n\n\\\n\n&&\n\nrosdep\n\nupdate\n\n\\\n\n&&\n\nrosdep\n\ninstall\n\ny\n\nignore\n\nsrc\n\nfrom\n\npaths\n\nsrc\n\nr"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b45a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docker for Development: Zero to Hero\uf0c1.txt", "start_index": 21286, "chroma:document": "\\\n\n&&\n\nrosdep\n\ninstall\n\ny\n\nignore\n\nsrc\n\nfrom\n\npaths\n\nsrc\n\nr\n\n```\n\nLanguage: unknown\n\nFile: sudo\n\n```\n\nARG\n\nROS_DISTRO\n\n=\n\nrolling\n\nFROM\n\nros:\n\n${\n\nROS_DISTRO\n\n}\n\nros\n\ncore\n\nRUN\n\napt\n\nupdate\n\n\\\n\n&&\n\nDEBIAN_FRONTEND\n\n=\n\nnoninteractive\n\napt\n\ninstall\n\ny\n\nno\n\ninstall\n\nrecommends\n\nno\n\ninstall\n\nsuggests\n\n\\\n\nros\n\ndev\n\ntools\n\n\\\n\nwget\n\n# For Rolling or want to build from source a particular branch / fork\n\nWORKDIR\n\n/root/nav2_ws\n\nRUN\n\nmkdir\n\np\n\n~/nav2_ws/src\n\nRUN\n\ngit\n\nclone\n\nhttps://github.com/ros\n\nnavigation/navigation2.git\n\nbranch\n\nmain\n\n./src/navigation2\n\nRUN\n\nrosdep\n\ninit\n\nRUN\n\napt\n\nupdate\n\n&&\n\napt\n\nupgrade\n\ny\n\n\\\n\n&&\n\nrosdep\n\nupdate\n\n\\\n\n&&\n\nrosdep\n\ninstall\n\ny\n\nignore\n\nsrc\n\nfrom\n\npaths\n\nsrc\n\nr\n\nRUN\n\n.\n\n/opt/ros/\n\n${\n\nROS_DISTRO\n\n}\n\n/setup.sh\n\n\\\n\n&&\n\ncolcon\n\nbuild\n\nsymlink\n\ninstall"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b46e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Docker for Development: Zero to Hero\uf0c1.txt", "start_index": 22018, "chroma:document": "}\n\n/setup.sh\n\n\\\n\n&&\n\ncolcon\n\nbuild\n\nsymlink\n\ninstall\n\n# For all else, uncomment the above Rolling lines and replace with below # RUN rosdep init # RUN apt update && apt upgrade -y \\ #     && rosdep update \\ #     && apt install \\ #         ros-${NAV2_BRANCH}-nav2-bringup \\ #         ros-${NAV2_BRANCH}-navigation2 \\ #         ros-${NAV2_BRANCH}-turtlebot3-gazebo ```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b482-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/DistanceController\uf0c1.txt", "start_index": 0, "chroma:document": "Title: DistanceController\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/decorators/DistanceController.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: GoalReached\n\n```\n\n<DistanceController\n\ndistance=\n\n\"0.5\"\n\nglobal_frame=\n\n\"map\"\n\nrobot_base_frame=\n\n\"base_link\"\n\n>\n\n<!-\n\nAdd tree components here--\n\n>\n\n</DistanceController>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b496-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Dashing to Eloquent\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Dashing to Eloquent\uf0c1\n\nURL: https://docs.nav2.org/migration/Dashing.html#new\n\npackages\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b4aa-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Dashing to Eloquent\uf0c1.txt", "start_index": 213, "chroma:document": "## New Packages\uf0c1 Navigation2 now includes a new packagenav2_waypoint_follower. The waypoint follower is an action server that will take in a list of waypoints to follow and follow them in order. There is a parameterstop_on_failurewhether the robot should continue to the next waypoint on a single waypoint failure, or to return fail to the action client. The waypoint follower is also a reference application for how to use the Navigation2 action server to complete a basic autonomy task. Navigation2 now supports new algorithms for control and SLAM. The Timed-Elastic Band (TEB) controller was implementedand can be found here. It is its own controller plugin that can be used instead of the DWB controller. Nav2 also supports SLAM Toolbox as the default SLAM implementation for ROS 2. This replaces the use of Cartographer."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b4be-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Dashing to Eloquent\uf0c1.txt", "start_index": 1040, "chroma:document": "## New Plugins\uf0c1 Eloquent introduces back in pluginlib plugins to the navigation stack.nav2_coredefines the plugin header interfaces to be used to implement controller, planner, recovery, and goal checker plugins. All algorithms (NavFn, DWB, recoveries) were added as plugin interfaces and the general packages for servers were created.nav2_planneris the action server for planning that hosts a plugin for the planner.nav2_controlleris the action server for controller that hosts a plugin for the controller.nav2_recoveryis the action server for recovery that hosts a plugin for recovery. New recovery plugins were added including backup, which will take in a distance to back up, if collision-free. Additionally, the wait recovery was added that will wait a configurable period of time before trying to navigate again. This plugin is especially helpful for time-dependent obstacles or pausing navigation for a scene to become less dynamic. Many new behavior tree nodes were added. These behavior tree nodes are hard-coded"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b4dc-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Dashing to Eloquent\uf0c1.txt", "start_index": 1998, "chroma:document": "tree nodes were added. These behavior tree nodes are hard-coded in the behavior tree engine. Behavior tree cpp v3 supports plugins and will be converted in the next release."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b4f0-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Dashing to Eloquent\uf0c1.txt", "start_index": 2173, "chroma:document": "## Navigation2 Architectural Changes\uf0c1 Thenav2_world_modelpackage was removed. The individualnav2_plannerandnav2_controllerservers now host their relevant costmaps. This was done to reduce network traffic and ensure up-to-date information for the safety-critical elements of the system. As above mentions, plugins were introduced into the stack and these servers each host plugins for navigation, control, and costmap layers. Map server was substantially refactored but the external API remains the same. It now uses the SDL library for image loading. TF-based positioning is now used for pose-estimation everywhere in the stack. Prior, some elements of the navigation stack only updated its pose from the/amcl_posetopic publishing at an irregular rate. This is obviously low-accuracy and high-latency. All positioning is now based on the TF tree from the global frame to the robot frame. Prior to Eloquent, there were no ROS 2 action servers and clients available. Navigation2, rather, used an interface we called Tasks."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b504-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Dashing to Eloquent\uf0c1.txt", "start_index": 3138, "chroma:document": "Navigation2, rather, used an interface we called Tasks. Eloquent now contains actions and a simple action server interface was created and is used now throughout the stack. Tasks were removed."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b518-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Lifecycle Manager\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Lifecycle Manager\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/configuring\n\nlifecycle.html#example\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Parameters\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: true\n\n```\n\nlifecycle_manager\n\n:\n\nros__parameters\n\n:\n\nautostart\n\n:\n\ntrue\n\nnode_names\n\n:\n\n[\n\n'controller_server'\n\n,\n\n'planner_server'\n\n,\n\n'behavior_server'\n\n,\n\n'bt_navigator'\n\n,\n\n'waypoint_follower'\n\n]\n\nbond_timeout\n\n:\n\n4.0\n\nattempt_respawn_reconnection\n\n:\n\ntrue\n\nbond_respawn_max_duration\n\n:\n\n10.0\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b52c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Navigation Plugins\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Setting Up Navigation Plugins\uf0c1 URL: https://docs.nav2.org/setup_guides/algorithm/select_algorithm.html#select-algorithm Section: tuning/index.html --------------------------------------------------------------------------------"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b540-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Navigation Plugins\uf0c1.txt", "start_index": 236, "chroma:document": "## Planner and Controller Servers\uf0c1 Navigation algorithms are implemented in Nav2 through the use of plugins running on ROS action servers - the planner, controller and behavior servers (among others). For this section, we discuss the planner and controller servers, which are the heart of the navigation stack. These servers may implement one or more algorithm plugins each with its own configuration tailored for a specific action or robot state. This guide will highlight the different algorithms based on the type of robot and environment the robot is deployed in. This guide will not cover behaviors, smoothers, etc as those are dependent on application and not hardware/environment to offer generalized advice. The planner server is responsible for implementing algorithms that compute the robot\u2019s path. For example, one plugin can be configured to compute a simple shortest path between two relatively near locations while another plugin computes for a path to locations that cover the entire robot environment. The"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b554-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Navigation Plugins\uf0c1.txt", "start_index": 1195, "chroma:document": "path to locations that cover the entire robot environment. The controller server generates the appropriate control efforts needed for a robot to complete a task in its local environment. These tasks include but are not limited to: following a path generated by the planner server, avoiding dynamic obstacles along this path, and even charging at a docking station. As mentioned before, the planner and controller servers host a map of one or multiple plugins wherein a certain plugin will be used for a certain environment, scenario, or task. For instance, the controller server can have a plugin for following a path when in long corridors to stay in the middle of the aisle, and then another plugin for avoiding dynamic obstacles in a crowded place. Selecting which planning algorithm to execute based on the robot\u2019s task can be done through the behavior tree of your navigation system or application server."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b572-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Navigation Plugins\uf0c1.txt", "start_index": 2107, "chroma:document": "## Selecting the Algorithm Plugins\uf0c1 In this section, we discuss some of the available algorithm plugins for the planner and controller servers. We also discuss the purpose of each algorithm, and for which type of robot they are recommended to be used. Lastly, we show some sample yaml configuration that specifies the plugin to be used for each server."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b586-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Navigation Plugins\uf0c1.txt", "start_index": 2461, "chroma:document": "## Planner Server\uf0c1 The algorithm plugins for the planner server find the robot\u2019s path using a representation of its environment captured by its different sensors. Some of these algorithms operate by searching through the environment\u2019s grid space while others expand the robot\u2019s possible states while accounting for path feasibility. As mentioned, the planner server may utilize plugins that work on the grid space such as theNavFnPlanner,SmacPlanner2D, andThetaStarPlanner. TheNavFn planneris a navigation function planner that uses either Dijkstra or A*.  Next, theSmac 2D plannerimplements a 2D A* algorithm using 4 or 8 connected neighborhoods with a smoother and multi-resolution query. Lastly, theTheta Star planneris an implementation of Theta* using either line of sight to create non-discretely oriented path segments. One issue you may encounter when using algorithms that work on the grid space is that there is no guarantee that a drivable path can be generated for any type of robot. For example, it is not"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b59a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Navigation Plugins\uf0c1.txt", "start_index": 3417, "chroma:document": "can be generated for any type of robot. For example, it is not guaranteed that theNavFnPlannercan plan a feasible path for a non-circular robot in a tight space since it uses the circular footprint of a robot (by approximating the robot\u2019s largest cross-sectional radius) and checks for collisions per costmap grid cell. In addition, these algorithms are also not suitable for ackermann and legged robots since they have turning constraints. That being said, these plugins are best used on robots that can drive in any direction or rotate safely in place, such ascircular differential and circular omnidirectionalrobots. Another planner plugin is theSmac Hybrid-A* plannerthat supportsarbitrary shaped ackermann and leggedrobots. It is a highly optimized and fully reconfigurable Hybrid-A* implementation supporting Dubin and Reeds-Shepp motion models. This algorithm expands the robot\u2019s candidate paths while considering the robot\u2019s minimum turning radius constraint and the robot\u2019s full footprint for collision avoidance."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b5ae-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Navigation Plugins\uf0c1.txt", "start_index": 4384, "chroma:document": "and the robot\u2019s full footprint for collision avoidance. Thus, this plugin is suitable for arbitrary shaped robots that require full footprint collision checking. It may also be used for high-speed robots that must be navigated carefully to not flip over, skid, or dump load at high speeds. There is also theSmacLatticeplannerplugin which is based on a State Lattice planner. This plugin functions by expanding the robot state space while ensuring the path complies with the robot\u2019s kinematic constraints. The algorithm provides minimum control sets which allows it to supportdifferential, omnidirectional, and ackermannvehicles of any shape and size with minimal reconfiguration."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b5c2-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Navigation Plugins\uf0c1.txt", "start_index": 5065, "chroma:document": "## Summary\uf0c1\n\n## Example Configuration\uf0c1 An example configuration of the planner server is shown above. Theplanner_pluginsparameter accepts a list of mapped planner plugin names. For each plugin namespace defined inplanner_plugins(GridBasedin our example), we specify the type of plugin to be loaded in thepluginparameter. Additional configurations must then be specified in this namespace based on the algorithm to be used. Please see theConfiguration Guidefor more details."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b5d6-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Navigation Plugins\uf0c1.txt", "start_index": 5540, "chroma:document": "## Controller Server\uf0c1 The default controller plugin is theDWB controller. It implements a modified Dynamic Window Approach (DWA) algorithm with configurable plugins to compute the control commands for the robot. This controller makes use of aTrajectoryGeneratorpluginthat generates the set of possible trajectories. These are then evaluated by one or moreCriticplugins, each of which may give a different score based on how they are configured. The sum of the scores from theseCriticpluginsdetermine the overall score of a trajectory. The best scoring trajectory then determines the output command velocity. TheDWBcontrollercan be used oncircular or non-circular differential, and circular or non-circular omnidirectionalrobots. It may also be configured forackerman and leggedrobots if it is given aTrajectoryGenerationpluginthat produces a set of possible trajectories that considers the robot\u2019s minimum curvature constraint. Next example of a controller server plugin is theTEB controllerwhich is an MPC time optimal"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b5ea-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Navigation Plugins\uf0c1.txt", "start_index": 6497, "chroma:document": "server plugin is theTEB controllerwhich is an MPC time optimal controller. It implements the Timed Elastic Band (TEB) approach which optimizes the robot\u2019s trajectory based on its execution time, distance from obstacles, and feasibility with respect to the robot\u2019s kinematic constraints. This controller can be used ondifferential, omnidirectional, ackermann, and leggedrobots. Another example for this section is theRegulated Pure Pursuit controller (RPP). This controller implements a variant of the pure pursuit algorithm with added regulation heuristic functions to manage collision and velocity constraints. This variation is implemented to target the needs of service or industrial robots and is suitable for use withdifferential, ackermann, and leggedrobots. The last example is theVector Pursuit Controller. It implements theVector Pursuit algorithmand calculates the command velocity using screw theory. This controller is suitable for high speed path tracking and sharp turns or when computation resources are"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b608-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Navigation Plugins\uf0c1.txt", "start_index": 7452, "chroma:document": "path tracking and sharp turns or when computation resources are limited. It can be used fordifferential, ackermann, and leggedrobots."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b61c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Navigation Plugins\uf0c1.txt", "start_index": 7587, "chroma:document": "## Summary\uf0c1 All of these algorithms work for both circular and non-circular robots.\n\n## Example Configuration\uf0c1 Shown above is a sample basic configuration of the controller server. The list of mapped names for controller plugins are defined in thecontroller_pluginsparameter. Similar to the planner server, each namespace defined in thecontroller_plugins(FollowPathin our example) must define the type of plugin it will use in thepluginparameter. Additional configurations must also be made for the selected algorithm in the namespace. Please see theConfiguration Guidefor more details."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b630-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Navigation Plugins\uf0c1.txt", "start_index": 8175, "chroma:document": "## Conclusion\uf0c1 In this tutorial, we have discussed the roles and configuration of Nav2\u2019s planner and controller servers. To summarize, these servers host a map of one or more algorithm plugins which are selected depending on your robot\u2019s structure and surroundings. We also described a few of the available plugins for the planner and controller servers to help you identify which plugins are suitable for your robot. Lastly, we also provided some simple configuration examples to show how these plugins are instantiated on the servers. You can refer to the configuration guide of the algorithm plugin you will select for more details on its configuration parameters.\n\nCode Examples:\n\nLanguage: unknown File: SmacLatticeplanner ``` planner_server : ros__parameters : planner_plugins : [ 'GridBased' ] GridBased : plugin : 'nav2_navfn_planner::NavfnPlanner' # In Iron and older versions, \"/\" was used instead of \"::\" ```\n\nLanguage: unknown\n\nFile: TrajectoryGenerationplugin\n\n```\n\ncontroller_server\n\n:\n\nros__parameters\n\n:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b644-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Setting Up Navigation Plugins\uf0c1.txt", "start_index": 9149, "chroma:document": "```\n\ncontroller_server\n\n:\n\nros__parameters\n\n:\n\ncontroller_plugins\n\n:\n\n[\n\n\"FollowPath\"\n\n]\n\nFollowPath\n\n:\n\nplugin\n\n:\n\n\"dwb_core::DWBLocalPlanner\"\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b658-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/SpeedController\uf0c1.txt", "start_index": 0, "chroma:document": "Title: SpeedController\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/decorators/SpeedController.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: GoalReached\n\n```\n\n<SpeedController\n\nmin_rate=\n\n\"0.1\"\n\nmax_rate=\n\n\"1.0\"\n\nmin_speed=\n\n\"0.0\"\n\nmax_speed=\n\n\"0.5\"\n\nfilter_duration=\n\n\"0.3\"\n\n>\n\n<!-\n\nAdd tree components here--\n\n>\n\n</SpeedController>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b66c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/NavigateToPose\uf0c1.txt", "start_index": 0, "chroma:document": "Title: NavigateToPose\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/actions/NavigateToPose.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Ports\uf0c1\n\n## Output Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: use_cancel_deceleration\n\n```\n\n<NavigateToPose\n\ngoal=\n\n\"{goal}\"\n\nserver_name=\n\n\"NavigateToPose\"\n\nserver_timeout=\n\n\"10\"\n\nerror_code_id=\n\n\"{navigate_to_pose_error_code}\"\n\nbehavior_tree=\n\n\"<some\n\npath>/behavior_trees/navigate_through_poses_w_replanning_and_recovery.xml\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b680-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Waypoint Follower\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Waypoint Follower\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/configuring\n\nwaypoint\n\nfollower.html#parameters\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Parameters\uf0c1\n\n## Provided Plugins\uf0c1\n\n## Default Plugin\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: plugin\n\n```\n\nwaypoint_follower\n\n:\n\nros__parameters\n\n:\n\nwaypoint_task_executor_plugin\n\n:\n\n\"wait_at_waypoint\"\n\nwait_at_waypoint\n\n:\n\nplugin\n\n:\n\n\"nav2_waypoint_follower::WaitAtWaypoint\"\n\nenabled\n\n:\n\nTrue\n\nwaypoint_pause_duration\n\n:\n\n0\n\n```\n\nLanguage: unknown\n\nFile: nav2_waypoint_follower\n\n```\n\nwaypoint_follower\n\n:\n\nros__parameters\n\n:\n\nloop_rate\n\n:\n\n20\n\nstop_on_failure\n\n:\n\nfalse\n\nwaypoint_task_executor_plugin\n\n:\n\n\"wait_at_waypoint\"\n\nwait_at_waypoint\n\n:\n\nplugin\n\n:\n\n\"nav2_waypoint_follower::WaitAtWaypoint\"\n\nenabled\n\n:\n\nTrue\n\nwaypoint_pause_duration\n\n:\n\n0\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b69e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/StoppedGoalChecker\uf0c1.txt", "start_index": 0, "chroma:document": "Title: StoppedGoalChecker\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/nav2_controller\n\nplugins/stopped_goal_checker.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Parameters\uf0c1 <nav2_controllerplugin>: nav2_controller plugin name defined in thegoal_checker_plugin_idparameter inController Server."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b6b2-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using VIO to Augment Robot Odometry\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Using VIO to Augment Robot Odometry\uf0c1\n\nURL: https://docs.nav2.org/tutorials/docs/integrating_vio.html#overview\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Overview\uf0c1\n\nThis tutorial highlights how to setup Visual-Inerial Odometry (VIO) into a Nav2 and ROS 2 based robotics system to augment robot odometry.\n\nMany modern robotics platforms have unideal configurations for high quality wheel odometry. For example, skid-steer, tracked, omnidirectional robots using mecanum wheels, and legged robots are notorious for producing suboptimal odometry. These types of platforms are becoming increasingly common in the robotics landscape and require augmentations or replacement sources of odometry. Further, some applications of robotics technologies involve retrofitting existing equipment which may not have odometry altogether."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b6c6-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using VIO to Augment Robot Odometry\uf0c1.txt", "start_index": 908, "chroma:document": "A subfield of computer vision and robotics focuses on how to use Visual (e.g. camera) and Inertial (e.g. IMU) data in order to compute high-speed relative motion independent of robot mechanics. This is an especially useful technology for UAVs without accurate intrinsic odometric sensing capabilities \u2013 or mobile robots with poor interinsic odometry measurements.\n\nThus, this tutorial walks through the integration of VIO into a robot system to replace or augment wheel odometry so that your robot can autonomously navigate with quality state estimation required for a well-engineered system that is able to accurately and predictably complete its tasks.\n\nThroughout this tutorial, we will be using theStereolabsSDK\u2019sPosition Trackingcapability as our VIO solution of choice paired with the newZED Xcamera. This VIO solution is easy to use and provides production-quality performance forfreewhen using a ZED camera module.\n\n## Setting Up the ZED X Camera\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b6da-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using VIO to Augment Robot Odometry\uf0c1.txt", "start_index": 1832, "chroma:document": "## Setting Up the ZED X Camera\uf0c1\n\nWe\u2019re using the ZED X for the purposes of this tutorial due to its:\n\nThough, any other ZED camera with an IMU in it will work as well (ZED2, ZED2i, ZED mini, etc).  If you are using the ZED X in particular, checkoutthis playlist on YouTube showing step by step how to setup the Nvidia Jetson and ZED X for ROS 2orZED X Getting Started pageto install the SDK, ZED X drivers, and ROS 2 drivers needed to proceed.\n\nAt this point, you should be able to run one of the following commands to launch the driver and visualize the sensor data in Rviz. Note that these are ROS 2 component nodes that also may be loaded into your system\u2019s component manager to minimize latency due to serialization.\n\nAs of September 2023, the driver out of the box produces the fullmap->odom->base_link->cameratree on its own. This is since the Pose SDK can produce not only VIO, but loop-closure VSLAM representing the full state estimation TF tree."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b6ee-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using VIO to Augment Robot Odometry\uf0c1.txt", "start_index": 2789, "chroma:document": "We want to be able to fuse in other information such as an external IMU, wheel odometry, GPS, or other sensors into our local or global state estimates, so we need to disable TF publication ofmap->odomandodom->base_linkto be provided by our fused outputs. Especially considering the ZED X camera knows nothing about the nature of thebase_linkframe. However, if you would like to use the ZED\u2019s state estimate for your entire system without further sensor fusion, you certainly can!\n\n## Setting Up ZED ROS\uf0c1\n\nIn order to run VIO alone, we need to do the following:\n\nThus, make the following parameter updates to thezed_wrapper\u2019s default parameters:\n\nOptionally, remap the zedodomtopic to a topic that isn\u2019t reserved or commonly used by other systems. In your ZED launch file add to the node / launch file:\n\n## Fusing VIO Into Local State Estimate\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b70c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using VIO to Augment Robot Odometry\uf0c1.txt", "start_index": 3593, "chroma:document": "## Fusing VIO Into Local State Estimate\uf0c1\n\nNow that we have the ZED ROS 2 drivers set up to publish our VIO to a topic and leave our TF tree to the fusion algorithm and Robot State Publisher (e.g. URDF), we\u2019re finally ready to fuse in VIO into our broader state estimate using therobot_localizationpackage.\n\nThis package is a generalized EKF and UKF solution to state estimation of potentially many different topics, publishing at different rates, of different types. If you\u2019re unfamiliar withrobot_localizationcheckout ourFirst-Time Robot Setup Guide\u2019s Odometry page for basic information and thepackage\u2019s extensive documentation.\n\nMost users at this point already have arobot_localizationconfiguration file in their robot systems to fuse existing sensors together, such as wheel odometry (even poor) and robot IMUs. We\u2019ll be adding a new odom field,odom1, to our configuration to fuse in VIO\u2019s position and orientation into our filter. If this is your first odometry field, useodom0and you can base your file onekf.yaml."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b720-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using VIO to Augment Robot Odometry\uf0c1.txt", "start_index": 4616, "chroma:document": "Make sure to evaluate your EKF\u2019sfrequency,two_d_mode,publish_tf, and key frames to be appropriate for your application. We generally want to publish TF and have 2D mode on when navigating in flat indoor environments only.\n\n## Fusing VSLAM Into Global State Estimate\uf0c1\n\nWhile out of the scope of this tutorial, it is possible to continue to produce VSLAM results for global localization with loop closure (both in general and using the Stereolabs Position Tracking SDK). The steps for integration are similar to the last sections, except:\n\n## Testing it Out!\uf0c1\n\nIn the below example, we\u2019re fusing the Stereolabs SDK\u2019s Pose Tracking VIO solution with a robot\u2019s external IMU and odometry (e.g.robot_localizationhasodom0odom1andimu0) to improve performance while navigating on a legged robot platform in outdoor environments. The robot\u2019s internal odometry based on leg motion is quite poor and causes the robot to have generally poor autonomous navigation performance."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b734-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using VIO to Augment Robot Odometry\uf0c1.txt", "start_index": 5580, "chroma:document": "The Visual-Inertial Odometry\u2019s error over these datasets is 4.1% over the 70m path. Typically for \u2018good\u2019 odometry from wheel encoders + IMU, I would like to see 2-3% fully tuned (or less than 1% for \u2018great\u2019 odometry), so this is a great source! Fused in with the legged robot odometry, it improves overall performance to an acceptable level!\n\nCode Examples:\n\nLanguage: unknown\n\nFile: use_cancel_deceleration\n\n```\n\n$\n\nros2\n\nlaunch\n\nzed_wrapper\n\nzedx.launch.py\n\n$\n\nros2\n\nlaunch\n\nzed_wrapper\n\nzedxm.launch.py\n\n```\n\nLanguage: unknown\n\nFile: zed_wrapper\n\n```\n\npos_tracking\n\n:\n\npublish_tf\n\n:\n\nfalse\n\n# Disables odom -> base_link TF transformation\n\npublish_map_tf\n\n:\n\ntrue\n\n# Disables map -> odom TF transformation\n\narea_memory\n\n:\n\nfalse\n\n# Disables loop closure computation, but Pose topic for global VSLAM still published (but now pure VIO)\n\n# Optional optimizations\n\ntwo_d_mode\n\n:\n\nfalse\n\n# Or true, up to you!\n\npos_tracking_enabled\n\n:\n\ntrue\n\n# of course!\n\npath_max_count\n\n:\n\n30\n\nqos_depth\n\n:\n\n5\n\n```\n\nLanguage: unknown"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b748-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Using VIO to Augment Robot Odometry\uf0c1.txt", "start_index": 6533, "chroma:document": "path_max_count\n\n:\n\n30\n\nqos_depth\n\n:\n\n5\n\n```\n\nLanguage: unknown\n\nFile: odom\n\n```\n\nremappings\n\n=\n\n[(\n\n'odom'\n\n,\n\n'camera_odom'\n\n)]\n\n```\n\nLanguage: unknown\n\nFile: odom0\n\n```\n\nodom1\n\n:\n\ncamera_odom\n\n# Adjust if namespacing ZED camera (e.g. /zed/odom)\n\nodom1_config\n\n:\n\n[\n\ntrue\n\n,\n\ntrue\n\n,\n\ntrue\n\n,\n\n# X, Y, Z\n\ntrue\n\n,\n\ntrue\n\n,\n\ntrue\n\n,\n\n# Roll, Pitch, Yaw\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\n# Vx, Vy, Vz\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n,\n\n# Vroll, Vpitch, Vyaw\n\nfalse\n\n,\n\nfalse\n\n,\n\nfalse\n\n]\n\n# Ax, Ay, Az\n\nodom1_differential\n\n:\n\nfalse\n\nodom1_relative\n\n:\n\ntrue\n\nodom1_queue_size\n\n:\n\n2\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b75c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/LimitedAccelGenerator\uf0c1.txt", "start_index": 0, "chroma:document": "Title: LimitedAccelGenerator\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/dwb\n\nplugins/limited_accel_generator.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Parameters\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b77a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigation Plugins\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Navigation Plugins\uf0c1\n\nURL: https://docs.nav2.org/plugins/index.html#plugins\n\nSection: tuning/index.html\n\n--------------------------------------------------------------------------------\n\n## Behavior\n\nTree Navigators\uf0c1\n\n## Costmap Layers\uf0c1\n\n## Costmap Filters\uf0c1\n\n## Controllers\uf0c1\n\n## Planners\uf0c1\n\n## Smoothers\uf0c1\n\n## Behaviors\uf0c1\n\n## Waypoint Task Executors\uf0c1\n\n## Goal Checkers\uf0c1\n\n## Progress Checkers\uf0c1\n\n## Behavior Tree Nodes\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b78e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Obstacle Layer Parameters\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Obstacle Layer Parameters\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/costmap\n\nplugins/obstacle.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b7a2-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/BackUp\uf0c1.txt", "start_index": 0, "chroma:document": "Title: BackUp\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/actions/BackUp.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Ports\uf0c1\n\n## Output Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: BackUp\n\n```\n\n<BackUp\n\nbackup_dist=\n\n\"\n\n0.2\"\n\nbackup_speed=\n\n\"0.05\"\n\nserver_name=\n\n\"backup_server\"\n\nserver_timeout=\n\n\"10\"\n\nerror_code_id=\n\n\"{backup_error_code}\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b7b6-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/TruncatePath\uf0c1.txt", "start_index": 0, "chroma:document": "Title: TruncatePath\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/actions/TruncatePath.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Ports\uf0c1\n\n## Output Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: use_cancel_deceleration\n\n```\n\n<TruncatePath\n\ndistance=\n\n\"1.0\"\n\ninput_path=\n\n\"{path}\"\n\noutput_path=\n\n\"{truncated_path}\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b7ca-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/WouldASmootherRecoveryHelp\uf0c1.txt", "start_index": 0, "chroma:document": "Title: WouldASmootherRecoveryHelp\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/conditions/WouldASmootherRecoveryHelp.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Port\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: FAILURE\n\n```\n\n<WouldASmootherRecoveryHelp\n\nerror_code=\n\n\"{smoother_error_code}\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b7e8-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Savitzky-Golay Smoother\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Savitzky\n\nGolay Smoother\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/configuring\n\nsavitzky\n\ngolay\n\nsmoother.html#example\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Savitzky\n\nGolay Smoother Parameters\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: refinement_num\n\n```\n\nsmoother_server\n\n:\n\nros__parameters\n\n:\n\ncostmap_topic\n\n:\n\nglobal_costmap/costmap_raw\n\nfootprint_topic\n\n:\n\nglobal_costmap/published_footprint\n\nrobot_base_frame\n\n:\n\nbase_link\n\ntransform_timeout\n\n:\n\n0.1\n\nsmoother_plugins\n\n:\n\n[\n\n\"savitzky_golay_smoother\"\n\n]\n\nsavitzky_golay_smoother\n\n:\n\nplugin\n\n:\n\n\"nav2_smoother::SavitzkyGolaySmoother\"\n\ndo_refinement\n\n:\n\nTrue\n\nrefinement_num\n\n:\n\n2\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b7fc-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Introduction To Nav2 Specific Nodes\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Introduction To Nav2 Specific Nodes\uf0c1 URL: https://docs.nav2.org/behavior_trees/overview/nav2_specific_nodes.html#control-roundrobin Section: getting_started/index.html --------------------------------------------------------------------------------\n\n## Action Nodes\uf0c1 Upon completion, these action nodes will returnSUCCESSif the action server believes the action has been completed correctly,RUNNINGwhen still running, and will returnFAILUREotherwise. Note that in the above list, theClearCostmapServiceaction node isnotan action server client, but a service client."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b810-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Introduction To Nav2 Specific Nodes\uf0c1.txt", "start_index": 574, "chroma:document": "## Condition Nodes\uf0c1 The above list of condition nodes can be used to probe particular aspects of the system. Typically they will returnSUCCESSif the condition is true andFAILUREotherwise. The key condition that is used in the default Nav2 BT isGoalUpdatedwhich is checked asynchronously within particular subtrees. This condition node allows for the behavior described as \u201cIf the goal has been updated, then we must replan\u201d. Condition nodes are typically paired with ReactiveFallback nodes.\n\n## Decorator Nodes\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b824-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Introduction To Nav2 Specific Nodes\uf0c1.txt", "start_index": 1066, "chroma:document": "## Decorator Nodes\uf0c1\n\n## Control: PipelineSequence\uf0c1 ThePipelineSequencecontrol node re-ticks previous children when a child returnsRUNNING. This node is similar to theSequencenode, with the additional property that the children prior to the \u201ccurrent\u201d are re-ticked, (resembling the flow of water in a pipe). If at any point a child returnsFAILURE, all children will be halted and the parent node will also returnFAILURE. UponSUCCESSof thelast nodein the sequence, this node will halt and returnSUCCESS. To explain this further, here is an example BT that uses PipelineSequence. Recall that ifAction_A,Action_B, orAction_CreturnedFAILUREat any point of time, the parent would have returnedFAILUREand halted any children as well. For additional details regarding thePipelineSequenceplease see thePipelineSequence configuration guide."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b838-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Introduction To Nav2 Specific Nodes\uf0c1.txt", "start_index": 1898, "chroma:document": "## Control: Recovery\uf0c1 The Recovery control node has only two children and returnsSUCCESSif and only if the first child returnsSUCCESS. If the first child returnsFAILURE, the second child will be ticked. This loop will continue until either: This node is usually used to link together an action, and a recovery action as the name suggests. The first action will typically be the \u201cmain\u201d behavior, and the second action will be something to be done in case ofFAILUREof the main behavior. Often, the ticking of the second child action will promote the chance the first action will succeed. In the above example, let\u2019s assumeComputePathToPosefails.ClearLocalCostmapwill be ticked in response, and returnSUCCESS. Now that we have cleared the costmap, let\u2019s say the robot is correctly able to compute the path andComputePathToPosenow returnsSUCCESS. Then, the parent RecoveryNode will also returnSUCCESSand the BT will be complete. For additional details regarding theRecoveryNodeplease see theRecoveryNode configuration guide."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b84c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Introduction To Nav2 Specific Nodes\uf0c1.txt", "start_index": 2920, "chroma:document": "## Control: RoundRobin\uf0c1 The RoundRobin control node ticks its children in a round robin fashion until a child returnsSUCCESS, in which the parent node will also returnSUCCESS. If all children returnFAILUREso will the parent RoundRobin. Here is an example BT we will use to walk through the concept. 2. Upon tick of the parent node, the first child (Action_A) is ticked. Let\u2019s assume on tick the child returnsRUNNING. In this case, no other children are ticked and the parent node returnsRUNNINGas well. 3. Upon the next tick, let\u2019s assume thatAction_AreturnsFAILURE. This means thatAction_Bwill get ticked next, andAction_Cremains unticked. Let\u2019s assumeAction_BreturnsRUNNINGthis time. That means the parent RoundRobin node will also returnRUNNING. 4. Upon this next tick,  let\u2019s assume thatAction_BreturnsSUCCESS. The parent RoundRobin will now halt all children and returnSUCCESS. The parent node retains this state information, and will tickAction_Cupon the next tick rather than start fromAction_Alike Step 2 did. For"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b86a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Introduction To Nav2 Specific Nodes\uf0c1.txt", "start_index": 3881, "chroma:document": "next tick rather than start fromAction_Alike Step 2 did. For additional details regarding theRecoveryNodeplease see theRoundRobin configuration guide."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b87e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Introduction To Nav2 Specific Nodes\uf0c1.txt", "start_index": 4033, "chroma:document": "Code Examples:\n\nLanguage: unknown\n\nFile: SUCCESS\n\n```\n\n<root\n\nmain_tree_to_execute=\n\n\"MainTree\"\n\n>\n\n<BehaviorTree\n\nID=\n\n\"MainTree\"\n\n>\n\n<PipelineSequence>\n\n<Action_A/>\n\n<Action_B/>\n\n<Action_C/>\n\n</PipelineSequence>\n\n</BehaviorTree>\n\n</root>\n\n```\n\nLanguage: unknown\n\nFile: FAILURE\n\n```\n\n<root\n\nmain_tree_to_execute=\n\n\"MainTree\"\n\n>\n\n<BehaviorTree\n\nID=\n\n\"MainTree\"\n\n>\n\n<RecoveryNode\n\nnumber_of_retries=\n\n\"1\"\n\n>\n\n<ComputePathToPose/>\n\n<ClearLocalCostmap/>\n\n</RecoveryNode>\n\n</BehaviorTree>\n\n</root>\n\n```\n\nLanguage: unknown\n\nFile: FAILURE\n\n```\n\n<root\n\nmain_tree_to_execute=\n\n\"MainTree\"\n\n>\n\n<BehaviorTree\n\nID=\n\n\"MainTree\"\n\n>\n\n<RoundRobin>\n\n<Action_A/>\n\n<Action_B/>\n\n<Action_C/>\n\n</RoundRobin>\n\n</BehaviorTree>\n\n</root>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b892-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Costmap2D Plugin\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Writing a New Costmap2D Plugin\uf0c1 URL: https://docs.nav2.org/plugin_tutorials/docs/writing_new_costmap2d_plugin.html#overview Section: getting_started/index.html --------------------------------------------------------------------------------\n\n## Overview\uf0c1 This tutorial shows how to create your own simplepluginfor Costmap2D. Before starting the tutorial, please check thisvideowhich contains information about Costmap2D layers design and plugins basic operational principals.\n\n## Requirements\uf0c1 It is assumed that ROS 2, Gazebo and TurtleBot3 packages are installed or built locally. Please make sure that Nav2 project is also built locally as it was made inBuild and Install.\n\n## Tutorial Steps\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b8a6-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Costmap2D Plugin\uf0c1.txt", "start_index": 704, "chroma:document": "## 1- Write a new Costmap2D plugin\uf0c1 For a demonstration, this example will create a costmap plugin that puts repeating cost gradients in the costmap. The annotated code for this tutorial can be found innavigation2_tutorialsrepository as thenav2_gradient_costmap_pluginROS 2-package. Please refer to it when making your own layer plugin for Costmap2D. The plugin classnav2_gradient_costmap_plugin::GradientLayeris inherited from basic classnav2_costmap_2d::Layer: The basic class provides the set of virtual methods API for working with costmap layers in a plugin. These methods are called at runtime byLayeredCostmap. The list of methods, their description, and necessity to have these methods in plugin\u2019s code is presented in the table below: In our example these methods have the following functionality: and setsneed_recalculation_bounds recalculation indicator: where theGRADIENT_SIZEis the size of each gradient period in map cells,GRADIENT_FACTOR- decrement of costmap\u2019s value per each step: These parameters are"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b8ba-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Costmap2D Plugin\uf0c1.txt", "start_index": 1668, "chroma:document": "of costmap\u2019s value per each step: These parameters are defined in plugin\u2019s header file."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b8ce-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Costmap2D Plugin\uf0c1.txt", "start_index": 1757, "chroma:document": "## 2- Export and make GradientLayer plugin\uf0c1 The written plugin will be loaded at runtime as its basic parent class and then will be called by plugin handling modules (for costmap2d byLayeredCostmap). Pluginlib opens a given plugin in run-time and provides methods from exported classes to be callable. The mechanism of class exporting tells pluginlib which basic class should be used during these calls. This allows to extend an application by plugins without knowing application source code or recompiling it. In our example thenav2_gradient_costmap_plugin::GradientLayerplugin\u2019s class should be dynamically loaded as anav2_costmap_2d::Layerbasic class. For this the plugin should be registered as follows: This part is usually placed at the end of cpp-file where the plugin class was written (in our examplegradient_layer.cpp). It is good practice to place these lines at the end of the file, but technically, you can also place at the top. The export of plugin is performed by"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b8ec-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Costmap2D Plugin\uf0c1.txt", "start_index": 2673, "chroma:document": "can also place at the top. The export of plugin is performed by includingpluginlib_export_plugin_description_file()cmake-function intoCMakeLists.txt. This function installs plugin description file intosharedirectory and sets ament indexes for plugin description XML to be discoverable as a plugin of selected type: Plugin description file is also should be added topackage.xml.costmap_2dis the package of the interface definition, for our caseLayer, and requires a path to the xml file: After everything is done put the plugin package intosrcdirectory of a certain ROS 2-workspace, build the plugin package (colconbuild--packages-selectnav2_gradient_costmap_plugin--symlink-install) and sourcesetup.bashfile when it necessary. Now the plugin is ready to use."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b900-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Costmap2D Plugin\uf0c1.txt", "start_index": 3433, "chroma:document": "## 3- Enable the plugin in Costmap2D\uf0c1 At the next step it is required to tell Costmap2D about new plugin. For that the plugin should be added toplugin_namesandplugin_typeslists innav2_params.yamloptionally forlocal_costmap/global_costmapin order to be enabled in run-time for Controller/Planner Server.plugin_nameslist contains the names of plugin objects. These names could be anything you want.plugin_typescontains types of listed inplugin_namesobjects. These types should correspond tonamefield of plugin class specified in plugin description XML-file. For example: YAML-file may also contain the list of parameters (if any) for each plugin, identified by plugins object name. NOTE: there could be many simultaneously loaded plugin objects of one type. For this,plugin_nameslist should contain different plugins names whether theplugin_typeswill remain the same types. For example: In this case each plugin object will be handled by its own parameters tree in a YAML-file, like:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b914-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Costmap2D Plugin\uf0c1.txt", "start_index": 4416, "chroma:document": "## 4- Run GradientLayer plugin\uf0c1 Run Turtlebot3 simulation with enabled Nav2. Detailed instructions how to make it are written atGetting Started. Below is shortcut command for that: Then goto RViz and click on the \u201c2D Pose Estimate\u201d button at the top and point the location on map as it was described inGetting Started. Robot will be localized on map and the result should be as presented at picture below. There, the gradient costmap can be seen. There are also 2 noticeable things: dynamically updated byGradientLayer::updateCosts()costmap within its bounds and global path curved by gradient:\n\nCode Examples:\n\nLanguage: unknown\n\nFile: nav2_costmap_2d::Layer\n\n```\n\nnamespace\n\nnav2_gradient_costmap_plugin\n\n{\n\nclass\n\nGradientLayer\n\n:\n\npublic\n\nnav2_costmap_2d\n\n::\n\nLayer\n\n```\n\nLanguage: unknown\n\nFile: GradientLayer::onInitialize()\n\n```\n\ndeclareParameter\n\n(\n\n\"enabled\"\n\n,\n\nrclcpp\n\n::\n\nParameterValue\n\n(\n\ntrue\n\n));\n\nnode_\n\n>\n\nget_parameter\n\n(\n\nname_\n\n+\n\n\".\"\n\n+\n\n\"enabled\"\n\n,\n\nenabled_\n\n);\n\n```\n\nLanguage: unknown"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b928-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Costmap2D Plugin\uf0c1.txt", "start_index": 5365, "chroma:document": "+\n\n\".\"\n\n+\n\n\"enabled\"\n\n,\n\nenabled_\n\n);\n\n```\n\nLanguage: unknown\n\nFile: need_recalculation_\n\n```\n\nneed_recalculation_\n\n=\n\nfalse\n\n;\n\n```\n\nLanguage: unknown File: updateWithTrueOverwrite() ``` int gradient_index ; for ( int j = min_j ; j < max_j ; j ++ ) { // Reset gradient_index each time when reaching the end of re-calculated window // by OY axis. gradient_index = 0 ; for ( int i = min_i ; i < max_i ; i ++ ) { int index = master_grid . getIndex ( i , j ); // setting the gradient cost unsigned char cost = ( LETHAL_OBSTACLE - gradient_index * GRADIENT_FACTOR ) % 255 ; if ( gradient_index <= GRADIENT_SIZE ) { gradient_index ++ ; } else { gradient_index = 0 ; } master_array [ index ] = cost ; } } ```\n\nLanguage: unknown\n\nFile: PLUGINLIB_EXPORT_CLASS\n\n```\n\n#include \"pluginlib/class_list_macros.hpp\"\n\nPLUGINLIB_EXPORT_CLASS(nav2_gradient_costmap_plugin::GradientLayer, nav2_costmap_2d::Layer)\n\n```\n\nLanguage: unknown\n\nFile: description\n\n```\n\n<library\n\npath=\n\n\"nav2_gradient_costmap_plugin_core\"\n\n>\n\n<class\n\ntype="}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b93c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Costmap2D Plugin\uf0c1.txt", "start_index": 6318, "chroma:document": "path=\n\n\"nav2_gradient_costmap_plugin_core\"\n\n>\n\n<class\n\ntype=\n\n\"nav2_gradient_costmap_plugin::GradientLayer\"\n\nbase_class_type=\n\n\"nav2_costmap_2d::Layer\"\n\n>\n\n<description>\n\nThis\n\nis\n\nan\n\nexample\n\nplugin\n\nwhich\n\nputs\n\nrepeating\n\ncosts\n\ngradients\n\nto\n\ncostmap\n\n</description>\n\n</class>\n\n</library>\n\n```\n\nLanguage: unknown\n\nFile: share\n\n```\n\npluginlib_export_plugin_description_file(nav2_costmap_2d gradient_layer.xml)\n\n```\n\nLanguage: unknown\n\nFile: Layer\n\n```\n\n<export>\n\n<costmap_2d plugin=\"${prefix}/gradient_layer.xml\" />\n\n...\n\n</export>\n\n```\n\nLanguage: unknown\n\nFile: plugin:MyPlugin::Plugin\n\n```\n\n--\n\na/nav2_bringup/bringup/params/nav2_params.yaml\n\n+++ b/nav2_bringup/bringup/params/nav2_params.yaml\n\n@@\n\n124,8 +124,8 @@ local_costmap:\n\nwidth: 3\n\nheight: 3\n\nresolution: 0.05\n\nplugins: [\"obstacle_layer\", \"voxel_layer\", \"inflation_layer\"] +      plugins: [\"obstacle_layer\", \"voxel_layer\", \"gradient_layer\"] robot_radius: 0.22\n\ninflation_layer:\n\ncost_scaling_factor: 3.0\n\n@@\n\n171,8 +171,8 @@ global_costmap:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b950-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Costmap2D Plugin\uf0c1.txt", "start_index": 7262, "chroma:document": "cost_scaling_factor: 3.0\n\n@@\n\n171,8 +171,8 @@ global_costmap:\n\nrobot_base_frame: base_link\n\nglobal_frame: map\n\nuse_sim_time: True\n\nplugins: [\"static_layer\", \"obstacle_layer\", \"voxel_layer\", \"inflation_layer\"] +      plugins: [\"static_layer\", \"obstacle_layer\", \"voxel_layer\", \"gradient_layer\"] robot_radius: 0.22\n\nresolution: 0.05\n\nobstacle_layer:\n\n```\n\nLanguage: unknown\n\nFile: plugin_types\n\n```\n\nplugins: [\"obstacle_layer\", \"gradient_layer_1\", \"gradient_layer_2\"]\n\n```\n\nLanguage: unknown File: plugin_types ``` gradient_layer_1: plugin: nav2_gradient_costmap_plugin::GradientLayer # In Iron and older versions, \"/\" was used instead of \"::\" enabled: True ... gradient_layer_2: plugin: nav2_gradient_costmap_plugin::GradientLayer # In Iron and older versions, \"/\" was used instead of \"::\" enabled: False ...\n\n```\n\nLanguage: unknown\n\nFile: plugin_types\n\n```\n\n$\n\nros2\n\nlaunch\n\nnav2_bringup\n\ntb3_simulation_launch.py\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b964-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/WouldAPlannerRecoveryHelp\uf0c1.txt", "start_index": 0, "chroma:document": "Title: WouldAPlannerRecoveryHelp\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/conditions/WouldAPlannerRecoveryHelp.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Port\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: FAILURE\n\n```\n\n<WouldAPlannerRecoveryHelp\n\nerror_code=\n\n\"{compute_path_to_pose_error_code}\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b982-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Behavior Plugin\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Writing a New Behavior Plugin\uf0c1\n\nURL: https://docs.nav2.org/plugin_tutorials/docs/writing_new_behavior_plugin.html#exporting-the-behavior-plugin\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Overview\uf0c1\n\nThis tutorial shows how to create you own Behavior Plugin.\n\nThe Behavior Plugins live in the behavior server.\n\nUnlike the planner and controller servers, each behavior will host its own unique action server.\n\nThe planners and controllers have the same API as they accomplish the same task.\n\nHowever, recoveries can be used to do a wide variety of tasks, so each behavior can have its own unique action message definition and server.\n\nThis allows for massive flexibility in the behavior server enabling any behavior action imaginable that doesn\u2019t need to have other reuse.\n\n## Requirements\uf0c1\n\n## Tutorial Steps\uf0c1\n\n## 1- Creating a new Behavior Plugin\uf0c1\n\nWe will create a simple send sms behavior."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b996-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Behavior Plugin\uf0c1.txt", "start_index": 935, "chroma:document": "We will create a simple send sms behavior.\n\nIt will use Twilio to send a message via SMS to a remote operations center.\n\nThe code in this tutorial can be found innavigation_tutorialsrepository asnav2_sms_behavior.\n\nThis package can be a considered as a reference for writing Behavior Plugin.\n\nOur example plugin implements the plugin class ofnav2_core::Behavior.\n\nHowever, we have a nice wrapper for actions innav2_behaviors, so we use thenav2_behaviors::TimedBehaviorbase class for this application instead.\n\nThis wrapper class derives from thenav2_coreclass so it can be used as a plugin, but handles the vast majority of ROS 2 action server boiler plate required.\n\nThe base class fromnav2_coreprovides 4 pure virtual methods to implement a Behavior Plugin.\n\nThe plugin will be used by the behavior server to host the plugins, but each plugin will provide their own unique action server interface.\n\nLet\u2019s learn more about the methods needed to write a Behavior Pluginif you did not use the ``nav2_behaviors`` wrapper."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b9aa-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Behavior Plugin\uf0c1.txt", "start_index": 1956, "chroma:document": "For thenav2_behaviorswrapper, which provides the ROS 2 action interface and boilerplate, we have 4 virtual methods to implement.\n\nThis tutorial uses this wrapper so these are the main elements we will address.\n\nFor this tutorial, we will be using methodsonRun(),onCycleUpdate(), andonConfigure()to create the SMS behavior.onConfigure()will be skipped for brevity, but only declares parameters.\n\nIn recoveries,onRun()method must set any initial state and kick off the behavior.\n\nFor the case of our call for help behavior, we can trivially compute all of our needs in this method.\n\nWe receive an action goal,command, which we want to process.commandcontains a fieldmessagethat contains the message we want to communicate to our mothership.\n\nThis is the \u201ccall for help\u201d message that we want to send via SMS to our brothers in arms in the operations center.\n\nWe use the service Twilio to complete this task."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b9be-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Behavior Plugin\uf0c1.txt", "start_index": 2812, "chroma:document": "We use the service Twilio to complete this task.\n\nPleasecreate an accountand get all the relevant information needed for creating the service (e.g.account_sid,auth_token, and a phone number).\n\nYou can set these values as parameters in your configuration files corresponding to theonConfigure()parameter declarations.\n\nWe use the_twilioobject to send our message with your account information from the configuration file.\n\nWe send the message and log to screen whether or not the message was sent successfully or not.\n\nWe return aFAILEDorSUCCEEDEDdepending on this value to be returned to the action client.\n\nonCycleUpdate()is trivially simple as a result of our short-running behavior.\n\nIf the behavior was instead longer running like spinning, navigating to a safe area, or getting out of a bad spot and waiting for help, then this function would be checking for timeouts or computing control values.\n\nFor our example, we simply return success because we already completed our mission inonRun()."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b9dc-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Behavior Plugin\uf0c1.txt", "start_index": 3810, "chroma:document": "The remaining methods are not used and are not mandatory to override them.\n\n## 2- Exporting the Behavior Plugin\uf0c1\n\nNow that we have created our custom behavior, we need to export our Behavior Plugin so that it would be visible to the behavior server. Plugins are loaded at runtime and if they are not visible, then our behavior server won\u2019t be able to load it. In ROS 2, exporting and loading plugins is handled bypluginlib.\n\nComing to our tutorial, classnav2_sms_bahavior::SendSmsis loaded dynamically asnav2_core::Behaviorwhich is our base class.\n\nNote that it requires pluginlib to export out plugin\u2019s class. Pluginlib would provide as macroPLUGINLIB_EXPORT_CLASSwhich does all the work of exporting.\n\nIt is good practice to place these lines at the end of the file but technically, you can also write at the top.\n\n## 3- Pass the plugin name through params file\uf0c1\n\nTo enable the plugin, we need to modify thenav2_params.yamlfile as below to replace following params\n\nwith"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13b9f0-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Behavior Plugin\uf0c1.txt", "start_index": 4778, "chroma:document": "with\n\nIn the above snippet, you can observe that we add the SMS behavior under thesend_smsROS 2 action server name.\n\nWe also tell the behavior server that thesend_smsis of typeSendSmsand give it our parameters for your Twilio account.\n\n## 4- Run Behavior Plugin\uf0c1\n\nRun Turtlebot3 simulation with enabled Nav2. Detailed instruction how to make it are written atGetting Started. Below is shortcut command for that:\n\nIn a new terminal run:\n\nCode Examples:\n\nLanguage: unknown\n\nFile: onRun()\n\n```\n\nStatus\n\nSendSms::onRun\n\n(\n\nconst\n\nstd\n\n::\n\nshared_ptr\n\n<\n\nconst\n\nAction\n\n::\n\nGoal\n\n>\n\ncommand\n\n)\n\n{\n\nstd\n\n::\n\nstring\n\nresponse\n\n;\n\nbool\n\nmessage_success\n\n=\n\n_twilio\n\n>\n\nsend_message\n\n(\n\n_to_number\n\n,\n\n_from_number\n\n,\n\ncommand\n\n>\n\nmessage\n\n,\n\nresponse\n\n,\n\n\"\"\n\n,\n\nfalse\n\n);\n\nif\n\n(\n\n!\n\nmessage_success\n\n)\n\n{\n\nRCLCPP_INFO\n\n(\n\nnode_\n\n>\n\nget_logger\n\n(),\n\n\"SMS send failed.\"\n\n);\n\nreturn\n\nResultStatus\n\n{\n\nStatus\n\n::\n\nFAILED\n\n};\n\n}\n\nRCLCPP_INFO\n\n(\n\nnode_\n\n>\n\nget_logger\n\n(),\n\n\"SMS sent successfully!\"\n\n);\n\nreturn\n\nResultStatus\n\n{\n\nStatus"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13ba04-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Behavior Plugin\uf0c1.txt", "start_index": 5738, "chroma:document": "\"SMS sent successfully!\"\n\n);\n\nreturn\n\nResultStatus\n\n{\n\nStatus\n\n::\n\nSUCCEEDED\n\n};\n\n}\n\n```\n\nLanguage: unknown\n\nFile: onRun()\n\n```\n\nStatus\n\nSendSms::onCycleUpdate\n\n()\n\n{\n\nreturn\n\nStatus\n\n::\n\nSUCCEEDED\n\n;\n\n}\n\n```\n\nLanguage: unknown\n\nFile: nav2_core::Behavior\n\n```\n\n#include\n\n\"pluginlib/class_list_macros.hpp\"\n\nPLUGINLIB_EXPORT_CLASS\n\n(\n\nnav2_sms_bahavior\n\n::\n\nSendSms\n\n,\n\nnav2_core\n\n::\n\nBehavior\n\n)\n\n```\n\nLanguage: unknown\n\nFile: description\n\n```\n\n<library\n\npath=\n\n\"nav2_sms_behavior_plugin\"\n\n>\n\n<class\n\ntype=\n\n\"nav2_sms_behavior::SendSms\"\n\nbase_class_type=\n\n\"nav2_core::Behavior\"\n\n>\n\n<description>\n\nThis\n\nis\n\nan\n\nexample\n\nplugin\n\nwhich\n\nproduces\n\nan\n\nSMS\n\ntext\n\nmessage\n\nrecovery.\n\n</description>\n\n</class>\n\n</library>\n\n```\n\nLanguage: unknown\n\nFile: share\n\n```\n\npluginlib_export_plugin_description_file(nav2_core behavior_plugin.xml)\n\n```\n\nLanguage: unknown\n\nFile: package.xml\n\n```\n\n<export>\n\n<build_type>\n\nament_cmake\n\n</build_type>\n\n<nav2_core\n\nplugin=\n\n\"${prefix}/behavior_plugin.xml\"\n\n/>\n\n</export>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13ba18-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Behavior Plugin\uf0c1.txt", "start_index": 6682, "chroma:document": "plugin=\n\n\"${prefix}/behavior_plugin.xml\"\n\n/>\n\n</export>\n\n```\n\nLanguage: unknown\n\nFile: nav2_params.yaml\n\n```\n\nbehavior_server\n\n:\n\n# Humble and later\n\nrecoveries_server\n\n:\n\n# Galactic and earlier\n\nros__parameters\n\n:\n\ncostmap_topic\n\n:\n\nlocal_costmap/costmap_raw\n\nfootprint_topic\n\n:\n\nlocal_costmap/published_footprint\n\ncycle_frequency\n\n:\n\n10.0\n\nbehavior_plugins\n\n:\n\n[\n\n\"spin\"\n\n,\n\n\"backup\"\n\n,\n\n\"wait\"\n\n]\n\n# Humble and later\n\nrecovery_plugins\n\n:\n\n[\n\n\"spin\"\n\n,\n\n\"backup\"\n\n,\n\n\"wait\"\n\n]\n\n# Galactic and earlier\n\nspin\n\n:\n\nplugin\n\n:\n\n\"nav2_behaviors::Spin\"\n\n# In Iron and older versions, \"/\" was used instead of \"::\"\n\nbackup\n\n:\n\nplugin\n\n:\n\n\"nav2_behaviors::BackUp\"\n\n# In Iron and older versions, \"/\" was used instead of \"::\"\n\nwait\n\n:\n\nplugin\n\n:\n\n\"nav2_behaviors::Wait\"\n\n# In Iron and older versions, \"/\" was used instead of \"::\"\n\nglobal_frame\n\n:\n\nodom\n\nrobot_base_frame\n\n:\n\nbase_link\n\ntransform_timeout\n\n:\n\n0.1\n\nuse_sim_time\n\n:\n\ntrue\n\nsimulate_ahead_time\n\n:\n\n2.0\n\nmax_rotational_vel\n\n:\n\n1.0\n\nmin_rotational_vel\n\n:\n\n0.4"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13ba2c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Behavior Plugin\uf0c1.txt", "start_index": 7628, "chroma:document": ":\n\n2.0\n\nmax_rotational_vel\n\n:\n\n1.0\n\nmin_rotational_vel\n\n:\n\n0.4\n\nrotational_acc_lim\n\n:\n\n3.2\n\n```\n\nLanguage: unknown\n\nFile: nav2_params.yaml\n\n```\n\nbehavior_server\n\n:\n\n# Humble and newer\n\nrecoveries_server\n\n:\n\n# Galactic and earlier\n\nros__parameters\n\n:\n\nlocal_costmap_topic\n\n:\n\nlocal_costmap/costmap_raw\n\nlocal_footprint_topic\n\n:\n\nlocal_costmap/published_footprint\n\nglobal_costmap_topic\n\n:\n\nglobal_costmap/costmap_raw\n\nglobal_footprint_topic\n\n:\n\nglobal_costmap/published_footprint\n\ncycle_frequency\n\n:\n\n10.0\n\nbehavior_plugins\n\n:\n\n[\n\n\"spin\"\n\n,\n\n\"backup\"\n\n,\n\n\"wait\"\n\n,\n\n\"send_sms\"\n\n]\n\n# Humble and newer\n\nrecovery_plugins\n\n:\n\n[\n\n\"spin\"\n\n,\n\n\"backup\"\n\n,\n\n\"wait\"\n\n,\n\n\"send_sms\"\n\n]\n\n# Galactic and earlier\n\nspin\n\n:\n\nplugin\n\n:\n\n\"nav2_behaviors::Spin\"\n\n# In Iron and older versions, \"/\" was used instead of \"::\"\n\nbackup\n\n:\n\nplugin\n\n:\n\n\"nav2_behaviors::BackUp\"\n\n# In Iron and older versions, \"/\" was used instead of \"::\"\n\nwait\n\n:\n\nplugin\n\n:\n\n\"nav2_behaviors::Wait\"\n\n# In Iron and older versions, \"/\" was used instead of \"::\"\n\nsend_sms"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13ba4a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Behavior Plugin\uf0c1.txt", "start_index": 8641, "chroma:document": "send_sms\n\n:\n\nplugin\n\n:\n\n\"nav2_sms_behavior::SendSms\"\n\n# In Iron and older versions, \"/\" was used instead of \"::\"\n\naccount_sid\n\n:\n\n...\n\n# your sid\n\nauth_token\n\n:\n\n...\n\n# your token\n\nfrom_number\n\n:\n\n...\n\n# your number\n\nto_number\n\n:\n\n...\n\n# the operations center number\n\nglobal_frame\n\n:\n\nodom\n\nrobot_base_frame\n\n:\n\nbase_link\n\ntransform_timeout\n\n:\n\n0.1\n\nuse_sim_time\n\n:\n\ntrue\n\nsimulate_ahead_time\n\n:\n\n2.0\n\nmax_rotational_vel\n\n:\n\n1.0\n\nmin_rotational_vel\n\n:\n\n0.4\n\nrotational_acc_lim\n\n:\n\n3.2\n\n```\n\nLanguage: unknown\n\nFile: SendSms\n\n```\n\n$\n\nros2\n\nlaunch\n\nnav2_bringup\n\ntb3_simulation_launch.py\n\nparams_file:\n\n=\n\n/path/to/your_params_file.yaml\n\n```\n\nLanguage: unknown\n\nFile: SendSms\n\n```\n\n$\n\nros2\n\naction\n\nsend_goal\n\n\"send_sms\"\n\nnav2_sms_behavior/action/SendSms\n\n\"{message : Hello!! Navigation2 World }\"\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13ba5e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/About and Contact\uf0c1.txt", "start_index": 0, "chroma:document": "Title: About and Contact\uf0c1\n\nURL: https://docs.nav2.org/about/index.html#contact\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13ba72-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/About and Contact\uf0c1.txt", "start_index": 199, "chroma:document": "## About\uf0c1 Navigation is a community effort to lower the barrier of entry of mobile robotics technology for all. This project is one of the flagship projects along with MoveIt that acts as an applications entry point and frameworks for ROS. Navigation in ROS 2 builds on the wild success of the original Navigation Stack (Nav Stack) in ROS (1). This project has been used by researchers, educators, and industry for over 10 years. There are very few projects that have lasted as long or were as successful as ROS (1) Navigation. We would like to thank David Lu!! and Mike Ferguson for their tireless over the span of a decade to keep the Nav Stack alive and well. Without their hard work, this project would not have been able to happen. For a list of robots using Navigation2, seeRobots Using. Aslas, as time moves on, so must we. ROS (1) had a great run and those of us that build projects using it will remember it fondly(ish). With change comes possibilities. Navigation2 builds on the success but redesigns the"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13ba86-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/About and Contact\uf0c1.txt", "start_index": 1162, "chroma:document": "Navigation2 builds on the success but redesigns the framework to be more flexible and the feedback gathered over 10 years. We strive to create an open community and encourage new ROS users and experts alike to collaborate. However, that can\u2019t happen without your issues, pull requests, and support. Navigation, like all open-source projects, is kept going by a dedicated group of developers, maintainers, users, and collaborators. We would like to thank here our current and past contributors and maintainers. If you or your organization are interested in sponsoring Navigation or any work around it, please reach out to the current project lead. Our current leadership team includes: Our former leadership team includes:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13ba9a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/About and Contact\uf0c1.txt", "start_index": 1885, "chroma:document": "## Contact\uf0c1 If you are interested in contacting someone about Navigation, ROS 2, or related projects, please email the project leader or emailinfo@opennav.org. We intentionally make our emails easy to find. If your inquiry relates to bugs or open-source feature requests, consider posting a ticket on our GitHub project. If your inquiry relates to configuration support or private feature development, reach out and we may be able to connect you with independent consultants or contractors that know this project well. Check out the Navigation 2Slackcommunity."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bab8-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/RoundRobin\uf0c1.txt", "start_index": 0, "chroma:document": "Title: RoundRobin\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/controls/RoundRobin.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: use_cancel_deceleration\n\n```\n\n<RoundRobin>\n\n<!-\n\nAdd tree components here--\n\n>\n\n</RoundRobin>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bacc-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/PreferForwardCritic\uf0c1.txt", "start_index": 0, "chroma:document": "Title: PreferForwardCritic\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/trajectory_critics/prefer_forward.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Parameters\uf0c1 <dwbplugin>: DWB plugin name defined in thecontroller_plugin_idsparameter inController Server. <name>: PreferForwardCritic critic name defined in the<dwb plugin>.criticsparameter defined inDWB Controller."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bae0-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/SmoothPath\uf0c1.txt", "start_index": 0, "chroma:document": "Title: SmoothPath\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/actions/Smooth.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Ports\uf0c1\n\n## Output Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: SmoothPath\n\n```\n\n<SmoothPath\n\nunsmoothed_path=\n\n\"{path}\"\n\nsmoothed_path=\n\n\"{path}\"\n\nmax_smoothing_duration=\n\n\"3.0\"\n\nsmoother_id=\n\n\"simple_smoother\"\n\ncheck_for_collisions=\n\n\"false\"\n\nsmoothing_duration=\n\n\"{smoothing_duration_used}\"\n\nwas_completed=\n\n\"{smoothing_completed}\"\n\nerror_code_id=\n\n\"{smoothing_path_error_code}\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13baf4-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/DistanceTraveled\uf0c1.txt", "start_index": 0, "chroma:document": "Title: DistanceTraveled\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/conditions/DistanceTraveled.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Parameters\uf0c1\n\n## Example\uf0c1\n\n## Input Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: use_cancel_deceleration\n\n```\n\nbt_navigator\n\n:\n\nros__parameters\n\n:\n\n# other bt_navigator parameters\n\ntransform_tolerance\n\n:\n\n0.1\n\n```\n\nLanguage: unknown\n\nFile: use_cancel_deceleration\n\n```\n\n<DistanceTraveled\n\ndistance=\n\n\"0.8\"\n\nglobal_frame=\n\n\"map\"\n\nrobot_base_frame=\n\n\"base_link\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bb08-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/CancelSpin\uf0c1.txt", "start_index": 0, "chroma:document": "Title: CancelSpin\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/actions/CancelSpin.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: spin\n\n```\n\n<CancelSpin\n\nserver_name=\n\n\"Spin\"\n\nserver_timeout=\n\n\"10\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bb1c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Follow Dynamic Point\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Follow Dynamic Point\uf0c1\n\nURL: https://docs.nav2.org/behavior_trees/trees/follow_point.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\nCode Examples:\n\nLanguage: unknown\n\nFile: KeepRunningUntilFailure\n\n```\n\n<root\n\nmain_tree_to_execute=\n\n\"MainTree\"\n\n>\n\n<BehaviorTree\n\nID=\n\n\"MainTree\"\n\n>\n\n<PipelineSequence\n\nname=\n\n\"NavigateWithReplanning\"\n\n>\n\n<ControllerSelector\n\nselected_controller=\n\n\"{selected_controller}\"\n\ndefault_controller=\n\n\"FollowPath\"\n\ntopic_name=\n\n\"controller_selector\"\n\n/>\n\n<PlannerSelector\n\nselected_planner=\n\n\"{selected_planner}\"\n\ndefault_planner=\n\n\"GridBased\"\n\ntopic_name=\n\n\"planner_selector\"\n\n/>\n\n<RateController\n\nhz=\n\n\"1.0\"\n\n>\n\n<Sequence>\n\n<GoalUpdater\n\ninput_goal=\n\n\"{goal}\"\n\noutput_goal=\n\n\"{updated_goal}\"\n\n>\n\n<ComputePathToPose\n\ngoal=\n\n\"{updated_goal}\"\n\npath=\n\n\"{path}\"\n\nplanner_id=\n\n\"{selected_planner}\"\n\nerror_code_id=\n\n\"{compute_path_error_code}\"\n\n/>\n\n</GoalUpdater>\n\n<TruncatePath\n\ndistance=\n\n\"1.0\"\n\ninput_path=\n\n\"{path}\""}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bb30-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Follow Dynamic Point\uf0c1.txt", "start_index": 970, "chroma:document": "<TruncatePath\n\ndistance=\n\n\"1.0\"\n\ninput_path=\n\n\"{path}\"\n\noutput_path=\n\n\"{truncated_path}\"\n\n/>\n\n</Sequence>\n\n</RateController>\n\n<KeepRunningUntilFailure>\n\n<FollowPath\n\npath=\n\n\"{truncated_path}\"\n\ncontroller_id=\n\n\"{selected_controller}\"\n\nerror_code_id=\n\n\"{follow_path_error_code}\"\n\n/>\n\n</KeepRunningUntilFailure>\n\n</PipelineSequence>\n\n</BehaviorTree>\n\n</root>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bb4e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/BaseObstacleCritic\uf0c1.txt", "start_index": 0, "chroma:document": "Title: BaseObstacleCritic\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/trajectory_critics/base_obstacle.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Parameters\uf0c1 <dwbplugin>: DWB plugin name defined in thecontroller_plugin_idsparameter inController Server. <name>: BaseObstacleCritic critic name defined in the<dwb plugin>.criticsparameter defined inDWB Controller."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bb62-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Wait\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Wait\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/actions/Wait.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: use_cancel_deceleration\n\n```\n\n<Wait\n\nwait_duration=\n\n\"1.0\"\n\nserver_name=\n\n\"wait_server\"\n\nserver_timeout=\n\n\"10\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bb76-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/AssistedTeleop\uf0c1.txt", "start_index": 0, "chroma:document": "Title: AssistedTeleop\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/actions/AssistedTeleop.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: AssistedTeleop\n\n```\n\n<AssistedTeleop\n\nis_recovery=\n\n\"false\"\n\nserver_name=\n\n\"assisted_teleop_server\"\n\nserver_timeout=\n\n\"10\"\n\nerror_code_id=\n\n\"{assisted_teleop_error_code}\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bb8a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Behavior Tree Plugin\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Writing a New Behavior Tree Plugin\uf0c1\n\nURL: https://docs.nav2.org/plugin_tutorials/docs/writing_new_bt_plugin.html#creating-a-new-bt-plugin\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Overview\uf0c1\n\nThis tutorial shows how to create your own behavior tree (BT) plugin.\n\nThe BT plugins are used as nodes in the behavior tree XML processed by the BT Navigator for navigation logic.\n\n## Requirements\uf0c1\n\n## Tutorial Steps\uf0c1\n\n## 1- Creating a new BT Plugin\uf0c1\n\nWe will create a simple BT plugin node to perform an action on another server.\n\nFor this example, we\u2019re going to analyze the simplest behavior tree action node in thenav2_behavior_treepackage, thewaitnode.\n\nBeyond this example of an action BT node, you can also create custom decorator, condition, and control nodes."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bba8-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Behavior Tree Plugin\uf0c1.txt", "start_index": 850, "chroma:document": "Each node type has a unique role in the behavior tree to perform actions like planning, control the flow of the BT, check the status of a condition, or modify the output of other BT nodes.\n\nThe code in this tutorial can be found innav2_behavior_treepackage as thewait_actionnode.\n\nThis action node can be considered as a reference for writing other action node plugins.\n\nOur example plugin inherits from the base classnav2_behavior_tree::BtActionNode.\n\nThe base class is a wrapper on the BehaviorTree.CPPBT::ActionNodeBasethat simplifies BT action nodes that utilize ROS 2 action clients.\n\nAnBTActionNodeis both a BT action and uses ROS 2 action network interfaces for calling a remote server to do some work.\n\nWhen working with other types of BT nodes (e.g. decorator, control, condition) use the corresponding BT node,BT::DecoratorNode,BT::ControlNode, orBT::ConditionNode.\n\nFor BT action nodes that donotutilize ROS 2 action interfaces, use theBT::ActionNodeBasebase class itself."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bbbc-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Behavior Tree Plugin\uf0c1.txt", "start_index": 1835, "chroma:document": "TheBTActionNodeclass provides 5 virtual methods to use, in addition to the information provided in the constructor.\n\nLet\u2019s learn more about the methods needed to write a BT action plugin.\n\nFor this tutorial, we will only be using theon_tick()method.\n\nIn the constructor, we need to get any non-variable parameters that apply to the behavior tree node.\n\nIn this example, we need to get the value of the duration to sleep from the input port of the behavior tree XML.\n\nHere, we give the input of thexml_tag_name, which tells the BT node plugin the string in the XML that corresponds to this node.\n\nThis will be seen later when we register this BT node as a plugin.\n\nIt also takes in the string name of the action server that it will call to execute some behavior.\n\nFinally, a set of configurations that we can safely ignore for the purposes of most node plugins."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bbd0-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Behavior Tree Plugin\uf0c1.txt", "start_index": 2697, "chroma:document": "We then call theBTActionNodeconstructor. As can be seen, it\u2019s templated by the ROS 2 action type, so we give it thenav2_msgs::action::Waitaction message type and forward our other inputs.\n\nTheBTActionNodehas thetick()method, which is called directly by the behavior tree when this node is called from the tree.on_tick()is then called before sending the action client goal.\n\nIn the body of the constructor, we get the input portgetInputof the parameterwait_duration, which can be configured independently for every instance of thewaitnode in the tree.\n\nIt is set in thedurationparameter and inserted into thegoal_.\n\nThegoal_class variable is the goal that the ROS 2 action client will send to the action server.\n\nSo in this example, we set the duration to the time we want to wait by so that the action server knows the specifics of our request.\n\nTheprovidedPorts()method gives us the opportunity to define input or output ports."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bbe4-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Behavior Tree Plugin\uf0c1.txt", "start_index": 3627, "chroma:document": "Ports can be thought of as parameters that the behavior tree node has access to from the behavior tree itself.\n\nFor our example, there is only a single input port, thewait_durationwhich can be set in the BT XML for each instance of thewaitrecovery.\n\nWe set the type,int, the default1, the namewait_duration, and a description of the portWaittime.\n\nTheon_tick()method is called when the behavior tree ticks a specific node.\n\nFor the wait BT node, we simply want to notify a counter on the blackboard that an action plugin that corresponds to a recovery was ticked.\n\nThis is useful to keep metrics about the number of recoveries executed during a specific navigation run.\n\nYou could also log or update thegoal_waiting duration if that is a variable input.\n\nThe remaining methods are not used and are not mandatory to override them.\n\nOnly some BT node plugins will require overridingon_wait_for_result()to check for preemption or check a timeout."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bc02-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Behavior Tree Plugin\uf0c1.txt", "start_index": 4572, "chroma:document": "The success, aborted, and cancelled methods will default toSUCCESS,FAILURE,SUCCESSrespectively, if not overridden.\n\n## 2- Exporting the planner plugin\uf0c1\n\nNow that we have created our custom BT node, we need to export our plugin so that it would be visible to the behavior tree when it loads a custom BT XML.\n\nPlugins are loaded at runtime, and if they are not visible, then our BT Navigator server won\u2019t be able to load them or use them.\n\nIn BehaviorTree.CPP, exporting and loading plugins is handled by theBT_REGISTER_NODESmacro.\n\nIn this macro, we must create aNodeBuilderso that our custom action node can have a non-default constructor signature (for the action and xml names).\n\nThis lambda will return a unique pointer to the behavior tree node we have created.\n\nFill in the constructor with the relevant information, giving it thenameandconfiggiven in the function arguments.\n\nThen define the ROS 2 action server\u2019s name that this BT node will call, in this case, it\u2019s theWaitaction."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bc16-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Behavior Tree Plugin\uf0c1.txt", "start_index": 5561, "chroma:document": "We finally give the builder to a factory to register.Waitgiven to the factory is the name in the behavior tree XML file that corresponds to this BT node plugin.\n\nAn example can be seen below, where theWaitBT XML node specifies a non-variable input portwait_durationof 5 seconds.\n\n## 3- Add plugin library name to config\uf0c1\n\nIn order for the BT Navigator node to discover the plugin we\u2019ve just registered, we need to list the plugin library name under the bt_navigator node in the configuration YAML file. Configuration should look similar to the one shown below. Take note of nav2_wait_action_bt_node listed under plugin_lib_names.\n\n## 4- Run Your Custom plugin\uf0c1\n\nNow you can use a behavior tree with your custom BT node.\n\nFor example, thenavigate_w_replanning_and_recovery.xmlfile is shown below.\n\nSelect this BT XML file in your specific navigation request inNavigateToPoseor as the default behavior tree in the BT Navigator\u2019s configuration yaml file.\n\nCode Examples:\n\nLanguage: unknown\n\nFile: on_tick()\n\n```\n\nWaitAction"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bc2a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Behavior Tree Plugin\uf0c1.txt", "start_index": 6530, "chroma:document": "Language: unknown\n\nFile: on_tick()\n\n```\n\nWaitAction\n\n::\n\nWaitAction\n\n(\n\nconst\n\nstd\n\n::\n\nstring\n\n&\n\nxml_tag_name\n\n,\n\nconst\n\nstd\n\n::\n\nstring\n\n&\n\naction_name\n\n,\n\nconst\n\nBT\n\n::\n\nNodeConfiguration\n\n&\n\nconf\n\n)\n\n:\n\nBtActionNode\n\n<\n\nnav2_msgs\n\n::\n\naction\n\n::\n\nWait\n\n>\n\n(\n\nxml_tag_name\n\n,\n\naction_name\n\n,\n\nconf\n\n)\n\n{\n\nint\n\nduration\n\n;\n\ngetInput\n\n(\n\n\"wait_duration\"\n\n,\n\nduration\n\n);\n\nif\n\n(\n\nduration\n\n<=\n\n0\n\n)\n\n{\n\nRCLCPP_WARN\n\n(\n\nnode_\n\n>\n\nget_logger\n\n(),\n\n\"Wait duration is negative or zero \"\n\n\"(%i). Setting to positive.\"\n\n,\n\nduration\n\n);\n\nduration\n\n=\n\n1\n\n;\n\n}\n\ngoal_\n\n.\n\ntime\n\n.\n\nsec\n\n=\n\nduration\n\n;\n\n}\n\n```\n\nLanguage: unknown\n\nFile: Waittime\n\n```\n\nstatic\n\nBT\n\n::\n\nPortsList\n\nprovidedPorts\n\n()\n\n{\n\nreturn\n\nprovidedBasicPorts\n\n(\n\n{\n\nBT\n\n::\n\nInputPort\n\n<\n\nint\n\n>\n\n(\n\n\"wait_duration\"\n\n,\n\n1\n\n,\n\n\"Wait time\"\n\n)\n\n});\n\n}\n\n```\n\nLanguage: unknown\n\nFile: goal_\n\n```\n\nvoid\n\nWaitAction::on_tick\n\n()\n\n{\n\nincrement_recovery_count\n\n();\n\n}\n\n```\n\nLanguage: unknown\n\nFile: BT_REGISTER_NODES\n\n```\n\nBT_REGISTER_NODES\n\n(\n\nfactory\n\n)\n\n{\n\nBT\n\n::"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bc3e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Behavior Tree Plugin\uf0c1.txt", "start_index": 7497, "chroma:document": "```\n\nBT_REGISTER_NODES\n\n(\n\nfactory\n\n)\n\n{\n\nBT\n\n::\n\nNodeBuilder\n\nbuilder\n\n=\n\n[](\n\nconst\n\nstd\n\n::\n\nstring\n\n&\n\nname\n\n,\n\nconst\n\nBT\n\n::\n\nNodeConfiguration\n\n&\n\nconfig\n\n)\n\n{\n\nreturn\n\nstd\n\n::\n\nmake_unique\n\n<\n\nnav2_behavior_tree\n\n::\n\nWaitAction\n\n>\n\n(\n\nname\n\n,\n\n\"wait\"\n\n,\n\nconfig\n\n);\n\n};\n\nfactory\n\n.\n\nregisterBuilder\n\n<\n\nnav2_behavior_tree\n\n::\n\nWaitAction\n\n>\n\n(\n\n\"Wait\"\n\n,\n\nbuilder\n\n);\n\n}\n\n```\n\nLanguage: unknown\n\nFile: wait_duration\n\n```\n\n<Wait\n\nwait_duration=\n\n\"5\"\n\n/>\n\n```\n\nLanguage: unknown\n\nFile: wait_duration\n\n```\n\nbt_navigator:\n\nros__parameters:\n\nuse_sim_time: True\n\nglobal_frame: map\n\nrobot_base_frame: base_link\n\nodom_topic: /odom\n\ndefault_bt_xml_filename: \"navigate_w_replanning_and_recovery.xml\"\n\nplugin_lib_names:\n\nnav2_back_up_action_bt_node # other plugin\n\nnav2_wait_action_bt_node    # our new plugin\n\n```\n\nLanguage: unknown\n\nFile: NavigateToPose\n\n```\n\n<root\n\nmain_tree_to_execute=\n\n\"MainTree\"\n\n>\n\n<BehaviorTree\n\nID=\n\n\"MainTree\"\n\n>\n\n<RecoveryNode\n\nnumber_of_retries=\n\n\"6\"\n\nname=\n\n\"NavigateRecovery\"\n\n>"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bc52-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Behavior Tree Plugin\uf0c1.txt", "start_index": 8450, "chroma:document": "number_of_retries=\n\n\"6\"\n\nname=\n\n\"NavigateRecovery\"\n\n>\n\n<PipelineSequence\n\nname=\n\n\"NavigateWithReplanning\"\n\n>\n\n<RateController\n\nhz=\n\n\"1.0\"\n\n>\n\n<RecoveryNode\n\nnumber_of_retries=\n\n\"1\"\n\nname=\n\n\"ComputePathToPose\"\n\n>\n\n<ComputePathToPose\n\ngoal=\n\n\"{goal}\"\n\npath=\n\n\"{path}\"\n\nplanner_id=\n\n\"GridBased\"\n\n/>\n\n<ClearEntireCostmap\n\nname=\n\n\"ClearGlobalCostmap-Context\"\n\nservice_name=\n\n\"global_costmap/clear_entirely_global_costmap\"\n\n/>\n\n</RecoveryNode>\n\n</RateController>\n\n<RecoveryNode\n\nnumber_of_retries=\n\n\"1\"\n\nname=\n\n\"FollowPath\"\n\n>\n\n<FollowPath\n\npath=\n\n\"{path}\"\n\ncontroller_id=\n\n\"FollowPath\"\n\n/>\n\n<ClearEntireCostmap\n\nname=\n\n\"ClearLocalCostmap-Context\"\n\nservice_name=\n\n\"local_costmap/clear_entirely_local_costmap\"\n\n/>\n\n</RecoveryNode>\n\n</PipelineSequence>\n\n<ReactiveFallback\n\nname=\n\n\"RecoveryFallback\"\n\n>\n\n<GoalUpdated/>\n\n<SequenceStar\n\nname=\n\n\"RecoveryActions\"\n\n>\n\n<ClearEntireCostmap\n\nname=\n\n\"ClearLocalCostmap-Subtree\"\n\nservice_name=\n\n\"local_costmap/clear_entirely_local_costmap\"\n\n/>\n\n<ClearEntireCostmap\n\nname="}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bc70-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Behavior Tree Plugin\uf0c1.txt", "start_index": 9423, "chroma:document": "/>\n\n<ClearEntireCostmap\n\nname=\n\n\"ClearGlobalCostmap-Subtree\"\n\nservice_name=\n\n\"global_costmap/clear_entirely_global_costmap\"\n\n/>\n\n<Spin\n\nspin_dist=\n\n\"1.57\"\n\n/>\n\n<Wait\n\nwait_duration=\n\n\"5\"\n\n/>\n\n</SequenceStar>\n\n</ReactiveFallback>\n\n</RecoveryNode>\n\n</BehaviorTree>\n\n</root>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bc84-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Range Sensor Parameters\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Range Sensor Parameters\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/costmap\n\nplugins/range.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bc98-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Coverage Server\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Coverage Server\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/configuring\n\ncoverage\n\nserver.html#example\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Parameters\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: opennav_row_coverage\n\n```\n\ncoverage_server\n\n:\n\nros__parameters\n\n:\n\naction_server_result_timeout\n\n:\n\n10.0\n\ncoordinates_in_cartesian_frame\n\n:\n\ntrue\n\nrobot_width\n\n:\n\n2.1\n\noperation_width\n\n:\n\n2.5\n\nmin_turning_radius\n\n:\n\n0.4\n\nlinear_curv_change\n\n:\n\n2.0\n\ndefault_allow_overlap\n\n:\n\ntrue\n\ndefault_headland_width\n\n:\n\n0.5\n\ndefault_path_continuity_type\n\n:\n\n\"CONTINUOUS\"\n\ndefault_path_type\n\n:\n\n\"DUBINS\"\n\ndefault_route_type\n\n:\n\n\"BOUSTROPHEDON\"\n\ndefault_swath_angle_type\n\n:\n\n\"BRUTE_FORCE\"\n\ndefault_swath_type\n\n:\n\n\"LENGTH\"\n\ndefault_turn_point_distance\n\n:\n\n0.1\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bcac-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating with Keepout Zones\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Navigating with Keepout Zones\uf0c1\n\nURL: https://docs.nav2.org/tutorials/docs/navigation2_with_keepout_filter.html#configure-costmap-filter-info-publisher-server\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Overview\uf0c1\n\nThis tutorial shows how to simply utilize keep-out/safety zones where robots can\u2019t enter and preferred lanes for robots moving in industrial environments and warehouses. All this functionality is being covered byKeepoutFiltercostmap filter plugin which will be enabled and used in this document.\n\n## Requirements\uf0c1\n\nIt is assumed that ROS 2, Gazebo and TurtleBot3 packages are installed or built locally. Please make sure that Nav2 project is also built locally as it was made inBuild and Install.\n\n## Tutorial Steps\uf0c1\n\n## 1. Prepare filter mask\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bcc0-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating with Keepout Zones\uf0c1.txt", "start_index": 797, "chroma:document": "## Tutorial Steps\uf0c1\n\n## 1. Prepare filter mask\uf0c1\n\nAs was written inNavigation Concepts, any Costmap Filter (including Keepout Filter) are reading the data marked in a filter mask file. Filter mask - is the usual Nav2 2D-map distributed through PGM, PNG or BMP raster file with its metadata containing in a YAML file. The following steps help to understand how to make a new filter mask:\n\nCreate a new image with a PGM/PNG/BMP format: copyturtlebot3_world.pgmmain map which will be used in a world simulation from aNav2repository to a newkeepout_mask.pgmfile."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bcd4-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating with Keepout Zones\uf0c1.txt", "start_index": 1355, "chroma:document": "Openkeepout_mask.pgmin your favourite raster graphics editor (as an example could be taken GIMP editor). The lightness of each pixel on the mask means an encoded information for the specific costmap filter you are going to use. Color lightness of each pixel belongs to the[0..255]range (or[0..100]in percent scale), where0means black color and255- white. Another term \u201cdarkness\u201d will be understood as the exact opposite of lightness. In other wordscolor_darkness=100%-color_lightness.\n\nIn the GIMP lightness is expressed through color components value (e.g.Rin percent scale) and might be set by movingLslider in color changing tool:"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bce8-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating with Keepout Zones\uf0c1.txt", "start_index": 1990, "chroma:document": "The incoming mask file is being read by the Map Server and converted intoOccupancyGridvalues from[0..100]range (where0means free cell,100- occupied, anything in between - less or more occupied cells on map) or be equal to-1for unknown value. In Nav2 stack each map hasmodeattribute which could betrinary,scaleorraw. Depending onmodeselected, the color lightness of PGM/PNG/BMP is being converted toOccupancyGridby one of the following principles:\n\nwherefree_threshandoccupied_threshthresholds are expressed in percentage of maximum lightness/darkness level (255). Map mode and thresholds are placed in YAML metadata file (see below) asmode,free_threshandoccupied_threshfields."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bd06-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating with Keepout Zones\uf0c1.txt", "start_index": 2668, "chroma:document": "For Keepout FilterOccupancyGridvalue is proportional to the passibility of area corresponding to this cell: higher values means more impassable areas. Cells with occupied values covers keep-out zones where robot will never enter or pass through.KeepoutFiltercan also act as a \u201cweighted areas layer\u201d by setting theOccupancyGridto something between[1-99]non-occupied values. Robot is allowed to move in these areas, however its presence there would be \u201cundesirable\u201d there (the higher the value, the sooner planners will try to get the robot out of this area)."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bd1a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating with Keepout Zones\uf0c1.txt", "start_index": 3227, "chroma:document": "Keepout Filter also covers preferred lanes case, where robots should moving only on pre-defined lanes and permitted areas e.g. in warehouses. To use this feaure you need to prepare the mask image where the lanes and permitted areas will be marked with free values while all other areas will be occupied. TIP for drawing the mask in atrinaryorscalemode: typically, amount of pixels belonging to lanes are much less than pixels covering other areas. In this case initially all lanes data might be drawn with a black pencil over white background and then (just before saving a PGM) \u201ccolor inversion\u201d tool in a image raster editor might be used.\n\nFor simplicity, in the example fill the areas with black color (intrinarymode this means occupied map) that you are going to mark as a keep-out zones:\n\nAfter all keepout areas will be filled save thekeepout_mask.pgmimage."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bd2e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating with Keepout Zones\uf0c1.txt", "start_index": 4093, "chroma:document": "Like all other maps, filter mask should have its own YAML metadata file. Copyturtlebot3_world.yamltokeepout_mask.yaml. Openkeepout_mask.yamland correctimagefield to a newly made PGM mask:\n\nSince filter mask image was created as a copy of main map, other fields of YAML-file do not need to be changed. Savekeepout_mask.yamland new filter mask is ready to use.\n\n## 2. Configure Costmap Filter Info Publisher Server\uf0c1\n\nEach costmap filter reads incoming meta-information (such as filter type or data conversion coefficients) in a messages ofnav2_msgs/CostmapFilterInfotype. These messages are being published byCostmap Filter Info Publisher Server. The server is running as a lifecycle node. According to thedesign document,nav2_msgs/CostmapFilterInfomessages are going in a pair withOccupancyGridfilter mask topic. Therefore, along with Costmap Filter Info Publisher Server there should be enabled a new instance of Map Server configured to publish filter mask."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bd42-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating with Keepout Zones\uf0c1.txt", "start_index": 5053, "chroma:document": "In order to enable Keepout Filter in your configuration, both servers should be enabled as a lifecycle nodes in Python launch-file. It is also possible to add them as Composition Nodes to your Navigation Component Container, which might look as follows:\n\nwhere theparams_filevariable should be set to a YAML-file having ROS parameters for Costmap Filter Info Publisher Server and Map Server nodes. These parameters and their meaning are listed atMap Server / Saverpage. Please, refer to it for more information. The example ofparams_filecould be found below:\n\nNote, that:\n\nReady-to-go standalone Python launch-script, YAML-file with ROS parameters and filter mask example for Keepout Filter could be found in anav2_costmap_filters_demodirectory ofnavigation2_tutorialsrepository. To simply run Filter Info Publisher Server and Map Server tuned on Turtlebot3 standard simulation written atGetting Started, build the demo and launchcostmap_filter_info.launch.pyas follows:\n\n## 3. Enable Keepout Filter\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bd56-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating with Keepout Zones\uf0c1.txt", "start_index": 6025, "chroma:document": "## 3. Enable Keepout Filter\uf0c1\n\nCostmap Filters are Costamp2D plugins. You can enable theKeepoutFilterplugin in Costmap2D by addingkeepout_filterto thepluginsparameter innav2_params.yaml. You can place it in theglobal_costmapfor planning with keepouts andlocal_costmapto make sure the robot won\u2019t attempt to drive through a keepout zone. The KeepoutFilter plugin should have the following parameters defined:\n\nFull list of parameters supported byKeepoutFilterare listed atKeepout Filter Parameterspage."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bd74-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating with Keepout Zones\uf0c1.txt", "start_index": 6527, "chroma:document": "It is important to note that enablingKeepoutFilterforglobal_costmaponly will cause the path planner to build plans bypassing keepout zones. EnablingKeepoutFilterforlocal_costmaponly will cause the robot to not enter keepout zones, but the path may still go through them. So, the best practice is to enableKeepoutFilterfor global and local costmaps simultaneously by adding it both inglobal_costmapandlocal_costmapinnav2_params.yaml. However it does not always have to be true. In some cases keepout zones don\u2019t have to be the same for global and local costmaps, e.g. if the robot doesn\u2019t allowed to intentionally go inside keepout zones, but if its there, the robot can drive in and out really quick if it clips an edge or corner. For this case, there is not need to use extra resources of the local costmap copy.\n\nTo enableKeepoutFilterwith same mask for both global and local costmaps, use the following configuration:\n\n## 4. Run Nav2 stack\uf0c1"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bd88-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating with Keepout Zones\uf0c1.txt", "start_index": 7449, "chroma:document": "## 4. Run Nav2 stack\uf0c1\n\nAfter Costmap Filter Info Publisher Server and Map Server were launched and Keepout Filter was enabled for global/local costmaps, run Nav2 stack as written inGetting Started:\n\nAnd check that filter is working properly as in the pictures below (first picture shows keepout filter enabled for the global costmap, second - differently-sizedkeepout_mask.pgmfilter mask):\n\nCode Examples:\n\nLanguage: unknown\n\nFile: image\n\n```\n\nimage: turtlebot3_world.pgm\n\n>\n\nimage: keepout_mask.pgm\n\n```\n\nLanguage: unknown\n\nFile: OccupancyGrid\n\n```\n\nimport\n\nos\n\nfrom\n\nament_index_python.packages\n\nimport\n\nget_package_share_directory\n\nfrom\n\nlaunch\n\nimport\n\nLaunchDescription\n\nfrom\n\nlaunch.actions\n\nimport\n\nDeclareLaunchArgument\n\n,\n\nGroupAction\n\nfrom\n\nlaunch.conditions\n\nimport\n\nIfCondition\n\nfrom\n\nlaunch.substitutions\n\nimport\n\nLaunchConfiguration\n\n,\n\nPythonExpression\n\nfrom\n\nlaunch.substitutions\n\nimport\n\nNotEqualsSubstitution\n\nfrom\n\nlaunch_ros.actions\n\nimport\n\nNode\n\n,\n\nLoadComposableNodes\n\nfrom\n\nlaunch_ros.actions"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bd9c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating with Keepout Zones\uf0c1.txt", "start_index": 8403, "chroma:document": "import\n\nNode\n\n,\n\nLoadComposableNodes\n\nfrom\n\nlaunch_ros.actions\n\nimport\n\nPushRosNamespace\n\nfrom\n\nlaunch_ros.descriptions\n\nimport\n\nComposableNode\n\nfrom\n\nnav2_common.launch\n\nimport\n\nRewrittenYaml\n\ndef\n\ngenerate_launch_description\n\n():\n\n# Get the launch directory\n\ncostmap_filters_demo_dir\n\n=\n\nget_package_share_directory\n\n(\n\n'nav2_costmap_filters_demo'\n\n)\n\nlifecycle_nodes\n\n=\n\n[\n\n'filter_mask_server'\n\n,\n\n'costmap_filter_info_server'\n\n]\n\n# Parameters\n\nnamespace\n\n=\n\nLaunchConfiguration\n\n(\n\n'namespace'\n\n)\n\nuse_sim_time\n\n=\n\nLaunchConfiguration\n\n(\n\n'use_sim_time'\n\n)\n\nautostart\n\n=\n\nLaunchConfiguration\n\n(\n\n'autostart'\n\n)\n\nparams_file\n\n=\n\nLaunchConfiguration\n\n(\n\n'params_file'\n\n)\n\nmask_yaml_file\n\n=\n\nLaunchConfiguration\n\n(\n\n'mask'\n\n)\n\nuse_composition\n\n=\n\nLaunchConfiguration\n\n(\n\n'use_composition'\n\n)\n\ncontainer_name\n\n=\n\nLaunchConfiguration\n\n(\n\n'container_name'\n\n)\n\ncontainer_name_full\n\n=\n\n(\n\nnamespace\n\n,\n\n'/'\n\n,\n\ncontainer_name\n\n)\n\n# Declare the launch arguments\n\ndeclare_namespace_cmd\n\n=\n\nDeclareLaunchArgument\n\n(\n\n'namespace'"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bdb0-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating with Keepout Zones\uf0c1.txt", "start_index": 9385, "chroma:document": "=\n\nDeclareLaunchArgument\n\n(\n\n'namespace'\n\n,\n\ndefault_value\n\n=\n\n''\n\n,\n\ndescription\n\n=\n\n'Top-level namespace'\n\n)\n\ndeclare_use_sim_time_cmd\n\n=\n\nDeclareLaunchArgument\n\n(\n\n'use_sim_time'\n\n,\n\ndefault_value\n\n=\n\n'true'\n\n,\n\ndescription\n\n=\n\n'Use simulation (Gazebo) clock if true'\n\n)\n\ndeclare_autostart_cmd\n\n=\n\nDeclareLaunchArgument\n\n(\n\n'autostart'\n\n,\n\ndefault_value\n\n=\n\n'true'\n\n,\n\ndescription\n\n=\n\n'Automatically startup the nav2 stack'\n\n)\n\ndeclare_params_file_cmd\n\n=\n\nDeclareLaunchArgument\n\n(\n\n'params_file'\n\n,\n\ndescription\n\n=\n\n'Full path to the ROS2 parameters file to use'\n\n)\n\ndeclare_mask_yaml_file_cmd\n\n=\n\nDeclareLaunchArgument\n\n(\n\n'mask'\n\n,\n\ndescription\n\n=\n\n'Full path to filter mask yaml file to load'\n\n)\n\ndeclare_use_composition_cmd\n\n=\n\nDeclareLaunchArgument\n\n(\n\n'use_composition'\n\n,\n\ndefault_value\n\n=\n\n'True'\n\n,\n\ndescription\n\n=\n\n'Use composed bringup if True'\n\n)\n\ndeclare_container_name_cmd\n\n=\n\nDeclareLaunchArgument\n\n(\n\n'container_name'\n\n,\n\ndefault_value\n\n=\n\n'nav2_container'\n\n,\n\ndescription\n\n="}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bdc4-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating with Keepout Zones\uf0c1.txt", "start_index": 10323, "chroma:document": ",\n\ndefault_value\n\n=\n\n'nav2_container'\n\n,\n\ndescription\n\n=\n\n'The name of container that nodes will load in if use composition'\n\n)\n\n# Make re-written yaml\n\nparam_substitutions\n\n=\n\n{\n\n'use_sim_time'\n\n:\n\nuse_sim_time\n\n,\n\n'yaml_filename'\n\n:\n\nmask_yaml_file\n\n}\n\nconfigured_params\n\n=\n\nRewrittenYaml\n\n(\n\nsource_file\n\n=\n\nparams_file\n\n,\n\nroot_key\n\n=\n\nnamespace\n\n,\n\nparam_rewrites\n\n=\n\nparam_substitutions\n\n,\n\nconvert_types\n\n=\n\nTrue\n\n)\n\nload_nodes\n\n=\n\nGroupAction\n\n(\n\ncondition\n\n=\n\nIfCondition\n\n(\n\nPythonExpression\n\n([\n\n'not '\n\n,\n\nuse_composition\n\n])),\n\nactions\n\n=\n\n[\n\nNode\n\n(\n\npackage\n\n=\n\n'nav2_map_server'\n\n,\n\nexecutable\n\n=\n\n'map_server'\n\n,\n\nname\n\n=\n\n'filter_mask_server'\n\n,\n\nnamespace\n\n=\n\nnamespace\n\n,\n\noutput\n\n=\n\n'screen'\n\n,\n\nemulate_tty\n\n=\n\nTrue\n\n,\n\n# https://github.com/ros2/launch/issues/188\n\nparameters\n\n=\n\n[\n\nconfigured_params\n\n]),\n\nNode\n\n(\n\npackage\n\n=\n\n'nav2_map_server'\n\n,\n\nexecutable\n\n=\n\n'costmap_filter_info_server'\n\n,\n\nname\n\n=\n\n'costmap_filter_info_server'\n\n,\n\nnamespace\n\n=\n\nnamespace\n\n,\n\noutput\n\n=\n\n'screen'\n\n,"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bdd8-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating with Keepout Zones\uf0c1.txt", "start_index": 11282, "chroma:document": ",\n\nnamespace\n\n=\n\nnamespace\n\n,\n\noutput\n\n=\n\n'screen'\n\n,\n\nemulate_tty\n\n=\n\nTrue\n\n,\n\n# https://github.com/ros2/launch/issues/188\n\nparameters\n\n=\n\n[\n\nconfigured_params\n\n]),\n\nNode\n\n(\n\npackage\n\n=\n\n'nav2_lifecycle_manager'\n\n,\n\nexecutable\n\n=\n\n'lifecycle_manager'\n\n,\n\nname\n\n=\n\n'lifecycle_manager_costmap_filters'\n\n,\n\nnamespace\n\n=\n\nnamespace\n\n,\n\noutput\n\n=\n\n'screen'\n\n,\n\nemulate_tty\n\n=\n\nTrue\n\n,\n\n# https://github.com/ros2/launch/issues/188\n\nparameters\n\n=\n\n[{\n\n'use_sim_time'\n\n:\n\nuse_sim_time\n\n},\n\n{\n\n'autostart'\n\n:\n\nautostart\n\n},\n\n{\n\n'node_names'\n\n:\n\nlifecycle_nodes\n\n}])\n\n]\n\n)\n\nload_composable_nodes\n\n=\n\nGroupAction\n\n(\n\ncondition\n\n=\n\nIfCondition\n\n(\n\nuse_composition\n\n),\n\nactions\n\n=\n\n[\n\nPushRosNamespace\n\n(\n\ncondition\n\n=\n\nIfCondition\n\n(\n\nNotEqualsSubstitution\n\n(\n\nLaunchConfiguration\n\n(\n\n'namespace'\n\n),\n\n''\n\n)),\n\nnamespace\n\n=\n\nnamespace\n\n),\n\nLoadComposableNodes\n\n(\n\ntarget_container\n\n=\n\ncontainer_name_full\n\n,\n\ncomposable_node_descriptions\n\n=\n\n[\n\nComposableNode\n\n(\n\npackage\n\n=\n\n'nav2_map_server'\n\n,\n\nplugin\n\n="}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bdec-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating with Keepout Zones\uf0c1.txt", "start_index": 12216, "chroma:document": "ComposableNode\n\n(\n\npackage\n\n=\n\n'nav2_map_server'\n\n,\n\nplugin\n\n=\n\n'nav2_map_server::MapServer'\n\n,\n\nname\n\n=\n\n'filter_mask_server'\n\n,\n\nparameters\n\n=\n\n[\n\nconfigured_params\n\n]),\n\nComposableNode\n\n(\n\npackage\n\n=\n\n'nav2_map_server'\n\n,\n\nplugin\n\n=\n\n'nav2_map_server::CostmapFilterInfoServer'\n\n,\n\nname\n\n=\n\n'costmap_filter_info_server'\n\n,\n\nparameters\n\n=\n\n[\n\nconfigured_params\n\n]),\n\nComposableNode\n\n(\n\npackage\n\n=\n\n'nav2_lifecycle_manager'\n\n,\n\nplugin\n\n=\n\n'nav2_lifecycle_manager::LifecycleManager'\n\n,\n\nname\n\n=\n\n'lifecycle_manager_costmap_filters'\n\n,\n\nparameters\n\n=\n\n[{\n\n'use_sim_time'\n\n:\n\nuse_sim_time\n\n},\n\n{\n\n'autostart'\n\n:\n\nautostart\n\n},\n\n{\n\n'node_names'\n\n:\n\nlifecycle_nodes\n\n}]),\n\n]\n\n)\n\n]\n\n)\n\nld\n\n=\n\nLaunchDescription\n\n()\n\nld\n\n.\n\nadd_action\n\n(\n\ndeclare_namespace_cmd\n\n)\n\nld\n\n.\n\nadd_action\n\n(\n\ndeclare_use_sim_time_cmd\n\n)\n\nld\n\n.\n\nadd_action\n\n(\n\ndeclare_autostart_cmd\n\n)\n\nld\n\n.\n\nadd_action\n\n(\n\ndeclare_params_file_cmd\n\n)\n\nld\n\n.\n\nadd_action\n\n(\n\ndeclare_mask_yaml_file_cmd\n\n)\n\nld\n\n.\n\nadd_action\n\n(\n\ndeclare_use_composition_cmd\n\n)\n\nld\n\n."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13be00-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating with Keepout Zones\uf0c1.txt", "start_index": 13173, "chroma:document": ")\n\nld\n\n.\n\nadd_action\n\n(\n\ndeclare_use_composition_cmd\n\n)\n\nld\n\n.\n\nadd_action\n\n(\n\ndeclare_container_name_cmd\n\n)\n\nld\n\n.\n\nadd_action\n\n(\n\nload_nodes\n\n)\n\nld\n\n.\n\nadd_action\n\n(\n\nload_composable_nodes\n\n)\n\nreturn\n\nld\n\n```\n\nLanguage: unknown\n\nFile: params_file\n\n```\n\ncostmap_filter_info_server\n\n:\n\nros__parameters\n\n:\n\nuse_sim_time\n\n:\n\ntrue\n\ntype\n\n:\n\n0\n\nfilter_info_topic\n\n:\n\n\"/costmap_filter_info\"\n\nmask_topic\n\n:\n\n\"/keepout_filter_mask\"\n\nbase\n\n:\n\n0.0\n\nmultiplier\n\n:\n\n1.0\n\nfilter_mask_server\n\n:\n\nros__parameters\n\n:\n\nuse_sim_time\n\n:\n\ntrue\n\nframe_id\n\n:\n\n\"map\"\n\ntopic_name\n\n:\n\n\"/keepout_filter_mask\"\n\nyaml_filename\n\n:\n\n\"keepout_mask.yaml\"\n\n```\n\nLanguage: unknown\n\nFile: costmap_filter_info.launch.py\n\n```\n\n$\n\nmkdir\n\np\n\n~/tutorials_ws/src\n\n$\n\ncd\n\n~/tutorials_ws/src\n\n$\n\ngit\n\nclone\n\nhttps://github.com/ros-navigation/navigation2_tutorials.git\n\n$\n\ncd\n\n~/tutorials_ws\n\n$\n\ncolcon\n\nbuild\n\n--symlink-install\n\n--packages-select\n\nnav2_costmap_filters_demo\n\n$\n\nsource\n\n~/tutorials_ws/install/setup.bash\n\n$\n\nros2\n\nlaunch\n\nnav2_costmap_filters_demo"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13be14-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Navigating with Keepout Zones\uf0c1.txt", "start_index": 14151, "chroma:document": "$\n\nros2\n\nlaunch\n\nnav2_costmap_filters_demo\n\ncostmap_filter_info.launch.py\n\nparams_file:\n\n=\n\n`\n\npwd\n\n`\n\n/src/navigation2_tutorials/nav2_costmap_filters_demo/params/keepout_params.yaml\n\nmask:\n\n=\n\n`\n\npwd\n\n`\n\n/src/navigation2_tutorials/nav2_costmap_filters_demo/maps/keepout_mask.yaml\n\nuse_composition:\n\n=\n\nTrue\n\n```\n\nLanguage: unknown\n\nFile: KeepoutFilter\n\n```\n\nglobal_costmap:\n\nglobal_costmap:\n\nros__parameters:\n\n...\n\nplugins: [\"static_layer\", \"obstacle_layer\", \"inflation_layer\"]\n\nfilters: [\"keepout_filter\"]\n\n...\n\nkeepout_filter:\n\nplugin: \"nav2_costmap_2d::KeepoutFilter\"\n\nenabled: True\n\nfilter_info_topic: \"/costmap_filter_info\"\n\n...\n\nlocal_costmap:\n\nlocal_costmap:\n\nros__parameters:\n\n...\n\nplugins: [\"voxel_layer\", \"inflation_layer\"]\n\nfilters: [\"keepout_filter\"]\n\n...\n\nkeepout_filter:\n\nplugin: \"nav2_costmap_2d::KeepoutFilter\"\n\nenabled: True\n\nfilter_info_topic: \"/costmap_filter_info\"\n\n```\n\nLanguage: unknown\n\nFile: filters\n\n```\n\nros2\n\nlaunch\n\nnav2_bringup\n\ntb3_simulation_launch.py\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13be28-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/ControllerSelector\uf0c1.txt", "start_index": 0, "chroma:document": "Title: ControllerSelector\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/actions/ControllerSelector.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Input Ports\uf0c1\n\n## Output Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: transientlocal\n\n```\n\n<ControllerSelector\n\nselected_controller=\n\n\"{selected_controller}\"\n\ndefault_controller=\n\n\"FollowPath\"\n\ntopic_name=\n\n\"controller_selector\"\n\n/>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13be46-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/PhotoAtWaypoint\uf0c1.txt", "start_index": 0, "chroma:document": "Title: PhotoAtWaypoint\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/nav2_waypoint_follower\n\nplugins/photo_at_waypoint.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Parameters\uf0c1 <nav2_waypoint_followerplugin>: nav2_waypoint_follower plugin name defined in thewaypoint_task_executor_plugin_idparameter inWaypoint Follower."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13be5a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Detailed Behavior Tree Walkthrough\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Detailed Behavior Tree Walkthrough\uf0c1\n\nURL: https://docs.nav2.org/behavior_trees/overview/detailed_behavior_tree_walkthrough.html#prerequisites\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Overview\uf0c1\n\nThis document serves as a reference guide to the main behavior tree (BT) used in Nav2.\n\nThere are many example behavior trees provided innav2_bt_navigator/behavior_trees,\n\nbut these sometimes have to be re-configured based on the application of the robot.\n\nThe following document will walk through the current main default BTnavigate_to_pose_w_replanning_and_recovery.xmlin great detail.\n\n## Prerequisites\uf0c1\n\n## Navigate To Pose With Replanning and Recovery\uf0c1\n\nThe following section will describe in detail the concept of the main and default BT currently used in Nav2,navigate_to_pose_w_replanning_and_recovery.xml.\n\nThis behavior tree replans the global path periodically at 1 Hz and it also has recovery actions."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13be6e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Detailed Behavior Tree Walkthrough\uf0c1.txt", "start_index": 998, "chroma:document": "BTs are primarily defined in XML. The tree shown above is represented in XML as follows.\n\nThis is likely still a bit overwhelming, but this tree can be broken into two smaller subtrees that we can focus on one at a time.\n\nThese smaller subtrees are the children of the top-mostRecoveryNode. From this point forward theNavigateWithReplanningsubtree will be referred to as theNavigationsubtree, and theRecoveryFallbacksubtree will be known as theRecoverysubtree.\n\nThis can be represented in the following way:\n\nTheNavigationsubtree mainly involves actual navigation behavior:\n\nTheRecoverysubtree includes behaviors for system level failures or items that were not easily dealt with internally.\n\nThe overall BT will (hopefully) spend most of its time in theNavigationsubtree. If either of the two main behaviors in theNavigationsubtree fail\n\n(path calculation or path following), contextual recoveries will be attempted.\n\nIf the contextual recoveries were still not enough, theNavigationsubtree will returnFAILURE."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13be82-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Detailed Behavior Tree Walkthrough\uf0c1.txt", "start_index": 2011, "chroma:document": "The system will move on to theRecoverysubtree to attempt to clear any system level navigation failures.\n\nThis happens until thenumber_of_retriesfor the parentRecoveryNodeis exceeded (which by default is 6).\n\n## Navigation Subtree\uf0c1\n\nNow that we have gone over the control flow between theNavigationsubtree and theRecoverysubtree, let\u2019s focus on the Navigation subtree.\n\nThe XML of this subtree is as follows:\n\nThis subtree has two primary actionsComputePathToPoseandFollowPath.\n\nIf either of these two actions fail, they will attempt to clear the failure contextually.\n\nThe crux of the tree can be represented with only one parent and two children nodes like this:\n\nThe parentPipelineSequencenode allows theComputePathToPoseto be ticked, and once that succeeds,FollowPathto be ticked.\n\nWhile theFollowPathsubtree is being ticked, theComputePathToPosesubtree will be ticked as well. This allows for the path to be recomputed as the robot moves around."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13be96-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Detailed Behavior Tree Walkthrough\uf0c1.txt", "start_index": 2962, "chroma:document": "Both theComputePathToPoseand theFollowPathfollow the same general structure.\n\nThe below is theComputePathToPosesubtree:\n\nThe parentRecoveryNodecontrols the flow between the action, and the contextual recovery subtree.\n\nThe contextual recoveries for bothComputePathToPoseandFollowPathinvolve checking if the goal has been updated, and involves clearing the relevant costmap.\n\nConsider changing thenumber_of_retriesparameter in the parentRecoveryNodecontrol node if your application can tolerate more attempts at contextual recoveries before moving on to system-level recoveries.\n\nThe only differences in the BT subtree ofComputePathToPoseandFollowPathare outlined below:\n\n## Recovery Subtree\uf0c1\n\nTheRecoverysubtree is the second big \u201chalf\u201d of the Nav2 defaultnavigate_to_pose_w_replanning_and_recovery.xmltree.\n\nIn short, this subtree is triggered when theNavigationsubtree returnsFAILUREand controls the recoveries at the system level (in the case the contextual recoveries in theNavigationsubtree were not sufficient)."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13beaa-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Detailed Behavior Tree Walkthrough\uf0c1.txt", "start_index": 3981, "chroma:document": "And the XML snippet:\n\nThe top most parent,ReactiveFallbackcontrols the flow between the rest of the system wide recoveries, and asynchronously checks if a new goal has been received.\n\nIf at any point the goal gets updated, this subtree will halt all children and returnSUCCESS. This allows for quick reactions to new goals and preempt currently executing recoveries.\n\nThis should look familiar to the contextual recovery portions of theNavigationsubtree. This is a common BT pattern to handle the situation \u201cUnless \u2018this condition\u2019 happens, Do action A\u201d.\n\nThese condition nodes can be extremely powerful and are typically paired withReactiveFallback. It can be easy to imagine wrapping this wholenavigate_to_pose_w_replanning_and_recoverytree\n\nin aReactiveFallbackwith aisBatteryLowcondition \u2013 meaning thenavigate_to_pose_w_replanning_and_recoverytree will executeunlessthe battery becomes low (and then enter a different subtree for docking to recharge)."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bebe-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Detailed Behavior Tree Walkthrough\uf0c1.txt", "start_index": 4938, "chroma:document": "If the goal is never updated, the behavior tree will go on to theRoundRobinnode. These are the default four system-level recoveries in the BT are:\n\nUponSUCCESSof any of the four children of the parentRoundRobin, the robot will attempt to renavigate in theNavigationsubtree.\n\nIf this renavigation was not successful, the next child of theRoundRobinwill be ticked.\n\nFor example, let\u2019s say the robot is stuck and theNavigationsubtree returnsFAILURE:\n\n(for the sake of this example, let\u2019s assume that the goal is never updated).\n\nIf theBackUpaction was not sufficient enough to allow the robot to become un-stuck, the above logic will go on indefinitely until thenumber_of_retriesin the parent of theNavigatesubtree andRecoverysubtree is exceeded, or if all the system-wide recoveries in theRecoverysubtree returnFAILURE(this is unlikely, and likely points to some other system failure).\n\nCode Examples:\n\nLanguage: unknown\n\nFile: navigate_to_pose_w_replanning_and_recovery.xml\n\n```\n\n<root\n\nmain_tree_to_execute=\n\n\"MainTree\"\n\n>"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bed2-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Detailed Behavior Tree Walkthrough\uf0c1.txt", "start_index": 5912, "chroma:document": "```\n\n<root\n\nmain_tree_to_execute=\n\n\"MainTree\"\n\n>\n\n<BehaviorTree\n\nID=\n\n\"MainTree\"\n\n>\n\n<RecoveryNode\n\nnumber_of_retries=\n\n\"6\"\n\nname=\n\n\"NavigateRecovery\"\n\n>\n\n<PipelineSequence\n\nname=\n\n\"NavigateWithReplanning\"\n\n>\n\n<RateController\n\nhz=\n\n\"1.0\"\n\n>\n\n<RecoveryNode\n\nnumber_of_retries=\n\n\"1\"\n\nname=\n\n\"ComputePathToPose\"\n\n>\n\n<ComputePathToPose\n\ngoal=\n\n\"{goal}\"\n\npath=\n\n\"{path}\"\n\nplanner_id=\n\n\"GridBased\"\n\n/>\n\n<ReactiveFallback\n\nname=\n\n\"ComputePathToPoseRecoveryFallback\"\n\n>\n\n<GoalUpdated/>\n\n<ClearEntireCostmap\n\nname=\n\n\"ClearGlobalCostmap-Context\"\n\nservice_name=\n\n\"global_costmap/clear_entirely_global_costmap\"\n\n/>\n\n</ReactiveFallback>\n\n</RecoveryNode>\n\n</RateController>\n\n<RecoveryNode\n\nnumber_of_retries=\n\n\"1\"\n\nname=\n\n\"FollowPath\"\n\n>\n\n<FollowPath\n\npath=\n\n\"{path}\"\n\ncontroller_id=\n\n\"FollowPath\"\n\n/>\n\n<ReactiveFallback\n\nname=\n\n\"FollowPathRecoveryFallback\"\n\n>\n\n<GoalUpdated/>\n\n<ClearEntireCostmap\n\nname=\n\n\"ClearLocalCostmap-Context\"\n\nservice_name=\n\n\"local_costmap/clear_entirely_local_costmap\"\n\n/>\n\n</ReactiveFallback>\n\n</RecoveryNode>"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bee6-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Detailed Behavior Tree Walkthrough\uf0c1.txt", "start_index": 6894, "chroma:document": "/>\n\n</ReactiveFallback>\n\n</RecoveryNode>\n\n</PipelineSequence>\n\n<ReactiveFallback\n\nname=\n\n\"RecoveryFallback\"\n\n>\n\n<GoalUpdated/>\n\n<RoundRobin\n\nname=\n\n\"RecoveryActions\"\n\n>\n\n<Sequence\n\nname=\n\n\"ClearingActions\"\n\n>\n\n<ClearEntireCostmap\n\nname=\n\n\"ClearLocalCostmap-Subtree\"\n\nservice_name=\n\n\"local_costmap/clear_entirely_local_costmap\"\n\n/>\n\n<ClearEntireCostmap\n\nname=\n\n\"ClearGlobalCostmap-Subtree\"\n\nservice_name=\n\n\"global_costmap/clear_entirely_global_costmap\"\n\n/>\n\n</Sequence>\n\n<Spin\n\nspin_dist=\n\n\"1.57\"\n\n/>\n\n<Wait\n\nwait_duration=\n\n\"5\"\n\n/>\n\n<BackUp\n\nbackup_dist=\n\n\"0.15\"\n\nbackup_speed=\n\n\"0.025\"\n\n/>\n\n</RoundRobin>\n\n</ReactiveFallback>\n\n</RecoveryNode>\n\n</BehaviorTree>\n\n</root>\n\n```\n\nLanguage: unknown\n\nFile: RecoveryNode\n\n```\n\n<RecoveryNode\n\nnumber_of_retries=\n\n\"6\"\n\nname=\n\n\"NavigateRecovery\"\n\n>\n\n```\n\nLanguage: unknown\n\nFile: Recovery\n\n```\n\n<PipelineSequence\n\nname=\n\n\"NavigateWithReplanning\"\n\n>\n\n<RateController\n\nhz=\n\n\"1.0\"\n\n>\n\n<RecoveryNode\n\nnumber_of_retries=\n\n\"1\"\n\nname=\n\n\"ComputePathToPose\"\n\n>\n\n<ComputePathToPose\n\ngoal="}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13befa-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Detailed Behavior Tree Walkthrough\uf0c1.txt", "start_index": 7851, "chroma:document": "\"1\"\n\nname=\n\n\"ComputePathToPose\"\n\n>\n\n<ComputePathToPose\n\ngoal=\n\n\"{goal}\"\n\npath=\n\n\"{path}\"\n\nplanner_id=\n\n\"GridBased\"\n\n/>\n\n<ReactiveFallback\n\nname=\n\n\"ComputePathToPoseRecoveryFallback\"\n\n>\n\n<GoalUpdated/>\n\n<ClearEntireCostmap\n\nname=\n\n\"ClearGlobalCostmap-Context\"\n\nservice_name=\n\n\"global_costmap/clear_entirely_global_costmap\"\n\n/>\n\n</ReactiveFallback>\n\n</RecoveryNode>\n\n</RateController>\n\n<RecoveryNode\n\nnumber_of_retries=\n\n\"1\"\n\nname=\n\n\"FollowPath\"\n\n>\n\n<FollowPath\n\npath=\n\n\"{path}\"\n\ncontroller_id=\n\n\"FollowPath\"\n\n/>\n\n<ReactiveFallback\n\nname=\n\n\"FollowPathRecoveryFallback\"\n\n>\n\n<GoalUpdated/>\n\n<ClearEntireCostmap\n\nname=\n\n\"ClearLocalCostmap-Context\"\n\nservice_name=\n\n\"local_costmap/clear_entirely_local_costmap\"\n\n/>\n\n</ReactiveFallback>\n\n</RecoveryNode>\n\n</PipelineSequence>\n\n```\n\nLanguage: unknown\n\nFile: Navigation\n\n```\n\n<ReactiveFallback\n\nname=\n\n\"RecoveryFallback\"\n\n>\n\n<GoalUpdated/>\n\n<RoundRobin\n\nname=\n\n\"RecoveryActions\"\n\n>\n\n<Sequence\n\nname=\n\n\"ClearingActions\"\n\n>\n\n<ClearEntireCostmap\n\nname=\n\n\"ClearLocalCostmap-Subtree\""}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bf0e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Detailed Behavior Tree Walkthrough\uf0c1.txt", "start_index": 8810, "chroma:document": ">\n\n<ClearEntireCostmap\n\nname=\n\n\"ClearLocalCostmap-Subtree\"\n\nservice_name=\n\n\"local_costmap/clear_entirely_local_costmap\"\n\n/>\n\n<ClearEntireCostmap\n\nname=\n\n\"ClearGlobalCostmap-Subtree\"\n\nservice_name=\n\n\"global_costmap/clear_entirely_global_costmap\"\n\n/>\n\n</Sequence>\n\n<Spin\n\nspin_dist=\n\n\"1.57\"\n\n/>\n\n<Wait\n\nwait_duration=\n\n\"5\"\n\n/>\n\n<BackUp\n\nbackup_dist=\n\n\"0.15\"\n\nbackup_speed=\n\n\"0.025\"\n\n/>\n\n</RoundRobin>\n\n</ReactiveFallback>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bf22-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Navigator Plugin\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Writing a New Navigator Plugin\uf0c1\n\nURL: https://docs.nav2.org/plugin_tutorials/docs/writing_new_navigator_plugin.html#create-a-new-navigator-plugin\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Overview\uf0c1\n\nThis tutorial shows how to create your own behavior-tree navigatorpluginbased on thenav2_core::BehaviorTreeNavigatorbase class.\n\nIn this tutorial, we will be reviewing theNavigatetoPosebehavior-tree navigator plugin, which is the foundational navigator of Nav2 and complimentary behavior to ROS 1 Navigation. This completes point-to-point navigation. This tutorial will be reviewing the code and structure as of ROS 2 Iron. While small variations may be made over time, this should be sufficient to get started writing your own navigator if you choose as we do not expect major API changes on this system."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bf36-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Navigator Plugin\uf0c1.txt", "start_index": 894, "chroma:document": "It may be beneficial to write your own Navigator if you have a custom action message definition you\u2019d like to use with Navigation rather than the providedNavigateToPoseorNavigateThroughPosesinterfaces (e.g. doing complete coverage or containing additional constraint information). The role of the Navigators are to extract information from requests to pass to the behavior tree / blackboard, populate feedback and responses, and maintain the state of the behavior tree if relevant. The behavior tree XML will define the actual navigation logic used.\n\n## Requirements\uf0c1\n\n## Tutorial Steps\uf0c1\n\n## 1- Create a new Navigator Plugin\uf0c1\n\nWe will be implementing pure point-to-point navigation behavior. The code in this tutorial can be found inNav2\u2019s BT Navigator packageas theNavigateToPoseNavigator. This package can be considered as a reference for writing your own plugin."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bf54-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Navigator Plugin\uf0c1.txt", "start_index": 1761, "chroma:document": "Our example plugin classnav2_bt_navigator::NavigateToPoseNavigatorinherits from the base classnav2_core::BehaviorTreeNavigator. The base class provides a set of virtual methods to implement a navigator plugin. These methods are called at runtime by the BT Navigator server or as a response to ROS 2 actions to process a navigation request."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bf68-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Navigator Plugin\uf0c1.txt", "start_index": 2102, "chroma:document": "Note that this class has itself a base class ofNavigatorBase. This class is to provide a non-templated base-class for use in loading the plugins into vectors for storage and calls for basic state transition in the lifecycle node. Its members (e.g.on_XYZ) are implemented for you inBehaviorTreeNavigatorand marked asfinalso they are not possible to be overridden by the user. The API that you will be implementing for your navigator are the virtual methods withinBehaviorTreeNavigator, notNavigatorBase. Theseon_XYZAPIs are implemented in necessary functions inBehaviorTreeNavigatorto handle boilerplate logic regarding the behavior tree and action server to minimize code duplication across the navigator implementations (e.g.on_configurewill create the action server, register callbacks, populate the blackboard with some necessary basic information, and then call a user-definedconfigurefunction for any additional user-specific needs)."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bf7c-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Navigator Plugin\uf0c1.txt", "start_index": 3042, "chroma:document": "The list of methods, their descriptions, and necessity are presented in the table below:\n\nIn the Navigate to Pose Navigator,configure()method must determine the blackboard parameter names where the goal and paths are being stored, as these are key values for processing feedback inonLoopand for the different behavior tree nodes to communicate this information between themselves. Additionally and uniquely to this navigator type, we also create a client to itself and a subscription to thegoal_posetopic such that requests from the default configurations of Rviz2 using theGoal Posetool will be processed.\n\nThe values of the blackboard IDs are stored alongside the odometry smoother the BT Navigator provides for populating meaningful feedback later. Complimentary to this, thecleanupmethod will reset these resources. The activate and deactivate methods are not used in this particular navigator."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bf90-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Navigator Plugin\uf0c1.txt", "start_index": 3942, "chroma:document": "In thegetDefaultBTFilepath(), we use a parameterdefault_nav_to_pose_bt_xmlto get the default behavior tree XML file to use if none is provided by the navigation request and to initialize the BT Navigator with a behavior tree hot-loaded. If one is not provided in the parameter files, then we grab a known and reasonable default XML file in thenav2_bt_navigatorpackage:\n\nWhen a goal is received, we need to determine if this goal is valid and should be processed.\n\nThegoalReceivedmethod provides you thegoaland a return value if it is being processed or not. This information is sent back to the action server to notify the client. In this case, we want to make sure that the goal\u2019s behavior tree is valid or else we cannot proceed. If it is valid, then we can initialize the goal pose onto the blackboard and reset some state in order to cleanly process this new request."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bfa4-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Navigator Plugin\uf0c1.txt", "start_index": 4815, "chroma:document": "Once this goal is completed, we need to populate the Action\u2019s result, if required and meaningful. In this navigator\u2019s case, it contains no result information when the navigation request was completed successfully, so this method is empty. For other navigator types, you may populate theresultobject provided.\n\nIf however a goal is preempted (e.g. a new action request comes in while an existing request is being processed), theonPreempt()method is called to determine if the new request is genuine and appropriate to preempt the currently processing goal. For example, it might not be wise to accept a preeemption request if that request is fundamentally different in nature from an existing behavior tree task or when your existing task is of a higher priority."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bfb8-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Navigator Plugin\uf0c1.txt", "start_index": 5579, "chroma:document": "Note that here you can also see theinitializeGoalPosemethod called. This method will set the goal parameters for this navigator onto the blackboard and reset important state information to cleanly reuse a behavior tree without old state information, as shown below:\n\nThe recovery counter and start time are both important feedback terms for a client to understand the state of the current task (e.g. if its failing, having problems, or taking exceptionally long). The setting of the goal on the blackboard is taken by theComputePathToPoseBT Action node to plan a new route to the goal (and then who\u2019s path is communicated to theFollowPathBT node via the blackboard ID previously set)."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bfd6-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Navigator Plugin\uf0c1.txt", "start_index": 6265, "chroma:document": "The final function implemented isonLoop, which is simplified below for tutorial purposes. While anything can be done in this method, which is called as the BT is looping through the tree, it is common to use this as an opportunity to populate any necessary feedback about the state of the navigation request, robot, or metadata that a client might be interested in.\n\n## 2- Exporting the navigator plugin\uf0c1\n\nNow that we have created our custom navigator, we need to export our plugin so that it would be visible to the BT Navigator server.\n\nPlugins are loaded at runtime, and if they are not visible, then our server won\u2019t be able to load it. In ROS 2, exporting and loading\n\nplugins is handled bypluginlib.\n\nComing to our tutorial, classnav2_bt_navigator::NavigateToPoseNavigatoris loaded dynamically asnav2_core::NavigatorBasewhich is our base class due to the subtleties previously described."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bfea-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Navigator Plugin\uf0c1.txt", "start_index": 7160, "chroma:document": "Note that it requires pluginlib to export out the plugin\u2019s class. Pluginlib would provide as macroPLUGINLIB_EXPORT_CLASS, which does all the work of exporting.\n\nIt is good practice to place these lines at the end of the file, but technically, you can also write at the top.\n\n## 3- Pass the plugin name through the params file\uf0c1\n\nTo enable the plugin, we need to modify thenav2_params.yamlfile as below\n\nIn the above snippet, you can observe the mapping of ournav2_bt_navigator::NavigateToPoseNavigatorplugin to its idnavigate_to_pose.\n\nTo pass plugin-specific parameters we have used<plugin_id>.<plugin_specific_parameter>.\n\n## 4- Run plugin\uf0c1\n\nRun Turtlebot3 simulation with enabled Nav2. Detailed instructions on how to make it run are written atGetting Started. Below is a shortcut command for that:\n\nThen goto RViz and click on the \u201c2D Pose Estimate\u201d button at the top and point the location on the map as it was described inGetting Started."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13bffe-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Navigator Plugin\uf0c1.txt", "start_index": 8105, "chroma:document": "The robot will localize on the map and then click on the \u201cNav2 goal\u201d and click on the pose where you want your robot to navigate to.\n\nAfter that navigator will take over with the behavior tree XML file behavior definition provided to it.\n\nCode Examples:\n\nLanguage: unknown\n\nFile: goal_pose\n\n```\n\nbool\n\nNavigateToPoseNavigator::configure\n\n(\n\nrclcpp_lifecycle\n\n::\n\nLifecycleNode\n\n::\n\nWeakPtr\n\nparent_node\n\n,\n\nstd\n\n::\n\nshared_ptr\n\n<\n\nnav2_util\n\n::\n\nOdomSmoother\n\n>\n\nodom_smoother\n\n)\n\n{\n\nstart_time_\n\n=\n\nrclcpp\n\n::\n\nTime\n\n(\n\n0\n\n);\n\nauto\n\nnode\n\n=\n\nparent_node\n\n.\n\nlock\n\n();\n\nif\n\n(\n\n!\n\nnode\n\n>\n\nhas_parameter\n\n(\n\n\"goal_blackboard_id\"\n\n))\n\n{\n\nnode\n\n>\n\ndeclare_parameter\n\n(\n\n\"goal_blackboard_id\"\n\n,\n\nstd\n\n::\n\nstring\n\n(\n\n\"goal\"\n\n));\n\n}\n\ngoal_blackboard_id_\n\n=\n\nnode\n\n>\n\nget_parameter\n\n(\n\n\"goal_blackboard_id\"\n\n).\n\nas_string\n\n();\n\nif\n\n(\n\n!\n\nnode\n\n>\n\nhas_parameter\n\n(\n\n\"path_blackboard_id\"\n\n))\n\n{\n\nnode\n\n>\n\ndeclare_parameter\n\n(\n\n\"path_blackboard_id\"\n\n,\n\nstd\n\n::\n\nstring\n\n(\n\n\"path\"\n\n));\n\n}\n\npath_blackboard_id_\n\n=\n\nnode\n\n>"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13c012-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Navigator Plugin\uf0c1.txt", "start_index": 9053, "chroma:document": "::\n\nstring\n\n(\n\n\"path\"\n\n));\n\n}\n\npath_blackboard_id_\n\n=\n\nnode\n\n>\n\nget_parameter\n\n(\n\n\"path_blackboard_id\"\n\n).\n\nas_string\n\n();\n\n// Odometry smoother object for getting current speed\n\nodom_smoother_\n\n=\n\nodom_smoother\n\n;\n\nself_client_\n\n=\n\nrclcpp_action\n\n::\n\ncreate_client\n\n<\n\nActionT\n\n>\n\n(\n\nnode\n\n,\n\ngetName\n\n());\n\ngoal_sub_\n\n=\n\nnode\n\n>\n\ncreate_subscription\n\n<\n\ngeometry_msgs\n\n::\n\nmsg\n\n::\n\nPoseStamped\n\n>\n\n(\n\n\"goal_pose\"\n\n,\n\nrclcpp\n\n::\n\nSystemDefaultsQoS\n\n(),\n\nstd\n\n::\n\nbind\n\n(\n\n&\n\nNavigateToPoseNavigator\n\n::\n\nonGoalPoseReceived\n\n,\n\nthis\n\n,\n\nstd\n\n::\n\nplaceholders\n\n::\n\n_1\n\n));\n\nreturn\n\ntrue\n\n;\n\n}\n\n```\n\nLanguage: unknown\n\nFile: cleanup\n\n```\n\nbool\n\nNavigateToPoseNavigator::cleanup\n\n()\n\n{\n\ngoal_sub_\n\n.\n\nreset\n\n();\n\nself_client_\n\n.\n\nreset\n\n();\n\nreturn\n\ntrue\n\n;\n\n}\n\n```\n\nLanguage: unknown\n\nFile: nav2_bt_navigator\n\n```\n\nstd\n\n::\n\nstring\n\nNavigateToPoseNavigator::getDefaultBTFilepath\n\n(\n\nrclcpp_lifecycle\n\n::\n\nLifecycleNode\n\n::\n\nWeakPtr\n\nparent_node\n\n)\n\n{\n\nstd\n\n::\n\nstring\n\ndefault_bt_xml_filename\n\n;\n\nauto\n\nnode\n\n=\n\nparent_node"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13c026-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Navigator Plugin\uf0c1.txt", "start_index": 10011, "chroma:document": "string\n\ndefault_bt_xml_filename\n\n;\n\nauto\n\nnode\n\n=\n\nparent_node\n\n.\n\nlock\n\n();\n\nif\n\n(\n\n!\n\nnode\n\n>\n\nhas_parameter\n\n(\n\n\"default_nav_to_pose_bt_xml\"\n\n))\n\n{\n\nstd\n\n::\n\nstring\n\npkg_share_dir\n\n=\n\nament_index_cpp\n\n::\n\nget_package_share_directory\n\n(\n\n\"nav2_bt_navigator\"\n\n);\n\nnode\n\n>\n\ndeclare_parameter\n\n<\n\nstd\n\n::\n\nstring\n\n>\n\n(\n\n\"default_nav_to_pose_bt_xml\"\n\n,\n\npkg_share_dir\n\n+\n\n\"/behavior_trees/navigate_to_pose_w_replanning_and_recovery.xml\"\n\n);\n\n}\n\nnode\n\n>\n\nget_parameter\n\n(\n\n\"default_nav_to_pose_bt_xml\"\n\n,\n\ndefault_bt_xml_filename\n\n);\n\nreturn\n\ndefault_bt_xml_filename\n\n;\n\n}\n\n```\n\nLanguage: unknown\n\nFile: goal\n\n```\n\nbool\n\nNavigateToPoseNavigator::goalReceived\n\n(\n\nActionT\n\n::\n\nGoal\n\n::\n\nConstSharedPtr\n\ngoal\n\n)\n\n{\n\nauto\n\nbt_xml_filename\n\n=\n\ngoal\n\n>\n\nbehavior_tree\n\n;\n\nif\n\n(\n\n!\n\nbt_action_server_\n\n>\n\nloadBehaviorTree\n\n(\n\nbt_xml_filename\n\n))\n\n{\n\nRCLCPP_ERROR\n\n(\n\nlogger_\n\n,\n\n\"BT file not found: %s. Navigation canceled.\"\n\n,\n\nbt_xml_filename\n\n.\n\nc_str\n\n());\n\nreturn\n\nfalse\n\n;\n\n}\n\ninitializeGoalPose\n\n(\n\ngoal\n\n);\n\nreturn\n\ntrue\n\n;"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13c03a-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Navigator Plugin\uf0c1.txt", "start_index": 10972, "chroma:document": "false\n\n;\n\n}\n\ninitializeGoalPose\n\n(\n\ngoal\n\n);\n\nreturn\n\ntrue\n\n;\n\n}\n\n```\n\nLanguage: unknown\n\nFile: result\n\n```\n\nvoid\n\nNavigateToPoseNavigator::goalCompleted\n\n(\n\ntypename\n\nActionT\n\n::\n\nResult\n\n::\n\nSharedPtr\n\n/*result*/\n\n,\n\nconst\n\nnav2_behavior_tree\n\n::\n\nBtStatus\n\n/*final_bt_status*/\n\n)\n\n{\n\n}\n\n```\n\nLanguage: unknown\n\nFile: onPreempt()\n\n```\n\nvoid\n\nNavigateToPoseNavigator::onPreempt\n\n(\n\nActionT\n\n::\n\nGoal\n\n::\n\nConstSharedPtr\n\ngoal\n\n)\n\n{\n\nRCLCPP_INFO\n\n(\n\nlogger_\n\n,\n\n\"Received goal preemption request\"\n\n);\n\nif\n\n(\n\ngoal\n\n>\n\nbehavior_tree\n\n==\n\nbt_action_server_\n\n>\n\ngetCurrentBTFilename\n\n()\n\n||\n\n(\n\ngoal\n\n>\n\nbehavior_tree\n\n.\n\nempty\n\n()\n\n&&\n\nbt_action_server_\n\n>\n\ngetCurrentBTFilename\n\n()\n\n==\n\nbt_action_server_\n\n>\n\ngetDefaultBTFilename\n\n()))\n\n{\n\n// if pending goal requests the same BT as the current goal, accept the pending goal\n\n// if pending goal has an empty behavior_tree field, it requests the default BT file\n\n// accept the pending goal if the current goal is running the default BT file\n\ninitializeGoalPose\n\n("}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13c04e-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Navigator Plugin\uf0c1.txt", "start_index": 11962, "chroma:document": "initializeGoalPose\n\n(\n\nbt_action_server_\n\n>\n\nacceptPendingGoal\n\n());\n\n}\n\nelse\n\n{\n\nRCLCPP_WARN\n\n(\n\nlogger_\n\n,\n\n\"Preemption request was rejected since the requested BT XML file is not the same \"\n\n\"as the one that the current goal is executing. Preemption with a new BT is invalid \"\n\n\"since it would require cancellation of the previous goal instead of true preemption.\"\n\n\"\n\n\\n\n\nCancel the current goal and send a new action request if you want to use a \"\n\n\"different BT XML file. For now, continuing to track the last goal until completion.\"\n\n);\n\nbt_action_server_\n\n>\n\nterminatePendingGoal\n\n();\n\n}\n\n}\n\n```\n\nLanguage: unknown\n\nFile: initializeGoalPose\n\n```\n\nvoid\n\nNavigateToPoseNavigator::initializeGoalPose\n\n(\n\nActionT\n\n::\n\nGoal\n\n::\n\nConstSharedPtr\n\ngoal\n\n)\n\n{\n\nRCLCPP_INFO\n\n(\n\nlogger_\n\n,\n\n\"Begin navigating from current location to (%.2f, %.2f)\"\n\n,\n\ngoal\n\n>\n\npose\n\n.\n\npose\n\n.\n\nposition\n\n.\n\nx\n\n,\n\ngoal\n\n>\n\npose\n\n.\n\npose\n\n.\n\nposition\n\n.\n\ny\n\n);\n\n// Reset state for new action feedback\n\nstart_time_\n\n=\n\nclock_\n\n>\n\nnow\n\n();"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13c062-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Navigator Plugin\uf0c1.txt", "start_index": 12944, "chroma:document": "start_time_\n\n=\n\nclock_\n\n>\n\nnow\n\n();\n\nauto\n\nblackboard\n\n=\n\nbt_action_server_\n\n>\n\ngetBlackboard\n\n();\n\nblackboard\n\n>\n\nset\n\n<\n\nint\n\n>\n\n(\n\n\"number_recoveries\"\n\n,\n\n0\n\n);\n\n// NOLINT\n\n// Update the goal pose on the blackboard\n\nblackboard\n\n>\n\nset\n\n<\n\ngeometry_msgs\n\n::\n\nmsg\n\n::\n\nPoseStamped\n\n>\n\n(\n\ngoal_blackboard_id_\n\n,\n\ngoal\n\n>\n\npose\n\n);\n\n}\n\n```\n\nLanguage: unknown\n\nFile: onLoop\n\n```\n\nvoid\n\nNavigateToPoseNavigator::onLoop\n\n()\n\n{\n\nauto\n\nfeedback_msg\n\n=\n\nstd\n\n::\n\nmake_shared\n\n<\n\nActionT\n\n::\n\nFeedback\n\n>\n\n();\n\ngeometry_msgs\n\n::\n\nmsg\n\n::\n\nPoseStamped\n\ncurrent_pose\n\n=\n\n...;\n\nauto\n\nblackboard\n\n=\n\nbt_action_server_\n\n>\n\ngetBlackboard\n\n();\n\nnav_msgs\n\n::\n\nmsg\n\n::\n\nPath\n\ncurrent_path\n\n;\n\nblackboard\n\n>\n\nget\n\n<\n\nnav_msgs\n\n::\n\nmsg\n\n::\n\nPath\n\n>\n\n(\n\npath_blackboard_id_\n\n,\n\ncurrent_path\n\n);\n\n...\n\nfeedback_msg\n\n>\n\ndistance_remaining\n\n=\n\ndistance_remaining\n\n;\n\nfeedback_msg\n\n>\n\nestimated_time_remaining\n\n=\n\nestimated_time_remaining\n\n;\n\nint\n\nrecovery_count\n\n=\n\n0\n\n;\n\nblackboard\n\n>\n\nget\n\n<\n\nint\n\n>\n\n(\n\n\"number_recoveries\"\n\n,\n\nrecovery_count"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13c080-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Navigator Plugin\uf0c1.txt", "start_index": 13905, "chroma:document": ">\n\nget\n\n<\n\nint\n\n>\n\n(\n\n\"number_recoveries\"\n\n,\n\nrecovery_count\n\n);\n\nfeedback_msg\n\n>\n\nnumber_of_recoveries\n\n=\n\nrecovery_count\n\n;\n\nfeedback_msg\n\n>\n\ncurrent_pose\n\n=\n\ncurrent_pose\n\n;\n\nfeedback_msg\n\n>\n\nnavigation_time\n\n=\n\nclock_\n\n>\n\nnow\n\n()\n\nstart_time_\n\n;\n\nbt_action_server_\n\n>\n\npublishFeedback\n\n(\n\nfeedback_msg\n\n);\n\n}\n\n```\n\nLanguage: unknown\n\nFile: nav2_core::NavigatorBase\n\n```\n\n#include\n\n\"pluginlib/class_list_macros.hpp\"\n\nPLUGINLIB_EXPORT_CLASS\n\n(\n\nnav2_bt_navigator\n\n::\n\nNavigateToPoseNavigator\n\n,\n\nnav2_core\n\n::\n\nNavigatorBase\n\n)\n\n```\n\nLanguage: unknown\n\nFile: description\n\n```\n\n<library\n\npath=\n\n\"nav2_bt_navigator\"\n\n>\n\n<class\n\ntype=\n\n\"nav2_bt_navigator::NavigateToPoseNavigator\"\n\nbase_class_type=\n\n\"nav2_core::NavigatorBase\"\n\n>\n\n<description>\n\nThis\n\nis\n\npure\n\npoint-to-point\n\nnavigation\n\n</description>\n\n</class>\n\n</library>\n\n```\n\nLanguage: unknown\n\nFile: share\n\n```\n\npluginlib_export_plugin_description_file(nav2_core navigator_plugin.xml)\n\n```\n\nLanguage: unknown\n\nFile: package.xml\n\n```\n\n<export>\n\n<build_type>"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13c094-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Navigator Plugin\uf0c1.txt", "start_index": 14872, "chroma:document": "File: package.xml\n\n```\n\n<export>\n\n<build_type>\n\nament_cmake\n\n</build_type>\n\n<nav2_core\n\nplugin=\n\n\"${prefix}/navigator_plugin.xml\"\n\n/>\n\n</export>\n\n```\n\nLanguage: unknown\n\nFile: nav2_params.yaml\n\n```\n\nbt_navigator:\n\nros__parameters:\n\nuse_sim_time: true\n\nglobal_frame: map\n\nrobot_base_frame: base_link\n\ntransform_tolerance: 0.1\n\ndefault_nav_to_pose_bt_xml: replace/with/path/to/bt.xml # or $(find-pkg-share my_package)/behavior_tree/my_nav_to_pose_bt.xml\n\ndefault_nav_through_poses_bt_xml: replace/with/path/to/bt.xml # or $(find-pkg-share my_package)/behavior_tree/my_nav_through_poses_bt.xml\n\ngoal_blackboard_id: goal\n\ngoals_blackboard_id: goals\n\npath_blackboard_id: path\n\nnavigators: ['navigate_to_pose', 'navigate_through_poses']\n\nnavigate_to_pose:\n\nplugin: \"nav2_bt_navigator::NavigateToPoseNavigator\" # In Iron and older versions, \"/\" was used instead of \"::\"\n\nnavigate_through_poses:\n\nplugin: \"nav2_bt_navigator::NavigateThroughPosesNavigator\" # In Iron and older versions, \"/\" was used instead of \"::\"\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13c0a8-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Writing a New Navigator Plugin\uf0c1.txt", "start_index": 15880, "chroma:document": "```\n\nLanguage: unknown\n\nFile: <plugin_id>.<plugin_specific_parameter>\n\n```\n\n$\n\nros2\n\nlaunch\n\nnav2_bringup\n\ntb3_simulation_launch.py\n\nparams_file:\n\n=\n\n/path/to/your_params_file.yaml\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13c0d0-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Publisher\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Publisher\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/dwb\n\nparams/visualization.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Parameters\uf0c1 <dwbplugin>: DWB plugin name defined in thecontroller_plugin_idsparameter inController Server."}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13c0e4-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/GoalUpdater\uf0c1.txt", "start_index": 0, "chroma:document": "Title: GoalUpdater\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/bt\n\nplugins/decorators/GoalUpdater.html\n\nSection: getting_started/index.html\n\n--------------------------------------------------------------------------------\n\n## Parameters\uf0c1\n\n## Input Ports\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: use_cancel_deceleration\n\n```\n\n<GoalUpdater\n\ninput_goal=\n\n\"{goal}\"\n\noutput_goal=\n\n\"{updated_goal}\"\n\n>\n\n<!-\n\nAdd tree components here--\n\n>\n\n</GoalUpdater>\n\n```"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13c0f8-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Rotation Shim Controller\uf0c1.txt", "start_index": 0, "chroma:document": "Title: Rotation Shim Controller\uf0c1\n\nURL: https://docs.nav2.org/configuration/packages/configuring-rotation-shim-controller.html#configuring-rotation-shim\n\nSection: tuning/index.html\n\n--------------------------------------------------------------------------------\n\n## Rotation Shim Controller Parameters\uf0c1\n\n## Example\uf0c1\n\nCode Examples:\n\nLanguage: unknown\n\nFile: README\n\n```\n\ncontroller_server\n\n:\n\nros__parameters\n\n:\n\nuse_sim_time\n\n:\n\nTrue\n\ncontroller_frequency\n\n:\n\n20.0\n\nmin_x_velocity_threshold\n\n:\n\n0.001\n\nmin_y_velocity_threshold\n\n:\n\n0.5\n\nmin_theta_velocity_threshold\n\n:\n\n0.001\n\nprogress_checker_plugins\n\n:\n\n[\n\n\"progress_checker\"\n\n]\n\n# progress_checker_plugin: \"progress_checker\" For Humble and older\n\ngoal_checker_plugins\n\n:\n\n[\n\n\"goal_checker\"\n\n]\n\ncontroller_plugins\n\n:\n\n[\n\n\"FollowPath\"\n\n]\n\nprogress_checker\n\n:\n\nplugin\n\n:\n\n\"nav2_controller::SimpleProgressChecker\"\n\nrequired_movement_radius\n\n:\n\n0.5\n\nmovement_time_allowance\n\n:\n\n10.0\n\ngoal_checker\n\n:\n\nplugin\n\n:\n\n\"nav2_controller::SimpleGoalChecker\"\n\nxy_goal_tolerance\n\n:\n\n0.25"}


created_at: 2024-12-07 01:39:04
topic: persistent://default/default/c502b221-cbba-48f5-9f57-26dfa50f986e
id: fb13c116-b437-11ef-85fe-36b882750a1d
encoding: FLOAT32
metadata:
{"source": "/Users/ad12/ros2-rag/exported_docs/nav2/Rotation Shim Controller\uf0c1.txt", "start_index": 998, "chroma:document": "xy_goal_tolerance\n\n:\n\n0.25\n\nyaw_goal_tolerance\n\n:\n\n0.25\n\nstateful\n\n:\n\nTrue\n\nFollowPath\n\n:\n\nplugin\n\n:\n\n\"nav2_rotation_shim_controller::RotationShimController\"\n\nprimary_controller\n\n:\n\n\"nav2_regulated_pure_pursuit_controller::RegulatedPurePursuitController\"\n\nangular_dist_threshold\n\n:\n\n0.785\n\nforward_sampling_distance\n\n:\n\n0.5\n\nrotate_to_heading_angular_vel\n\n:\n\n1.8\n\nmax_angular_accel\n\n:\n\n3.2\n\nsimulate_ahead_time\n\n:\n\n1.0\n\nrotate_to_goal_heading\n\n:\n\nfalse\n\n# Primary controller params can be placed here below\n\n# ...\n\n```"}


