Donkey UI
Launch the Donkey graphical training interface by entering donkey ui
in the command line. This works on Linux, Mac, and Windows, although if you're on Windows it's recommended that you use WSL (Windows Subsystem for Linux) running Ubuntu 20 instead to get full functionality.
The Donkey UI currently contains four screens supporting the following workflows:
-
The tub manager - a replacement for the web-based application launched through
donkey tubclean
-
The trainer - a UI based alternative to train the pilot. Note, for longer trainings containing larger tubs or batches it is recommended to perform these in the shell using the
donkey train
command. The UI based training is geared towards an experimental and rapid analysis cycle consisting of:- data manipulation / selection
- training
- pilot benchmarking
-
The pilot arena - here you can test two pilots' performance against each other.
- The car connector - can pull tub data from the car and push back trained pilots or even start/stop the car. The screen does not work under windows.
Note: Under linux the app depends on xclip
, if this is not installed, then please run:
sudo apt-get install xclip
The tub manager
In the tub manager screen you have to select the car directory that contains the config file myconfig.py
first, using the Load car directory
button. Then select the tub you want to be working with using Load tub
, the tub needs to be inside the car directory. The application remembers the last loaded config and tub.
The drop-down menu Add/remove' in the data panel to the left of the image allows to select the record fields, like
user/angle,
user/throttle`, etc.
Note: if your tub contains more data than the standard user/angle
, user/throttle
and you want the progress bars to correctly show the values of these fields, you need to add an entry into the .donkeyrc
file in your home directory. This file is automatically created by the Donkey UI app. Here is an example:
field_mapping:
- centered: true
field: car/accel
max_value_id: IMU_ACCEL_NORM
This data entry into the field_mapping
list contains the name of the tub field, a switch, if the data is centered around 0 and the name of the maximum value of that data field which has to be provided in the myconfig.py
file. For example, the data above represents the IMU acceleration of the IMU6050 which ranges between +/- 2g, i.e. ~ +/-20 m/s2. With an IMU_ACCEL_NORM of 20 the progress bar can display these values. Therefore, the myconfig.py
should contain:
IMU_ACCEL_NORM = 20
Note: Vectors, i.e. list / arrays are being decomposed by the UI into their components automatically.
Here is an example of a tub that has car/accel
and car/gyro
arrays that hold IMU data, as well as car/distance
and car/m_in_lap
. The first two show a progress bar because there is a corresponding entry in the field_mapping
list as explained above.
The control panel allows moving forward and backward in single steps using <, > and scrolling continuously with <<, >>. These buttons are also linked to the keyboard keys < left >, < right >, < space >.
To delete unwanted records press Set left
/ Set right
buttons to determine the range and hit Delete
to remove such records from training. To see the impact on the current tub press Reload tub
. If you want to resurrect accidentally deleted records, just choose a left/right value outside the deleted range and press Restore
.
Note: The left/right values are invertible, i.e. left > right operates on all records outside [left, right).
In the filter section you can suppress records, say you want to restrict the next training on only right curves, then add user/angle > 0
to select those records.
Note: the filter on only for display in the tub manager. If you want to apply this in training you have to write the predicate as explained in utility
The lower panel contains a graph with the currently selected data from the data panel. If nothing is selected, all fields from the record are displayed. The display scales the data between the minimum and maximum value of each record field, hence there are no absolute measurements possible. For more advanced data graphing capabilities, press Browser Graph
which opens a plotly history graph in the web browser.
The trainer
The trainer screen allows to train a model to the tub data. In the Overwrite config
section you can set any config parameter by typing an updated value into the text field on the right and hitting return.
To train a pilot use the model type dropdown, enter a comment and hit Train
. After training, the pilot will appear in the pilot database which is shown underneath. You can also choose a transfer model if you don't want to train from scratch. Note, tensorflow saves the model with the optimiser state, so training will commence where it stopped in the saved state.
Pilots might be trained on multiple tubs, this is currently not supported in the trainer. However, if multiple tubs are passed in donkey train
then these will show in the database too. In order to not clutter up the view and group different tubs, you can use the Group multiple tubs
button to group all tub groups of two and more, and show a group alias instead. The group alias mapping is shown in the lower area of the window then.
The pilot arena
Here you can benchmark two pilots against each other. Use this panel to test if changes in the training through optimiser parameters or model types, or through deletion of certain records, or augmentations to images have made the pilot better or worse. The last selected pilots will be remembered in the app.
Choose a pilot by selecting the Model type
and loading the keras model using the file chooser by pressing Choose pilot
. The control panel is the same as in the tub manager. The lower right data panel shows the tub record's data. You can select the throttle field as some folks train on car speed instead of throttle values. In such case, the corresponding field name must be added into the .donkeyrc
file in the section, see an example here.
user_pilot_map:
car/speed: pilot/speed
user/angle: pilot/angle
user/throttle: pilot/throttle
The 'user/angle' and 'user/throttle' mappings are automatically loaded by the app. In order to show the variable car/speed
and compare it to the AI produced pilot/speed
the map has to contain the corresponding entry.
Under the two pilots there are sliders with pre-defined image augmentations, here Brightness
and Blur
. You can mix brightness and blur values into the images and compare how well the pilots are reacting to such a modification of the testing data. Press the buttons to activate the sliders for enabling this feature.
The application will remember the last two selected pilots.
The car connection
Note: This screen will only work on linux / OSX as it makes use of ssh
and rsync
in the background. SSH needs to be configured to allow login from the PC to the car without password. This can be done by running on the PC:
ssh-keygen
When being asked for a passphrase just hit <return>. This creates a public and private key in your ./ssh
directory. Then copy the key over to the car with the command below. Here we assume your car's hostname is donkeypi
- otherwise replace it with the corresponding hostname.
ssh-copy-id -i ~/.ssh/id_rsa.pub pi@donkeypi.local
Log into your car using:
ssh pi@donkeypi.local
If SSH asks you if that host should be added to the list of known hosts, hit <return> and you are done. From now on, you can ssh into the car without being prompted for the password again. The login-free setup is required for the screen to work.
- You also need to edit your myconfig.py and make sure the fields
PI_USERNAME
andPI_HOSTNAME
are set to your car user's username and the hostname of the car.
With the car connector you can transfer the tub data from the car to your PC and transfer the pilots back to the car.
-
Under the
Car directory
enter the car folder and hit return. This should populate theSelect tub
drop down. Most likely you want to select thedata/
directory but you might have tubs in subfolders. In that case use~/mycar/data
in theCar directory
, select the tub you want to pull and enableCreate new folder
on the button. This will copy a tub on the car like~/mycar/data/tub_21-04-09_11
into the same location on your PC. Without theCreate new folder
it would copy the content of the car's tub folder into~/mycar/data
of your PC, possibly overwriting other tub data that might be there. -
Press
Pull tub data/
to copy the tub from the car - Press
Send pilots
to sync your localmodels/
folder with themodels/
folder on the car. This command syncs all pilots that are locally stored. - In the
Drive car
section you can start the car and also select a model for autonomous driving. After starting you have to use the controller, either web or joystick as usual.
Future plans
- Moving the car connector screen to a web interface, supported on all OS.
- Handling of multiple tubs.
- The ability to also use the filter in training without the need to edit the
myconfig.py
file. - Migration of the
~/.donkeyrc
file to the kivy internal settings. - Support using only a single pilot (or more than two) in the pilot arena.
Video tutorial
You can find a video tutorial for the UI below