The neo_goal_sequence_driver package is a exclusively ROS-1 only package, that provides a means to command a user defined sequence of goals, optionally in a looped mode too.


Prerequisite knowledge: Installation and Navigation with Move Base for neo_simulation package



Currently neo_goal_sequence_driver only supports ROS-1


  • /goal_sequence_driver/run
  • /goal_sequence_driver/stop
The following parameters could be found in driver_config.yaml and can be modified:
Parameter Default Description Options
infi_param false Robot will (or not) continuously repeat the sequence until it’s shutdown by calling service. true, false
manual_stepping false if to require calling /next for each goal bool
patience 5 User can define the time length spent on one single goal (in seconds). integer
print_option all User can define which information is to be printed in terminal. local, total, all


Initial Startup

Start the robot (or simulator) and launch navigation stack first, e.g. using simulator:

roslaunch neo_simulation simulation.launch

Goal Configuration

Goals to the driver can be given in two ways:


Manual methodology will allow the users to set the co-ordinates of the goals by directly editing the YAML file

roslaunch neo_goal_sequence_driver neo_goal_sequence_driver.launch


You should have the basic navigation bringup already running.


Automated methodology will allow the users to set the goals on the fly in RViz.


In order to use the functionality in simulation, set the “move_base” argument to “false” in the ($Desire_robot)_autonomous_navigation.launch file.

For the real robot, just start the neo_localization node : (if you have mp_500, use the below command! Else, change it based on your robot type)

roslaunch neo_mp_500 neo_localization.launch

Now run:

roslaunch neo_goal_sequence_driver neo_goal_sequence_driver_autoamated.launch

automated_sequence node enables to use the “2D Nav goal” option to continuously set any number of goals in sequence which are then visualized using the pose arrays.


Node updates the selected goal sequence in the YAML file.

In simulation run:

roslaunch neo_simulation ($Desire_robot)_move_base.launch

In real-robot now run: (if you have mp_500, use the below command! Else, change it based on your robot type)

roslaunch neo_mp_500 move_base.launch

Setup server

Run goal_sequence_driver_server and goal_sequence_visualizer with launch file:

roslaunch neo_goal_sequence_driver neo_goal_sequence_driver_visualized.launch

if the visualization of goal list is not necessary, just launch the server by:

roslaunch neo_goal_sequence_driver neo_goal_sequence_driver.launch


Make sure the system time on the platform is the same as on the machine which is running neo_goal_sequence_driver, otherwise it may not work.

If every thing is now set up, it looks like the picture below, you can move on to next step and demand the robot to first goal!


Change configurations:

  1. shutdown the server node
  2. modify yaml files
  3. run server node again

Start driver

Start the driver by calling:

rosservice call /goal_sequence_driver/run

Now the robot should be moving toward it’s goals until it reaches the final one(if the default configurations are applied).

Stop by calling:

rosservice call /goal_sequence_driver/stop

And if the former service is called again, it restarts the drive from 1st goal.

Video demo