Difference between revisions of "OHMC2020 Software instructions"

From Open Hardware Miniconf
Jump to: navigation, search
(Oh all the madness.)
 
m (Pulling out more of the 2019 stuff and updating to 2020)
(One intermediate revision by the same user not shown)
Line 19: Line 19:
 
* You'll end up with a new (swirly shaped) icon. Use this to run a bash window and get to a command prompt.
 
* You'll end up with a new (swirly shaped) icon. Use this to run a bash window and get to a command prompt.
  
'''Install Python'''
+
'''All: Install Python'''
  
 
We don't want Python 2, and people have reported problems with Python 3.7 or later. So we currently use Python 3.6.
 
We don't want Python 2, and people have reported problems with Python 3.7 or later. So we currently use Python 3.6.
Line 63: Line 63:
  
 
(This seems to be v2, but 2019 instructions use 1.8?)
 
(This seems to be v2, but 2019 instructions use 1.8?)
* conda install tensorflow-gpu # gpu? cpu? both?
+
* conda install tensorflow-cpu  
  
 
'''Install Dingocar'''
 
'''Install Dingocar'''
Line 69: Line 69:
 
* pip install -e ./dingocar
 
* pip install -e ./dingocar
  
----
+
'''Create an instance for your specific car'''
2019 instructions, under review
 
 
 
== Software installation: Laptop / Desktop ==
 
 
 
