      * [ Navigation Subtree ](../../behavior_trees/overview/detailed_behavior_tree_walkthrough.html#navigation-subtree)
      * [ Recovery Subtree ](../../behavior_trees/overview/detailed_behavior_tree_walkthrough.html#recovery-subtree)
    * [ Navigate To Pose ](../../behavior_trees/trees/nav_to_pose_recovery.html)
    * [ Navigate Through Poses ](../../behavior_trees/trees/nav_through_poses_recovery.html)
    * [ Navigate To Pose and Pause Near Goal-Obstacle ](../../behavior_trees/trees/nav_to_pose_and_pause_near_goal_obstacle.html)
    * [ Navigate To Pose With Consistent Replanning And If Path Becomes Invalid ](../../behavior_trees/trees/nav_to_pose_with_consistent_replanning_and_if_path_becomes_invalid.html)
    * [ Follow Dynamic Point ](../../behavior_trees/trees/follow_point.html)
    * [ Odometry Calibration ](../../behavior_trees/trees/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)


© Copyright 2023.


edited


#  Navigate Through Poses  ¶


New issue


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


Assuming that BTNode (lets call it "PlannerSelector") is not yet implemented,
then, I would say it should be implemented:


        * [ CancelCoverage ](bt-plugins/actions/CancelCoverage.html)
        * [ RemovePassedGoals ](bt-plugins/actions/RemovePassedGoals.html)
        * [ CancelControl ](bt-plugins/actions/CancelControl.html)
        * [ CancelBackUp ](bt-plugins/actions/CancelBackUp.html)
        * [ CancelSpin ](bt-plugins/actions/CancelSpin.html)
        * [ CancelWait ](bt-plugins/actions/CancelWait.html)
        * [ CancelDriveOnHeading ](bt-plugins/actions/CancelDriveOnHeading.html)
        * [ CancelAssistedTeleop ](bt-plugins/actions/CancelAssistedTeleop.html)
        * [ SmoothPath ](bt-plugins/actions/Smooth.html)
      * Condition Plugins
        * [ GoalReached ](bt-plugins/conditions/GoalReached.html)
        * [ TransformAvailable ](bt-plugins/conditions/TransformAvailable.html)
        * [ DistanceTraveled ](bt-plugins/conditions/DistanceTraveled.html)
        * [ GoalUpdated ](bt-plugins/conditions/GoalUpdated.html)
        * [ GloballyUpdatedGoal ](bt-plugins/conditions/GloballyUpdatedGoal.html)
        * [ InitialPoseReceived ](bt-plugins/conditions/InitialPoseReceived.html)
        * [ IsStuck ](bt-plugins/conditions/IsStuck.html)
        * [ TimeExpired ](bt-plugins/conditions/TimeExpired.html)
        * [ IsBatteryLow ](bt-plugins/conditions/IsBatteryLow.html)
        * [ IsPathValid ](bt-plugins/conditions/IsPathValid.html)
        * [ PathExpiringTimer ](bt-plugins/conditions/PathExpiringTimer.html)
        * [ AreErrorCodesPresent ](bt-plugins/conditions/AreErrorCodesPresent.html)
        * [ WouldAControllerRecoveryHelp ](bt-plugins/conditions/WouldAControllerRecoveryHelp.html)
        * [ WouldAPlannerRecoveryHelp ](bt-plugins/conditions/WouldAPlannerRecoveryHelp.html)
        * [ WouldASmootherRecoveryHelp ](bt-plugins/conditions/WouldASmootherRecoveryHelp.html)
        * [ IsBatteryCharging ](bt-plugins/conditions/IsBatteryCharging.html)
      * Control Plugins
        * [ PipelineSequence ](bt-plugins/controls/PipelineSequence.html)
        * [ RoundRobin ](bt-plugins/controls/RoundRobin.html)
        * [ RecoveryNode ](bt-plugins/controls/RecoveryNode.html)
      * Decorator Plugins
        * [ RateController ](bt-plugins/decorators/RateController.html)
        * [ DistanceController ](bt-plugins/decorators/DistanceController.html)
        * [ SpeedController ](bt-plugins/decorators/SpeedController.html)
        * [ GoalUpdater ](bt-plugins/decorators/GoalUpdater.html)
        * [ PathLongerOnApproach ](bt-plugins/decorators/PathLongerOnApproach.html)
        * [ SingleTrigger ](bt-plugins/decorators/SingleTrigger.html)
      * Example
    * [ Costmap 2D ](configuring-costmaps.html)
      * [ Costmap2D ROS Parameters ](configuring-costmaps.html#costmap2d-ros-parameters)


In order to use a smoother in your BT node, you must first configure the
smoother server itself to contain the smoother plugins of interest. These
plugins implement the specific algorithms that you would like to use.


None yet


* Solutions


However, I get the point you were trying to make, what if I don't want to
modify C++ things for my application. unfortunately, that's what's involved
for behavior trees or state machines. You don't need to play with larger
chunks of code, but you do need to be able to create basic BT node primitives,
if nothing else, to use the BT service / action nodes to call ROS action /
services. ROS(1) navigation didn't even allow you to modify the navigation
logic at all, so this is still a massive improvement to be able to even be
having the discussion about languages changes can be made in. You can have any
language implementing servers that the BT nodes call so you can use python if
you choose to compute some value. But at the end of the day, the BT needs to
be in some arbitrary language for you to be able to use ROS2 to call other
processes in potentially other languages. C++ is that language.


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


That's for design, if anything that ticket should be closed. Lets leave this
open until something is merged. That other ticket is on our documentation
website, not a Nav2 feature

---

👍  1  pabloinigoblasco reacted with thumbs up emoji


* [ Pricing ](/pricing)


      * [ BackUp BT-node Interface Changes ](../../migration/Foxy.html#backup-bt-node-interface-changes)
      * [ BackUp Recovery Interface Changes ](../../migration/Foxy.html#backup-recovery-interface-changes)
      * [ Nav2 Controllers and Goal Checker Plugin Interface Changes ](../../migration/Foxy.html#nav2-controllers-and-goal-checker-plugin-interface-changes)
      * [ FollowPath goal_checker_id attribute ](../../migration/Foxy.html#followpath-goal-checker-id-attribute)
      * [ Groot Support ](../../migration/Foxy.html#groot-support)
      * [ New Plugins ](../../migration/Foxy.html#new-plugins)
      * [ Costmap Filters ](../../migration/Foxy.html#costmap-filters)
      * [ SmacPlanner ](../../migration/Foxy.html#smacplanner)
      * [ ThetaStarPlanner ](../../migration/Foxy.html#thetastarplanner)
      * [ RegulatedPurePursuitController ](../../migration/Foxy.html#regulatedpurepursuitcontroller)
      * [ Costmap2D ` current_  ` Usage ](../../migration/Foxy.html#costmap2d-current-usage)
      * [ Standard time units in parameters ](../../migration/Foxy.html#standard-time-units-in-parameters)
      * [ Ray Tracing Parameters ](../../migration/Foxy.html#ray-tracing-parameters)
      * [ Obstacle Marking Parameters ](../../migration/Foxy.html#obstacle-marking-parameters)
      * [ Recovery Action Changes ](../../migration/Foxy.html#recovery-action-changes)
      * [ Default Behavior Tree Changes ](../../migration/Foxy.html#default-behavior-tree-changes)
      * [ NavFn Planner Parameters ](../../migration/Foxy.html#navfn-planner-parameters)
      * [ New ClearCostmapExceptRegion and ClearCostmapAroundRobot BT-nodes ](../../migration/Foxy.html#new-clearcostmapexceptregion-and-clearcostmaparoundrobot-bt-nodes)
      * [ New Behavior Tree Nodes ](../../migration/Foxy.html#new-behavior-tree-nodes)
      * [ sensor_msgs/PointCloud to sensor_msgs/PointCloud2 Change ](../../migration/Foxy.html#sensor-msgs-pointcloud-to-sensor-msgs-pointcloud2-change)
      * [ ControllerServer New Parameter failure_tolerance ](../../migration/Foxy.html#controllerserver-new-parameter-failure-tolerance)
      * [ Removed BT XML Launch Configurations ](../../migration/Foxy.html#removed-bt-xml-launch-configurations)
      * [ Nav2 RViz Panel Action Feedback Information ](../../migration/Foxy.html#nav2-rviz-panel-action-feedback-information)
    * [ Galactic to Humble ](../../migration/Galactic.html)
      * [ Major improvements to Smac Planners ](../../migration/Galactic.html#major-improvements-to-smac-planners)
      * [ Simple (Python) Commander ](../../migration/Galactic.html#simple-python-commander)
      * [ Reduce Nodes and Executors ](../../migration/Galactic.html#reduce-nodes-and-executors)
      * [ API Change for nav2_core ](../../migration/Galactic.html#api-change-for-nav2-core)
      * [ Extending the BtServiceNode to process Service-Results ](../../migration/Galactic.html#extending-the-btservicenode-to-process-service-results)
      * [ Including new Rotation Shim Controller Plugin ](../../migration/Galactic.html#including-new-rotation-shim-controller-plugin)
      * [ Spawning the robot in Gazebo ](../../migration/Galactic.html#spawning-the-robot-in-gazebo)
      * [ Recovery Behavior Timeout ](../../migration/Galactic.html#recovery-behavior-timeout)
      * [ New parameter ` use_final_approach_orientation  ` for the 3 2D planners ](../../migration/Galactic.html#new-parameter-use-final-approach-orientation-for-the-3-2d-planners)
      * [ SmacPlanner2D and Theta*: fix goal orientation being ignored ](../../migration/Galactic.html#smacplanner2d-and-theta-fix-goal-orientation-being-ignored)
      * [ SmacPlanner2D, NavFn and Theta*: fix small path corner cases ](../../migration/Galactic.html#smacplanner2d-navfn-and-theta-fix-small-path-corner-cases)
      * [ Change and fix behavior of dynamic parameter change detection ](../../migration/Galactic.html#change-and-fix-behavior-of-dynamic-parameter-change-detection)
      * [ Dynamic Parameters ](../../migration/Galactic.html#dynamic-parameters)
      * [ BT Action Nodes Exception Changes ](../../migration/Galactic.html#bt-action-nodes-exception-changes)
      * [ BT Navigator Groot Multiple Navigators ](../../migration/Galactic.html#bt-navigator-groot-multiple-navigators)
      * [ Removed Kinematic Limiting in RPP ](../../migration/Galactic.html#removed-kinematic-limiting-in-rpp)


[ ros-planning ](/ros-planning) /  **[ navigation2 ](/ros-
planning/navigation2) ** Public


You must install Nav2, Turtlebot3. If you don’t have them installed, please
follow [ Getting Started  ](../../getting_started/index.html#getting-started)
. You must also have a working behavior tree, such as those provided by the
Nav2 BT Navigator package, for editing. You should also have a copy of the `
nav2_params.yaml  ` file for your system to edit as well.


##  Requirements  ¶


Contributor  Author


> A planner selector / controller selector BT node that changes the blackboard
> values and a BT XML that uses those blackboard values in the follow path /
> compute path would be a valuable addition.


By clicking “Sign up for GitHub”, you agree to our [ terms of service
](https://docs.github.com/terms) and [ privacy statement
](https://docs.github.com/privacy) . We’ll occasionally send you account
related emails.


This Behavior Tree replans the global path periodically at 1 Hz and it also
has recovery actions.


Just 1 BT! You'd need to just have some conditional to be set to use one
versus the others. It could be a blackboard parameter I suppose, or it could
be based on anything under the sun.


* 👍  1 reaction


      * [ Smoothers ](../../concepts/index.html#smoothers)
      * [ 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)
      * [ Sensor Introduction ](../../setup_guides/sensors/setup_sensors.html#sensor-introduction)


##  Tutorial Steps  ¶


Cancel  Submit feedback


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


© Copyright 2023.


I have a few possible solutions in mind but I am not sure if they are possible
and which one would be the most convenient.


My mindset may still be "attached" to the ROS1 navigation stack so there might
be something I do not see yet.
However, If I analyze the navigation2 stack as a black-box solution ( assuming
it is properly configured in BT and parameters) I would say there should be
some ROS network mechanism (topic, service or parameter) to switch the current
planner and controller based on just the name of them (smac_planner, dwb - or
the name you specified in the controller_plugins parameter or the
planner_plugins parameter).


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


[
![@pabloinigoblasco](https://avatars.githubusercontent.com/u/13334595?s=40&u=b604bb463ac657f5b1a02f5c403eab807c327c5a&v=4)
](/pabloinigoblasco) [ pabloinigoblasco ](/pabloinigoblasco) mentioned this
issue  Nov 13, 2020


#  Behavior Tree XML Nodes  ¶


This line calls the planner server and return a path to the ` path  `
blackboard variable in the behavior tree. We are going to replace that line
with the following to compute the path, smooth the path, and finally replace
the ` path  ` blackboard variable with the new smoothed path that the system
will now interact with:


[ ![../../_images/smoothing_path.png](../../_images/smoothing_path.png)
](../../_images/smoothing_path.png)


[
![@SteveMacenski](https://avatars.githubusercontent.com/u/14944147?s=40&u=0925d37e9d3569c71d930114b66e6394c2efb3c6&v=4)
](/SteveMacenski) [ SteveMacenski ](/SteveMacenski) changed the title
~~Switching dynamically between planners and controllers~~ Create
Planner/Controller selector BT nodes  Nov 13, 2020


Open


[ Add "Features" subsection to website to add feature descriptions  ros-
planning/navigation.ros.org#57  ](/ros-planning/navigation.ros.org/issues/57)


##  Comments


Labels


Done!

---

All reactions


By Solution


##  Control Plugins  ¶


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


Can this be closed or is there further feature request / bug report? Cross
linking docs to this to remind me this is something non-obvious to people
(I've been thinking about this for so long its immediately obvious to me, but
this is one of the "hidden features" that should be called out specifically
since it is an important thing I worked to make sure we could handle).

---

All reactions


Again we are not aligned. those specific BT Nodes only offers the possibility
of being changed from BT but not from the ROS network (that is what I was
asking about)


[ good first issue  ](/ros-planning/navigation2/labels/good%20first%20issue)
Good for newcomers  [ help wanted  ](/ros-
planning/navigation2/labels/help%20wanted) Extra attention is needed  [ in
progress  ](/ros-planning/navigation2/labels/in%20progress)


For example, I see an implemented BTNode called IsBatteryLowCondition. I
understand that I could use that condition to select a planner or other
depending on what is the battery level. For me it is important the fact that
the IsBatteryLowCondition BTNode uses a topic to receive information from the
external ROS network (/battery_state) and change the result.


* Product


[
![@pabloinigoblasco](https://avatars.githubusercontent.com/u/13334595?s=40&u=b604bb463ac657f5b1a02f5c403eab807c327c5a&v=4)
](/pabloinigoblasco) [ pabloinigoblasco ](/pabloinigoblasco) mentioned this
issue  Mar 11, 2021


It is great if you can do it internally from the BT, and it is great if you
propose some "best practices" for navigation applications. But you should not
be forced to write c++ code to configure the navigation (If the navigation
stack 2 is going to be the canonical solution for navigation in ROS2) what if
I am a python programmer that want to control robots from a remote node? Cant
I change the planner and controller dynamically?


> I'm not opposed to creating behaviors for changing algorithms outside of the
> BT, but there has to be some reasonable design behind it.


Note: If you use only a single type of smoothing algorithm, there is no need
to specify the ` smoother_id  ` in the BT XML entry. Since there is only a
single option, that will be used for any request that does not specifically
request a smoother plugin. However, if you leverage multiple smoother plugins,
you **must** populate the ` smoother_id  ` XML port.


[ ](https://github.com/)


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


The conditional BT node could be that, yes.


      * [ Fix CostmapLayer clearArea invert param logic ](../../migration/Galactic.html#fix-costmaplayer-cleararea-invert-param-logic)
      * [ Dynamic Composition ](../../migration/Galactic.html#dynamic-composition)
      * [ BT Cancel Node ](../../migration/Galactic.html#bt-cancel-node)
      * [ BT PathLongerOnApproach Node ](../../migration/Galactic.html#bt-pathlongeronapproach-node)
      * [ BT TruncatePathLocal Node ](../../migration/Galactic.html#bt-truncatepathlocal-node)
      * [ Constrained Smoother ](../../migration/Galactic.html#constrained-smoother)
      * [ Replanning at a Constant Rate and if the Path is Invalid ](../../migration/Galactic.html#replanning-at-a-constant-rate-and-if-the-path-is-invalid)
      * [ Euclidean Distance 2D ](../../migration/Galactic.html#euclidean-distance-2d)
      * [ Recovery To Behavior ](../../migration/Galactic.html#recovery-to-behavior)
      * [ Respawn Support in Launch and Lifecycle Manager ](../../migration/Galactic.html#respawn-support-in-launch-and-lifecycle-manager)
      * [ New Nav2 Velocity Smoother ](../../migration/Galactic.html#new-nav2-velocity-smoother)
      * [ Goal Checker API Changed ](../../migration/Galactic.html#goal-checker-api-changed)
      * [ Added Assisted Teleop ](../../migration/Galactic.html#added-assisted-teleop)
    * [ Humble to Iron ](../../migration/Humble.html)
      * [ New Behavior-Tree Navigator Plugins ](../../migration/Humble.html#new-behavior-tree-navigator-plugins)
      * [ Added Collision Monitor ](../../migration/Humble.html#added-collision-monitor)
      * [ Removed use_sim_time from yaml ](../../migration/Humble.html#removed-use-sim-time-from-yaml)
      * [ Run-time Speed up of Smac Planner ](../../migration/Humble.html#run-time-speed-up-of-smac-planner)
      * [ Recursive Refinement of Smac and Simple Smoothers ](../../migration/Humble.html#recursive-refinement-of-smac-and-simple-smoothers)
      * [ Simple Commander Python API ](../../migration/Humble.html#simple-commander-python-api)
      * [ Smac Planner Start Pose Included in Path ](../../migration/Humble.html#smac-planner-start-pose-included-in-path)
      * [ Parameterizable Collision Checking in RPP ](../../migration/Humble.html#parameterizable-collision-checking-in-rpp)
      * [ Expanded Planner Benchmark Tests ](../../migration/Humble.html#expanded-planner-benchmark-tests)
      * [ Smac Planner Path Tolerances ](../../migration/Humble.html#smac-planner-path-tolerances)
      * [ costmap_2d_node default constructor ](../../migration/Humble.html#costmap-2d-node-default-constructor)
      * [ Feedback for Navigation Failures ](../../migration/Humble.html#feedback-for-navigation-failures)
      * [ Costmap Filters ](../../migration/Humble.html#costmap-filters)
      * [ Savitzky-Golay Smoother ](../../migration/Humble.html#savitzky-golay-smoother)
      * [ Changes to Map yaml file path for map_server node in Launch ](../../migration/Humble.html#changes-to-map-yaml-file-path-for-map-server-node-in-launch)
      * [ SmootherSelector BT Node ](../../migration/Humble.html#smootherselector-bt-node)
      * [ Publish Costmap Layers ](../../migration/Humble.html#publish-costmap-layers)
      * [ Give Behavior Server Access to Both Costmaps ](../../migration/Humble.html#give-behavior-server-access-to-both-costmaps)
      * [ New Model Predictive Path Integral Controller ](../../migration/Humble.html#new-model-predictive-path-integral-controller)
      * [ Behavior Tree Uses Error Codes ](../../migration/Humble.html#behavior-tree-uses-error-codes)
      * [ Load, Save and Loop Waypoints from the Nav2 Panel in RViz ](../../migration/Humble.html#load-save-and-loop-waypoints-from-the-nav2-panel-in-rviz)
      * [ 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)


##  Footer


The ` ComputePathThroughPoses  ` and ` FollowPath  ` BT nodes both also
specify their algorithms to utilize. By convention we name these by the style
of algorithms that they are (e.g. not ` DWB  ` but rather ` FollowPath  ` )
such that a behavior tree or application developer need not worry about the
technical specifics. They just want to use a path following controller.


edited


Consider checking out the [ Groot - Interacting with Behavior Trees
](../../tutorials/docs/using_groot.html#groot-introduction) tutorial for using
Groot to visualize and modify behavior trees.


This tutorial shows how to add a smoother to your behavior tree to smooth
output paths from a path planner. Before completing this tutorials, completing
[ Getting Started  ](../../getting_started/index.html#getting-started) is
highly recommended especially if you are new to ROS and Nav2.


      * [ Appendix ](../../tutorials/docs/docker_dev.html#appendix)
        * [ Nav2 Development Image ](../../tutorials/docs/docker_dev.html#nav2-development-image)
        * [ Nav2 Deployment Image ](../../tutorials/docs/docker_dev.html#nav2-deployment-image)
  * [ Plugin Tutorials ](../../plugin_tutorials/index.html)
    * [ Writing a New Costmap2D Plugin ](../../plugin_tutorials/docs/writing_new_costmap2d_plugin.html)
      * [ Overview ](../../plugin_tutorials/docs/writing_new_costmap2d_plugin.html#overview)
      * [ Requirements ](../../plugin_tutorials/docs/writing_new_costmap2d_plugin.html#requirements)
      * [ Tutorial Steps ](../../plugin_tutorials/docs/writing_new_costmap2d_plugin.html#tutorial-steps)
        * [ 1- Write a new Costmap2D plugin ](../../plugin_tutorials/docs/writing_new_costmap2d_plugin.html#write-a-new-costmap2d-plugin)
        * [ 2- Export and make GradientLayer plugin ](../../plugin_tutorials/docs/writing_new_costmap2d_plugin.html#export-and-make-gradientlayer-plugin)
        * [ 3- Enable the plugin in Costmap2D ](../../plugin_tutorials/docs/writing_new_costmap2d_plugin.html#enable-the-plugin-in-costmap2d)
        * [ 4- Run GradientLayer plugin ](../../plugin_tutorials/docs/writing_new_costmap2d_plugin.html#run-gradientlayer-plugin)
    * [ Writing a New Planner Plugin ](../../plugin_tutorials/docs/writing_new_nav2planner_plugin.html)
      * [ Overview ](../../plugin_tutorials/docs/writing_new_nav2planner_plugin.html#overview)
      * [ Requirements ](../../plugin_tutorials/docs/writing_new_nav2planner_plugin.html#requirements)
      * [ Tutorial Steps ](../../plugin_tutorials/docs/writing_new_nav2planner_plugin.html#tutorial-steps)
        * [ 1- Creating a new Planner Plugin ](../../plugin_tutorials/docs/writing_new_nav2planner_plugin.html#creating-a-new-planner-plugin)
        * [ 2- Exporting the planner plugin ](../../plugin_tutorials/docs/writing_new_nav2planner_plugin.html#exporting-the-planner-plugin)
        * [ 3- Pass the plugin name through params file ](../../plugin_tutorials/docs/writing_new_nav2planner_plugin.html#pass-the-plugin-name-through-params-file)
        * [ 4- Run StraightLine plugin ](../../plugin_tutorials/docs/writing_new_nav2planner_plugin.html#run-straightline-plugin)
    * [ Writing a New Controller Plugin ](../../plugin_tutorials/docs/writing_new_nav2controller_plugin.html)
      * [ Overview ](../../plugin_tutorials/docs/writing_new_nav2controller_plugin.html#overview)
      * [ Requirements ](../../plugin_tutorials/docs/writing_new_nav2controller_plugin.html#requirements)
      * [ Tutorial Steps ](../../plugin_tutorials/docs/writing_new_nav2controller_plugin.html#tutorial-steps)
        * [ 1- Create a new Controller Plugin ](../../plugin_tutorials/docs/writing_new_nav2controller_plugin.html#create-a-new-controller-plugin)
        * [ 2- Exporting the controller plugin ](../../plugin_tutorials/docs/writing_new_nav2controller_plugin.html#exporting-the-controller-plugin)
        * [ 3- Pass the plugin name through the params file ](../../plugin_tutorials/docs/writing_new_nav2controller_plugin.html#pass-the-plugin-name-through-the-params-file)
        * [ 4- Run Pure Pursuit Controller plugin ](../../plugin_tutorials/docs/writing_new_nav2controller_plugin.html#run-pure-pursuit-controller-plugin)
    * [ Writing a New Behavior Tree Plugin ](../../plugin_tutorials/docs/writing_new_bt_plugin.html)
      * [ Overview ](../../plugin_tutorials/docs/writing_new_bt_plugin.html#overview)
      * [ Requirements ](../../plugin_tutorials/docs/writing_new_bt_plugin.html#requirements)
      * [ Tutorial Steps ](../../plugin_tutorials/docs/writing_new_bt_plugin.html#tutorial-steps)
        * [ 1- Creating a new BT Plugin ](../../plugin_tutorials/docs/writing_new_bt_plugin.html#creating-a-new-bt-plugin)
        * [ 2- Exporting the planner plugin ](../../plugin_tutorials/docs/writing_new_bt_plugin.html#exporting-the-planner-plugin)
        * [ 3- Add plugin library name to config ](../../plugin_tutorials/docs/writing_new_bt_plugin.html#add-plugin-library-name-to-config)
        * [ 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)


  * [ RateController ](bt-plugins/decorators/RateController.html)
  * [ DistanceController ](bt-plugins/decorators/DistanceController.html)
  * [ SpeedController ](bt-plugins/decorators/SpeedController.html)
  * [ GoalUpdater ](bt-plugins/decorators/GoalUpdater.html)
  * [ PathLongerOnApproach ](bt-plugins/decorators/PathLongerOnApproach.html)
  * [ SingleTrigger ](bt-plugins/decorators/SingleTrigger.html)


Query


**[ pabloinigoblasco ](/pabloinigoblasco) ** commented  Nov 12, 2020  •


      * [ Added Smoother Task Server ](../../migration/Galactic.html#added-smoother-task-server)
      * [ Removed Use Approach Velocity Scaling Param in RPP ](../../migration/Galactic.html#removed-use-approach-velocity-scaling-param-in-rpp)
      * [ Refactored AMCL motion models as plugins ](../../migration/Galactic.html#refactored-amcl-motion-models-as-plugins)
      * [ Dropping Support for Live Groot Monitoring of Nav2 ](../../migration/Galactic.html#dropping-support-for-live-groot-monitoring-of-nav2)
      * [ Replanning Only if Path is Invalid ](../../migration/Galactic.html#replanning-only-if-path-is-invalid)
      * [ Fix CostmapLayer clearArea invert param logic ](../../migration/Galactic.html#fix-costmaplayer-cleararea-invert-param-logic)
      * [ Dynamic Composition ](../../migration/Galactic.html#dynamic-composition)
      * [ BT Cancel Node ](../../migration/Galactic.html#bt-cancel-node)
      * [ BT PathLongerOnApproach Node ](../../migration/Galactic.html#bt-pathlongeronapproach-node)
      * [ BT TruncatePathLocal Node ](../../migration/Galactic.html#bt-truncatepathlocal-node)
      * [ Constrained Smoother ](../../migration/Galactic.html#constrained-smoother)
      * [ Replanning at a Constant Rate and if the Path is Invalid ](../../migration/Galactic.html#replanning-at-a-constant-rate-and-if-the-path-is-invalid)
      * [ Euclidean Distance 2D ](../../migration/Galactic.html#euclidean-distance-2d)
      * [ Recovery To Behavior ](../../migration/Galactic.html#recovery-to-behavior)
      * [ Respawn Support in Launch and Lifecycle Manager ](../../migration/Galactic.html#respawn-support-in-launch-and-lifecycle-manager)
      * [ New Nav2 Velocity Smoother ](../../migration/Galactic.html#new-nav2-velocity-smoother)
      * [ Goal Checker API Changed ](../../migration/Galactic.html#goal-checker-api-changed)
      * [ Added Assisted Teleop ](../../migration/Galactic.html#added-assisted-teleop)
    * [ Humble to Iron ](../../migration/Humble.html)
      * [ New Behavior-Tree Navigator Plugins ](../../migration/Humble.html#new-behavior-tree-navigator-plugins)
      * [ Added Collision Monitor ](../../migration/Humble.html#added-collision-monitor)
      * [ Removed use_sim_time from yaml ](../../migration/Humble.html#removed-use-sim-time-from-yaml)
      * [ Run-time Speed up of Smac Planner ](../../migration/Humble.html#run-time-speed-up-of-smac-planner)
      * [ Recursive Refinement of Smac and Simple Smoothers ](../../migration/Humble.html#recursive-refinement-of-smac-and-simple-smoothers)
      * [ Simple Commander Python API ](../../migration/Humble.html#simple-commander-python-api)
      * [ Smac Planner Start Pose Included in Path ](../../migration/Humble.html#smac-planner-start-pose-included-in-path)
      * [ Parameterizable Collision Checking in RPP ](../../migration/Humble.html#parameterizable-collision-checking-in-rpp)
      * [ Expanded Planner Benchmark Tests ](../../migration/Humble.html#expanded-planner-benchmark-tests)
      * [ Smac Planner Path Tolerances ](../../migration/Humble.html#smac-planner-path-tolerances)
      * [ costmap_2d_node default constructor ](../../migration/Humble.html#costmap-2d-node-default-constructor)
      * [ Feedback for Navigation Failures ](../../migration/Humble.html#feedback-for-navigation-failures)
      * [ Costmap Filters ](../../migration/Humble.html#costmap-filters)
      * [ Savitzky-Golay Smoother ](../../migration/Humble.html#savitzky-golay-smoother)
      * [ Changes to Map yaml file path for map_server node in Launch ](../../migration/Humble.html#changes-to-map-yaml-file-path-for-map-server-node-in-launch)
      * [ SmootherSelector BT Node ](../../migration/Humble.html#smootherselector-bt-node)
      * [ Publish Costmap Layers ](../../migration/Humble.html#publish-costmap-layers)
      * [ Give Behavior Server Access to Both Costmaps ](../../migration/Humble.html#give-behavior-server-access-to-both-costmaps)
      * [ New Model Predictive Path Integral Controller ](../../migration/Humble.html#new-model-predictive-path-integral-controller)
      * [ Behavior Tree Uses Error Codes ](../../migration/Humble.html#behavior-tree-uses-error-codes)
      * [ Load, Save and Loop Waypoints from the Nav2 Panel in RViz ](../../migration/Humble.html#load-save-and-loop-waypoints-from-the-nav2-panel-in-rviz)


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


Member


© Copyright 2020.


Cancel  Create saved search


##  Decorator Plugins  ¶


Copy link


<ComputePathToPose goal="{goal}" path="{path}" planner_id="GridBased" error_code_id="{compute_path_error_code}"/>


> Is that BTNode that allows me switch between planner and controllers already
> implemented in the nav stack2?


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


      * [ Conclusion ](adding_a_nav2_task_server.html#conclusion)
    * [ Filtering of Noise-Induced Obstacles ](filtering_of_noise-induced_obstacles.html)
      * [ Overview ](filtering_of_noise-induced_obstacles.html#overview)
      * [ Requirements ](filtering_of_noise-induced_obstacles.html#requirements)
      * [ Tutorial Steps ](filtering_of_noise-induced_obstacles.html#tutorial-steps)
        * [ 1\. Enable Denoise Layer ](filtering_of_noise-induced_obstacles.html#enable-denoise-layer)
        * [ 2\. Run Nav2 stack ](filtering_of_noise-induced_obstacles.html#run-nav2-stack)
      * [ How it works ](filtering_of_noise-induced_obstacles.html#how-it-works)
  * [ Plugin Tutorials ](../../plugin_tutorials/index.html)
    * [ Writing a New Costmap2D Plugin ](../../plugin_tutorials/docs/writing_new_costmap2d_plugin.html)
      * [ Overview ](../../plugin_tutorials/docs/writing_new_costmap2d_plugin.html#overview)
      * [ Requirements ](../../plugin_tutorials/docs/writing_new_costmap2d_plugin.html#requirements)
      * [ Tutorial Steps ](../../plugin_tutorials/docs/writing_new_costmap2d_plugin.html#tutorial-steps)
        * [ 1- Write a new Costmap2D plugin ](../../plugin_tutorials/docs/writing_new_costmap2d_plugin.html#write-a-new-costmap2d-plugin)
        * [ 2- Export and make GradientLayer plugin ](../../plugin_tutorials/docs/writing_new_costmap2d_plugin.html#export-and-make-gradientlayer-plugin)
        * [ 3- Enable the plugin in Costmap2D ](../../plugin_tutorials/docs/writing_new_costmap2d_plugin.html#enable-the-plugin-in-costmap2d)
        * [ 4- Run GradientLayer plugin ](../../plugin_tutorials/docs/writing_new_costmap2d_plugin.html#run-gradientlayer-plugin)
    * [ Writing a New Planner Plugin ](../../plugin_tutorials/docs/writing_new_nav2planner_plugin.html)
      * [ Overview ](../../plugin_tutorials/docs/writing_new_nav2planner_plugin.html#overview)
      * [ Requirements ](../../plugin_tutorials/docs/writing_new_nav2planner_plugin.html#requirements)
      * [ Tutorial Steps ](../../plugin_tutorials/docs/writing_new_nav2planner_plugin.html#tutorial-steps)
        * [ 1- Creating a new Planner Plugin ](../../plugin_tutorials/docs/writing_new_nav2planner_plugin.html#creating-a-new-planner-plugin)
        * [ 2- Exporting the planner plugin ](../../plugin_tutorials/docs/writing_new_nav2planner_plugin.html#exporting-the-planner-plugin)
        * [ 3- Pass the plugin name through params file ](../../plugin_tutorials/docs/writing_new_nav2planner_plugin.html#pass-the-plugin-name-through-params-file)
        * [ 4- Run StraightLine plugin ](../../plugin_tutorials/docs/writing_new_nav2planner_plugin.html#run-straightline-plugin)
    * [ Writing a New Controller Plugin ](../../plugin_tutorials/docs/writing_new_nav2controller_plugin.html)
      * [ Overview ](../../plugin_tutorials/docs/writing_new_nav2controller_plugin.html#overview)
      * [ Requirements ](../../plugin_tutorials/docs/writing_new_nav2controller_plugin.html#requirements)
      * [ Tutorial Steps ](../../plugin_tutorials/docs/writing_new_nav2controller_plugin.html#tutorial-steps)
        * [ 1- Create a new Controller Plugin ](../../plugin_tutorials/docs/writing_new_nav2controller_plugin.html#create-a-new-controller-plugin)
        * [ 2- Exporting the controller plugin ](../../plugin_tutorials/docs/writing_new_nav2controller_plugin.html#exporting-the-controller-plugin)
        * [ 3- Pass the plugin name through the params file ](../../plugin_tutorials/docs/writing_new_nav2controller_plugin.html#pass-the-plugin-name-through-the-params-file)
        * [ 4- Run Pure Pursuit Controller plugin ](../../plugin_tutorials/docs/writing_new_nav2controller_plugin.html#run-pure-pursuit-controller-plugin)
    * [ Writing a New Behavior Tree Plugin ](../../plugin_tutorials/docs/writing_new_bt_plugin.html)
      * [ Overview ](../../plugin_tutorials/docs/writing_new_bt_plugin.html#overview)
      * [ Requirements ](../../plugin_tutorials/docs/writing_new_bt_plugin.html#requirements)
      * [ Tutorial Steps ](../../plugin_tutorials/docs/writing_new_bt_plugin.html#tutorial-steps)
        * [ 1- Creating a new BT Plugin ](../../plugin_tutorials/docs/writing_new_bt_plugin.html#creating-a-new-bt-plugin)
        * [ 2- Exporting the planner plugin ](../../plugin_tutorials/docs/writing_new_bt_plugin.html#exporting-the-planner-plugin)
        * [ 3- Add plugin library name to config ](../../plugin_tutorials/docs/writing_new_bt_plugin.html#add-plugin-library-name-to-config)


#  Create Planner/Controller selector BT nodes  #2086


Development


edited


Do these proposals make sense for you?
Any other more convenient solution?

---

The text was updated successfully, but these errors were encountered:


* [ GitHub Sponsors  Fund open source developers  ](/sponsors)


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


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


In navigation2 this can be potentially done but you need to code own behavior
to achieve it. It would be great if that behavior were already provided by
default by the navigation2 stack.


Sorry, something went wrong.


      * [ Default Plugins ](configuring-costmaps.html#default-plugins)
      * [ Plugin Parameters ](configuring-costmaps.html#plugin-parameters)
        * [ Static Layer Parameters ](costmap-plugins/static.html)
        * [ Inflation Layer Parameters ](costmap-plugins/inflation.html)
        * [ Obstacle Layer Parameters ](costmap-plugins/obstacle.html)
        * [ Voxel Layer Parameters ](costmap-plugins/voxel.html)
        * [ Range Sensor Parameters ](costmap-plugins/range.html)
        * [ Denoise Layer Parameters ](costmap-plugins/denoise.html)
      * [ Costmap Filters Parameters ](configuring-costmaps.html#costmap-filters-parameters)
        * [ Keepout Filter Parameters ](costmap-plugins/keepout_filter.html)
        * [ Speed Filter Parameters ](costmap-plugins/speed_filter.html)
        * [ Binary Filter Parameters ](costmap-plugins/binary_filter.html)
      * [ Example ](configuring-costmaps.html#example)
    * [ Lifecycle Manager ](configuring-lifecycle.html)
      * [ Parameters ](configuring-lifecycle.html#parameters)
      * [ Example ](configuring-lifecycle.html#example)
    * [ Planner Server ](configuring-planner-server.html)
      * [ Parameters ](configuring-planner-server.html#parameters)
      * [ Default Plugins ](configuring-planner-server.html#default-plugins)
      * [ Example ](configuring-planner-server.html#example)
    * [ Coverage Server ](configuring-coverage-server.html)
      * [ Parameters ](configuring-coverage-server.html#parameters)
      * [ Example ](configuring-coverage-server.html#example)
    * [ NavFn Planner ](configuring-navfn.html)
      * [ Parameters ](configuring-navfn.html#parameters)
      * [ Example ](configuring-navfn.html#example)
    * [ Smac Planner ](configuring-smac-planner.html)
      * [ Provided Plugins ](configuring-smac-planner.html#provided-plugins)
        * [ Smac 2D Planner ](smac/configuring-smac-2d.html)
        * [ Smac Hybrid-A* Planner ](smac/configuring-smac-hybrid.html)
        * [ Smac State Lattice Planner ](smac/configuring-smac-lattice.html)
      * [ Description ](configuring-smac-planner.html#description)
    * [ Theta Star Planner ](configuring-thetastar.html)
      * [ Parameters ](configuring-thetastar.html#parameters)
      * [ Example ](configuring-thetastar.html#example)
    * [ Controller Server ](configuring-controller-server.html)
      * [ Parameters ](configuring-controller-server.html#parameters)
      * [ Provided Plugins ](configuring-controller-server.html#provided-plugins)
        * [ SimpleProgressChecker ](nav2_controller-plugins/simple_progress_checker.html)
        * [ PoseProgressChecker ](nav2_controller-plugins/pose_progress_checker.html)


The resoulting XML I have in mind would be similar to the following:


// Copyright (c) 2018 Intel Corporation
// Copyright (c) 2020 Pablo Iñigo Blasco
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <string>
#include <memory>
#include "std_msgs/msg/string.hpp"
#include "nav2_behavior_tree/plugins/action/planner_selector_node.hpp"
#include "rclcpp/rclcpp.hpp"
namespace nav2_behavior_tree
{
using std::placeholders::_1;
PlannerSelector::PlannerSelector(
  const std::string & name,
  const BT::NodeConfiguration & conf)
: BT::SyncActionNode(name, conf)
{
  node_ = config().blackboard->get<rclcpp::Node::SharedPtr>("node");
  callback_group_ = node_->create_callback_group(
    rclcpp::CallbackGroupType::MutuallyExclusive,
    false);
  callback_group_executor_.add_callback_group(callback_group_, node_->get_node_base_interface());
  getInput("topic_name", topic_name_);
  rclcpp::QoS qos(rclcpp::KeepLast(1));
  qos.transient_local().reliable();
  rclcpp::SubscriptionOptions sub_option;
  sub_option.callback_group = callback_group_;
  planner_selector_sub_ = node_->create_subscription<std_msgs::msg::String>(
    topic_name_,
    qos,


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


In the servers, you can map ` N ` plugins to their appopriate names. The 2 you
show are just example names mapped to the default plugins. You can add new
names for your new algorithm use-cases.


  * [ 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)


        * [ 3- Working with SLAM ](navigation2_with_slam.html#working-with-slam)
        * [ 4- Getting Started Simplification ](navigation2_with_slam.html#getting-started-simplification)
    * [ (STVL) Using an External Costmap Plugin ](navigation2_with_stvl.html)
      * [ Overview ](navigation2_with_stvl.html#overview)
      * [ Costmap2D and STVL ](navigation2_with_stvl.html#costmap2d-and-stvl)
      * [ Tutorial Steps ](navigation2_with_stvl.html#tutorial-steps)
        * [ 0- Setup ](navigation2_with_stvl.html#setup)
        * [ 1- Install STVL ](navigation2_with_stvl.html#install-stvl)
        * [ 1- Modify Navigation2 Parameter ](navigation2_with_stvl.html#modify-navigation2-parameter)
        * [ 2- Launch Navigation2 ](navigation2_with_stvl.html#launch-navigation2)
        * [ 3- RVIZ ](navigation2_with_stvl.html#rviz)
    * [ Groot - Interacting with Behavior Trees ](using_groot.html)
      * [ Overview ](using_groot.html#overview)
      * [ Visualize Behavior Trees ](using_groot.html#visualize-behavior-trees)
      * [ Edit Behavior Trees ](using_groot.html#edit-behavior-trees)
      * [ Adding A Custom Node ](using_groot.html#adding-a-custom-node)
    * [ Camera Calibration ](camera_calibration.html)
      * [ Overview ](camera_calibration.html#overview)
      * [ Requirements ](camera_calibration.html#requirements)
      * [ Tutorial Steps ](camera_calibration.html#tutorial-steps)
    * [ Get Backtrace in ROS 2 / Nav2 ](get_backtrace.html)
      * [ Overview ](get_backtrace.html#overview)
      * [ Preliminaries ](get_backtrace.html#preliminaries)
      * [ From a Node ](get_backtrace.html#from-a-node)
      * [ From a Launch File ](get_backtrace.html#from-a-launch-file)
      * [ From Large Project ](get_backtrace.html#from-large-project)
      * [ From Nav2 Bringup ](get_backtrace.html#from-nav2-bringup)
      * [ Automatic backtrace on crash ](get_backtrace.html#automatic-backtrace-on-crash)
    * [ Profiling in ROS 2 / Nav2 ](get_profile.html)
      * [ Overview ](get_profile.html#overview)
      * [ Preliminaries ](get_profile.html#preliminaries)
      * [ Profile from a Node ](get_profile.html#profile-from-a-node)
      * [ Profile from a Launch File ](get_profile.html#profile-from-a-launch-file)
      * [ From Nav2 Bringup ](get_profile.html#from-nav2-bringup)
      * [ Interpreting Results ](get_profile.html#interpreting-results)
    * [ Dynamic Object Following ](navigation2_dynamic_point_following.html)
      * [ Overview ](navigation2_dynamic_point_following.html#overview)
      * [ Tutorial Steps ](navigation2_dynamic_point_following.html#tutorial-steps)
        * [ 0- Create the Behavior Tree ](navigation2_dynamic_point_following.html#create-the-behavior-tree)
        * [ 1- Setup Rviz clicked point ](navigation2_dynamic_point_following.html#setup-rviz-clicked-point)


Copy link


Closed


In fact, I think that goes against the ROS philosophy where clients consume
remote functionalities.


    <root main_tree_to_execute="MainTree">
      <BehaviorTree ID="MainTree">
        <PipelineSequence name="NavigateWithReplanning">
          <RateController hz="1.0">
            <Sequence>
              <GoalUpdater input_goal="{goal}" output_goal="{updated_goal}">
                   <PlannerSelector output_planner="{selected_planner_id}" output_controller="{selected_controller_id}" />
                   <ComputePathToPose goal="{updated_goal}" path="{path}" planner_id="{selected_planner_id}"/>
              </GoalUpdater>
             <TruncatePath distance="1.0" input_path="{path}" output_path="{truncated_path}"/>
            </Sequence>
          </RateController>
          <KeepRunningUntilFailure>
             <FollowPath path="{truncated_path}" controller_id="{selected_controller_id}"/>
          </KeepRunningUntilFailure>
        </PipelineSequence>
      </BehaviorTree>
    </root>


###  2- Modifying your BT XML  ¶


Explore


Sign up for GitHub


Again, I think that goes against the ROS distributed philosophy (did it change
and i did not notice it?).


  * Creating a custom behavior tree for each planner (and select it via nav2_msgs/action/NavigateToPose::Goal::behavior_tree)
  * Overwriting the the FollowPath and GridBased "parameter trees" of the planner_server and controller_server nodes.
  * Creating a custom behavior that receives (via topic/service) the desired plan and writes that into the BT blackboard


      * [ Default Plugins ](../../configuration/packages/configuring-costmaps.html#default-plugins)
      * [ Plugin Parameters ](../../configuration/packages/configuring-costmaps.html#plugin-parameters)
        * [ Static Layer Parameters ](../../configuration/packages/costmap-plugins/static.html)
        * [ Inflation Layer Parameters ](../../configuration/packages/costmap-plugins/inflation.html)
        * [ Obstacle Layer Parameters ](../../configuration/packages/costmap-plugins/obstacle.html)
        * [ Voxel Layer Parameters ](../../configuration/packages/costmap-plugins/voxel.html)
        * [ Range Sensor Parameters ](../../configuration/packages/costmap-plugins/range.html)
        * [ Denoise Layer Parameters ](../../configuration/packages/costmap-plugins/denoise.html)
      * [ Costmap Filters Parameters ](../../configuration/packages/configuring-costmaps.html#costmap-filters-parameters)
        * [ Keepout Filter Parameters ](../../configuration/packages/costmap-plugins/keepout_filter.html)
        * [ Speed Filter Parameters ](../../configuration/packages/costmap-plugins/speed_filter.html)
        * [ Binary Filter Parameters ](../../configuration/packages/costmap-plugins/binary_filter.html)
      * [ Example ](../../configuration/packages/configuring-costmaps.html#example)
    * [ Lifecycle Manager ](../../configuration/packages/configuring-lifecycle.html)
      * [ Parameters ](../../configuration/packages/configuring-lifecycle.html#parameters)
      * [ Example ](../../configuration/packages/configuring-lifecycle.html#example)
    * [ Planner Server ](../../configuration/packages/configuring-planner-server.html)
      * [ Parameters ](../../configuration/packages/configuring-planner-server.html#parameters)
      * [ Default Plugins ](../../configuration/packages/configuring-planner-server.html#default-plugins)
      * [ Example ](../../configuration/packages/configuring-planner-server.html#example)
    * [ Coverage Server ](../../configuration/packages/configuring-coverage-server.html)
      * [ Parameters ](../../configuration/packages/configuring-coverage-server.html#parameters)
      * [ Example ](../../configuration/packages/configuring-coverage-server.html#example)
    * [ NavFn Planner ](../../configuration/packages/configuring-navfn.html)
      * [ Parameters ](../../configuration/packages/configuring-navfn.html#parameters)
      * [ Example ](../../configuration/packages/configuring-navfn.html#example)
    * [ Smac Planner ](../../configuration/packages/configuring-smac-planner.html)
      * [ Provided Plugins ](../../configuration/packages/configuring-smac-planner.html#provided-plugins)
        * [ Smac 2D Planner ](../../configuration/packages/smac/configuring-smac-2d.html)
        * [ Smac Hybrid-A* Planner ](../../configuration/packages/smac/configuring-smac-hybrid.html)
        * [ Smac State Lattice Planner ](../../configuration/packages/smac/configuring-smac-lattice.html)
      * [ Description ](../../configuration/packages/configuring-smac-planner.html#description)
    * [ Theta Star Planner ](../../configuration/packages/configuring-thetastar.html)
      * [ Parameters ](../../configuration/packages/configuring-thetastar.html#parameters)
      * [ Example ](../../configuration/packages/configuring-thetastar.html#example)
    * [ Controller Server ](../../configuration/packages/configuring-controller-server.html)
      * [ Parameters ](../../configuration/packages/configuring-controller-server.html#parameters)
      * [ Provided Plugins ](../../configuration/packages/configuring-controller-server.html#provided-plugins)
        * [ SimpleProgressChecker ](../../configuration/packages/nav2_controller-plugins/simple_progress_checker.html)
        * [ PoseProgressChecker ](../../configuration/packages/nav2_controller-plugins/pose_progress_checker.html)


Sorry, something went wrong.


Repositories


#  Search code, repositories, users, issues, pull requests...


Contributor  Author


  * [ ](../../index.html)
  * [ Configuration Guide ](../index.html)
  * Behavior Tree XML Nodes
  *


Search or jump to...


The [ nav2_behavior_tree ](https://github.com/ros-
planning/navigation2/tree/main/nav2_behavior_tree) package provides several
navigation-specific nodes that are pre-registered and can be included in
Behavior Trees.


##  Condition Plugins  ¶


#  Provide feedback


> Should I implement a custom BTNode condition C++ class (I show later how I
> imagine the BT XML)?


Most of ROS1 users that use robot navigation packages (lets say erratic,
ridgeback or husky) do not change a single line of code of the configuration
provided by the vendor. And they do need not write a single line of c++ code
to switch a planner or a controller.


* Requirements


A planner selector / controller selector BT node that changes the blackboard
values and a BT XML that uses those blackboard values in the follow path /
compute path would be a valuable addition. 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. 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. Whatever external node is requesting the change shouldn't
exist and should be integrated into the condition node so that change is fully
autonomous within the tree.


###  0- Familiarization with the Smoother BT Node  ¶


Member


      * [ 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)


Milestone


Thanks for the fast answer.
It makes sense.

---

All reactions


__ [ Nav2 ](../../index.html)


[ Sign up
](/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-
name%3E%2F%3Crepo-
name%3E%2Fvoltron%2Fissues_fragments%2Fissue_layout&source=header-
repo&source_repo=ros-planning%2Fnavigation2)


##  Action Plugins  ¶


Closed


Sorry, something went wrong.


Please see the BT node’s configuration page to familiarize yourself with all
aspects, but the core ports to note are the ` unsmoothed_path  ` input port
and the ` smoothed_path  ` output port. The first takes in a raw path from a
planning algorithm and the latter will set the value of the smoothed output
path post-smoothing. Other ports are available that fully implements the
Smoother Server’s action API.


[
![@SteveMacenski](https://avatars.githubusercontent.com/u/14944147?s=40&u=0925d37e9d3569c71d930114b66e6394c2efb3c6&v=4)
](/SteveMacenski) [ SteveMacenski ](/SteveMacenski) reopened this  Mar 16,
2021


Yes, create a custom behavior tree to accommodate changes to different
algorithms depending on the context you want to use each within. but you only
need 1 BT for ` N ` planners/controllers (there's a paper I've written that
explains this in more detail, but its not through peer review yet). For
instance, you could create a condition Bt node to check ` if in dynamic scene
` and if true, uses the ` idk-really-awesome-controller ` , else uses the `
line follower ` controller.


Clear


latest


##  Overview  ¶


Name


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


  * [ 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)
  * [ CancelCoverage ](bt-plugins/actions/CancelCoverage.html)
  * [ RemovePassedGoals ](bt-plugins/actions/RemovePassedGoals.html)
  * [ CancelControl ](bt-plugins/actions/CancelControl.html)
  * [ CancelBackUp ](bt-plugins/actions/CancelBackUp.html)
  * [ CancelSpin ](bt-plugins/actions/CancelSpin.html)
  * [ CancelWait ](bt-plugins/actions/CancelWait.html)
  * [ CancelDriveOnHeading ](bt-plugins/actions/CancelDriveOnHeading.html)
  * [ CancelAssistedTeleop ](bt-plugins/actions/CancelAssistedTeleop.html)
  * [ SmoothPath ](bt-plugins/actions/Smooth.html)


#  Adding a Smoother to a BT  ¶


[ **114** watching ](/Ly0n/awesome-robotic-tooling/watchers)


Sign up


###  Annotation


Thanks to the team of [ xpp ](http://wiki.ros.org/xpp) for creating this
awesome GIF we use.


  * Install the extension
  * Set up your C++ Environment
  * Example: Install MinGW-x64 on Windows
  * Create a Hello World App
  * Run helloworld.cpp
  * Tutorials
  * Documentation
  * Remote Development
  * Enhance completions with AI
  * Feedback


[ Edit  ](https://vscode.dev/github/microsoft/vscode-
docs/blob/main/docs/languages/cpp.md "Edit this document in vscode.dev")


Share


###  [ Visual Studio Code IDE (VSCode) | PX4 User Guide
](https://docs.px4.io/main/en/dev_setup/vscode.html)


  2. Use the following command to check for the GCC compiler ` g++ ` :

        g++ --version


Follow


Skip to content


Careers


Privacy


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


1.13.1. Ill send you screenshot. PX4 boots, but Gazebo never comes up.


Another way to achieve same behavior is using a variable. In this case, set a
breakpoint on sleep statement. Once the VSCode is attached to gzserver, this
breakpoint will get hit. Change the i value to something other than 0 causing
while loop to exit. Assuming real target breakpoint is already set which will
get hit after the while loop is done.


  * [ qemu-user-static ](https://github.com/multiarch/qemu-user-static) \- Enable an execution of different multi-architecture containers by QEMU and binfmt_misc.
  * [ Cross compile ROS 2 on QNX ](https://gitlab.apex.ai/snippets/97) \- Introduces how to cross compile ROS 2 on QNX.
  * [ bloom ](https://github.com/ros-infrastructure/bloom) \- A release automation tool which makes releasing catkin packages easier.
  * [ superflore ](https://github.com/ros-infrastructure/superflore) \- An extended platform release manager for Robot Operating System.
  * [ catkin_tools ](https://github.com/catkin/catkin_tools) \- Command line tools for working with catkin.
  * [ industrial_ci ](https://github.com/ros-industrial/industrial_ci) \- Easy continuous integration repository for ROS repositories.
  * [ ros_gitlab_ci ](https://gitlab.com/VictorLamoine/ros_gitlab_ci) \- Contains helper scripts and instructions on how to use Continuous Integration (CI) for ROS projects hosted on a GitLab instance.
  * [ gitlab-runner ](https://gitlab.com/gitlab-org/gitlab-runner) \- Runs tests and sends the results to GitLab.
  * [ colcon-core ](https://github.com/colcon/colcon-core) \- Command line tool to improve the workflow of building, testing and using multiple software packages.
  * [ gitlab-release ](https://gitlab.com/alelec/gitlab-release) \- Simple python3 script to upload files (from ci) to the current projects release (tag).
  * [ clang ](https://github.com/llvm-mirror/clang) \- This is a compiler front-end for the C family of languages (C, C++, Objective-C, and Objective-C++) which is built as part of the LLVM compiler infrastructure project.
  * [ catkin_virtualenv ](https://github.com/locusrobotics/catkin_virtualenv) \- Bundle python requirements in a catkin package via virtualenv.
  * [ pyenv ](https://github.com/pyenv/pyenv) \- Simple Python version management.
  * [ aptly ](https://github.com/aptly-dev/aptly) \- Debian repository management tool.
  * [ cross_compile ](https://github.com/ros-tooling/cross_compile) \- Assets used for ROS2 cross-compilation.
  * [ docker_images ](https://github.com/osrf/docker_images) \- Official Docker images maintained by OSRF on ROS(2) and Gazebo.
  * [ robot_upstart ](https://github.com/clearpathrobotics/robot_upstart) \- Presents a suite of scripts to assist with launching background ROS processes on Ubuntu Linux PCs.
  * [ robot_systemd ](http://docs.ros.org/kinetic/api/robot_systemd/html/#) \- Units for managing startup and shutdown of roscore and roslaunch.
  * [ ryo-iso ](https://ryo-iso.readthedocs.io/en/latest/) \- A modern ISO builder that streamlines the process of deploying a complete robot operating system from a yaml config file.
  * [ network_autoconfig ](http://docs.ros.org/kinetic/api/network_autoconfig/html/) \- Automatic configuration of ROS networking for most use cases without impacting usage that require manual configuration.
  * [ rosbuild ](https://roscon.ros.org/2016/presentations/ROSCon2016%20Build%20Farm.pdf) \- The ROS build farm.
  * [ cros ](https://github.com/ros-industrial/cros) \- A single thread pure C implementation of the ROS framework.


  * [ xpp ](https://github.com/leggedrobotics/xpp) \- Visualization of motion-plans for legged robots.
  * [ rviz stereo ](http://wiki.ros.org/rviz/Tutorials/Rviz%20in%20Stereo) \- 3D stereo rendering displays a different view to each eye so that the scene appears to have depth.
  * [ jsk_visualization ](https://github.com/jsk-ros-pkg/jsk_visualization) \- Jsk visualization ros packages for rviz and rqt.
  * [ moveit_visual_tools ](https://github.com/ros-planning/moveit_visual_tools) \- Helper functions for displaying and debugging MoveIt! data in Rviz via published markers.


###  License


[ ![Arshad
Mehmood](https://miro.medium.com/v2/da:true/resize:fill:88:88/0*4RqKG46Pf3yDD_4A)
](/@arshad.mehmood?source=post_page-----
14de44d58cc9--------------------------------)


###  Calibration and Transformation


[ rdehart  ](https://discuss.px4.io/u/rdehart) November 22, 2022, 1:26am  5


  runArgs

These are the arguments you want to pass into the ` docker run ` command. You
can place any argument that is valid to use with [ docker run
](https://docs.docker.com/engine/reference/commandline/run/)

The ones I find the most useful are:

  * Support for gdb (debugging)

        "--cap-add=SYS_PTRACE",
    "--security-opt", "seccomp=unconfined",


#  C/C++ for Visual Studio Code


Toggle navigation


  * [ tf2 ](http://wiki.ros.org/tf2) \- Transform library, which lets the user keep track of multiple coordinate frames over time.
  * [ TriP ](https://github.com/TriPed-Robot/TriP) \- A Inverse Kinematics library for serial robots, parallel robots and hybrids of both.
  * [ lidar_align ](https://github.com/ethz-asl/lidar_align) \- A simple method for finding the extrinsic calibration between a 3D lidar and a 6-dof pose sensor.
  * [ kalibr ](https://github.com/ethz-asl/kalibr) \- The Kalibr visual-inertial calibration toolbox.
  * [ Calibnet ](https://github.com/epiception/CalibNet) \- Self-Supervised Extrinsic Calibration using 3D Spatial Transformer Networks.
  * [ lidar_camera_calibration ](https://github.com/ankitdhall/lidar_camera_calibration) \- ROS package to find a rigid-body transformation between a LiDAR and a camera.
  * [ ILCC ](https://github.com/mfxox/ILCC) \- Reflectance Intensity Assisted Automatic and Accurate Extrinsic Calibration of 3D LiDAR.
  * [ easy_handeye ](https://github.com/IFL-CAMP/easy_handeye) \- Simple, straighforward ROS library for hand-eye calibration.
  * [ imu_utils ](https://github.com/gaowenliang/imu_utils) \- A ROS package tool to analyze the IMU performance.
  * [ kalibr_allan ](https://github.com/rpng/kalibr_allan) \- IMU Allan standard deviation charts for use with Kalibr and inertial kalman filters.
  * [ pyquaternion ](https://github.com/KieranWynn/pyquaternion) \- A full-featured Python module for representing and using quaternions.
  * [ robot_calibration ](https://github.com/mikeferguson/robot_calibration/) \- This package offers calibration of a number of parameters of a robot, such as: 3D Camera intrinsics, extrinsics Joint angle offsets and robot frame offsets.
  * [ multi_sensor_calibration ](https://github.com/tudelft-iv/multi_sensor_calibration/) \- Contains a calibration tool to calibrate a sensor setup consisting of lidars, radars and cameras.
  * [ LiDARTag ](https://github.com/UMich-BipedLab/LiDARTag) \- A Real-Time Fiducial Tag using Point Clouds Lidar Data.
  * [ multicam_calibration ](https://github.com/KumarRobotics/multicam_calibration) \- Extrinsic and intrinsic calbration of cameras.
  * [ ikpy ](https://github.com/Phylliade/ikpy) \- An Inverse Kinematics library aiming performance and modularity.
  * [ livox_camera_lidar_calibration ](https://github.com/Livox-SDK/livox_camera_lidar_calibration) \- Calibrate the extrinsic parameters between Livox LiDAR and camera.
  * [ lidar_camera_calibration ](https://github.com/heethesh/lidar_camera_calibration) \- Camera LiDAR Calibration using ROS, OpenCV, and PCL.
  * [ e2calib ](https://github.com/uzh-rpg/e2calib) \- Contains code that implements video reconstruction from event data for calibration.


##  Remote Development


##  Behavior and Decision


[ MAVLink ](https://mavlink.io/en/)


> **Note** : If you would prefer a full Integrated Development Environment
> (IDE), with built-in compilation, debugging, and project templates (File >
> New Project), there are many options available, such as the [ Visual Studio
> Community ](https://visualstudio.microsoft.com/vs/community) edition.


  * [ Vim-ros ](https://github.com/taketwo/vim-ros) \- Vim plugin for ROS development.
  * [ Visual Studio Code ](https://github.com/Microsoft/vscode) \- Code editor for edit-build-debug cycle.
  * [ atom ](https://github.com/atom/atom) \- Hackable text editor for the 21st century.
  * [ Teletype ](https://github.com/atom/teletype) \- Share your workspace with team members and collaborate on code in real time in Atom.
  * [ Sublime ](https://www.sublimetext.com/) \- A sophisticated text editor for code, markup and prose.
  * [ ade-cli ](https://gitlab.com/ApexAI/ade-cli) \- The ADE Development Environment (ADE) uses docker and Gitlab to manage environments of per project development tools and optional volume images.
  * [ recipe-wizard ](https://github.com/trn84/recipe-wizard) \- A Dockerfile generator for running OpenGL (GLX) applications with nvidia-docker2, CUDA, ROS, and Gazebo on a remote headless server system.
  * [ Jupyter ROS ](https://github.com/RoboStack/jupyter-ros) \- Jupyter widget helpers for ROS, the Robot Operating System.
  * [ ros_rqt_plugin ](https://github.com/ros-industrial/ros_qtc_plugin) \- The ROS Qt Creator Plug-in for Python.
  * [ xeus-cling ](https://github.com/QuantStack/xeus-cling) \- Jupyter kernel for the C++ programming language.
  * [ ROS IDEs ](http://wiki.ros.org/IDEs) \- This page collects experience and advice on using integrated development environments (IDEs) with ROS.
  * [ TabNine ](https://github.com/zxqfl/TabNine) \- The all-language autocompleter.
  * [ kite ](https://kite.com/) \- Use machine learning to give you useful code completions for Python.
  * [ jedi ](https://github.com/davidhalter/jedi) \- Autocompletion and static analysis library for python.
  * [ roslibpy ](https://github.com/gramaziokohler/roslibpy) \- Python ROS Bridge library allows to use Python and IronPython to interact with ROS, the open-source robotic middleware.
  * [ pybind11 ](https://github.com/pybind/pybind11) \- Seamless operability between C++11 and Python.
  * [ Sourcetrail ](https://github.com/CoatiSoftware/Sourcetrail) \- Free and open-source cross-platform source explorer.
  * [ rebound ](https://github.com/shobrook/rebound) \- Command-line tool that instantly fetches Stack Overflow results when an exception is thrown.
  * [ mybinder ](https://mybinder.org/) \- Open notebooks in an executable environment, making your code immediately reproducible by anyone, anywhere.
  * [ ROSOnWindows ](https://ms-iot.github.io/ROSOnWindows/) \- An experimental release of ROS1 for Windows.
  * [ live-share ](https://github.com/MicrosoftDocs/live-share) \- Real-time collaborative development from the comfort of your favorite tools.
  * [ cocalc ](https://github.com/sagemathinc/cocalc) \- Collaborative Calculation in the Cloud.
  * [ EasyClangComplete ](https://github.com/niosus/EasyClangComplete) \- Robust C/C++ code completion for Sublime Text 3.
  * [ vscode-ros ](https://github.com/ms-iot/vscode-ros) \- Visual Studio Code extension for Robot Operating System (ROS) development.
  * [ awesome-hpp ](https://github.com/p-ranav/awesome-hpp) \- A curated list of awesome header-only C++ libraries.
  * [ Gitpod ](https://github.com/gitpod-io/gitpod) \- An open source developer platform that automates the provisioning of ready-to-code development environments.


[ ![Screenshot from 2022-11-21
20-18-45](https://discuss.px4.io/uploads/default/optimized/2X/f/f22f66ca5ae774ff5ba8e29e349766cf69ce2e85_2_690x464.png)
Screenshot from 2022-11-21 20-18-45  1187×799 101 KB
](https://discuss.px4.io/uploads/default/original/2X/f/f22f66ca5ae774ff5ba8e29e349766cf69ce2e85.png
"Screenshot from 2022-11-21 20-18-45")


[ LICENSE ](/Ly0n/awesome-robotic-tooling/blob/main/LICENSE "LICENSE")


**Windows** :


###  Perception Pipeline


There are situations when the plugin is loaded with gzserver and there is a
need to debug plugin startup code.


  * [ Code  ](/Ly0n/awesome-robotic-tooling)
  * [ Issues  ](/Ly0n/awesome-robotic-tooling/issues)
  * [ Pull requests  ](/Ly0n/awesome-robotic-tooling/pulls)
  * [ Actions  ](/Ly0n/awesome-robotic-tooling/actions)
  * [ Projects  ](/Ly0n/awesome-robotic-tooling/projects)
  * [ Security  ](/Ly0n/awesome-robotic-tooling/security)
  * [ Insights  ](/Ly0n/awesome-robotic-tooling/pulse)


Additional navigation options


  * [ dask ](https://github.com/dask/dask) \- Parallel computing with task scheduling for Python.
  * [ cupy ](https://github.com/cupy/cupy) \- NumPy-like API accelerated with CUDA.
  * [ Thrust ](https://github.com/thrust/thrust) \- A C++ parallel programming library which resembles the C++ Standard Library.
  * [ ArrayFire ](https://github.com/arrayfire/arrayfire) \- A general purpose GPU library.
  * [ OpenMP ](https://www.openmp.org/) \- An application programming interface that supports multi-platform shared memory multiprocessing programming in C, C++, and Fortran.
  * [ VexCL ](https://github.com/ddemidov/vexcl) \- VexCL is a C++ vector expression template library for OpenCL/CUDA/OpenMP.
  * [ PYNQ ](https://github.com/Xilinx/PYNQ) \- An open-source project from Xilinx that makes it easy to design embedded systems with Zynq All Programmable Systems on Chips.
  * [ numba ](https://github.com/numba/numba) \- NumPy aware dynamic Python compiler using LLVM.
  * [ TensorRT ](https://github.com/NVIDIA/TensorRT) \- A C++ library for high performance inference on NVIDIA GPUs and deep learning accelerators.
  * [ libcudacxx ](https://github.com/NVIDIA/libcudacxx) \- Provides a heterogeneous implementation of the C++ Standard Library that can be used in and between CPU and GPU code.


##  Datasets


Or this command for the Clang compiler ` clang ` :


###  Vector Map


![screenshot of program output](/assets/docs/languages/cpp/helloworld-
terminal-output.png)


  Set up tasks

Next, set up your tasks so that you can build and test your code.

.vscode/tasks.json

    {
      "version": "2.0.0",
      "tasks": [
        {
          "label": "build",
          "type": "shell",
          "command": "colcon build --cmake-args '-DCMAKE_BUILD_TYPE=Debug'"
        },
        {
          "label": "test",
          "type": "shell",
          "command": "colcon test && colcon test-result"
        }
      ]
    }


1. Open a new VS Code terminal window using (  ⌃⇧`  (Windows, Linux  Ctrl+Shift+`  )  )


  * [ mapviz ](https://github.com/swri-robotics/mapviz) \- Modular ROS visualization tool for 2D data.
  * [ rviz_cinematographer ](https://github.com/AIS-Bonn/rviz_cinematographer) \- Easy to use tools to create and edit trajectories for the rviz camera.
  * [ rviz_satellite ](https://github.com/gareth-cross/rviz_satellite) \- Display internet satellite imagery in RViz.
  * [ rviz_visual_tools ](https://github.com/PickNikRobotics/rviz_visual_tools) \- C++ API wrapper for displaying shapes and meshes in Rviz.


CMAKE_BUILD_TYPE options. Can use any of the bold options.


![Screenshot of helloworld.cpp and play
button](/assets/docs/languages/cpp/run-play-button.png)


  * [ xdot ](https://github.com/jrfonseca/xdot.py) \- Interactive viewer for graphs written in Graphviz's dot language.
  * [ guacamole ](https://guacamole.apache.org/) \- Clientless remote desktop gateway. It supports standard protocols like VNC, RDP, and SSH.
  * [ ros3djs ](https://github.com/RobotWebTools/ros3djs) \- 3D Visualization Library for use with the ROS JavaScript Libraries.
  * [ webviz ](https://github.com/cruise-automation/webviz) \- Web-based visualization libraries like rviz.
  * [ plotly.py ](https://github.com/plotly/plotly.py) \- An open-source, interactive graphing library for Python.
  * [ PlotJuggler ](https://github.com/facontidavide/PlotJuggler) \- The timeseries visualization tool that you deserve.
  * [ bokeh ](https://github.com/bokeh/bokeh) \- Interactive Data Visualization in the browser, from Python.
  * [ voila ](https://github.com/voila-dashboards/voila) \- From Jupyter notebooks to standalone web applications and dashboards.
  * [ Pangolin ](https://github.com/stevenlovegrove/Pangolin) \- Pangolin is a lightweight portable rapid development library for managing OpenGL display / interaction and abstracting video input.
  * [ rqt_bag ](http://wiki.ros.org/rqt_bag) \- Provides a GUI plugin for displaying and replaying ROS bag files.
  * [ kepler.gl ](https://github.com/keplergl/kepler.gl) \- Kepler.gl is a powerful open source geospatial analysis tool for large-scale data sets.
  * [ qgis_ros ](https://github.com/locusrobotics/qgis_ros) \- Access bagged and live topic data in a highly featured GIS environment.
  * [ openmct ](https://github.com/nasa/openmct) \- A web based mission control framework.
  * [ web_video_server ](https://github.com/RobotWebTools/web_video_server) \- HTTP Streaming of ROS Image Topics in Multiple Formats.
  * [ RVizWeb ](https://github.com/osrf/rvizweb) \- Provides a convenient way of building and launching a web application with features similar to RViz.
  * [ marvros ](https://github.com/mavlink/mavros) \- MAVLink to ROS gateway with proxy for Ground Control Station.
  * [ octave ](https://www.gnu.org/software/octave/) \- Provides a convenient command line interface for solving linear and nonlinear problems numerically, and for performing other numerical experiments using a language that is mostly compatible with Matlab.
  * [ streetscape.gl ](https://github.com/uber/streetscape.gl) \- Streetscape.gl is a toolkit for visualizing autonomous and robotics data in the XVIZ protocol.
  * [ urdf-loaders ](https://github.com/gkjohnson/urdf-loaders) \- URDF Loaders for Unity and THREE.js with example ATHLETE URDF File.
  * [ obs-studio ](https://github.com/obsproject/obs-studio) \- Free and open source software for live streaming and screen recording.
  * [ K3D-tools ](https://github.com/K3D-tools) \- Jupyter notebook extension for 3D visualization.
  * [ PyQtGraph ](https://github.com/pyqtgraph/pyqtgraph) \- Fast data visualization and GUI tools for scientific / engineering applications.
  * [ ipygany ](https://github.com/QuantStack/ipygany) \- 3-D Scientific Visualization in the Jupyter Notebook.
  * [ Foxglove Studio ](https://github.com/foxglove/studio) \- Web and desktop app for robotics visualization and debugging; actively maintained fork of webviz.
  * [ ROS-Mobile ](https://github.com/ROS-Mobile/ROS-Mobile-Android) \- Visualization and controlling application for Android.


C/C++ support for Visual Studio Code is provided by a [ Microsoft C/C++
extension ](https://marketplace.visualstudio.com/items?itemName=ms-
vscode.cpptools) to enable cross-platform C and C++ development on Windows,
Linux, and macOS. When you create a ` *.cpp ` file, the extension adds
features such as syntax highlighting (colorization), smart completions and
hovers (IntelliSense), and error checking.


[ Write
](/m/signin?operation=register&redirect=https%3A%2F%2Fmedium.com%2Fnew-
story&source=---two_column_layout_nav-----------------------
new_post_topnav-----------)


  * [ Papers With Code ](https://www.paperswithcode.com/datasets) \- Thousands of machine learning datasets provided by Papers With Code.
  * [ KITTI-360 ](https://github.com/autonomousvision/kitti360Scripts) \- This large-scale dataset contains 320k images and 100k laser scans in a driving distance of 73.7km.
  * [ waymo_ros ](https://github.com/YonoHub/waymo_ros) \- This is a ROS package to connect Waymo open dataset to ROS.
  * [ waymo-open-dataset ](https://github.com/waymo-research/waymo-open-dataset) \- The Waymo Open Dataset is comprised of high-resolution sensor data collected by Waymo self-driving cars in a wide variety of conditions.
  * [ Ford Autonomous Vehicle Dataset ](https://avdata.ford.com/home/default.aspx) \- Ford presents a challenging multi-agent seasonal dataset collected by a fleet of Ford autonomous vehicles at different days and times.
  * [ awesome-robotics-datasets ](https://github.com/sunglok/awesome-robotics-datasets) \- A collection of useful datasets for robotics and computer vision.
  * [ nuscenes-devkit ](https://github.com/nutonomy/nuscenes-devkit) \- The devkit of the nuScenes dataset.
  * [ dataset-api ](https://github.com/ApolloScapeAuto/dataset-api) \- This is a repo of toolkit for ApolloScape Dataset, CVPR 2019 Workshop on Autonomous Driving Challenge and ECCV 2018 challenge.
  * [ utbm_robocar_dataset ](https://github.com/epan-utbm/utbm_robocar_dataset) \- EU Long-term Dataset with Multiple Sensors for Autonomous Driving.
  * [ DBNet ](https://github.com/driving-behavior/DBNet) \- A Large-Scale Dataset for Driving Behavior Learning.
  * [ argoverse-api ](https://github.com/argoai/argoverse-api) \- Official GitHub repository for Argoverse dataset.
  * [ DDAD ](https://github.com/TRI-ML/DDAD) \- A new autonomous driving benchmark from TRI (Toyota Research Institute) for long range (up to 250m) and dense depth estimation in challenging and diverse urban conditions.
  * [ pandaset-devkit ](https://github.com/scaleapi/pandaset-devkit) \- Public large-scale dataset for autonomous driving provided by Hesai & Scale.
  * [ a2d2_to_ros ](https://gitlab.com/MaplessAI/external/a2d2_to_ros) \- Utilities for converting A2D2 data sets to ROS bags.
  * [ awesome-satellite-imagery-datasets ](https://github.com/chrieke/awesome-satellite-imagery-datasets) \- List of satellite image training datasets with annotations for computer vision and deep learning.
  * [ sentinelsat ](https://github.com/sentinelsat/sentinelsat) \- Search and download Copernicus Sentinel satellite images.
  * [ adas-dataset-form ](https://www.flir.com/oem/adas/adas-dataset-form/) \- Thermal Dataset for Algorithm Training.
  * [ h3d ](https://usa.honda-ri.com/h3d) \- The H3D is a large scale full-surround 3D multi-object detection and tracking dataset from Honda.
  * [ Mapillary Vistas Dataset ](https://www.mapillary.com/dataset/vistas) \- A diverse street-level imagery dataset with pixel‑accurate and instance‑specific human annotations for understanding street scenes around the world.
  * [ TensorFlow Datasets ](https://www.tensorflow.org/datasets/catalog/overview) \- TensorFlow Datasets provides many public datasets as tf.data.Datasets.
  * [ racetrack-database ](https://github.com/TUMFTM/racetrack-database) \- Contains center lines (x- and y-coordinates), track widths and race lines for over 20 race tracks (mainly F1 and DTM) all over the world.
  * [ BlenderProc ](https://github.com/DLR-RM/BlenderProc) \- A procedural Blender pipeline for photorealistic training image generation.
  * [ Atlatec Sample Map Data ](https://www.atlatec.de/getsampledata.html) \- 3D map for autonomous driving and simulation created from nothing but two cameras and GPS in downtown San Francisco.
  * [ Lyft Level 5 Dataset ](https://self-driving.lyft.com/level5/data/) \- Level 5 is developing a self-driving system for the Lyft network. We're collecting and processing data from our autonomous fleet and sharing it with you.
  * [ holicity ](https://github.com/zhou13/holicity) \- A City-Scale Data Platform for Learning Holistic 3D Structures.
  * [ UTD19 ](https://utd19.ethz.ch/) \- Largest multi-city traffic dataset publically available.
  * [ ASTYX HIRES2019 DATASET ](http://www.pinchofintelligence.com/visualising-lidar-and-radar-in-virtual-reality/) \- Automotive Radar Dataset for Deep Learning Based 3D Object Detection.
  * [ Objectron ](https://github.com/google-research-datasets/Objectron/) \- A collection of short, object-centric video clips, which are accompanied by AR session metadata that includes camera poses, sparse point-clouds and characterization of the planar surfaces in the surrounding environment.
  * [ ONCE dataset ](https://once-for-auto-driving.github.io/index.html) \- A large-scale autonomous driving dataset with 2D&3D object annotations.


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


##  Run helloworld.cpp


[ CC0-1.0 license ](/Ly0n/awesome-robotic-tooling/blob/main/LICENSE)


Starting a debug session in VSCode


  * Communication and Coordination
  * Documentation and Presentation
  * Requirements and Safety
  * Architecture and Design
  * Frameworks and Stacks
  * Development Environment
    * Code and Run
    * Template
    * Build and Deploy
    * Unit and Integration Test
    * Lint and Format
    * Debugging and Tracing
    * Version Control
  * Simulation
  * Electronics and Mechanics
  * Sensor Processing
    * Calibration and Transformation
    * Perception Pipeline
    * Machine Learning
    * Parallel Processing
    * Image Processing
    * Radar Processing
    * Lidar and Point Cloud Processing
  * Localization and State Estimation
  * Simultaneous Localization and Mapping
    * Lidar
    * Visual
    * Vector Map
  * Prediction
  * Behavior and Decision
  * Planning and Control
  * User Interaction
    * Graphical User Interface
    * Acoustic User Interface
    * Command Line Interface
  * Data Visualization and Mission Control
    * Annotation
    * Point Cloud
    * RViz
  * Operation System


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


Resources


sudo apt-get update && sudo apt-get install -y \


[ MAVSDK ](http://mavsdk.mavlink.io)


###  Stars


Listen


It should. What PX4 version are you running on what platform? Is “anything”
happening?


World plugins are declared and loaded via world file. Model plugin life time
depends on Model existing in a world. Sensor plugins are to simulate camera
and often associated with model. System plugins are loaded by the gzserver at
process start even before any world or model is created.


GetPID will return pid of gzserver process. GetPath is to get executable path.
pid and path both are needed by launch.json to attach gdb with running
process. (e.g gzserver)


##  Security


#  **Setting up VSCode for plugin debugging**


###  Resources


###  Visual