Preparing the software stack#

Flying the Duckiedrone requires up-to-date software on both the base station and the Duckiedrone, and a browser on the base station that can reach the Dashboard.

What you will need

  • A fully assembled Duckiedrone DD24-B with a configured Flight Controller

  • A base station on the same network as the Duckiedrone (see First connection)

  • The Duckietown Shell (dts) installed on the base station

  • Several minutes; the exact duration depends on the images to download and the network connection

What you will get

  • Updated Duckiedrone containers and base-station tools

  • A Duckiedrone ready to fly from the Dashboard

Note

On the ente distribution, the flight code runs inside Duckietown containers and is controlled from the Dashboard. There is no need to connect to the Duckiedrone through SSH to start scripts manually.

1. Update the base station#

Check that ente is the active Duckietown Shell profile:

Test

Run:

dts profile list

Expected Result

The ente row starts with >>, which marks the active profile.

Then update the Duckietown Shell, its commands, and the Duckietown desktop software, in this order:

pipx upgrade duckietown-shell
dts update
dts desktop update

2. Update the Duckiedrone#

Pull the latest containers onto the Duckiedrone, replacing ROBOT_NAME with the hostname set during the microSD card initialization:

dts duckiebot update ROBOT_NAME

The first update can take several minutes. Wait for the command to finish before continuing.

When the update finishes, the Duckiedrone containers start automatically. For example:

  • dashboard: the web UI used to fly the Duckiedrone.

  • ros2-mavros: passes commands such as arm and disarm to the flight controller, and its state back to ROS 2.

  • driver-tof-bottom and ros2-tof-bottom: the altitude sensor and its ROS 2 bridge.

  • driver-camera and ros2-camera: the onboard camera and its ROS 2 bridge.

See Duckiedrone Containers for the complete list.

Checkpoint ✅#

To verify that the update completed:

Test

On the base station, run:

dts fleet discover

Use Ctrl-C to stop the command.

Expected Result

The ROBOT_NAME row reads duckiedrone in the Type column and Ready in the Status column.

To verify that the containers are running:

Test

Open Portainer at http://ROBOT_NAME.local:9000, click the primary endpoint, then click Containers.

Expected Result

Each container listed above reads healthy in the State column. The list can span several pages.

3. Open the Dashboard#

On the base station, open a browser and go to:

http://ROBOT_NAME.local/

If ROBOT_NAME.local does not resolve, use the Duckiedrone IP address instead, shown in the Address column of dts fleet discover:

http://ROBOT_IP/

The first time the Dashboard is opened on a freshly flashed Duckiedrone, it shows a four-step setup wizard. Complete the steps until the Robot > Info page appears.

After the setup, the Dashboard opens directly on the Robot > Info page.

Dashboard Robot Info page showing the robot name, type, configuration, firmware, and temperature, disk, CPU, RAM, frequency, and battery gauges

Fig. 70 The Robot > Info page of the Dashboard.#

4. Check the connection#

Test

Click the Mission Control tab.

Expected Result

  • The top bar reads Bridge: Connected.

  • In Heartbeats Monitor, the JOYSTICK heart is green.

Together, these show that the Duckiedrone containers are running and the Dashboard is receiving ROS 2 data.

The software stack is ready. Next, explore the Dashboard in more detail in Dashboard overview, which explains each tab and every widget used to fly the Duckiedrone.

Troubleshooting#

Troubleshooting

SYMPTOM

dts profile list shows >> on a profile other than ente.

RESOLUTION

Switch to it with dts profile switch ente, then continue with step 1.

Troubleshooting

SYMPTOM

The Duckiedrone is missing from dts fleet discover, or its Status does not read Ready.

RESOLUTION

Status reads Booting while the Duckiedrone starts up. Wait for it to change to Ready. If the Duckiedrone does not appear at all, see First connection for network troubleshooting.

Troubleshooting

SYMPTOM

A container does not read healthy in Portainer.

RESOLUTION

Update the Duckiedrone again as described in step 2. If the problem persists, see Containers and Dashboard.

Troubleshooting

SYMPTOM

The top bar does not read Bridge: Connected.

RESOLUTION

The Dashboard receives ROS 2 data through the ros2-rosbridge-websocket container. Check in Portainer that it reads healthy, then see Containers and Dashboard.

Troubleshooting

SYMPTOM

The Dashboard does not load.

RESOLUTION

Check that the Duckiedrone is reachable with ping ROBOT_NAME.local or ping ROBOT_IP. See First connection for network troubleshooting.

Troubleshooting

SYMPTOM

The Dashboard opens through ROBOT_IP but the widgets show no data.

RESOLUTION

Older Dashboard images do not support access by IP address. Update the Duckiedrone as described in step 2.