build details

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

## 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. 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 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.

### Extras

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

``````Software/catkin_ws/src/00-infrastructure/duckietown/config/baseline/unicorn_intersection/unicorn_intersection_node/default.yaml
``````

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 (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.