[http://docs.donkeycar.com/guide/install_software Extensive DonkeyCar documentation]
 
 
 
 
 
== Software installation: Raspberry Pi ==
 
 
 
'''Your DonkeyCar (Raspberry Pi) is already pre-installed.  This section is for reference only.
 
'''
 
 
 
[http://docs.donkeycar.com/guide/install_software/#get-the-raspberry-pi-working Extensive DonkeyCar documentation]
 
 
 
* sysctl -w net.ipv6.conf.all.disable_ipv6=1    # Reconnect via ssh afterwards
 
* sysctl -w net.ipv6.conf.default.disable_ipv6=1
 
 
 
* apt-get update
 
* apt-get upgrade
 
* apt-get install -y vim git mosquitto-clients
 
* apt-get install -y virtualenv build-essential python3-dev gfortran libhdf5-dev libatlas-base-dev libopenjp2-7-dev libtiff5
 
 
 
* apt-get install -y i2c-tools
 
* i2cdetect -y 1
 
        0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
 
    00:          -- -- -- -- -- -- -- -- -- -- -- -- --
 
    10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 
    20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 
    30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 
    40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 
    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 
    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 
    70: 70 -- -- -- -- -- -- --
 
 
 
* mv env env.donkeycar
 
* virtualenv env -p python3
 
* pip install tensorflow==1.8.0
 
* pip install adafruit-pca9685
 
* pip install picamera
 
  
== Finding your car on the network ==
+
* donkey createcar --path ~/mycar #give your car its own unique name here!
  
Your DonkeyCar (Raspberry Pi) has been pre-configured to connect to the LCA2020 network.  But, which IP address ?
+
== Find your car ==
  
 
Every car has a unique hostname, from ''ohmc_01'' to ''ohmc_32''.  The micro-SD card adapter is labeled with your car name.
 
Every car has a unique hostname, from ''ohmc_01'' to ''ohmc_32''.  The micro-SD card adapter is labeled with your car name.
  
However, that still isn't enough to find your car.
+
Your DingoCar has been pre-configured to connect to the LCA2020 network. But how do we find out its IP address?
 
+
There is a ''cron'' job that every minute sends an MQTT message to ''test.mosquitto.org'' with your car's name, IP address and a timestamp.
So, there is a ''cron'' job that every minute sends an MQTT message to ''test.mosquitto.org'' with your car's name, IP address and a timestamp.
 
  
 
Install an MQTT client, as follows ...
 
Install an MQTT client, as follows ...
Line 130: Line 90:
 
   ohmc/ohmc_01 10.193.2.69 Mon 11 Jun 07:08:01 UTC 2018
 
   ohmc/ohmc_01 10.193.2.69 Mon 11 Jun 07:08:01 UTC 2018
  
== Driving the car manually ==
+
The IP address returned will tell you how to connect to your car. Now you can:
  
'''Caution: Put your car "on blocks" (wheels off the ground) the first time you try driving it'''
+
``ssh pi@<IP_ADDRESS>`` with the default password '`raspberry'`.
 +
Change this once you log in, using ``passwd`` command.
  
[http://docs.donkeycar.com/guide/get_driving Extensive DonkeyCar documentation]
+
== Driving your car manually ==
  
IP_ADDRESS=xxx.xxx.xxx.xxx  # Found as above
+
'''Caution: Put your car "on blocks" (wheels off the ground) the first time you try driving it'''
  
* ssh pi@$IP_ADDRESS  # Note: Raspberry Pi default username: ''pi'' and password: ''raspberry''
+
* ssh pi@<IP_ADDRESS>  
* cd ohmc_car
+
* cd ~/mycar
 
* python manage.py drive
 
* python manage.py drive
  
Line 152: Line 113:
 
The mobile web browser, the user interface allows you to drive by tilting the phone left-right for steering and forwards-backwards for throttle.  For safety, you must press the [Start Vehicle] / [Stop Vehicle] toggle button to enable control.
 
The mobile web browser, the user interface allows you to drive by tilting the phone left-right for steering and forwards-backwards for throttle.  For safety, you must press the [Start Vehicle] / [Stop Vehicle] toggle button to enable control.
  
== rPi reboots and Auto-starting donkeycar without logging in ==
+
[http://docs.donkeycar.com/guide/get_driving Further DonkeyCar docs on driving]
  
If your rPi reboots when you're driving, check the following things:
+
== Training your car ==
# did you swap the servo wires between steering and power. Turn the ESC off, unplug one servo wire, turn the ESC back on (little toggle switch), and test steering. Make sure that steering does not activate the wheel motors. 
 
# is your battery low? are you accelerating too quickly? 
 
Because the battery has a high internal resistance, if you demand a lot of power too quickly, the voltage on the battery drops enough that the rPi gets below its critical voltage (when you add the voltage drop from the voltage converter), and the rPi reboots.
 
  
To restart donkey server automatically, do the following: 
+
Once you are driving your car confidently around a track, it is time to acquire training data for the Neural Network. DingoCar operates at 10 frames per second, capturing a 160x120 image, along with steering angle and throttle value. This is all stored in the ''$HOME/ohmc_car/tub/'' directory.
* Add this to /etc/rc.local: 
 
su - pi -c 'cd ~/ohmc_car; python manage.py drive &>/tmp/out'
 
* move 'source ~/env/bin/activate' from ~/.bashrc to ~/.profile
 
 
 
== Steering and throttle calibration ==
 
 
 
To save time at the workshop, you won't need to calibrate your car's steering and/or throttle.
 
  
However, you may get better results and can perform calibration when you have time ... [http://docs.donkeycar.com/guide/calibrate by following the DonkeyCar instructions]
+
Before training, clean out previous data. Don't remove all the files in the ''tub/'' directory: the ''tub/meta.json'' file is important.
  
== Data acquisition for the Neural Network ==
+
Perform the same commands as for manual driving:
 
 
Once you are driving your car confidently around a track ... it is time to acquire training data for the Neural Network.  DonkeyCar operates at 10 frames per second, capturing a 160x120 image, along with steering angle and throttle value.  This is all stored in the ''$HOME/ohmc_car/tub/'' directory.
 
 
 
Before training, it is a good idea to clean out previous data.  Don't just remove all the files in the ''tub/'' directory !  The ''tub/meta.json'' file is important.
 
 
 
[http://docs.donkeycar.com/guide/train_autopilot Extensive DonkeyCar documentation]
 
 
 
Perform the same commands as for manual driving ...
 
  
 
* ssh pi@$IP_ADDRESS
 
* ssh pi@$IP_ADDRESS
Line 184: Line 127:
 
* python manage.py drive
 
* python manage.py drive
  
Then via the web browser press the [Start Recording] button ... drive the car around a track ... then press the [Stop Recording] button.
+
Then via the web browser press the [Start Recording] button, drive the car around a track, then press the [Stop Recording] button.
  
 
It is recommended that you collect between 5K and 20K frames.  At 10 frames per second, that is between 500 and 2,000 seconds of driving.  Make sure that you drive clockwise and anti-clockwise.
 
It is recommended that you collect between 5K and 20K frames.  At 10 frames per second, that is between 500 and 2,000 seconds of driving.  Make sure that you drive clockwise and anti-clockwise.
  
You will need to type this command just once on your DonkeyCar (Raspberry Pi)to provide a directory on your laptop for your training data ...
+
You will need to type this command just once on your DingoCar to provide a directory on your laptop for your training data ...
  
 
* rsync -av pi@<car_ip>:ohmc_car .
 
* rsync -av pi@<car_ip>:ohmc_car .
  
When finished acquisition, then transfer the data from the DonkeyCar (Raspberry Pi) to your laptop / desktop for training the Neural Network.
+
When finished acquisition, then transfer the data from the DingoCar to your laptop / desktop for training the Neural Network.
  
 
* rsync -av pi@<car_ip>:ohmc_car/tub ohmc_car/tub_$DATE
 
* rsync -av pi@<car_ip>:ohmc_car/tub ohmc_car/tub_$DATE
 
== Training the Neural Network ==
 
  
 
Once training data has been copied to your laptop / desktop, you can begin training the Neural Network.
 
Once training data has been copied to your laptop / desktop, you can begin training the Neural Network.
Line 222: Line 163:
 
On a modern laptop, each epoch will take around 30 seconds to complete.  For up-to 100 epochs.  Typically, you can expect around 20 to 40 epochs before the Neural Network stop learning.  That is around 10 to 20 minutes of training time.
 
On a modern laptop, each epoch will take around 30 seconds to complete.  For up-to 100 epochs.  Typically, you can expect around 20 to 40 epochs before the Neural Network stop learning.  That is around 10 to 20 minutes of training time.
  
The training command creates the Neural Network weights that represent what your DonkeyCar has "learned".
+
The training command creates the Neural Network weights that represent what your DingoCar has "learned".
  
When training has completed, copy the trained model back to your DonkeyCar (Raspberry Pi)
+
Once it's done, copy the trained model back to your DingoCar (Raspberry Pi).
  
 
* scp $USERNAME@$HOSTNAME:ohmc_car/models/model_$DATE.hdf5 models
 
* scp $USERNAME@$HOSTNAME:ohmc_car/models/model_$DATE.hdf5 models
  
== Self-driving ... the ultimate goal ==
+
[http://docs.donkeycar.com/guide/train_autopilot Further DonkeyCar info on training]
  
Once your trained model has been copied back onto the DonkeyCar (Raspberry Pi), your car can be self-driven as follow ...
+
== Letting your car drive itself! ==
 +
 
 +
Once your trained model has been copied back onto the DingoCar, your car can be self-driven as follows:
  
 
* python manage.py drive --model ~/ohmc_car/models/models/model_$DATE.hdf5
 
* python manage.py drive --model ~/ohmc_car/models/models/model_$DATE.hdf5
  
This works similar to the manual driving mode with the addition of a trained model that can either ...
+
This works similar to the manual driving mode with the addition of a trained model that can either:
  
 
1) User: Manual control of both steering and throttle
 
1) User: Manual control of both steering and throttle
 +
2) Local Angle: Automatically control the steering angle
 +
3) Local Pilot: Automatically control both the steering angle and throttle amount
 +
 +
The web browser provides a drop-down menu to select between these options.
 +
 +
It is recommended to just start with "Local Angle" and control the throttle manually with the "i" key (faster) and "k" key (slower).
 +
 +
== More information, for later ==
  
2) Local Angle: Automatically control the steering angle
+
There's [http://docs.donkeycar.com/guide/install_software extensive DonkeyCar documentation] if you're looking for more detailed installation or configuration instructions.
 +
 
 +
----
 +
= Background information =
 +
 
 +
== Software installation: Raspberry Pi ==
 +
 
 +
'''Your DonkeyCar (Raspberry Pi) is already pre-installed.  This section is for reference only.
 +
'''
 +
 
 +
[http://docs.donkeycar.com/guide/install_software/#get-the-raspberry-pi-working Extensive DonkeyCar documentation]
 +
 
 +
* sysctl -w net.ipv6.conf.all.disable_ipv6=1    # Reconnect via ssh afterwards
 +
* sysctl -w net.ipv6.conf.default.disable_ipv6=1
  
3) Local pilot: Automatically control both the steering angle and throttle amount
+
* apt-get update
 +
* apt-get upgrade
 +
* apt-get install -y vim git mosquitto-clients
 +
* apt-get install -y virtualenv build-essential python3-dev gfortran libhdf5-dev libatlas-base-dev libopenjp2-7-dev libtiff5
  
The web browser provides a drop-down menu to select between these options.
+
* apt-get install -y i2c-tools
 +
* i2cdetect -y 1
 +
        0  1  2  3  4  5  6  7  8  9  a b  c  d  e  f
 +
    00:          -- -- -- -- -- -- -- -- -- -- -- -- --
 +
    10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 +
    20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 +
    30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 +
    40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 +
    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 +
    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 +
    70: 70 -- -- -- -- -- -- --
  
It is recommended to just start with Local Angle ... and control the throttle manually with the "i" key (faster) and "k" key (slower).
+
* mv env env.donkeycar
 +
* virtualenv env -p python3
 +
* pip install tensorflow==1.8.0
 +
* pip install adafruit-pca9685
 +
* pip install picamera
  
 +
== rPi reboots and Auto-starting donkeycar without logging in ==
  
== Neopixels ==
+
If your rPi reboots when you're driving, check the following things:
 +
# did you swap the servo wires between steering and power. Turn the ESC off, unplug one servo wire, turn the ESC back on (little toggle switch), and test steering. Make sure that steering does not activate the wheel motors. 
 +
# is your battery low? are you accelerating too quickly? 
 +
Because the battery has a high internal resistance, if you demand a lot of power too quickly, the voltage on the battery drops enough that the rPi gets below its critical voltage (when you add the voltage drop from the voltage converter), and the rPi reboots.
  
On the car, do this: pip install rpi_ws281x adafruit-circuitpython-neopixel  --trusted-host pypi.org --trusted-host files.pythonhosted.org --trusted-host www.piwheels.org
+
To restart donkey server automatically, do the following on your car
 +
* Add this to /etc/rc.local:  
 +
su - pi -c 'cd ~/ohmc_car; python manage.py drive &>/tmp/out' & 
 +
* move 'source ~/env/bin/activate' from ~/.bashrc to ~/.profile
  
The details come from here: https://learn.adafruit.com/neopixels-on-raspberry-pi/overview
+
== Steering and throttle calibration ==
  
<pre>
+
To save time at the workshop, you won't need to calibrate your car's steering and/or throttle. However, you may get better results and can perform calibration when you have time.
(env) pi@ohmc_24:~/ohmc_car$ diff -u manage.py.orig manage.py
 
--- manage.py.orig 2018-06-11 08:14:34.079999106 +0000
 
+++ manage.py 2018-06-11 08:37:05.959999560 +0000
 
@@ -122,6 +122,9 @@
 
    tub = TubWriter(path=cfg.TUB_PATH, inputs=inputs, types=types)
 
    V.add(tub, inputs=inputs, run_condition='recording')
 
 
+    pixels[0] = (32, 64, 128)
 
+    pixels[1] = (0, 255, 0)
 
+
 
    # run the vehicle
 
    V.start(rate_hz=cfg.DRIVE_LOOP_HZ,
 
            max_loop_count=cfg.MAX_LOOPS)
 
@@ -169,6 +172,13 @@
 
    cfg = dk.load_config()
 
 
    if args['drive']:
 
+        # Neopixels
 
+        # https://learn.adafruit.com/neopixels-on-raspberry-pi/python-usage
 
+        import board
 
+        import neopixel
 
+        pixels = neopixel.NeoPixel(board.D18, 2)
 
+        pixels[0] = (0, 0, 0)
 
+        pixels[1] = (0, 64, 0)
 
        drive(cfg, model_path=args['--model'], use_chaos=args['--chaos'])
 
</pre>
 
  
Then, you need to run as root for neopixels to work:
+
[http://docs.donkeycar.com/guide/calibrate DonkeyCar instructions on calibration]
<pre>
 
sudo /home/pi/env/bin/python manage.py drive
 
--model=/home/pi/ohmc_car/models/large_track.hdf5
 
</pre>
 
  
== Neopixels v2 ==
+
== OLED digital display ==
  
* Get https://gist.github.com/marcmerlin/a3bba2231a3371266e595aa0e6028b77
+
Something here about image/text display for the car info.
* Save under /home/pi/ and /etc/rc.local
 
* Apply manage.py.diff to /home/pi/ohmc_car/manage.py
 
* Reboot and both the led server and the car software should start
 
* You can force an led pattern or color like so
 
<pre>
 
(env) pi@ohmc_24:~/ohmc_car$ echo -n rainbow > /tmp/leds
 
(env) pi@ohmc_24:~/ohmc_car$ echo -n b > /tmp/leds
 
(env) pi@ohmc_24:~/ohmc_car$ echo -n cylon > /tmp/leds
 
</pre>
 
* Reboot and both the led server
 

Revision as of 10:41, 1 December 2019

Overview

You will need to bring your own laptop to the assembly session.

To make the most of your time in the assembly workshop, it's best to install some tooling so you can maximise your time spent building and playing, rather than installing and configuring.

Why do we need a laptop?

From a software perspective, the DingoCar (Raspberry Pi) is self-contained ... driving, data acquisition (for training) and ultimately self-driving are all performed with on-board software. The provided micro-SD card already has all the required software pre-installed, as well as two pre-training A.I / Machine Learning models. The DingoCar software includes a web-server that provides a web interface that works on both desktop and mobile web browsers (which great for driving).

But you need a laptop to train the Neural Network ... using the data acquired on the DingoCar. To do this, you need Python and TensorFlow (a Machine Learning framework) on your laptop.

Software environment: Laptop / Desktop

Windows only: Install WSL

  • You'll want to install WSL (Windows Subsystem for Linux) so you have a Linux environment (it's Debian under the covers) to work in.
  • Follow these instructions.
  • You'll end up with a new (swirly shaped) icon. Use this to run a bash window and get to a command prompt.

All: Install Python

We don't want Python 2, and people have reported problems with Python 3.7 or later. So we currently use Python 3.6.

Miniconda instructions:

  • Go to the Miniconda archive
  • Download Miniconda3-4.5.4 in the right system for you. (WSL Debian users want Linux_x86_64.sh)
  • In your bash prompt, go to the directory holding the file (WSL Debian: cd /mnt/c/Users/<username>/Downloads/)
  • Run the script: ./Miniconda3-4.5.4-Linux-x86_64.sh

This will by default add the Miniconda directory to your path. Now you can check you have Python 3.6 installed and available:

  • python3 -i
  • This should show you Python 3.6.5 | Anaconda Inc.
  • Use quit() to get out of the python shell

Compile from source (but no virtual environments):

  • yum install python36
  • python3.6 -m venv ~/virtualenvs/donkeycar
  • source ~/virtualenvs/donkeycar/bin/activate

Get Dingocar

Go to which directory you like to keep your coding projects in.

Install Tensorflow for machine learning

  • Ubuntu
    • apt-get install -y virtualenv # Note: You may be using a different software installer
    • mkvirtualenv donkeycar -p python3
    • pip install tensorflow==1.8.0 # Note: Probably requires Python 3.5 or 3.6. People are having problems with Python 3.7

(if you get errors, you can try (re-) installing pip: python -m pip install --upgrade pip )

  • Debian, if virtualenv isn't there, try this instead
    • virtualenv donkeycar -p python3
    • cd donkeycar
    • export PATH=`pwd`/bin:$PATH
    • pip install tensorflow==1.8.0

(This seems to be v2, but 2019 instructions use 1.8?)

  • conda install tensorflow-cpu

Install Dingocar

  • pip install -e ./dingocar

Create an instance for your specific car

  • donkey createcar --path ~/mycar #give your car its own unique name here!

Find your car

Every car has a unique hostname, from ohmc_01 to ohmc_32. The micro-SD card adapter is labeled with your car name.

Your DingoCar has been pre-configured to connect to the LCA2020 network. But how do we find out its IP address? There is a cron job that every minute sends an MQTT message to test.mosquitto.org with your car's name, IP address and a timestamp.

Install an MQTT client, as follows ...

  • apt-get install mosquitto-clients

Use the following command to read the MQTT messages ...

  • mosquitto_sub -h test.mosquitto.org -t 'ohmc/#' -v
 ohmc/ohmc_01 10.193.2.69 Mon 11 Jun 07:08:01 UTC 2018

The IP address returned will tell you how to connect to your car. Now you can:

``ssh pi@<IP_ADDRESS>`` with the default password '`raspberry'`. Change this once you log in, using ``passwd`` command.

Driving your car manually

Caution: Put your car "on blocks" (wheels off the ground) the first time you try driving it

  • ssh pi@<IP_ADDRESS>
  • cd ~/mycar
  • python manage.py drive
 loading config file: /home/pi/play/roba_car/config.py
 config loaded
 PiCamera loaded.. .warming camera
 Starting Donkey Server...
 You can now go to http://xxx.xxx.xxx.xxx:8887 to drive your car.

With a desktop web browser, the user interface provides a virtual joystick (right-hand frame) that you can use to drive the car ... altering the steering and throttle values.

The mobile web browser, the user interface allows you to drive by tilting the phone left-right for steering and forwards-backwards for throttle. For safety, you must press the [Start Vehicle] / [Stop Vehicle] toggle button to enable control.

Further DonkeyCar docs on driving

Training your car

Once you are driving your car confidently around a track, it is time to acquire training data for the Neural Network. DingoCar operates at 10 frames per second, capturing a 160x120 image, along with steering angle and throttle value. This is all stored in the $HOME/ohmc_car/tub/ directory.

Before training, clean out previous data. Don't remove all the files in the tub/ directory: the tub/meta.json file is important.

Perform the same commands as for manual driving:

  • ssh pi@$IP_ADDRESS
  • cd ohmc_car
  • python manage.py drive

Then via the web browser press the [Start Recording] button, drive the car around a track, then press the [Stop Recording] button.

It is recommended that you collect between 5K and 20K frames. At 10 frames per second, that is between 500 and 2,000 seconds of driving. Make sure that you drive clockwise and anti-clockwise.

You will need to type this command just once on your DingoCar to provide a directory on your laptop for your training data ...

  • rsync -av pi@<car_ip>:ohmc_car .

When finished acquisition, then transfer the data from the DingoCar to your laptop / desktop for training the Neural Network.

  • rsync -av pi@<car_ip>:ohmc_car/tub ohmc_car/tub_$DATE

Once training data has been copied to your laptop / desktop, you can begin training the Neural Network.

Extensive DonkeyCar documentation

Run these commands on your laptop / desktop to train the Neural Network ...

  • workon donkeycar # For those who have set-up a virtualenv
  • cd ohmc_car
  • python manage.py train --tub $HOME/ohmc_car/tub_$DATE --model ./models/model_$DATE.hdf5
 using donkey version: 2.5.7 ...
 loading config file: /Users/andyg/play/ai/roba_car/config.py
 config loaded
 tub_names ./tub_2019-01-15c
 train: 5740, validation: 1436
 steps_per_epoch 44
 Epoch 1/100
 2019-01-21 13:08:49.507048: I tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
 43/44 [============================>.] - ETA: 0s - loss: 58.5130 - angle_out_loss: 30.3421 - throttle_out_loss: 86.6839      
 Epoch 00001: val_loss improved from inf to 0.19699, saving model to ./models/roba0_2019-01-16c.hdf5
 44/44 [==============================] - 38s 874ms/step - loss: 57.1887 - angle_out_loss: 29.6601 - throttle_out_loss: 84.7172 - val_loss: 0.1970 - val_angle_out_loss: 0.3230 - val_throttle_out_loss: 0.0710

On a modern laptop, each epoch will take around 30 seconds to complete. For up-to 100 epochs. Typically, you can expect around 20 to 40 epochs before the Neural Network stop learning. That is around 10 to 20 minutes of training time.

The training command creates the Neural Network weights that represent what your DingoCar has "learned".

Once it's done, copy the trained model back to your DingoCar (Raspberry Pi).

  • scp $USERNAME@$HOSTNAME:ohmc_car/models/model_$DATE.hdf5 models

Further DonkeyCar info on training

Letting your car drive itself!

Once your trained model has been copied back onto the DingoCar, your car can be self-driven as follows:

  • python manage.py drive --model ~/ohmc_car/models/models/model_$DATE.hdf5

This works similar to the manual driving mode with the addition of a trained model that can either:

1) User: Manual control of both steering and throttle 2) Local Angle: Automatically control the steering angle 3) Local Pilot: Automatically control both the steering angle and throttle amount

