well that is not my repo got that from a tutorial. That model is working fine
and it uses sdf model . I want to use that plugin for my own urdf


[ Issues migrating the ign_ros2_control hardware_interface  #557  ](/ros-
controls/ros2_control/issues/557)


Sorry, something went wrong.


[ ![@farbod-new](https://avatars.githubusercontent.com/u/76223948?s=80&v=4)
](/farbod-new)


[
![@bmagyar](https://avatars.githubusercontent.com/u/3524577?s=80&u=8f938d2dcacdcbb54f3977d6356cef945a6eb6ed&v=4)
](/bmagyar)


##  Question Tools


[
![@oldtopos](https://avatars.githubusercontent.com/u/2193065?s=80&u=6ff065eac02ed8de6c03b677ee132dda0819a0a0&v=4)
](/oldtopos)


[ .pre-commit-config.yaml
](/UniversalRobots/Universal_Robots_ROS2_Gazebo_Simulation/blob/humble/.pre-
commit-config.yaml ".pre-commit-config.yaml")


An extra information that might help is that I successfully built the
following repository (with no errors):


First time here? Check out the FAQ!


* [ Pricing ](/pricing)


[ cco-seasony ](/cco-seasony) opened this issue  Oct 11, 2021  · 20 comments


  * [ Notifications ](/login?return_to=%2FUniversalRobots%2FUniversal_Robots_ROS2_Gazebo_Simulation)
  * [ Fork  21  ](/login?return_to=%2FUniversalRobots%2FUniversal_Robots_ROS2_Gazebo_Simulation)
  * [ Star  41  ](/login?return_to=%2FUniversalRobots%2FUniversal_Robots_ROS2_Gazebo_Simulation)


None yet


[ ![@ahcorde](https://avatars.githubusercontent.com/u/1933907?s=52&v=4)
](/ahcorde) [
![@i-khokhlov](https://avatars.githubusercontent.com/u/18539647?s=52&v=4)
](/i-khokhlov) [ ![@farbod-
new](https://avatars.githubusercontent.com/u/76223948?s=52&v=4) ](/farbod-new)


I am still having trouble with the joint_limits_interface dependency, although
the code is included in the ros2_control package. Do I need a ROS1-Bridge to
solve this dependency? Or do I have to compile those dependencies from source
with ros2? How do I make this compilation work? Do I need ROS1-Bridge?


[ ur_simulation_gazebo
](/UniversalRobots/Universal_Robots_ROS2_Gazebo_Simulation/tree/humble/ur_simulation_gazebo
"ur_simulation_gazebo")


Copy link


Toggle navigation


Building this package with the Foxy deb packages should be fine.

---

All reactions


You can’t perform that action at this time.


* Product


[ ![me_saw gravatar image](/m/default/media/images/nophoto.png?v=28)
](/users/52338/me_saw/) [ me_saw ](/users/52338/me_saw/) (  2020-03-28
13:02:08 -0500  )  edit


[ ![me_saw gravatar image](/m/default/media/images/nophoto.png?v=28)
](/users/52338/me_saw/) [ me_saw ](/users/52338/me_saw/) (  2020-03-27
10:31:19 -0500  )  edit


**[ oldtopos ](/oldtopos) ** commented  Oct 27, 2021  •


* [ gazebo_ros ](/questions/scope:all/sort:activity-desc/tags:gazebo_ros/page:1/)


Summary: 12 packages finished [10.3s]
1 package failed: gazebo_ros2_control
1 package had stderr output: gazebo_ros2_control
1 package not processed

---

All reactions


#  Provide feedback


##  [ Packages  0
](/orgs/UniversalRobots/packages?repo_name=Universal_Robots_ROS2_Gazebo_Simulation)


which gets things working ....


[ README.md
](/UniversalRobots/Universal_Robots_ROS2_Gazebo_Simulation/blob/humble/README.md
"README.md")


#  problems when trying to build gazebo_ros2_control  #42


Member


* [ The ReadME Project  GitHub community articles  ](/readme)


    * [ Topics ](/topics)
    * [ Trending ](/trending)
    * [ Collections ](/collections)


[ Branches
](/UniversalRobots/Universal_Robots_ROS2_Gazebo_Simulation/branches) [ Tags
](/UniversalRobots/Universal_Robots_ROS2_Gazebo_Simulation/tags)


Sort by »  [ oldest  ](/question/347179/custom-gazebo-
plugin/?sort=oldest#sort-top) [ newest  ](/question/347179/custom-gazebo-
plugin/?sort=latest#sort-top) [ most voted  ](/question/347179/custom-gazebo-
plugin/?sort=votes#sort-top)


Copy link


[ ![Weasfas gravatar image](/upfiles/avatars/Weasfas/resized/16/Yes-man.png)
](/users/34184/weasfas/) [ Weasfas ](/users/34184/weasfas/) (  2020-03-28
06:50:16 -0500  )  edit


|  [ Ask Your Question ](/questions/ask/)
---|---|---|---

0


Sorry, something went wrong.


Failed <<< gazebo_ros2_control [1.99s, exited with code 1]


**[ farbod-new ](/farbod-new) ** commented  Dec 31, 2020


I'm using gazebo_ros2_control on ROS 2 Galactic.

---

All reactions


* [ customplugin ](/questions/scope:all/sort:activity-desc/tags:customplugin/page:1/)


**[ farbod-new ](/farbod-new) ** commented  Dec 18, 2020


Additional navigation options


Thanks,
Farbod

---

All reactions


Resources


Name  |  Name  |


##  About


All reactions


Hi!


[ Sign in ](/login?return_to=https%3A%2F%2Fgithub.com%2Fros-
controls%2Fgazebo_ros2_control%2Fissues%2F42)


[ LICENSE
](/UniversalRobots/Universal_Robots_ROS2_Gazebo_Simulation/blob/humble/LICENSE
"LICENSE")


[ ![@destogl](https://avatars.githubusercontent.com/u/1918204?s=80&v=4)
](/destogl)


[ Report repository ](/contact/report-
content?content_url=https%3A%2F%2Fgithub.com%2FUniversalRobots%2FUniversal_Robots_ROS2_Gazebo_Simulation&report=UniversalRobots+%28user%29)


No milestone


[ **updated 2020-03-20 12:56:33 -0500  ** ](/questions/347179/revisions/)


[ Search syntax tips ](https://docs.github.com/search-github/github-code-
search/understanding-github-code-search-syntax)


Finally, I was able to build "joint_limits_interface". But now, a new error
comes up in "default_robot_hw_sim.hpp"


Sorry, something went wrong.


    * [ CI/CD & Automation ](/solutions/ci-cd/)
    * [ DevOps ](/solutions/devops/)
    * [ DevSecOps  ](https://resources.github.com/devops/fundamentals/devsecops/)


Copy link


  * 👍  2 reactions
  * 👀  1 reaction


* [ Pricing ](/pricing)


* Open Source


Failed <<< gazebo_ros2_control [3.75s, exited with code 2]


Explore


I checked the ros2_control repository. It seems that right now `
joint_limit_interface ` it's not available [ https://github.com/ros-
controls/ros2_control/tree/master/joint_limits_interface
](https://github.com/ros-
controls/ros2_control/tree/master/joint_limits_interface) . It has a `
COLCON_IGNORE ` inside the folder which means this package will not compile.


No one assigned


**Have a question about this project?** Sign up for a free GitHub account to
open an issue and contact its maintainers and the community.


You signed in with another tab or window. [ Reload ]() to refresh your
session.  You signed out in another tab or window. [ Reload ]() to refresh
your session.  You switched accounts on another tab or window. [ Reload ]() to
refresh your session.  Dismiss alert


**[ farbod-new ](/farbod-new) ** commented  Dec 21, 2020


Closed


[ none ](/questions/scope:all/sort:activity-desc/tags:none/page:1/) ×


[ subscribe to rss feed ](/feeds/question/347179/ "subscribe to the rss feed")


All other models should be working correctly.


Sorry, something went wrong.


    cd $COLCON_WS
    colcon build --symlink-install --mixin rel-with-deb-info compile-commands ccache


and NOT calling the implementation read() function if no match


[ BSD-3-Clause license
](/UniversalRobots/Universal_Robots_ROS2_Gazebo_Simulation/blob/ros2/LICENSE)


All reactions


No branches or pull requests


[ OpenCV-ROS catkin_make error ](/question/363249/opencv-ros-catkin_make-
error/)


7 participants


###  Forks


  1. Create a colcon workspace:

        export COLCON_WS=~/workspaces/ur_gazebo
    mkdir -p $COLCON_WS/src


A Gazebo plugin is added with this lines in the URDF:


  * [ ![@fmauch](https://avatars.githubusercontent.com/u/491645?s=64&v=4) ](https://github.com/fmauch) [ **fmauch** Felix Exner (fexner)  ](https://github.com/fmauch)
  * [ ![@destogl](https://avatars.githubusercontent.com/u/1918204?s=64&v=4) ](https://github.com/destogl) [ **destogl** Dr. Denis  ](https://github.com/destogl)
  * [ ![@urrsk](https://avatars.githubusercontent.com/u/41109954?s=64&v=4) ](https://github.com/urrsk) [ **urrsk** Rune Søe-Knudsen  ](https://github.com/urrsk)


[ @AureoGD ](https://github.com/AureoGD) What are you using as a test case ?
If publicly available, kindly post a link.

---

All reactions


##  Footer


I am trying to follow the directions from the "docker file" in the following
link:


      <export>
        <gazebo_ros gazebo_model_path="${prefix}/models"/>
        <gazebo_ros plugin_path="${prefix}/lib" gazebo_media_path="${prefix}" />
      </export>


` gazebo_ros2_control ` import a system module in to the ` ResourceManager `
but this module is not being initialize.


[ why doesnt my while loop finish? ](/question/385534/why-doesnt-my-while-
loop-finish/)


[ .github/  workflows
](/UniversalRobots/Universal_Robots_ROS2_Gazebo_Simulation/tree/humble/.github/workflows
"This path skips through empty directories")


**[ ahcorde ](/ahcorde) ** commented  Oct 28, 2021


[ Search syntax tips ](https://docs.github.com/search-github/github-code-
search/understanding-github-code-search-syntax)


    * [ Enterprise ](/enterprise)
    * [ Teams ](/team)
    * [ Startups ](/enterprise/startups)
    * [ Education  ](https://education.github.com)


[ Star
](/login?return_to=%2FUniversalRobots%2FUniversal_Robots_ROS2_Gazebo_Simulation)


##  farbod@SavantzDev:~/ros2_ws$ colcon build
Starting >>> hardware_interface
Starting >>> controller_manager_msgs
Finished <<< hardware_interface [0.34s]
Starting >>> controller_interface
Starting >>> joint_limits_interface
Starting >>> transmission_interface
Starting >>> test_robot_hardware
Finished <<< joint_limits_interface [0.19s]
Finished <<< controller_interface [0.20s]
Finished <<< test_robot_hardware [0.29s]
Finished <<< controller_manager_msgs [0.94s]
Starting >>> controller_manager
Starting >>> ros2controlcli
Finished <<< controller_manager [0.37s]
Starting >>> joint_state_controller
Starting >>> joint_trajectory_controller
Starting >>> forward_command_controller
Finished <<< ros2controlcli [0.54s]
Starting >>> ros2_control
Finished <<< joint_state_controller [0.28s]
Finished <<< forward_command_controller [0.28s]
Finished <<< joint_trajectory_controller [0.31s]
Finished <<< ros2_control [0.19s]
Finished <<< transmission_interface [6.02s]
Starting >>> gazebo_ros2_control
\--- stderr: gazebo_ros2_control
In file included from
/home/farbod/ros2_ws/src/gazebo_ros2_control/gazebo_ros2_control/include/gazebo_ros2_control/default_robot_hw_sim.hpp:46,
from
/home/farbod/ros2_ws/src/gazebo_ros2_control/gazebo_ros2_control/src/default_robot_hw_sim.cpp:39:
/home/farbod/ros2_ws/install/joint_limits_interface/include/joint_limits_interface/joint_limits_interface.hpp:41:10:
fatal error: hardware_interface/joint_state_handle.hpp: No such file or
directory
41 | #include <hardware_interface/joint_state_handle.hpp>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/default_robot_hw_sim.dir/build.make:63:
CMakeFiles/default_robot_hw_sim.dir/src/default_robot_hw_sim.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:80:
CMakeFiles/default_robot_hw_sim.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
In file included from
/home/farbod/ros2_ws/src/gazebo_ros2_control/gazebo_ros2_control/include/gazebo_ros2_control/gazebo_ros2_control_plugin.hpp:53,
from
/home/farbod/ros2_ws/src/gazebo_ros2_control/gazebo_ros2_control/src/gazebo_ros2_control_plugin.cpp:41:
/home/farbod/ros2_ws/src/gazebo_ros2_control/gazebo_ros2_control/include/gazebo_ros2_control/robot_hw_sim.hpp:42:10:
fatal error: hardware_interface/robot_hardware.hpp: No such file or directory
42 | #include "hardware_interface/robot_hardware.hpp"
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/gazebo_ros2_control.dir/build.make:63:
CMakeFiles/gazebo_ros2_control.dir/src/gazebo_ros2_control_plugin.cpp.o] Error
1
make[1]: *** [CMakeFiles/Makefile2:107:
CMakeFiles/gazebo_ros2_control.dir/all] Error 2
make: *** [Makefile:141: all] Error 2


**Have a question about this project?** Sign up for a free GitHub account to
open an issue and contact its maintainers and the community.


> Overwriting the the FollowPath and GridBased "parameter trees" of the
> planner_server and controller_server nodes.


        * [ 1- Creating a new Behavior Plugin ](../../plugin_tutorials/docs/writing_new_behavior_plugin.html#creating-a-new-behavior-plugin)
        * [ 2- Exporting the Behavior Plugin ](../../plugin_tutorials/docs/writing_new_behavior_plugin.html#exporting-the-behavior-plugin)
        * [ 3- Pass the plugin name through params file ](../../plugin_tutorials/docs/writing_new_behavior_plugin.html#pass-the-plugin-name-through-params-file)
        * [ 4- Run Behavior Plugin ](../../plugin_tutorials/docs/writing_new_behavior_plugin.html#run-behavior-plugin)
    * [ Writing a New Navigator Plugin ](../../plugin_tutorials/docs/writing_new_navigator_plugin.html)
      * [ Overview ](../../plugin_tutorials/docs/writing_new_navigator_plugin.html#overview)
      * [ Requirements ](../../plugin_tutorials/docs/writing_new_navigator_plugin.html#requirements)
      * [ Tutorial Steps ](../../plugin_tutorials/docs/writing_new_navigator_plugin.html#tutorial-steps)
        * [ 1- Create a new Navigator Plugin ](../../plugin_tutorials/docs/writing_new_navigator_plugin.html#create-a-new-navigator-plugin)
        * [ 2- Exporting the navigator plugin ](../../plugin_tutorials/docs/writing_new_navigator_plugin.html#exporting-the-navigator-plugin)
        * [ 3- Pass the plugin name through the params file ](../../plugin_tutorials/docs/writing_new_navigator_plugin.html#pass-the-plugin-name-through-the-params-file)
        * [ 4- Run plugin ](../../plugin_tutorials/docs/writing_new_navigator_plugin.html#run-plugin)
  * [ Configuration Guide ](../index.html)
    * [ Behavior-Tree Navigator ](configuring-bt-navigator.html)
      * [ Parameters ](configuring-bt-navigator.html#parameters)
      * [ Example ](configuring-bt-navigator.html#example)
    * Behavior Tree XML Nodes
      * Action Plugins
        * [ Wait ](bt-plugins/actions/Wait.html)
        * [ Spin ](bt-plugins/actions/Spin.html)
        * [ BackUp ](bt-plugins/actions/BackUp.html)
        * [ DriveOnHeading ](bt-plugins/actions/DriveOnHeading.html)
        * [ AssistedTeleop ](bt-plugins/actions/AssistedTeleop.html)
        * [ ComputePathToPose ](bt-plugins/actions/ComputePathToPose.html)
        * [ FollowPath ](bt-plugins/actions/FollowPath.html)
        * [ NavigateToPose ](bt-plugins/actions/NavigateToPose.html)
        * [ ClearEntireCostmap ](bt-plugins/actions/ClearEntireCostmap.html)
        * [ ClearCostmapExceptRegion ](bt-plugins/actions/ClearCostmapExceptRegion.html)
        * [ ClearCostmapAroundRobot ](bt-plugins/actions/ClearCostmapAroundRobot.html)
        * [ ReinitializeGlobalLocalization ](bt-plugins/actions/ReinitializeGlobalLocalization.html)
        * [ TruncatePath ](bt-plugins/actions/TruncatePath.html)
        * [ TruncatePathLocal ](bt-plugins/actions/TruncatePathLocal.html)
        * [ PlannerSelector ](bt-plugins/actions/PlannerSelector.html)
        * [ ControllerSelector ](bt-plugins/actions/ControllerSelector.html)
        * [ SmootherSelector ](bt-plugins/actions/SmootherSelector.html)
        * [ GoalCheckerSelector ](bt-plugins/actions/GoalCheckerSelector.html)
        * [ ProgressCheckerSelector ](bt-plugins/actions/ProgressCheckerSelector.html)
        * [ NavigateThroughPoses ](bt-plugins/actions/NavigateThroughPoses.html)
        * [ ComputePathThroughPoses ](bt-plugins/actions/ComputePathThroughPoses.html)
        * [ ComputeCoveragePath ](bt-plugins/actions/ComputeCoveragePath.html)


Closed


    * [ Actions  Automate any workflow  ](/features/actions)
    * [ Packages  Host and manage packages  ](/features/packages)
    * [ Security  Find and fix vulnerabilities  ](/features/security)
    * [ Codespaces  Instant dev environments  ](/features/codespaces)
    * [ Copilot  Write better code with AI  ](/features/copilot)
    * [ Code review  Manage code changes  ](/features/code-review)
    * [ Issues  Plan and track work  ](/features/issues)
    * [ Discussions  Collaborate outside of code  ](/features/discussions)


[
![@SteveMacenski](https://avatars.githubusercontent.com/u/14944147?s=80&u=0925d37e9d3569c71d930114b66e6394c2efb3c6&v=4)
](/SteveMacenski)


While this behavior tree does not make use of it, the ` PlannerSelector  ` , `
ControllerSelector  ` , and ` GoalCheckerSelector  ` behavior tree nodes can
also be helpful. Rather than hardcoding the algorithm to use ( ` GridBased  `
and ` FollowPath  ` ), these behavior tree nodes will allow a user to
dynamically change the algorithm used in the navigation system via a ROS
topic. It may be instead advisable to create different subtree contexts using
condition nodes with specified algorithms in their most useful and unique
situations. However, the selector nodes can be a useful way to change
algorithms from an external application rather than via internal behavior tree
control flow logic. It is better to implement changes through behavior tree
methods, but we understand that many professional users have external
applications to dynamically change settings of their navigators.


Copy link


        * [ Path Follow Critic ](../../configuration/packages/configuring-mppic.html#path-follow-critic)
        * [ Prefer Forward Critic ](../../configuration/packages/configuring-mppic.html#prefer-forward-critic)
        * [ Twirling Critic ](../../configuration/packages/configuring-mppic.html#twirling-critic)
        * [ Velocity Deadband Critic ](../../configuration/packages/configuring-mppic.html#velocity-deadband-critic)
      * [ Example ](../../configuration/packages/configuring-mppic.html#example)
      * [ Notes to Users ](../../configuration/packages/configuring-mppic.html#notes-to-users)
        * [ General Words of Wisdom ](../../configuration/packages/configuring-mppic.html#general-words-of-wisdom)
        * [ Prediction Horizon, Costmap Sizing, and Offsets ](../../configuration/packages/configuring-mppic.html#prediction-horizon-costmap-sizing-and-offsets)
        * [ Obstacle, Inflation Layer, and Path Following ](../../configuration/packages/configuring-mppic.html#obstacle-inflation-layer-and-path-following)
    * [ Rotation Shim Controller ](../../configuration/packages/configuring-rotation-shim-controller.html)
      * [ Rotation Shim Controller Parameters ](../../configuration/packages/configuring-rotation-shim-controller.html#rotation-shim-controller-parameters)
      * [ Example ](../../configuration/packages/configuring-rotation-shim-controller.html#example)
    * [ Graceful Controller ](../../configuration/packages/configuring-graceful-motion-controller.html)
      * [ Graceful Controller Parameters ](../../configuration/packages/configuring-graceful-motion-controller.html#graceful-controller-parameters)
      * [ Example ](../../configuration/packages/configuring-graceful-motion-controller.html#example)
    * [ Map Server / Saver ](../../configuration/packages/configuring-map-server.html)
      * [ Map Saver Parameters ](../../configuration/packages/configuring-map-server.html#map-saver-parameters)
      * [ Map Server Parameters ](../../configuration/packages/configuring-map-server.html#map-server-parameters)
      * [ Costmap Filter Info Server Parameters ](../../configuration/packages/configuring-map-server.html#costmap-filter-info-server-parameters)
      * [ Example ](../../configuration/packages/configuring-map-server.html#example)
    * [ AMCL ](../../configuration/packages/configuring-amcl.html)
      * [ Parameters ](../../configuration/packages/configuring-amcl.html#parameters)
      * [ Example ](../../configuration/packages/configuring-amcl.html#example)
    * [ Behavior Server ](../../configuration/packages/configuring-behavior-server.html)
      * [ Behavior Server Parameters ](../../configuration/packages/configuring-behavior-server.html#behavior-server-parameters)
      * [ Default Plugins ](../../configuration/packages/configuring-behavior-server.html#default-plugins)
      * [ Spin Behavior Parameters ](../../configuration/packages/configuring-behavior-server.html#spin-behavior-parameters)
      * [ BackUp Behavior Parameters ](../../configuration/packages/configuring-behavior-server.html#backup-behavior-parameters)
      * [ DriveOnHeading Behavior Parameters ](../../configuration/packages/configuring-behavior-server.html#driveonheading-behavior-parameters)
      * [ AssistedTeleop Behavior Parameters ](../../configuration/packages/configuring-behavior-server.html#assistedteleop-behavior-parameters)
      * [ Example ](../../configuration/packages/configuring-behavior-server.html#example)
    * [ Smoother Server ](../../configuration/packages/configuring-smoother-server.html)
      * [ Smoother Server Parameters ](../../configuration/packages/configuring-smoother-server.html#smoother-server-parameters)
      * [ Example ](../../configuration/packages/configuring-smoother-server.html#example)
    * [ Simple Smoother ](../../configuration/packages/configuring-simple-smoother.html)
      * [ Simple Smoother Parameters ](../../configuration/packages/configuring-simple-smoother.html#simple-smoother-parameters)
      * [ Example ](../../configuration/packages/configuring-simple-smoother.html#example)
    * [ Savitzky-Golay Smoother ](../../configuration/packages/configuring-savitzky-golay-smoother.html)
      * [ Savitzky-Golay Smoother Parameters ](../../configuration/packages/configuring-savitzky-golay-smoother.html#savitzky-golay-smoother-parameters)
      * [ Example ](../../configuration/packages/configuring-savitzky-golay-smoother.html#example)


        * [ Twirling Critic ](../../configuration/packages/configuring-mppic.html#twirling-critic)
      * [ Example ](../../configuration/packages/configuring-mppic.html#example)
      * [ Notes to Users ](../../configuration/packages/configuring-mppic.html#notes-to-users)
        * [ General Words of Wisdom ](../../configuration/packages/configuring-mppic.html#general-words-of-wisdom)
        * [ Prediction Horizon, Costmap Sizing, and Offsets ](../../configuration/packages/configuring-mppic.html#prediction-horizon-costmap-sizing-and-offsets)
        * [ Obstacle, Inflation Layer, and Path Following ](../../configuration/packages/configuring-mppic.html#obstacle-inflation-layer-and-path-following)
    * [ Rotation Shim Controller ](../../configuration/packages/configuring-rotation-shim-controller.html)
      * [ Rotation Shim Controller Parameters ](../../configuration/packages/configuring-rotation-shim-controller.html#rotation-shim-controller-parameters)
      * [ Example ](../../configuration/packages/configuring-rotation-shim-controller.html#example)
    * [ Map Server / Saver ](../../configuration/packages/configuring-map-server.html)
      * [ Map Saver Parameters ](../../configuration/packages/configuring-map-server.html#map-saver-parameters)
      * [ Map Server Parameters ](../../configuration/packages/configuring-map-server.html#map-server-parameters)
      * [ Costmap Filter Info Server Parameters ](../../configuration/packages/configuring-map-server.html#costmap-filter-info-server-parameters)
      * [ Example ](../../configuration/packages/configuring-map-server.html#example)
    * [ AMCL ](../../configuration/packages/configuring-amcl.html)
      * [ Parameters ](../../configuration/packages/configuring-amcl.html#parameters)
      * [ Example ](../../configuration/packages/configuring-amcl.html#example)
    * [ Behavior Server ](../../configuration/packages/configuring-behavior-server.html)
      * [ Behavior Server Parameters ](../../configuration/packages/configuring-behavior-server.html#behavior-server-parameters)
      * [ Default Plugins ](../../configuration/packages/configuring-behavior-server.html#default-plugins)
      * [ Spin Behavior Parameters ](../../configuration/packages/configuring-behavior-server.html#spin-behavior-parameters)
      * [ BackUp Behavior Parameters ](../../configuration/packages/configuring-behavior-server.html#backup-behavior-parameters)
      * [ DriveOnHeading Behavior Parameters ](../../configuration/packages/configuring-behavior-server.html#driveonheading-behavior-parameters)
      * [ AssistedTeleop Behavior Parameters ](../../configuration/packages/configuring-behavior-server.html#assistedteleop-behavior-parameters)
      * [ Example ](../../configuration/packages/configuring-behavior-server.html#example)
    * [ Smoother Server ](../../configuration/packages/configuring-smoother-server.html)
      * [ Smoother Server Parameters ](../../configuration/packages/configuring-smoother-server.html#smoother-server-parameters)
      * [ Example ](../../configuration/packages/configuring-smoother-server.html#example)
    * [ Simple Smoother ](../../configuration/packages/configuring-simple-smoother.html)
      * [ Simple Smoother Parameters ](../../configuration/packages/configuring-simple-smoother.html#simple-smoother-parameters)
      * [ Example ](../../configuration/packages/configuring-simple-smoother.html#example)
    * [ Savitzky-Golay Smoother ](../../configuration/packages/configuring-savitzky-golay-smoother.html)
      * [ Savitzky-Golay Smoother Parameters ](../../configuration/packages/configuring-savitzky-golay-smoother.html#savitzky-golay-smoother-parameters)
      * [ Example ](../../configuration/packages/configuring-savitzky-golay-smoother.html#example)
    * [ Constrained smoother ](../../configuration/packages/configuring-constrained-smoother.html)
      * [ Smoother Server Parameters ](../../configuration/packages/configuring-constrained-smoother.html#smoother-server-parameters)
      * [ Example ](../../configuration/packages/configuring-constrained-smoother.html#example)
    * [ Velocity Smoother ](../../configuration/packages/configuring-velocity-smoother.html)
      * [ Velocity Smoother Parameters ](../../configuration/packages/configuring-velocity-smoother.html#velocity-smoother-parameters)
      * [ Example ](../../configuration/packages/configuring-velocity-smoother.html#example)


We think differently, but it is great if we can find some agreement at least
with this planner selector :-)

---

All reactions


        * [ 1- Setup Rviz clicked point ](../../tutorials/docs/navigation2_dynamic_point_following.html#setup-rviz-clicked-point)
        * [ 2- Run Dynamic Object Following in Nav2 Simulation ](../../tutorials/docs/navigation2_dynamic_point_following.html#run-dynamic-object-following-in-nav2-simulation)
    * [ Navigating with Keepout Zones ](../../tutorials/docs/navigation2_with_keepout_filter.html)
      * [ Overview ](../../tutorials/docs/navigation2_with_keepout_filter.html#overview)
      * [ Requirements ](../../tutorials/docs/navigation2_with_keepout_filter.html#requirements)
      * [ Tutorial Steps ](../../tutorials/docs/navigation2_with_keepout_filter.html#tutorial-steps)
        * [ 1\. Prepare filter mask ](../../tutorials/docs/navigation2_with_keepout_filter.html#prepare-filter-mask)
        * [ 2\. Configure Costmap Filter Info Publisher Server ](../../tutorials/docs/navigation2_with_keepout_filter.html#configure-costmap-filter-info-publisher-server)
        * [ 3\. Enable Keepout Filter ](../../tutorials/docs/navigation2_with_keepout_filter.html#enable-keepout-filter)
        * [ 4\. Run Nav2 stack ](../../tutorials/docs/navigation2_with_keepout_filter.html#run-nav2-stack)
    * [ Navigating with Speed Limits ](../../tutorials/docs/navigation2_with_speed_filter.html)
      * [ Overview ](../../tutorials/docs/navigation2_with_speed_filter.html#overview)
      * [ Requirements ](../../tutorials/docs/navigation2_with_speed_filter.html#requirements)
      * [ Tutorial Steps ](../../tutorials/docs/navigation2_with_speed_filter.html#tutorial-steps)
        * [ 1\. Prepare filter mask ](../../tutorials/docs/navigation2_with_speed_filter.html#prepare-filter-mask)
        * [ 2\. Configure Costmap Filter Info Publisher Server ](../../tutorials/docs/navigation2_with_speed_filter.html#configure-costmap-filter-info-publisher-server)
        * [ 3\. Enable Speed Filter ](../../tutorials/docs/navigation2_with_speed_filter.html#enable-speed-filter)
        * [ 4\. Run Nav2 stack ](../../tutorials/docs/navigation2_with_speed_filter.html#run-nav2-stack)
    * [ Using Rotation Shim Controller ](../../tutorials/docs/using_shim_controller.html)
      * [ Overview ](../../tutorials/docs/using_shim_controller.html#overview)
      * [ What is the Rotation Shim Controller? ](../../tutorials/docs/using_shim_controller.html#what-is-the-rotation-shim-controller)
      * [ Configuring Rotation Shim Controller ](../../tutorials/docs/using_shim_controller.html#configuring-rotation-shim-controller)
      * [ Configuring Primary Controller ](../../tutorials/docs/using_shim_controller.html#configuring-primary-controller)
      * [ Demo Execution ](../../tutorials/docs/using_shim_controller.html#demo-execution)
    * [ Adding a Smoother to a BT ](../../tutorials/docs/adding_smoother.html)
      * [ Overview ](../../tutorials/docs/adding_smoother.html#overview)
      * [ Requirements ](../../tutorials/docs/adding_smoother.html#requirements)
      * [ Tutorial Steps ](../../tutorials/docs/adding_smoother.html#tutorial-steps)
        * [ 0- Familiarization with the Smoother BT Node ](../../tutorials/docs/adding_smoother.html#familiarization-with-the-smoother-bt-node)
        * [ 1- Specifying a Smoother Plugin ](../../tutorials/docs/adding_smoother.html#specifying-a-smoother-plugin)
        * [ 2- Modifying your BT XML ](../../tutorials/docs/adding_smoother.html#modifying-your-bt-xml)
    * [ Using Collision Monitor ](../../tutorials/docs/using_collision_monitor.html)
      * [ Overview ](../../tutorials/docs/using_collision_monitor.html#overview)
      * [ Requirements ](../../tutorials/docs/using_collision_monitor.html#requirements)
      * [ Configuring Collision Monitor ](../../tutorials/docs/using_collision_monitor.html#configuring-collision-monitor)
      * [ Configuring Collision Monitor with VelocityPolygon ](../../tutorials/docs/using_collision_monitor.html#configuring-collision-monitor-with-velocitypolygon)
      * [ Preparing Nav2 stack ](../../tutorials/docs/using_collision_monitor.html#preparing-nav2-stack)
      * [ Demo Execution ](../../tutorials/docs/using_collision_monitor.html#demo-execution)
    * [ Adding a New Nav2 Task Server ](../../tutorials/docs/adding_a_nav2_task_server.html)
      * [ Lifecycle Nodes ](../../tutorials/docs/adding_a_nav2_task_server.html#lifecycle-nodes)


Sorry, something went wrong.


> What if I am a python developer that do not know anything about c++ or
> behavior trees?


latest


Check this [ introduction ](https://www.behaviortree.dev/bt_basics/) to learn
how behavior trees work and the difference between actions, conditions,
controls and decorators.


[ Sign up for free ](/join?source=comment-repo) **to join this conversation on
GitHub** . Already have an account? [ Sign in to comment
](/login?return_to=https%3A%2F%2Fgithub.com%2Fros-
planning%2Fnavigation2%2Fissues%2F2086)


> Can you lay out a vision for how that could be addressed scalably?


You can’t perform that action at this time.


edited


Can I directly write into the BT blackboard directly from the ROS network?
That could also be a valid solution for me, but I think that it is not
supported and it is not planned to be supported in the future. Am I wrong?


  * [ Getting Started ](../../getting_started/index.html)
    * [ Installation ](../../getting_started/index.html#installation)
    * [ Running the Example ](../../getting_started/index.html#running-the-example)
    * [ Navigating ](../../getting_started/index.html#navigating)
  * [ Development Guides ](../../development_guides/index.html)
    * [ Build and Install ](../../development_guides/build_docs/index.html)
      * [ Install ](../../development_guides/build_docs/index.html#install)
      * [ Build ](../../development_guides/build_docs/index.html#build)
        * [ Released Distribution Binaries ](../../development_guides/build_docs/index.html#released-distribution-binaries)
        * [ Rolling Development Source ](../../development_guides/build_docs/index.html#rolling-development-source)
        * [ Docker Container Images ](../../development_guides/build_docs/index.html#docker-container-images)
      * [ Generate Doxygen ](../../development_guides/build_docs/index.html#generate-doxygen)
      * [ Help ](../../development_guides/build_docs/index.html#help)
        * [ Build Troubleshooting Guide ](../../development_guides/build_docs/build_troubleshooting_guide.html)
    * [ Dev Containers ](../../development_guides/devcontainer_docs/index.html)
      * [ Dev Container Guide ](../../development_guides/devcontainer_docs/devcontainer_guide.html)
        * [ Creating Dev Containers ](../../development_guides/devcontainer_docs/devcontainer_guide.html#creating-dev-containers)
        * [ Using Dev Containers ](../../development_guides/devcontainer_docs/devcontainer_guide.html#using-dev-containers)
      * [ What, Why, How? ](../../development_guides/devcontainer_docs/index.html#what-why-how)
        * [ What is a Dev Container? ](../../development_guides/devcontainer_docs/index.html#what-is-a-dev-container)
        * [ Why use a Dev Container? ](../../development_guides/devcontainer_docs/index.html#why-use-a-dev-container)
        * [ How do Dev Containers work? ](../../development_guides/devcontainer_docs/index.html#how-do-dev-containers-work)
      * [ Prerequisites ](../../development_guides/devcontainer_docs/index.html#prerequisites)
      * [ Getting started ](../../development_guides/devcontainer_docs/index.html#getting-started)
      * [ Security ](../../development_guides/devcontainer_docs/index.html#security)
    * [ Getting Involved ](../../development_guides/involvement_docs/index.html)
      * [ Getting Involved ](../../development_guides/involvement_docs/index.html#id1)
      * [ Process ](../../development_guides/involvement_docs/index.html#process)
      * [ Licensing ](../../development_guides/involvement_docs/index.html#licensing)
      * [ Developer Certification of Origin (DCO) ](../../development_guides/involvement_docs/index.html#developer-certification-of-origin-dco)
  * [ Navigation Concepts ](../../concepts/index.html)
    * [ ROS 2 ](../../concepts/index.html#ros-2)
      * [ Action Server ](../../concepts/index.html#action-server)
      * [ Lifecycle Nodes and Bond ](../../concepts/index.html#lifecycle-nodes-and-bond)
    * [ Behavior Trees ](../../concepts/index.html#behavior-trees)
    * [ Navigation Servers ](../../concepts/index.html#navigation-servers)
      * [ Planner, Controller, Smoother and Recovery Servers ](../../concepts/index.html#planner-controller-smoother-and-recovery-servers)
      * [ Planners ](../../concepts/index.html#planners)
      * [ Controllers ](../../concepts/index.html#controllers)
      * [ Behaviors ](../../concepts/index.html#behaviors)


Member


  * [ Code  ](/ros-planning/navigation2)
  * [ Issues  ](/ros-planning/navigation2/issues)
  * [ Pull requests  ](/ros-planning/navigation2/pulls)
  * [ Actions  ](/ros-planning/navigation2/actions)
  * [ Projects  ](/ros-planning/navigation2/projects)
  * [ Security  ](/ros-planning/navigation2/security)
  * [ Insights  ](/ros-planning/navigation2/pulse)


Closed


      * [ DWB Forward vs Reverse Pruning ](../../migration/Humble.html#dwb-forward-vs-reverse-pruning)
      * [ More stable regulation on curves for long lookahead distances ](../../migration/Humble.html#more-stable-regulation-on-curves-for-long-lookahead-distances)
      * [ Publish Collision Monitor State ](../../migration/Humble.html#publish-collision-monitor-state)
      * [ Renamed ROS-parameter in Collision Monitor ](../../migration/Humble.html#renamed-ros-parameter-in-collision-monitor)
      * [ New safety behavior model “limit” in Collision Monitor ](../../migration/Humble.html#new-safety-behavior-model-limit-in-collision-monitor)
      * [ Velocity smoother applies deceleration when timeout ](../../migration/Humble.html#velocity-smoother-applies-deceleration-when-timeout)
      * [ PoseProgressChecker plugin ](../../migration/Humble.html#poseprogresschecker-plugin)
      * [ Allow multiple goal checkers and change parameter progress_checker_plugin(s) name and type ](../../migration/Humble.html#allow-multiple-goal-checkers-and-change-parameter-progress-checker-plugin-s-name-and-type)
      * [ IsBatteryChargingCondition BT Node ](../../migration/Humble.html#isbatterychargingcondition-bt-node)
      * [ Behavior Server Error Codes ](../../migration/Humble.html#behavior-server-error-codes)
      * [ New Denoise Costmap Layer Plugin ](../../migration/Humble.html#new-denoise-costmap-layer-plugin)
      * [ SmacPlannerHybrid viz_expansions parameter ](../../migration/Humble.html#smacplannerhybrid-viz-expansions-parameter)
    * [ Iron to Jazzy ](../../migration/Iron.html)
      * [ Added TwistStamped Option for Commands ](../../migration/Iron.html#added-twiststamped-option-for-commands)
      * [ Add VelocityPolygon in Collision Monitor ](../../migration/Iron.html#add-velocitypolygon-in-collision-monitor)
      * [ Change polygon points parameter format in Collision Monitor ](../../migration/Iron.html#change-polygon-points-parameter-format-in-collision-monitor)
      * [ Introduction of Soft-Real Time Action Servers ](../../migration/Iron.html#introduction-of-soft-real-time-action-servers)
      * [ ` opennav_coverage  ` Project ](../../migration/Iron.html#opennav-coverage-project)
      * [ Introduce a new Multi-Robot Bringup Launch ](../../migration/Iron.html#introduce-a-new-multi-robot-bringup-launch)
      * [ New option for the Voxel and Obstacle Layers ](../../migration/Iron.html#new-option-for-the-voxel-and-obstacle-layers)
      * [ use_interpolation RPP Parameter Depreciated ](../../migration/Iron.html#use-interpolation-rpp-parameter-depreciated)
      * [ Changes to MPPI Goal Critic ](../../migration/Iron.html#changes-to-mppi-goal-critic)
      * [ Changes to MPPI Path Angle Critic ](../../migration/Iron.html#changes-to-mppi-path-angle-critic)
      * [ Changes to MPPI Path Handling For Directionality ](../../migration/Iron.html#changes-to-mppi-path-handling-for-directionality)
      * [ Addition of new MPPI Cost Critic ](../../migration/Iron.html#addition-of-new-mppi-cost-critic)
      * [ MPPI Acceleration ](../../migration/Iron.html#mppi-acceleration)
      * [ Move Error Code Enumerations ](../../migration/Iron.html#move-error-code-enumerations)
      * [ Substitution in parameter file ](../../migration/Iron.html#substitution-in-parameter-file)
      * [ Allow Behavior Server Plugins to Access The Action Result ](../../migration/Iron.html#allow-behavior-server-plugins-to-access-the-action-result)
      * [ Smac Planner Debug Param Name Change ](../../migration/Iron.html#smac-planner-debug-param-name-change)
      * [ Smac Planner On Approach to Goal Shortcutting Solutions ](../../migration/Iron.html#smac-planner-on-approach-to-goal-shortcutting-solutions)
      * [ Added GPS Waypoint Follower Server ](../../migration/Iron.html#added-gps-waypoint-follower-server)
      * [ Smac Planner Hybrid-A* New Features ](../../migration/Iron.html#smac-planner-hybrid-a-new-features)
      * [ New node in nav2_collision_monitor: Collision Detector ](../../migration/Iron.html#new-node-in-nav2-collision-monitor-collision-detector)
      * [ Dynamic enabling/disabling of sources/polygons in Collision Monitor/Detector ](../../migration/Iron.html#dynamic-enabling-disabling-of-sources-polygons-in-collision-monitor-detector)
      * [ Expose action server’s result timeout ](../../migration/Iron.html#expose-action-server-s-result-timeout)
      * [ RewrittenYaml could add new parameters to YAMLs ](../../migration/Iron.html#rewrittenyaml-could-add-new-parameters-to-yamls)
      * [ Simple Commander API Allows Multi-Robot Namespacing ](../../migration/Iron.html#simple-commander-api-allows-multi-robot-namespacing)
      * [ Change duration type in wait_action node ](../../migration/Iron.html#change-duration-type-in-wait-action-node)
      * [ The costmap activation fails when required transforms are not available ](../../migration/Iron.html#the-costmap-activation-fails-when-required-transforms-are-not-available)


[
![@pabloinigoblasco](https://avatars.githubusercontent.com/u/13334595?s=80&u=b604bb463ac657f5b1a02f5c403eab807c327c5a&v=4)
](/pabloinigoblasco)


> I don't think its the right solution for every user that wants to change
> algorithms, but it could be useful for enough that I'd support it.


    * [ CI/CD & Automation ](/solutions/ci-cd/)
    * [ DevOps ](/solutions/devops/)
    * [ DevSecOps  ](https://resources.github.com/devops/fundamentals/devsecops/)


No milestone


##  Use saved searches to filter your results more quickly


You could have different BTs though with different ` controller_id ` names in
the BT XML to call the controller server (or planner) **if ** you want to
change planners/controllers on a per-navigation-request basis rather than what
I described above which allows you to use many algorithms within the same
navigation request on custom conditional bases

---

👍  1  pabloinigoblasco reacted with thumbs up emoji


My (unfiltered) opinion on python: if you're unwilling to learn anything but
python, you shouldn't be building robots. Python has no place in a navigation
system, its not fast enough and doesn't give you the tools required to create
a stable product or result. You cannot control memory allocations and the
python implementations in ROS are very heavy. That's not to say everything
needs to be C++, rust, C, java, and other are equally valid, but it certainly
can't be python. C++ and python are just the main languages we use in
robotics, but conceptually you could build a successful navigation system in
others.


I need to switch in runtime between different planners and controllers. I used
to do that in ROS1 navigation stack using the dynamic_reconfigure server.
Is this functionality available in navigation2. How could I do that?


Nonetheless, thanks for adding it to the feature request list.

---

All reactions


[ Sign in ](/login?return_to=https%3A%2F%2Fgithub.com%2Fros-
planning%2Fnavigation2%2Fissues%2F2086)


        * [ 1- Launch Navigation2 ](../../tutorials/docs/navigation2_with_slam.html#launch-navigation2)
        * [ 2- Launch SLAM ](../../tutorials/docs/navigation2_with_slam.html#launch-slam)
        * [ 3- Working with SLAM ](../../tutorials/docs/navigation2_with_slam.html#working-with-slam)
        * [ 4- Getting Started Simplification ](../../tutorials/docs/navigation2_with_slam.html#getting-started-simplification)
    * [ (STVL) Using an External Costmap Plugin ](../../tutorials/docs/navigation2_with_stvl.html)
      * [ Overview ](../../tutorials/docs/navigation2_with_stvl.html#overview)
      * [ Costmap2D and STVL ](../../tutorials/docs/navigation2_with_stvl.html#costmap2d-and-stvl)
      * [ Tutorial Steps ](../../tutorials/docs/navigation2_with_stvl.html#tutorial-steps)
        * [ 0- Setup ](../../tutorials/docs/navigation2_with_stvl.html#setup)
        * [ 1- Install STVL ](../../tutorials/docs/navigation2_with_stvl.html#install-stvl)
        * [ 1- Modify Navigation2 Parameter ](../../tutorials/docs/navigation2_with_stvl.html#modify-navigation2-parameter)
        * [ 2- Launch Navigation2 ](../../tutorials/docs/navigation2_with_stvl.html#launch-navigation2)
        * [ 3- RVIZ ](../../tutorials/docs/navigation2_with_stvl.html#rviz)
    * [ Navigating Using GPS Localization ](../../tutorials/docs/navigation2_with_gps.html)
      * [ Overview ](../../tutorials/docs/navigation2_with_gps.html#overview)
      * [ Requirements ](../../tutorials/docs/navigation2_with_gps.html#requirements)
      * [ GPS Localization Overview ](../../tutorials/docs/navigation2_with_gps.html#gps-localization-overview)
      * [ Tutorial Steps ](../../tutorials/docs/navigation2_with_gps.html#tutorial-steps)
        * [ 0- Setup Gazebo World ](../../tutorials/docs/navigation2_with_gps.html#setup-gazebo-world)
        * [ 1- Setup GPS Localization system ](../../tutorials/docs/navigation2_with_gps.html#setup-gps-localization-system)
        * [ 2- Setup Navigation system ](../../tutorials/docs/navigation2_with_gps.html#setup-navigation-system)
        * [ 3- Interactive GPS Waypoint Follower ](../../tutorials/docs/navigation2_with_gps.html#interactive-gps-waypoint-follower)
        * [ 4- Logged GPS Waypoint Follower & Waypoint Logging ](../../tutorials/docs/navigation2_with_gps.html#logged-gps-waypoint-follower-waypoint-logging)
      * [ Conclusion ](../../tutorials/docs/navigation2_with_gps.html#conclusion)
    * [ Groot - Interacting with Behavior Trees ](../../tutorials/docs/using_groot.html)
      * [ Overview ](../../tutorials/docs/using_groot.html#overview)
      * [ Visualize Behavior Trees ](../../tutorials/docs/using_groot.html#visualize-behavior-trees)
      * [ Edit Behavior Trees ](../../tutorials/docs/using_groot.html#edit-behavior-trees)
      * [ Adding A Custom Node ](../../tutorials/docs/using_groot.html#adding-a-custom-node)
    * [ Using VIO to Augment Robot Odometry ](../../tutorials/docs/integrating_vio.html)
      * [ Overview ](../../tutorials/docs/integrating_vio.html#overview)
      * [ Setting Up the ZED X Camera ](../../tutorials/docs/integrating_vio.html#setting-up-the-zed-x-camera)
      * [ Setting Up ZED ROS ](../../tutorials/docs/integrating_vio.html#setting-up-zed-ros)
      * [ Fusing VIO Into Local State Estimate ](../../tutorials/docs/integrating_vio.html#fusing-vio-into-local-state-estimate)
        * [ Fusing VSLAM Into Global State Estimate ](../../tutorials/docs/integrating_vio.html#fusing-vslam-into-global-state-estimate)
      * [ Testing it Out! ](../../tutorials/docs/integrating_vio.html#testing-it-out)
    * [ Dynamic Object Following ](../../tutorials/docs/navigation2_dynamic_point_following.html)
      * [ Overview ](../../tutorials/docs/navigation2_dynamic_point_following.html#overview)
      * [ Tutorial Steps ](../../tutorials/docs/navigation2_dynamic_point_following.html#tutorial-steps)
        * [ 0- Create the Behavior Tree ](../../tutorials/docs/navigation2_dynamic_point_following.html#create-the-behavior-tree)


> PlannerSelector


      * [ Smoothers ](../../concepts/index.html#smoothers)
      * [ Robot Footprints ](../../concepts/index.html#robot-footprints)
      * [ Waypoint Following ](../../concepts/index.html#waypoint-following)
    * [ State Estimation ](../../concepts/index.html#state-estimation)
      * [ Standards ](../../concepts/index.html#standards)
      * [ Global Positioning: Localization and SLAM ](../../concepts/index.html#global-positioning-localization-and-slam)
      * [ Odometry ](../../concepts/index.html#odometry)
    * [ Environmental Representation ](../../concepts/index.html#environmental-representation)
      * [ Costmaps and Layers ](../../concepts/index.html#costmaps-and-layers)
      * [ Costmap Filters ](../../concepts/index.html#costmap-filters)
      * [ Other Forms ](../../concepts/index.html#other-forms)
    * [ Nav2 Academic Overview ](../../concepts/index.html#nav2-academic-overview)
  * [ First-Time Robot Setup Guide ](../../setup_guides/index.html)
    * [ Setting Up Transformations ](../../setup_guides/transformation/setup_transforms.html)
      * [ Transforms Introduction ](../../setup_guides/transformation/setup_transforms.html#transforms-introduction)
      * [ Static Transform Publisher Demo ](../../setup_guides/transformation/setup_transforms.html#static-transform-publisher-demo)
      * [ Transforms in Navigation2 ](../../setup_guides/transformation/setup_transforms.html#transforms-in-navigation2)
      * [ Conclusion ](../../setup_guides/transformation/setup_transforms.html#conclusion)
    * [ Setting Up The URDF ](../../setup_guides/urdf/setup_urdf.html)
      * [ URDF and the Robot State Publisher ](../../setup_guides/urdf/setup_urdf.html#urdf-and-the-robot-state-publisher)
      * [ Setting Up the Environment ](../../setup_guides/urdf/setup_urdf.html#setting-up-the-environment)
      * [ Writing the URDF ](../../setup_guides/urdf/setup_urdf.html#writing-the-urdf)
      * [ Build and Launch ](../../setup_guides/urdf/setup_urdf.html#build-and-launch)
      * [ Visualization using RVIZ ](../../setup_guides/urdf/setup_urdf.html#visualization-using-rviz)
      * [ Adding Physical Properties ](../../setup_guides/urdf/setup_urdf.html#adding-physical-properties)
      * [ Conclusion ](../../setup_guides/urdf/setup_urdf.html#conclusion)
    * [ Setting Up Odometry ](../../setup_guides/odom/setup_odom.html)
      * [ Odometry Introduction ](../../setup_guides/odom/setup_odom.html#odometry-introduction)
      * [ Setting Up Odometry on your Robot ](../../setup_guides/odom/setup_odom.html#setting-up-odometry-on-your-robot)
      * [ Simulating an Odometry System using Gazebo ](../../setup_guides/odom/setup_odom.html#simulating-an-odometry-system-using-gazebo)
        * [ Setup and Prerequisites ](../../setup_guides/odom/setup_odom.html#setup-and-prerequisites)
        * [ Adding Gazebo Plugins to a URDF ](../../setup_guides/odom/setup_odom.html#adding-gazebo-plugins-to-a-urdf)
        * [ Launch and Build Files ](../../setup_guides/odom/setup_odom.html#launch-and-build-files)
        * [ Build, Run and Verification ](../../setup_guides/odom/setup_odom.html#build-run-and-verification)
      * [ Robot Localization Demo ](../../setup_guides/odom/setup_odom.html#robot-localization-demo)
        * [ Configuring Robot Localization ](../../setup_guides/odom/setup_odom.html#configuring-robot-localization)
        * [ Launch and Build Files ](../../setup_guides/odom/setup_odom.html#id3)
        * [ Build, Run and Verification ](../../setup_guides/odom/setup_odom.html#id4)
      * [ Conclusion ](../../setup_guides/odom/setup_odom.html#conclusion)
    * [ Setting Up Sensors ](../../setup_guides/sensors/setup_sensors.html)


> I'd say that what you're asking can be completed in a really reasonably and
> easy way and so close this ticket,


        * [ Path Follow Critic ](configuring-mppic.html#path-follow-critic)
        * [ Prefer Forward Critic ](configuring-mppic.html#prefer-forward-critic)
        * [ Twirling Critic ](configuring-mppic.html#twirling-critic)
        * [ Velocity Deadband Critic ](configuring-mppic.html#velocity-deadband-critic)
      * [ Example ](configuring-mppic.html#example)
      * [ Notes to Users ](configuring-mppic.html#notes-to-users)
        * [ General Words of Wisdom ](configuring-mppic.html#general-words-of-wisdom)
        * [ Prediction Horizon, Costmap Sizing, and Offsets ](configuring-mppic.html#prediction-horizon-costmap-sizing-and-offsets)
        * [ Obstacle, Inflation Layer, and Path Following ](configuring-mppic.html#obstacle-inflation-layer-and-path-following)
    * [ Rotation Shim Controller ](configuring-rotation-shim-controller.html)
      * [ Rotation Shim Controller Parameters ](configuring-rotation-shim-controller.html#rotation-shim-controller-parameters)
      * [ Example ](configuring-rotation-shim-controller.html#example)
    * [ Graceful Controller ](configuring-graceful-motion-controller.html)
      * [ Graceful Controller Parameters ](configuring-graceful-motion-controller.html#graceful-controller-parameters)
      * [ Example ](configuring-graceful-motion-controller.html#example)
    * [ Map Server / Saver ](configuring-map-server.html)
      * [ Map Saver Parameters ](configuring-map-server.html#map-saver-parameters)
      * [ Map Server Parameters ](configuring-map-server.html#map-server-parameters)
      * [ Costmap Filter Info Server Parameters ](configuring-map-server.html#costmap-filter-info-server-parameters)
      * [ Example ](configuring-map-server.html#example)
    * [ AMCL ](configuring-amcl.html)
      * [ Parameters ](configuring-amcl.html#parameters)
      * [ Example ](configuring-amcl.html#example)
    * [ Behavior Server ](configuring-behavior-server.html)
      * [ Behavior Server Parameters ](configuring-behavior-server.html#behavior-server-parameters)
      * [ Default Plugins ](configuring-behavior-server.html#default-plugins)
      * [ Spin Behavior Parameters ](configuring-behavior-server.html#spin-behavior-parameters)
      * [ BackUp Behavior Parameters ](configuring-behavior-server.html#backup-behavior-parameters)
      * [ DriveOnHeading Behavior Parameters ](configuring-behavior-server.html#driveonheading-behavior-parameters)
      * [ AssistedTeleop Behavior Parameters ](configuring-behavior-server.html#assistedteleop-behavior-parameters)
      * [ Example ](configuring-behavior-server.html#example)
    * [ Smoother Server ](configuring-smoother-server.html)
      * [ Smoother Server Parameters ](configuring-smoother-server.html#smoother-server-parameters)
      * [ Example ](configuring-smoother-server.html#example)
    * [ Simple Smoother ](configuring-simple-smoother.html)
      * [ Simple Smoother Parameters ](configuring-simple-smoother.html#simple-smoother-parameters)
      * [ Example ](configuring-simple-smoother.html#example)
    * [ Savitzky-Golay Smoother ](configuring-savitzky-golay-smoother.html)
      * [ Savitzky-Golay Smoother Parameters ](configuring-savitzky-golay-smoother.html#savitzky-golay-smoother-parameters)
      * [ Example ](configuring-savitzky-golay-smoother.html#example)


In nominal execution, this will replan the path at every 3 seconds and pass
that path onto the controller, similar to the behavior tree in [ Nav2 Behavior
Trees  ](../index.html#behavior-trees) . The planner though is now `
ComputePathThroughPoses  ` taking a vector, ` goals  ` , rather than a single
pose ` goal  ` to plan to. The ` RemovePassedGoals  ` node is used to cull out
` goals  ` that the robot has passed on its path. In this case, it is set to
remove a pose from the poses when the robot is within ` 0.5  ` of the goal and
it is the next goal in the list. This is implemented such that replanning can
be computed after the robot has passed by some of the intermediary poses and
not continue to try to replan through them in the future. This time, if the
planner fails, it will trigger contextually aware recoveries in its subtree,
clearing the global costmap. Additional recoveries can be added here for
additional context-specific recoveries, such as trying another algorithm.


> Changing a BT to specify a controller_id input port defined by the
> FollowPath BT node is extremely reasonable requiring no code updates beyond
> the XML (which you could think of as a parameter file; all users should have
> their own tuned for their own needs) and scalable to N algorithms in any
> definable context or event.


We read every piece of feedback, and take your input very seriously.


[
![@pabloinigoblasco](https://avatars.githubusercontent.com/u/13334595?s=52&v=4)
](/pabloinigoblasco) [
![@SteveMacenski](https://avatars.githubusercontent.com/u/14944147?s=52&v=4)
](/SteveMacenski)


This behavior tree implements a navigation behavior from a starting point,
through many intermediary hard pose constraints, to a final goal in freespace.
It contains both use of custom behaviors for recovery in specific sub-contexts
as well as a global recovery subtree for system-level failures. It also
provides the opportunity for users to retry tasks multiple times before
returning a failed state.


  * the question is already answered
  * I did not understand your proposals after you explained them
  * what I request makes no sense


[ Nav2 ![Logo](../../_static/nav2_logo_powered.png) ](../../index.html)


    * [ All features ](/features)
    * [ Documentation  ](https://docs.github.com)
    * [ GitHub Skills  ](https://skills.github.com/)
    * [ Blog  ](https://github.blog)


Contributor  Author


[ Navigation 2 ![Logo](../../_static/nav2_logo.png) ](../../index.html)


    * [ Learning Pathways  ](https://resources.github.com/learn/pathways/)
    * [ White papers, Ebooks, Webinars  ](https://resources.github.com/)
    * [ Customer Stories ](/customer-stories)
    * [ Partners  ](https://partner.github.com/)


Not all the functionalities are useful for everybody. I also may not need the
LowBatteryBT. :-)


Password


[ Edit ](https://github.com/ros-planning/navigation.ros.org)


[ Sign in ](/login?return_to=https%3A%2F%2Fgithub.com%2Fros-
planning%2Fnavigation2%2Fissues%2F2086)


      * [ Composition ](../../tutorials/docs/adding_a_nav2_task_server.html#composition)
      * [ Error codes ](../../tutorials/docs/adding_a_nav2_task_server.html#error-codes)
      * [ Conclusion ](../../tutorials/docs/adding_a_nav2_task_server.html#conclusion)
    * [ Filtering of Noise-Induced Obstacles ](../../tutorials/docs/filtering_of_noise-induced_obstacles.html)
      * [ Overview ](../../tutorials/docs/filtering_of_noise-induced_obstacles.html#overview)
      * [ Requirements ](../../tutorials/docs/filtering_of_noise-induced_obstacles.html#requirements)
      * [ Tutorial Steps ](../../tutorials/docs/filtering_of_noise-induced_obstacles.html#tutorial-steps)
        * [ 1\. Enable Denoise Layer ](../../tutorials/docs/filtering_of_noise-induced_obstacles.html#enable-denoise-layer)
        * [ 2\. Run Nav2 stack ](../../tutorials/docs/filtering_of_noise-induced_obstacles.html#run-nav2-stack)
      * [ How it works ](../../tutorials/docs/filtering_of_noise-induced_obstacles.html#how-it-works)
    * [ Camera Calibration ](../../tutorials/docs/camera_calibration.html)
      * [ Overview ](../../tutorials/docs/camera_calibration.html#overview)
      * [ Requirements ](../../tutorials/docs/camera_calibration.html#requirements)
      * [ Tutorial Steps ](../../tutorials/docs/camera_calibration.html#tutorial-steps)
    * [ Get Backtrace in ROS 2 / Nav2 ](../../tutorials/docs/get_backtrace.html)
      * [ Overview ](../../tutorials/docs/get_backtrace.html#overview)
      * [ Preliminaries ](../../tutorials/docs/get_backtrace.html#preliminaries)
      * [ From a Node ](../../tutorials/docs/get_backtrace.html#from-a-node)
      * [ From a Launch File ](../../tutorials/docs/get_backtrace.html#from-a-launch-file)
      * [ From Large Project ](../../tutorials/docs/get_backtrace.html#from-large-project)
      * [ From Nav2 Bringup ](../../tutorials/docs/get_backtrace.html#from-nav2-bringup)
      * [ Automatic backtrace on crash ](../../tutorials/docs/get_backtrace.html#automatic-backtrace-on-crash)
    * [ Profiling in ROS 2 / Nav2 ](../../tutorials/docs/get_profile.html)
      * [ Overview ](../../tutorials/docs/get_profile.html#overview)
      * [ Preliminaries ](../../tutorials/docs/get_profile.html#preliminaries)
      * [ Profile from a Node ](../../tutorials/docs/get_profile.html#profile-from-a-node)
      * [ Profile from a Launch File ](../../tutorials/docs/get_profile.html#profile-from-a-launch-file)
      * [ From Nav2 Bringup ](../../tutorials/docs/get_profile.html#from-nav2-bringup)
      * [ Interpreting Results ](../../tutorials/docs/get_profile.html#interpreting-results)
    * [ Docker for Development: Zero to Hero ](../../tutorials/docs/docker_dev.html)
      * [ Overview ](../../tutorials/docs/docker_dev.html#overview)
      * [ Preliminaries ](../../tutorials/docs/docker_dev.html#preliminaries)
      * [ Important Docker Commands ](../../tutorials/docs/docker_dev.html#important-docker-commands)
      * [ Exploring Your First Container ](../../tutorials/docs/docker_dev.html#exploring-your-first-container)
      * [ Understanding ROS Docker Images ](../../tutorials/docs/docker_dev.html#understanding-ros-docker-images)
      * [ For Docker-Based Development ](../../tutorials/docs/docker_dev.html#for-docker-based-development)
        * [ Building a Development Image ](../../tutorials/docs/docker_dev.html#building-a-development-image)
        * [ Visualizations from Docker ](../../tutorials/docs/docker_dev.html#visualizations-from-docker)
      * [ For Docker-Based Deployment ](../../tutorials/docs/docker_dev.html#for-docker-based-deployment)
      * [ Conclusion ](../../tutorials/docs/docker_dev.html#conclusion)


      * [ Navigation Subtree ](../overview/detailed_behavior_tree_walkthrough.html#navigation-subtree)
      * [ Recovery Subtree ](../overview/detailed_behavior_tree_walkthrough.html#recovery-subtree)
    * [ Navigate To Pose ](nav_to_pose_recovery.html)
    * Navigate Through Poses
    * [ Navigate To Pose and Pause Near Goal-Obstacle ](nav_to_pose_and_pause_near_goal_obstacle.html)
    * [ Navigate To Pose With Consistent Replanning And If Path Becomes Invalid ](nav_to_pose_with_consistent_replanning_and_if_path_becomes_invalid.html)
    * [ Follow Dynamic Point ](follow_point.html)
    * [ Odometry Calibration ](odometry_calibration.html)
  * [ Navigation Plugins ](../../plugins/index.html)
    * [ Behavior-Tree Navigators ](../../plugins/index.html#behavior-tree-navigators)
    * [ Costmap Layers ](../../plugins/index.html#costmap-layers)
    * [ Costmap Filters ](../../plugins/index.html#costmap-filters)
    * [ Controllers ](../../plugins/index.html#controllers)
    * [ Planners ](../../plugins/index.html#planners)
    * [ Smoothers ](../../plugins/index.html#smoothers)
    * [ Behaviors ](../../plugins/index.html#behaviors)
    * [ Waypoint Task Executors ](../../plugins/index.html#waypoint-task-executors)
    * [ Goal Checkers ](../../plugins/index.html#goal-checkers)
    * [ Progress Checkers ](../../plugins/index.html#progress-checkers)
    * [ Behavior Tree Nodes ](../../plugins/index.html#behavior-tree-nodes)
  * [ Migration Guides ](../../migration/index.html)
    * [ Dashing to Eloquent ](../../migration/Dashing.html)
      * [ New Packages ](../../migration/Dashing.html#new-packages)
      * [ New Plugins ](../../migration/Dashing.html#new-plugins)
      * [ Navigation2 Architectural Changes ](../../migration/Dashing.html#navigation2-architectural-changes)
    * [ Eloquent to Foxy ](../../migration/Eloquent.html)
      * [ General ](../../migration/Eloquent.html#general)
      * [ Server Updates ](../../migration/Eloquent.html#server-updates)
      * [ New Plugins ](../../migration/Eloquent.html#new-plugins)
      * [ Map Server Re-Work ](../../migration/Eloquent.html#map-server-re-work)
      * [ New Particle Filter Messages ](../../migration/Eloquent.html#new-particle-filter-messages)
      * [ Selection of Behavior Tree in each navigation action ](../../migration/Eloquent.html#selection-of-behavior-tree-in-each-navigation-action)
      * [ FollowPoint Capability ](../../migration/Eloquent.html#followpoint-capability)
      * [ New Costmap Layer ](../../migration/Eloquent.html#new-costmap-layer)
    * [ Foxy to Galactic ](../../migration/Foxy.html)
      * [ NavigateToPose Action Feedback updates ](../../migration/Foxy.html#navigatetopose-action-feedback-updates)
      * [ NavigateToPose BT-node Interface Changes ](../../migration/Foxy.html#navigatetopose-bt-node-interface-changes)
      * [ NavigateThroughPoses and ComputePathThroughPoses Actions Added ](../../migration/Foxy.html#navigatethroughposes-and-computepaththroughposes-actions-added)
      * [ ComputePathToPose BT-node Interface Changes ](../../migration/Foxy.html#computepathtopose-bt-node-interface-changes)
      * [ ComputePathToPose Action Interface Changes ](../../migration/Foxy.html#computepathtopose-action-interface-changes)


If you wish to have recoveries for the smoother error codes, such as
triggering the system recoveries branch of a behavior tree:


Copy link


> PlannerSelector


edited


{{ message }}


  * [ Notifications ](/login?return_to=%2Fros-planning%2Fnavigation2)
  * [ Fork  1.1k  ](/login?return_to=%2Fros-planning%2Fnavigation2)
  * [ Star  2.1k  ](/login?return_to=%2Fros-planning%2Fnavigation2)


The [ SmoothPath  ](../../configuration/packages/bt-
plugins/actions/Smooth.html#bt-smooth-action) BT node is a behavior tree node
that interacts with the smoother task server similar to that which you may
expect to find for the planner or controller servers. It contains the action
client to call the server and specifies its arguments and return types as BT
ports. It too calls the server via an action interface that may be seperately
interacted with via other servers and client library languages.


[ pabloinigoblasco ](/pabloinigoblasco) opened this issue  Nov 11, 2020  · 12
comments


In the other hand, it is not obvious yet If there is a fast-solution or ready-
to-use snippet(for the BTXML) I could use to solve the issue and to configure
the properly the navigation2 stack. This option should enable the feature of
"selecting the planner or controller based on an external input from the ROS
network (topic, service or parameter) using the name of the desired planner
and controller".


Sorry, something went wrong.


Do not get me wrong, It is great if you can do complex and scalable
applications inside the navigation BT but I shouldnt be forced to do that in
that way.


> Is it possible to change the planner and controller from an external input
> (topic, service or parameter)? Is there a short code snippet (bash, c++, BT-
> XML) I could use to achieve it?


Skip to content


      * [ Sensor Introduction ](../../setup_guides/sensors/setup_sensors.html#sensor-introduction)
        * [ Common Sensor Messages ](../../setup_guides/sensors/setup_sensors.html#common-sensor-messages)
      * [ Simulating Sensors using Gazebo ](../../setup_guides/sensors/setup_sensors.html#simulating-sensors-using-gazebo)
        * [ Adding Gazebo Plugins to a URDF ](../../setup_guides/sensors/setup_sensors.html#adding-gazebo-plugins-to-a-urdf)
        * [ Launch and Build Files ](../../setup_guides/sensors/setup_sensors.html#launch-and-build-files)
        * [ Build, Run and Verification ](../../setup_guides/sensors/setup_sensors.html#build-run-and-verification)
      * [ Mapping and Localization ](../../setup_guides/sensors/setup_sensors.html#mapping-and-localization)
      * [ Costmap 2D ](../../setup_guides/sensors/setup_sensors.html#costmap-2d)
        * [ Configuring nav2_costmap_2d ](../../setup_guides/sensors/setup_sensors.html#configuring-nav2-costmap-2d)
        * [ Build, Run and Verification ](../../setup_guides/sensors/setup_sensors.html#id2)
      * [ Conclusion ](../../setup_guides/sensors/setup_sensors.html#conclusion)
    * [ Setting Up the Robot’s Footprint ](../../setup_guides/footprint/setup_footprint.html)
      * [ Footprint Introduction ](../../setup_guides/footprint/setup_footprint.html#footprint-introduction)
      * [ Configuring the Robot’s Footprint ](../../setup_guides/footprint/setup_footprint.html#configuring-the-robot-s-footprint)
      * [ Build, Run and Verification ](../../setup_guides/footprint/setup_footprint.html#build-run-and-verification)
      * [ Visualizing Footprint in RViz ](../../setup_guides/footprint/setup_footprint.html#visualizing-footprint-in-rviz)
      * [ Conclusion ](../../setup_guides/footprint/setup_footprint.html#conclusion)
    * [ Setting Up Navigation Plugins ](../../setup_guides/algorithm/select_algorithm.html)
      * [ Planner and Controller Servers ](../../setup_guides/algorithm/select_algorithm.html#planner-and-controller-servers)
      * [ Selecting the Algorithm Plugins ](../../setup_guides/algorithm/select_algorithm.html#selecting-the-algorithm-plugins)
        * [ Planner Server ](../../setup_guides/algorithm/select_algorithm.html#planner-server)
        * [ Controller Server ](../../setup_guides/algorithm/select_algorithm.html#controller-server)
      * [ Conclusion ](../../setup_guides/algorithm/select_algorithm.html#conclusion)
  * [ Robots Using ](../../about/robots.html)
  * [ General Tutorials ](../../tutorials/index.html)
    * [ Navigating with a Physical Turtlebot 3 ](../../tutorials/docs/navigation2_on_real_turtlebot3.html)
      * [ Overview ](../../tutorials/docs/navigation2_on_real_turtlebot3.html#overview)
      * [ Requirements ](../../tutorials/docs/navigation2_on_real_turtlebot3.html#requirements)
      * [ Tutorial Steps ](../../tutorials/docs/navigation2_on_real_turtlebot3.html#tutorial-steps)
        * [ 0- Setup Your Enviroment Variables ](../../tutorials/docs/navigation2_on_real_turtlebot3.html#setup-your-enviroment-variables)
        * [ 1- Launch Turtlebot 3 ](../../tutorials/docs/navigation2_on_real_turtlebot3.html#launch-turtlebot-3)
        * [ 2- Launch Nav2 ](../../tutorials/docs/navigation2_on_real_turtlebot3.html#launch-nav2)
        * [ 3- Launch RVIZ ](../../tutorials/docs/navigation2_on_real_turtlebot3.html#launch-rviz)
        * [ 4- Initialize the Location of Turtlebot 3 ](../../tutorials/docs/navigation2_on_real_turtlebot3.html#initialize-the-location-of-turtlebot-3)
        * [ 5- Send a Goal Pose ](../../tutorials/docs/navigation2_on_real_turtlebot3.html#send-a-goal-pose)
    * [ (SLAM) Navigating While Mapping ](../../tutorials/docs/navigation2_with_slam.html)
      * [ Overview ](../../tutorials/docs/navigation2_with_slam.html#overview)
      * [ Requirements ](../../tutorials/docs/navigation2_with_slam.html#requirements)
      * [ Tutorial Steps ](../../tutorials/docs/navigation2_with_slam.html#tutorial-steps)
        * [ 0- Launch Robot Interfaces ](../../tutorials/docs/navigation2_with_slam.html#launch-robot-interfaces)


      * [ Subtrees Obtain Shared Resources ](../../migration/Iron.html#subtrees-obtain-shared-resources)
      * [ Collision Monitor: added watchdog mechanism based on ` source_timeout  ` parameter with default blocking behavior ](../../migration/Iron.html#collision-monitor-added-watchdog-mechanism-based-on-source-timeout-parameter-with-default-blocking-behavior)
      * [ BtActionServer: use native library haltTree() ](../../migration/Iron.html#btactionserver-use-native-library-halttree)
      * [ Global Frame Removed from 2 BT Nodes ](../../migration/Iron.html#global-frame-removed-from-2-bt-nodes)
      * [ Introduction of ` CostmapUpdate.msg  ` ](../../migration/Iron.html#introduction-of-costmapupdate-msg)
      * [ Full Stack Uses Node Clocks ](../../migration/Iron.html#full-stack-uses-node-clocks)
      * [ New Graceful Motion Controller ](../../migration/Iron.html#new-graceful-motion-controller)
      * [ Plugin Libraries in BT Navigator Only Includes Custom Nodes ](../../migration/Iron.html#plugin-libraries-in-bt-navigator-only-includes-custom-nodes)
      * [ New RViz Plugin for selecting Planners, Controllers, Goal Checkers, Progress Checkers and Smoothers ](../../migration/Iron.html#new-rviz-plugin-for-selecting-planners-controllers-goal-checkers-progress-checkers-and-smoothers)
      * [ RPP new optional ` interpolate_curvature_after_goal  ` behavior and fix conflict between ` use_rotate_to_heading  ` and ` allow_reversing  ` ](../../migration/Iron.html#rpp-new-optional-interpolate-curvature-after-goal-behavior-and-fix-conflict-between-use-rotate-to-heading-and-allow-reversing)
      * [ Cancel Checker Interface For GlobalPlanner ](../../migration/Iron.html#cancel-checker-interface-for-globalplanner)
      * [ New BtActionServer/BtNavigator parameter ](../../migration/Iron.html#new-btactionserver-btnavigator-parameter)
      * [ New collision monitor parameter ](../../migration/Iron.html#new-collision-monitor-parameter)
      * [ New graceful cancellation API for Controllers ](../../migration/Iron.html#new-graceful-cancellation-api-for-controllers)
      * [ Standardization of Plugin Naming with Double Colons (::) ](../../migration/Iron.html#standardization-of-plugin-naming-with-double-colons)
      * [ Collision monitor: dynamic radius for circle type polygons ](../../migration/Iron.html#collision-monitor-dynamic-radius-for-circle-type-polygons)
  * [ Simple Commander API ](../../commander_api/index.html)
    * [ Overview ](../../commander_api/index.html#overview)
    * [ Commander API ](../../commander_api/index.html#id1)
    * [ Costmap API ](../../commander_api/index.html#costmap-api)
    * [ Footprint Collision Checker API ](../../commander_api/index.html#footprint-collision-checker-api)
    * [ Examples and Demos ](../../commander_api/index.html#examples-and-demos)
  * [ Roadmaps ](../../roadmap/roadmap.html)
    * [ Jazzy Roadmap ](../../roadmap/roadmap.html#jazzy-roadmap)
    * [ Iron Roadmap ](../../roadmap/roadmap.html#iron-roadmap)
    * [ Humble Roadmap ](../../roadmap/roadmap.html#humble-roadmap)
  * [ About and Contact ](../../about/index.html)
    * [ Related Projects ](../../about/related_projects.html)
    * [ About ](../../about/index.html#id1)
    * [ Contact ](../../about/index.html#contact)


                <Spin spin_dist="1.57" error_code_id="{spin_error_code}"/>
                <Wait wait_duration="5.0"/>
                <BackUp backup_dist="0.30" backup_speed="0.05" error_code_id="{backup_error_code}"/>
              </RoundRobin>
            </ReactiveFallback>
          </Sequence>
        </RecoveryNode>
      </BehaviorTree>
    </root>


A given behavior tree will have a line:


[
![@SteveMacenski](https://avatars.githubusercontent.com/u/14944147?s=80&u=0925d37e9d3569c71d930114b66e6394c2efb3c6&v=4)
](/SteveMacenski)


    std::bind(&PlannerSelector::callbackPlannerSelect, this, _1),
    sub_option);
}
BT::NodeStatus PlannerSelector::tick()
{
  callback_group_executor_.spin_some();
  // This behavior always use the last selected planner received from the topic input.
  // When no input is specified it uses the default planner.
  // If the default planner is not specified then we work in "required planner mode":
  // In this mode, the behavior returns failure if the planner selection is not received from
  // the topic input.
  if (last_selected_planner_.empty()) {
    std::string default_planner;
    getInput("default_planner", default_planner);
    if (default_planner.empty()) {
      return BT::NodeStatus::FAILURE;
    } else {
      last_selected_planner_ = default_planner;
    }
  }
  setOutput("selected_planner", last_selected_planner_);
  return BT::NodeStatus::SUCCESS;
}
void
PlannerSelector::callbackPlannerSelect(const std_msgs::msg::String::SharedPtr msg)
{
  last_selected_planner_ = msg->data;
}
}  // namespace nav2_behavior_tree
#include "behaviortree_cpp_v3/bt_factory.h"
BT_REGISTER_NODES(factory)
{
  factory.registerNodeType<nav2_behavior_tree::PlannerSelector>("PlannerSelector");
}


        * [ 1- Setup Rviz clicked point ](../../tutorials/docs/navigation2_dynamic_point_following.html#setup-rviz-clicked-point)
        * [ 2- Run Dynamic Object Following in Nav2 Simulation ](../../tutorials/docs/navigation2_dynamic_point_following.html#run-dynamic-object-following-in-nav2-simulation)
    * [ Navigating with Keepout Zones ](../../tutorials/docs/navigation2_with_keepout_filter.html)
      * [ Overview ](../../tutorials/docs/navigation2_with_keepout_filter.html#overview)
      * [ Requirements ](../../tutorials/docs/navigation2_with_keepout_filter.html#requirements)
      * [ Tutorial Steps ](../../tutorials/docs/navigation2_with_keepout_filter.html#tutorial-steps)
        * [ 1\. Prepare filter mask ](../../tutorials/docs/navigation2_with_keepout_filter.html#prepare-filter-mask)
        * [ 2\. Configure Costmap Filter Info Publisher Server ](../../tutorials/docs/navigation2_with_keepout_filter.html#configure-costmap-filter-info-publisher-server)
        * [ 3\. Enable Keepout Filter ](../../tutorials/docs/navigation2_with_keepout_filter.html#enable-keepout-filter)
        * [ 4\. Run Nav2 stack ](../../tutorials/docs/navigation2_with_keepout_filter.html#run-nav2-stack)
    * [ Navigating with Speed Limits ](../../tutorials/docs/navigation2_with_speed_filter.html)
      * [ Overview ](../../tutorials/docs/navigation2_with_speed_filter.html#overview)
      * [ Requirements ](../../tutorials/docs/navigation2_with_speed_filter.html#requirements)
      * [ Tutorial Steps ](../../tutorials/docs/navigation2_with_speed_filter.html#tutorial-steps)
        * [ 1\. Prepare filter mask ](../../tutorials/docs/navigation2_with_speed_filter.html#prepare-filter-mask)
        * [ 2\. Configure Costmap Filter Info Publisher Server ](../../tutorials/docs/navigation2_with_speed_filter.html#configure-costmap-filter-info-publisher-server)
        * [ 3\. Enable Speed Filter ](../../tutorials/docs/navigation2_with_speed_filter.html#enable-speed-filter)
        * [ 4\. Run Nav2 stack ](../../tutorials/docs/navigation2_with_speed_filter.html#run-nav2-stack)
    * [ Using Rotation Shim Controller ](../../tutorials/docs/using_shim_controller.html)
      * [ Overview ](../../tutorials/docs/using_shim_controller.html#overview)
      * [ What is the Rotation Shim Controller? ](../../tutorials/docs/using_shim_controller.html#what-is-the-rotation-shim-controller)
      * [ Configuring Rotation Shim Controller ](../../tutorials/docs/using_shim_controller.html#configuring-rotation-shim-controller)
      * [ Configuring Primary Controller ](../../tutorials/docs/using_shim_controller.html#configuring-primary-controller)
      * [ Demo Execution ](../../tutorials/docs/using_shim_controller.html#demo-execution)
    * [ Adding a Smoother to a BT ](../../tutorials/docs/adding_smoother.html)
      * [ Overview ](../../tutorials/docs/adding_smoother.html#overview)
      * [ Requirements ](../../tutorials/docs/adding_smoother.html#requirements)
      * [ Tutorial Steps ](../../tutorials/docs/adding_smoother.html#tutorial-steps)
        * [ 0- Familiarization with the Smoother BT Node ](../../tutorials/docs/adding_smoother.html#familiarization-with-the-smoother-bt-node)
        * [ 1- Specifying a Smoother Plugin ](../../tutorials/docs/adding_smoother.html#specifying-a-smoother-plugin)
        * [ 2- Modifying your BT XML ](../../tutorials/docs/adding_smoother.html#modifying-your-bt-xml)
    * [ Using Collision Monitor ](../../tutorials/docs/using_collision_monitor.html)
      * [ Overview ](../../tutorials/docs/using_collision_monitor.html#overview)
      * [ Requirements ](../../tutorials/docs/using_collision_monitor.html#requirements)
      * [ Configuring Collision Monitor ](../../tutorials/docs/using_collision_monitor.html#configuring-collision-monitor)
      * [ Configuring Collision Monitor with VelocityPolygon ](../../tutorials/docs/using_collision_monitor.html#configuring-collision-monitor-with-velocitypolygon)
      * [ Preparing Nav2 stack ](../../tutorials/docs/using_collision_monitor.html#preparing-nav2-stack)
      * [ Demo Execution ](../../tutorials/docs/using_collision_monitor.html#demo-execution)
    * [ Adding a New Nav2 Task Server ](../../tutorials/docs/adding_a_nav2_task_server.html)
      * [ Lifecycle Nodes ](../../tutorials/docs/adding_a_nav2_task_server.html#lifecycle-nodes)


Pick a username


Email Address


Please feel free to close the issue If you think that:


    <Sequence name="ComputeAndSmoothPath">
      <ComputePathToPose goal="{goal}" path="{path}" planner_id="GridBased" error_code_id="{compute_path_error_code}"/>
      <SmoothPath unsmoothed_path="{path}" smoothed_path="{path}" error_code_id="{smoother_error_code}"/>
    </Sequence>


Please read carefully my previous comments. I clearly laid out a strategy for
accessing or changing the planners/controllers as a network interface changing
blackboard variables used as an input port. If you have a BT node (like the
planner selector we're discussing), it can have a subscriber / server to take
network interface changes, and update a blackboard parameter. That blackboard
parameter can be set in the BT XML as the input port to the compute path /
follow path BT nodes algorithm IDs. I can think of a half a dozen ways to be
able to expose the current algorithm from a ROS interface through the BT, BT
nodes, actions, and in the task servers.


[
![@SteveMacenski](https://avatars.githubusercontent.com/u/14944147?s=40&u=0925d37e9d3569c71d930114b66e6394c2efb3c6&v=4)
](/SteveMacenski) [ SteveMacenski ](/SteveMacenski) mentioned this issue  Nov
11, 2020


        * [ 4- Run Your Custom plugin ](../../plugin_tutorials/docs/writing_new_bt_plugin.html#run-your-custom-plugin)
    * [ Writing a New Behavior Plugin ](../../plugin_tutorials/docs/writing_new_behavior_plugin.html)
      * [ Overview ](../../plugin_tutorials/docs/writing_new_behavior_plugin.html#overview)
      * [ Requirements ](../../plugin_tutorials/docs/writing_new_behavior_plugin.html#requirements)
      * [ Tutorial Steps ](../../plugin_tutorials/docs/writing_new_behavior_plugin.html#tutorial-steps)
        * [ 1- Creating a new Behavior Plugin ](../../plugin_tutorials/docs/writing_new_behavior_plugin.html#creating-a-new-behavior-plugin)
        * [ 2- Exporting the Behavior Plugin ](../../plugin_tutorials/docs/writing_new_behavior_plugin.html#exporting-the-behavior-plugin)
        * [ 3- Pass the plugin name through params file ](../../plugin_tutorials/docs/writing_new_behavior_plugin.html#pass-the-plugin-name-through-params-file)
        * [ 4- Run Behavior Plugin ](../../plugin_tutorials/docs/writing_new_behavior_plugin.html#run-behavior-plugin)
    * [ Writing a New Navigator Plugin ](../../plugin_tutorials/docs/writing_new_navigator_plugin.html)
      * [ Overview ](../../plugin_tutorials/docs/writing_new_navigator_plugin.html#overview)
      * [ Requirements ](../../plugin_tutorials/docs/writing_new_navigator_plugin.html#requirements)
      * [ Tutorial Steps ](../../plugin_tutorials/docs/writing_new_navigator_plugin.html#tutorial-steps)
        * [ 1- Create a new Navigator Plugin ](../../plugin_tutorials/docs/writing_new_navigator_plugin.html#create-a-new-navigator-plugin)
        * [ 2- Exporting the navigator plugin ](../../plugin_tutorials/docs/writing_new_navigator_plugin.html#exporting-the-navigator-plugin)
        * [ 3- Pass the plugin name through the params file ](../../plugin_tutorials/docs/writing_new_navigator_plugin.html#pass-the-plugin-name-through-the-params-file)
        * [ 4- Run plugin ](../../plugin_tutorials/docs/writing_new_navigator_plugin.html#run-plugin)
  * [ Configuration Guide ](../../configuration/index.html)
    * [ Behavior-Tree Navigator ](../../configuration/packages/configuring-bt-navigator.html)
      * [ Parameters ](../../configuration/packages/configuring-bt-navigator.html#parameters)
      * [ Example ](../../configuration/packages/configuring-bt-navigator.html#example)
    * [ Behavior Tree XML Nodes ](../../configuration/packages/configuring-bt-xml.html)
      * [ Action Plugins ](../../configuration/packages/configuring-bt-xml.html#action-plugins)
        * [ Wait ](../../configuration/packages/bt-plugins/actions/Wait.html)
        * [ Spin ](../../configuration/packages/bt-plugins/actions/Spin.html)
        * [ BackUp ](../../configuration/packages/bt-plugins/actions/BackUp.html)
        * [ DriveOnHeading ](../../configuration/packages/bt-plugins/actions/DriveOnHeading.html)
        * [ AssistedTeleop ](../../configuration/packages/bt-plugins/actions/AssistedTeleop.html)
        * [ ComputePathToPose ](../../configuration/packages/bt-plugins/actions/ComputePathToPose.html)
        * [ FollowPath ](../../configuration/packages/bt-plugins/actions/FollowPath.html)
        * [ NavigateToPose ](../../configuration/packages/bt-plugins/actions/NavigateToPose.html)
        * [ ClearEntireCostmap ](../../configuration/packages/bt-plugins/actions/ClearEntireCostmap.html)
        * [ ClearCostmapExceptRegion ](../../configuration/packages/bt-plugins/actions/ClearCostmapExceptRegion.html)
        * [ ClearCostmapAroundRobot ](../../configuration/packages/bt-plugins/actions/ClearCostmapAroundRobot.html)
        * [ ReinitializeGlobalLocalization ](../../configuration/packages/bt-plugins/actions/ReinitializeGlobalLocalization.html)
        * [ TruncatePath ](../../configuration/packages/bt-plugins/actions/TruncatePath.html)
        * [ TruncatePathLocal ](../../configuration/packages/bt-plugins/actions/TruncatePathLocal.html)
        * [ PlannerSelector ](../../configuration/packages/bt-plugins/actions/PlannerSelector.html)
        * [ ControllerSelector ](../../configuration/packages/bt-plugins/actions/ControllerSelector.html)
        * [ SmootherSelector ](../../configuration/packages/bt-plugins/actions/SmootherSelector.html)


Contributor  Author


    * [ Topics ](/topics)
    * [ Trending ](/trending)
    * [ Collections ](/collections)


        * [ Common Sensor Messages ](../../setup_guides/sensors/setup_sensors.html#common-sensor-messages)
      * [ Simulating Sensors using Gazebo ](../../setup_guides/sensors/setup_sensors.html#simulating-sensors-using-gazebo)
        * [ Adding Gazebo Plugins to a URDF ](../../setup_guides/sensors/setup_sensors.html#adding-gazebo-plugins-to-a-urdf)
        * [ Launch and Build Files ](../../setup_guides/sensors/setup_sensors.html#launch-and-build-files)
        * [ Build, Run and Verification ](../../setup_guides/sensors/setup_sensors.html#build-run-and-verification)
      * [ Mapping and Localization ](../../setup_guides/sensors/setup_sensors.html#mapping-and-localization)
      * [ Costmap 2D ](../../setup_guides/sensors/setup_sensors.html#costmap-2d)
        * [ Configuring nav2_costmap_2d ](../../setup_guides/sensors/setup_sensors.html#configuring-nav2-costmap-2d)
        * [ Build, Run and Verification ](../../setup_guides/sensors/setup_sensors.html#id2)
      * [ Conclusion ](../../setup_guides/sensors/setup_sensors.html#conclusion)
    * [ Setting Up the Robot’s Footprint ](../../setup_guides/footprint/setup_footprint.html)
      * [ Footprint Introduction ](../../setup_guides/footprint/setup_footprint.html#footprint-introduction)
      * [ Configuring the Robot’s Footprint ](../../setup_guides/footprint/setup_footprint.html#configuring-the-robot-s-footprint)
      * [ Build, Run and Verification ](../../setup_guides/footprint/setup_footprint.html#build-run-and-verification)
      * [ Visualizing Footprint in RViz ](../../setup_guides/footprint/setup_footprint.html#visualizing-footprint-in-rviz)
      * [ Conclusion ](../../setup_guides/footprint/setup_footprint.html#conclusion)
    * [ Setting Up Navigation Plugins ](../../setup_guides/algorithm/select_algorithm.html)
      * [ Planner and Controller Servers ](../../setup_guides/algorithm/select_algorithm.html#planner-and-controller-servers)
      * [ Selecting the Algorithm Plugins ](../../setup_guides/algorithm/select_algorithm.html#selecting-the-algorithm-plugins)
        * [ Planner Server ](../../setup_guides/algorithm/select_algorithm.html#planner-server)
        * [ Controller Server ](../../setup_guides/algorithm/select_algorithm.html#controller-server)
      * [ Conclusion ](../../setup_guides/algorithm/select_algorithm.html#conclusion)
  * [ General Tutorials ](../index.html)
    * [ Navigating with a Physical Turtlebot 3 ](navigation2_on_real_turtlebot3.html)
      * [ Overview ](navigation2_on_real_turtlebot3.html#overview)
      * [ Requirements ](navigation2_on_real_turtlebot3.html#requirements)
      * [ Tutorial Steps ](navigation2_on_real_turtlebot3.html#tutorial-steps)
        * [ 0- Setup Your Enviroment Variables ](navigation2_on_real_turtlebot3.html#setup-your-enviroment-variables)
        * [ 1- Launch Turtlebot 3 ](navigation2_on_real_turtlebot3.html#launch-turtlebot-3)
        * [ 2- Launch Nav2 ](navigation2_on_real_turtlebot3.html#launch-nav2)
        * [ 3- Launch RVIZ ](navigation2_on_real_turtlebot3.html#launch-rviz)
        * [ 4- Initialize the Location of Turtlebot 3 ](navigation2_on_real_turtlebot3.html#initialize-the-location-of-turtlebot-3)
        * [ 5- Send a Goal Pose ](navigation2_on_real_turtlebot3.html#send-a-goal-pose)
    * [ (SLAM) Navigating While Mapping ](navigation2_with_slam.html)
      * [ Overview ](navigation2_with_slam.html#overview)
      * [ Requirements ](navigation2_with_slam.html#requirements)
      * [ Tutorial Steps ](navigation2_with_slam.html#tutorial-steps)
        * [ 0- Launch Robot Interfaces ](navigation2_with_slam.html#launch-robot-interfaces)
        * [ 1- Launch Navigation2 ](navigation2_with_slam.html#launch-navigation2)
        * [ 2- Launch SLAM ](navigation2_with_slam.html#launch-slam)


[ > Is it possible to change the planner and controller from an external input
(topic, service or parameter)? Is there a short code snippet (bash, c++, BT-
XML) I could use to achieve it?  #2091  ](/ros-
planning/navigation2/issues/2091)


> The way I would rather have people use multiple planners / controllers would
> be to have conditions for when each are useful so they change change
> dynamically themselves through the BT rather than external input.


    dynamic_reconfigure::ReconfigureRequest srv_req;
    dynamic_reconfigure::StrParameter local_planner, global_planner;
    local_planner.name = "base_local_planner";
    local_planner.value = desired_local_planner_;
    srv_req.config.strs.push_back(local_planner);

    global_planner.name = "base_global_planner";
    global_planner.value = desired_global_planner_;
    srv_req.config.strs.push_back(global_planner);
    ros::service::call("/move_base/set_parameters", srv_req, srv_resp);


For example, for ROS1 the answer is yes, and below it is shown an example in
C++ (but it also is possible in bash or python):


No branches or pull requests


Sorry, something went wrong.


Copy link


For


#  Saved searches


Regardless, we have alignment in a planner / controller selector BT action
node that we can agree would have sufficient re-use to place into the main
nav2 stack. It's not the "best" way to use the behavior tree structure, but it
could be easier for some situations than creating primitive conditions and
requirements.

---

All reactions


  * [ ](../../index.html)
  * [ Nav2 Behavior Trees ](../index.html)
  * Navigate Through Poses
  *


* Overview


      * [ DWB Forward vs Reverse Pruning ](../../migration/Humble.html#dwb-forward-vs-reverse-pruning)
      * [ More stable regulation on curves for long lookahead distances ](../../migration/Humble.html#more-stable-regulation-on-curves-for-long-lookahead-distances)
      * [ Publish Collision Monitor State ](../../migration/Humble.html#publish-collision-monitor-state)
      * [ Renamed ROS-parameter in Collision Monitor ](../../migration/Humble.html#renamed-ros-parameter-in-collision-monitor)
      * [ New safety behavior model “limit” in Collision Monitor ](../../migration/Humble.html#new-safety-behavior-model-limit-in-collision-monitor)
      * [ Velocity smoother applies deceleration when timeout ](../../migration/Humble.html#velocity-smoother-applies-deceleration-when-timeout)
      * [ PoseProgressChecker plugin ](../../migration/Humble.html#poseprogresschecker-plugin)
      * [ Allow multiple goal checkers and change parameter progress_checker_plugin(s) name and type ](../../migration/Humble.html#allow-multiple-goal-checkers-and-change-parameter-progress-checker-plugin-s-name-and-type)
      * [ IsBatteryChargingCondition BT Node ](../../migration/Humble.html#isbatterychargingcondition-bt-node)
      * [ Behavior Server Error Codes ](../../migration/Humble.html#behavior-server-error-codes)
      * [ New Denoise Costmap Layer Plugin ](../../migration/Humble.html#new-denoise-costmap-layer-plugin)
      * [ SmacPlannerHybrid viz_expansions parameter ](../../migration/Humble.html#smacplannerhybrid-viz-expansions-parameter)
    * [ Iron to Jazzy ](../../migration/Iron.html)
      * [ Added TwistStamped Option for Commands ](../../migration/Iron.html#added-twiststamped-option-for-commands)
      * [ Add VelocityPolygon in Collision Monitor ](../../migration/Iron.html#add-velocitypolygon-in-collision-monitor)
      * [ Change polygon points parameter format in Collision Monitor ](../../migration/Iron.html#change-polygon-points-parameter-format-in-collision-monitor)
      * [ Introduction of Soft-Real Time Action Servers ](../../migration/Iron.html#introduction-of-soft-real-time-action-servers)
      * [ ` opennav_coverage  ` Project ](../../migration/Iron.html#opennav-coverage-project)
      * [ Introduce a new Multi-Robot Bringup Launch ](../../migration/Iron.html#introduce-a-new-multi-robot-bringup-launch)
      * [ New option for the Voxel and Obstacle Layers ](../../migration/Iron.html#new-option-for-the-voxel-and-obstacle-layers)
      * [ use_interpolation RPP Parameter Depreciated ](../../migration/Iron.html#use-interpolation-rpp-parameter-depreciated)
      * [ Changes to MPPI Goal Critic ](../../migration/Iron.html#changes-to-mppi-goal-critic)
      * [ Changes to MPPI Path Angle Critic ](../../migration/Iron.html#changes-to-mppi-path-angle-critic)
      * [ Changes to MPPI Path Handling For Directionality ](../../migration/Iron.html#changes-to-mppi-path-handling-for-directionality)
      * [ Addition of new MPPI Cost Critic ](../../migration/Iron.html#addition-of-new-mppi-cost-critic)
      * [ MPPI Acceleration ](../../migration/Iron.html#mppi-acceleration)
      * [ Move Error Code Enumerations ](../../migration/Iron.html#move-error-code-enumerations)
      * [ Substitution in parameter file ](../../migration/Iron.html#substitution-in-parameter-file)
      * [ Allow Behavior Server Plugins to Access The Action Result ](../../migration/Iron.html#allow-behavior-server-plugins-to-access-the-action-result)
      * [ Smac Planner Debug Param Name Change ](../../migration/Iron.html#smac-planner-debug-param-name-change)
      * [ Smac Planner On Approach to Goal Shortcutting Solutions ](../../migration/Iron.html#smac-planner-on-approach-to-goal-shortcutting-solutions)
      * [ Added GPS Waypoint Follower Server ](../../migration/Iron.html#added-gps-waypoint-follower-server)
      * [ Smac Planner Hybrid-A* New Features ](../../migration/Iron.html#smac-planner-hybrid-a-new-features)
      * [ New node in nav2_collision_monitor: Collision Detector ](../../migration/Iron.html#new-node-in-nav2-collision-monitor-collision-detector)
      * [ Dynamic enabling/disabling of sources/polygons in Collision Monitor/Detector ](../../migration/Iron.html#dynamic-enabling-disabling-of-sources-polygons-in-collision-monitor-detector)
      * [ Expose action server’s result timeout ](../../migration/Iron.html#expose-action-server-s-result-timeout)
      * [ RewrittenYaml could add new parameters to YAMLs ](../../migration/Iron.html#rewrittenyaml-could-add-new-parameters-to-yamls)
      * [ Simple Commander API Allows Multi-Robot Namespacing ](../../migration/Iron.html#simple-commander-api-allows-multi-robot-namespacing)
      * [ Change duration type in wait_action node ](../../migration/Iron.html#change-duration-type-in-wait-action-node)
      * [ The costmap activation fails when required transforms are not available ](../../migration/Iron.html#the-costmap-activation-fails-when-required-transforms-are-not-available)


Projects


Member


Yes, you can create a trivial BT node that sets an input port of the {compute
path, follow path} nodes to select the mapped algorithm ID in the server (e.g.
GridBased, whatever name you chose). You mention that you think there should
be some "included" code do to this, but by your description, you have your own
non-included code to change with dynamic reconfigure. So this really isn't any
different except the BT node solution is scalable and not abusing dynamic
reconfigure for what is it not meant for.


Assignees


Yes, see nav2 docs. The follow path / compute path to pose BT nodes have input
ports allowing you to set the controller / planner ID it requests from the
planner/controller servers. By default they're set to GridBased and FollowPath
as are default in the servers themselves. You can just change to another value
hardcoded in the BT or using the blackboard parameters if you'd like it to
change over time in the same run from a service / topic call.


What I claim is that there should be a way to switch between planners and
controllers from the ROS network (topic, service or parameter) based on the
names of the desired planner and controller.


  * Is that BTNode that allows me switch between planner and controllers already implemented in the nav stack2?
  * Should I implement a custom BTNode condition C++ class (I show later how I imagine the BT XML)?
  * Is there something I am not understanding yet?


**[ pabloinigoblasco ](/pabloinigoblasco) ** commented  Nov 11, 2020


Now that you have selected and configured the smoother server for your given
plugin(s), it is time to use those smoother(s) in your behavior tree for
navigation behavior. While there are many places / ways to use this in a BT,
what is shown below is probably the most likely situation you would want to
use the smoother in (to smooth a path returned by the path planner and then
using that smoothed path for path tracking).


**[ SteveMacenski ](/SteveMacenski) ** commented  Mar 23, 2021


* 👍  1 reaction


**[ SteveMacenski ](/SteveMacenski) ** commented  Nov 13, 2020  •


Okay.


Sorry, something went wrong.


The navigation stack should (from my point of view) really solve well the
issues related with navigation. And it should provide some basic
functionalities to the ROS Network (at least the same it was exposed in ROS1)
like selecting the planner, navigating to a goal.


Labels


> By default they're set to GridBased and FollowPath as are default in the
> servers themselves. You can just change to another value hardcoded in the BT
> or using the blackboard parameters if you'd like it to change over time in
> the same run from a service / topic call.