build details

Show: section status errors & todos local changes recent changes last change in-page changes feedback controls

Indefinite Navigation

Modified 2019-04-09 by gibernas

This is the description of the indefinite navigation demo.

Fully set up Duckietown.

One or more Duckiebot safely navigating in Duckietown.

Video of expected results

Modified 2018-06-24 by Andrea Censi

The video is at

Demo: indefinite navigation

Duckietown setup notes

Modified 2019-09-27 by Aleksandar Petrov

To run this demo, you can setup a quite complex Duckietown. The demo supports normal road tiles, intersections and traffic lights. That makes it a a level more difficult than the lane following demo. Make sure that your Duckietown complies with the appereance specifications presented in the Duckietown specs (unknown ref opmanual_duckietown/dt-ops-appearance-specifications)

previous warning (10 of 10) index
I will ignore this because it is an external link. 

 > I do not know what is indicated by the link '#opmanual_duckietown/dt-ops-appearance-specifications'.

Location not known more precisely.

Created by function n/a in module n/a.
. In particular correct street signaling is key to success of intersections handling.

Duckiebot setup notes

Modified 2021-07-07 by Tomasz Z

One (or possibly more) Duckiebot in configuration DB19/DB21M .

Pre-flight checklist

Modified 2019-09-27 by Aleksandar Petrov

Check that every Duckiebot has sufficient battery charge and that they are all properly calibrated.

Demo instructions

Modified 2018-06-22 by Andrea Censi

Start the demo containers

Modified 2021-07-07 by Tomasz Z

Running this demo requires almost all of the main Duckietown ROS nodes to be up and running. Make sure that ros, car-interface and duckiebot-interface are running.

Then, we are ready to start the high-level pipeline for indefinite navigation:

laptop $ dts duckiebot demo --demo_name indefinite_navigation --duckiebot_name DUCKIEBOT_NAME

You have to wait a while for everything to start working. While you wait, you can check in Portainer if all the containers started successfully and in their logs for any possible issues.

Make your Duckiebot drive autonomously!

Modified 2021-07-07 by Tomasz Z

If you have a joystick you can skip this next command, otherwise we need to run the keyboard controller:

laptop $ dts duckiebot keyboard_control DUCKIEBOT_NAME
Controls Joystick Keyboard
Start Ind Navigation R1 a
Stop Ind Navigation L1 s

Start indefinite navigation by pressing the above controls. The Duckiebot should drive autonomously in the lane. Intersections and red lines are taken into consideration and the Duckiebot will stop at the red lines. You can regain control of the bot at any moment by stopping the indefinite navigation and using the (virtual) joystick. Resuming the demo is as easy as pressing the corresponding start button.

Et voilà! We are ready to drive around autonomously.


Modified 2020-09-11 by frank-qcd-qk

Here are some additional things you can try:

  • Get a remote stream of your Duckiebot.
  • You can visualize the detected line segments the same way as for the lane following demo
  • Try to change some of the ROS parameters to see how your Duckiebot’s behavior will change.

Troubleshooting the intersection handling

Modified 2020-09-11 by frank-qcd-qk

If your Duckiebot does not yield satisfactory results in intersection navigation, you might want to tune the related parameters. Basically the unicorn_intersection_node (long story for the name) is a mixture of open loop commands and a re-use of the lane filter. During the intersection, namely when the Duckiebot is in the FSM state INTERSECTION_CONTROL, the color perception of lines is changed. As a simple example if the goal is to go straight, the red lines will be perceived as white, so that it will be possible to follow the right white line. On top of this there are a few open loop commands that are used to help the Duckiebot face the correct direction. These parameters are stored in


You can change them online (while the demo is running) by using:

 duckiebot-container $ rosparam set your_parameter your value

You can see all the parameters by running:

duckiebot-container $ rosparam list

And check the value of a specific one using:

duckiebot-container $ rosparam get param name

The ones you might want to modify are the feed-forward parts, stored in ff_left, ff_right and ff_straight. These parameters modify the output \omega (angular velocity, positive in counterclockwise direction) for the time given in time_left_turn, time_straight_turn and time_right_turn, which you might want to change aswell.

Maintainer: Contact Gianmarco Bernasconi (ETHZ), Frank (Chude) Qian (UofT) via Slack for further assistance.