ROS Resources: Documentation | Support | Discussion Forum | Service Status | Q&A

ROS 2 Dynamic Point Following Tutorial [Navigation2]

Hi all, friendly neighborhood navigator here.

I’m here to let you know about a new tutorial @fmrico has written to explain how to use navigation2 and our amazingly-reconfigurable-plugin-based-behavior-tree-navigation-system to do a very common request among users: dynamic object following, now batteries included into the Navigation2 system.

So you want a robot to follow you around in the airport? How about chase your dog? Maybe let someone guide a robot to an area to do a task? All of these and more are possible with the power of friendship – err I mean dynamic object following!

See the tutorial today! It covers:

  • The requirements
  • Modifying a behavior tree and explaining how it works
  • Some cool videos

The object following capabilities are BYOD, bring your own detector. We wouldn’t want to assume what type of sensors you have on your robot or the type of detectors you have access to. Rather than lock you into a specific implementation, you can use any detector or segmentation algorithm under the sun as long as it can give you a detected position of an object. One such option could be used is the pipeline described by @adlarkin in their SubT tutorial post: Any detector based on a 2D lidar, 3D lidar, RGB, RGBD, etc sensors should work great.

Some detectors will also be made available in the navigation system at a future date when we finish up some related dynamic obstacle work.

Happy following,


Dear all,

Within this tutorial the behavior tree is altered to make sure the path that is given to the FollowPath controller is altered, this happens between the code block 2 and 3 with the BT xml discription.

Between these blocks is spoken of reading the topic /goalupdate, I noticed that this is not an input nor output for the BT modules via the blackboard.
So where is this topic read?

I ask this because I am pretty new to the ROS2 Navigation2 behavior tree system and need to add behavior to this framework as a graduation project.

I would also like to know about what is the best, or the intended, way of reading topics within bt nodes.
E.g. does this happen inside the bt node, or does one do it in an external module that is called by the bt node and returns this data?

Kind regards,