/self-driving-car-1

Self Driving Car development tools and technologies from GTA Robotics Community members

Primary LanguageJupyter NotebookMIT LicenseMIT

Instructions on how to get your development environment ready for Udacity Self Driving Car (SDC) Challenges

The challenges are available here: An Open Source Self-Driving Car

Follow us on Twitter at @gtarobotics

Install docker and nvidia_docker and CUDA

The recommended platform is Ubuntu 16.04 host and Docker for Linux.

If you have an NVidia GPU with CUDA compute level >= 3, make sure you install nvidia_docker also.

On Mac install Docker for Mac on Windows Docker for Windows

The instructions bellow should work on Mac also (at least the CPU mode, see specific script to start the docker image bellow). For Mac see also Docker for Mac and GUI applications.

For Amazon AWS EC2 see Amazon AWS EC2 AMI with gtarobotics/udacity-sdc image

Get the SDC host development environment ready

Execute these commands in the host OS (Ubuntu and OSX):

mkdir ~/sharefolder
cd ~/sharefolder/
git clone https://github.com/gtarobotics/self-driving-car
cd self-driving-car
chmod 755 *.sh

Run SDC Docker image

Here you can see more details about this docker image: Docker instance with Tensorflow GPU, Keras, Caffe, Torch, Jupyter Notebook, ROS Indigo and Autoware and more

In GPU mode: ./run_nvidia_docker-sdc-ros-gpu.sh

or CPU mode: ./run_nvidia_docker-sdc-ros-cpu.sh

On Mac OSX run this script instead (provided by ND013@tantony):

./run_docker_sdc_ros_cpu-on-OSX.sh (change en1 with en0 if it doesn't work, also check the ND013 #environment channel for other solutions for multimonitor setups)

Once in the container

First update the scripts to latest version from GitHub

./update_scripts.sh
nvcc -V #to check the CUDA version

CUDA version can be switched with:

switch_to_CUDA-7.5.sh
switch_to_CUDA-8.0.sh

Then run a performance test, this will also confirm that env (CPU/GPU) is working

./run_quick_benchmark.sh

Please post the results like this on ND013 Slack Team in #benchmarks channel.

See some results from contributors local machines and AWS here benchmarks_results

To test OpenCV do this:

cd /sharefolder/
curl https://archive.org/download/NASA_Launchpad_MSL_HD/NASA_Launchpad_MSL_HD.mp4 -o NASA_Launchpad_MSL_HD.mp4 -L
python3 ~/test_opencv.py -v NASA_Launchpad_MSL_HD.mp4

It should play (fast) the video in grayscale, resized to width 640.

View datasets, works for now only on local computer, I'll add instructions on how to do it on AWS later

open 2 new terminals in host OS

check docker container_id in the first new terminal

sudo docker ps | grep "gtarobotics/udacity-sdc"

go to terminal 2 and attach to the container and start roscore

attach-docker-container.sh container_id
source /opt/ros/indigo/setup.bash
roscore 

go to terminal 3

attach-docker-container.sh container_id

change dir to where the Udacity SDC challenges rosbag sets are, make sure they are under /sharefolder/sdc-data in the container

The current datasets can be downloaded from here Udacity SDC GitHub project udacity/self-driving-car cd /sharefolder/sdc-data/600GB-dataset/2016-10-10

and play all 3 cameras rosbag starting with second 120 (you can change this starting point and it should load pretty fast)

rosbag play -s 120 udacity-dataset_sensor_camera_left_2016-10-11-13-23-02_0.bag udacity-dataset_sensor_camera_center_2016-10-11-13-23-02_0.bag udacity-dataset_sensor_camera_right_2016-10-11-13-23-02_0.bag

or just: rosbag play *.bag

go back to first terminal and run the viewer

cd /sharefolder/self-driving-car
python2 sdc_rosbag_viewer.py

You should see the 3 cameras in the view like in the screenshot: sdc_rosbag_viewer-in-action.png

Amazon AWS EC2 AMI with gtarobotics/udacity-sdc image installed

The images are available only in US West (Oregon) region, their ids are (search for "gta robotics" in community AMIs):

GTA Robotics - Udacity Open Source Self Driving Car Challanges - Docker GPU/CPU image - ami-0267c362 (older docker imgage version, I'll remove this in the future)
GTA Robotics - Udacity Open Source Self Driving Car Challenges - Docker GPU/CPU Cuda 7.5/8.0 image - ami-7d28e8f1d (latest docker image, also Tensorflow can be uesd in VM directoy)

Always check the list above for updated AMIs, when new AMIs are added the old ones will be removed! The best way to find them on AWS is to search for "gta robotics" in the community AMIs in us-west-2 zone.

Launch at least a p2.xlarge CUDA compute instance (one K80 GPU)

Once in the EC2 instance shell you can run the quick benchmark like this:

./run_gtarobotics_udacity_sdc_docker_image.sh ./run_quick_benchmark.sh

Or to start a Docker container shell use this just this:

./run_gtarobotics_udacity_sdc_docker_image.sh

Quick benchmark results

I ran the benchmark on a Spot instance (p2.xlarge) with one Nvidia K80, up to $0.90 per hour and I got this performance:

Step 1000 (epoch 1.16), 12.3 ms

On my Nvidia 980TI based desktop I get:

Step 1000 (epoch 1.16), 5.2 ms 

Long benchmark results

The Nvidia Autopilot test was a bit faster on p2.xlarge vs a 980TI based desktop, both running the same docker (gtarobotics/udacity-sdc) instance:

gtarobotics/udacity-sdc docker instance on AWS EC2 p2.xlarge VM (Ubuntu 14.04 as host):

	root@f62afc086a85:~/sharefolder/Nvidia-Autopilot-TensorFlow# time python3 train.py

	Model saved in file: ./save/model.ckpt
	step 13610, val loss 0.0172059
	step 13620, val loss 0.00907515

	real	87m15.149s
	user	80m31.441s
	sys		4m4.473s

gtarobotics/udacity-sdc docker instance on Nvidia 980TI (Ubuntu 16.04 as host):

	root@48ae719d1e3b:~/sharefolder/Nvidia-Autopilot-TensorFlow# time python3 train.py
	
	Model saved in file: ./save/model.ckpt
	step 13610, val loss 0.0117589
	step 13620, val loss 0.0108083
	real    95m36.718s
	user    53m38.324s
	sys     3m10.360s