The web browser provides a drop-down menu to select between these options.

It is recommended to just start with "Local Angle" and control the throttle manually with the "i" key (faster) and "k" key (slower).

More information, for later

There's extensive DonkeyCar documentation if you're looking for more detailed installation or configuration instructions.


Background information

Software installation: Raspberry Pi

Your DonkeyCar (Raspberry Pi) is already pre-installed. This section is for reference only.

Extensive DonkeyCar documentation

  • sysctl -w net.ipv6.conf.all.disable_ipv6=1 # Reconnect via ssh afterwards
  • sysctl -w net.ipv6.conf.default.disable_ipv6=1
  • apt-get update
  • apt-get upgrade
  • apt-get install -y vim git mosquitto-clients
  • apt-get install -y virtualenv build-essential python3-dev gfortran libhdf5-dev libatlas-base-dev libopenjp2-7-dev libtiff5
  • apt-get install -y i2c-tools
  • i2cdetect -y 1
        0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
   00:          -- -- -- -- -- -- -- -- -- -- -- -- --
   10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
   20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
   30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
   40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
   50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
   60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
   70: 70 -- -- -- -- -- -- --
  • mv env env.donkeycar
  • virtualenv env -p python3
  • pip install tensorflow==1.8.0
  • pip install adafruit-pca9685
  • pip install picamera

rPi reboots and Auto-starting donkeycar without logging in

If your rPi reboots when you're driving, check the following things:

  1. did you swap the servo wires between steering and power. Turn the ESC off, unplug one servo wire, turn the ESC back on (little toggle switch), and test steering. Make sure that steering does not activate the wheel motors.
  2. is your battery low? are you accelerating too quickly?

Because the battery has a high internal resistance, if you demand a lot of power too quickly, the voltage on the battery drops enough that the rPi gets below its critical voltage (when you add the voltage drop from the voltage converter), and the rPi reboots.

To restart donkey server automatically, do the following on your car:

  • Add this to /etc/rc.local:

su - pi -c 'cd ~/ohmc_car; python manage.py drive &>/tmp/out' &

  • move 'source ~/env/bin/activate' from ~/.bashrc to ~/.profile

Steering and throttle calibration

To save time at the workshop, you won't need to calibrate your car's steering and/or throttle. However, you may get better results and can perform calibration when you have time.

DonkeyCar instructions on calibration

OLED digital display

Something here about image/text display for the car info.