Difference between revisions of "Self Driving RC Car/2020"

From BITPlan Wiki
Jump to navigation Jump to search
 
(28 intermediate revisions by 2 users not shown)
Line 2: Line 2:
 
<youtube>OL0vg1WmI6I</youtube>
 
<youtube>OL0vg1WmI6I</youtube>
 
<youtube>YeUMtQyvZKM</youtube>
 
<youtube>YeUMtQyvZKM</youtube>
 +
 
= Presentation =
 
= Presentation =
 
<pdf>https://www.doag.org/formes/pubfiles/11143501/2019-NN-Tim_van_Eijndhoven-Building_a_Self-driving_RC_Car-Praesentation.pdf</pdf>
 
<pdf>https://www.doag.org/formes/pubfiles/11143501/2019-NN-Tim_van_Eijndhoven-Building_a_Self-driving_RC_Car-Praesentation.pdf</pdf>
Line 72: Line 73:
 
== DCC-DCC converter ==
 
== DCC-DCC converter ==
 
To run the Raspberry PI from the 7.4 Volt Battery of the car the DC-DC converter has to be soldered
 
To run the Raspberry PI from the 7.4 Volt Battery of the car the DC-DC converter has to be soldered
into the voltage supply chain.
+
into the voltage supply chain. You might want to select a converter with enough power for your usecase
 +
=== 15 Watt 3 A ===
 +
This configuration works if you only want to run a Raspberry PI and directly control the motor and steering servos of the RC car.
 
<gallery>
 
<gallery>
 
File:RC_IMG_3116.JPG
 
File:RC_IMG_3116.JPG
Line 79: Line 82:
 
File:RC_IMG_3122.JPG
 
File:RC_IMG_3122.JPG
 
</gallery>
 
</gallery>
 +
=== 25 Watt 5 A ===
 +
This configuration is currently tried for running the servos over an Adafruit 16 channel servo controller and using extra servos.
 +
[[File:DSC00011-parts.JPG|800px]]
 +
[[File:DSC00016-connected.JPG|800px]]
 +
 
== Camera mount ==
 
== Camera mount ==
 
<gallery>
 
<gallery>
Line 95: Line 103:
 
[[File:RaspberryWithCaseIMG_0025.JPG|800px]]
 
[[File:RaspberryWithCaseIMG_0025.JPG|800px]]
  
= Installation =
+
= PI Installation =
 +
see {{Link|target=Raspberry PI}}
  
== Raspbian ==
 
Raspbian Stretch with desktop and recommended software
 
# Download Zip File from https://www.raspberrypi.org/downloads/raspbian/
 
# Create SD Card as described in https://www.raspberrypi.org/documentation/installation/installing-images/
 
# Insert SD Card into Raspberry PI
 
# Connect Keyboard, Mouse, HDMI-Monitor and 5 Volt Mini USB (2.5 Amps recommended)
 
# Setup Country, pi user password etc. and connect to your WIFI network - after the setup you'll be asked to restart your pi
 
  
 
== WebCam Interface ==
 
== WebCam Interface ==
Line 144: Line 146:
 
sudo apt-get install screen
 
sudo apt-get install screen
 
</source>
 
</source>
 +
= Server Installation =
 +
Tested on
 +
# Mac OS 10.13.6 High Sierra with macports 2.5.4
 +
# Ubuntu 18.04.2 LTS
 +
== OpenCV ==
 +
see also {{Link|target=OpenCV}}
 +
=== MacOS ===
 +
If you'd like to generally use OpenCV you can get it e.g. from the macports project:
 +
==== MacPorts ====
 +
<source lang='bash'>
 +
sudo port install opencv +java
 +
ls /opt/local/share/OpenCV/java
 +
libopencv_java343.dylib opencv-343.jar
 +
</source>
 +
For your convenience you'll find these two files in the lib directory.
 +
==== From Source ====
 +
# install5 in opencvubuntu has the commands for MacOS - but does not work even if you install dpkg with
 +
<source lang='bash'>
 +
sudo port install dpkg
 +
</source>
 +
 +
=== Ubuntu 18 ===
 +
You might want to use scripts/opencvubuntu to download the 75 MByte libopencv_java343.so and install the backports libjasper libraries that are not published with Ubuntu 18 by default. You'll find
 +
some other links in the script that might also give you hints on how to proceed if you have another environment or different needs. You might want to create an Issue if you run into trouble.
 +
=== Windows ===
 +
Help Wanted -please file an issue if you want to try to get things running on Windows.
 +
 
= Deployment =
 
= Deployment =
 +
 
Deploying to your Raspberry is done by compiling e.g. on a laptop and then transferring
 
Deploying to your Raspberry is done by compiling e.g. on a laptop and then transferring
 
the results to your PI.
 
the results to your PI.
  
You need to configure your targetHost and targetUser in a file ~/dukes/dukes.ini
+
== Compile ==
 +
<source lang='bash'>
 +
scripts/install.sh
 +
</source>
 +
There is a usage for this script if you call it with <nowiki>scripts/install.sh -h</nowiki>.
 +
Essentially this is doing a <nowiki>mvn clean install</nowiki>. The clean part is important to get the platform specific native openCV Library integrated into the server code.
 +
 
 
== Example Configuration ==
 
== Example Configuration ==
 +
 +
You need to configure your PI's host address and user in a file ~/dukes/dukes.ini in the remotecar section.
 +
Also you need to check your GPIO pins and the servo settings for your car for LED,Engine and Wheels. You might want to try these things out before using the software the first time.
 +
 +
The original wiring is:
 +
 +
*    MOTOR: GPIO-17 - Servoblaster ID 1
 +
*    WHEEL: GPIO-18 - Servoblaster ID 2
 +
*    LED: GPIO-24 - Servolbaster ID 6
 +
The software uses the standard Servoblaster ID's above which are hard-coded at this time. The GPIO configuration will only work with other devices which we intend to support in the future.
 
<source lang='bash'>
 
<source lang='bash'>
 
#
 
#
# rc-dukes configuration file
+
# WF 2019-06-21
# see https://github.com/rc-dukes/dukes
 
 
#
 
#
targetHost=10.9.8.7
+
# rc-duke configuration file
targetUser=pi
+
# remote car raspberry PI configuration
 +
remotecar.host=picaro
 +
remotecar.user=wf
 +
# camera url format
 +
camera.url=http://picaro/html/cam_pic_new.php
 +
# webserver configuration
 +
webcontrol.port=8080
 +
imageview.port=8081
 +
# watchdog
 +
# how often to send a heart beat in milliseconds
 +
watchdog.heartbeat.interval.ms=150
 +
# how many beats may be missed before remote car is forced to stop
 +
watchdog.max.missed.beats=6
 +
# use servoblaster as servo control
 +
servo.command=servoblaster
 +
# be careful with your GPIO configuration
 +
# you might damage your PI with a misconfiguration!
 +
# led configuration
 +
led.gpio=24
 +
led.on=250
 +
led.off=0
 +
# wheel configuration
 +
wheel.gpio=18
 +
# positive - higher values mean go right
 +
wheel.orientation=+
 +
wheel.center=144
 +
wheel.stepsize=1
 +
wheel.max.left=115
 +
wheel.max.left.angle=-18.0
 +
wheel.max.right=158
 +
wheel.max.right.angle=14
 +
# engine configuration
 +
engine.gpio=17
 +
# positive - higher values means going quicker
 +
engine.orientation=+
 +
engine.speed.zero=130
 +
engine.stepsize=1
 +
engine.min.speed.reverse=127
 +
engine.max.speed.reverse=122
 +
engine.min.speed.forward=133
 +
engine.max.speed.forward=138
 +
engine.max.velocity.reverse=-1.0
 +
engine.min.velocity.reverse=-0.5
 +
engine.min.velocity.forward=0.23
 +
engine.max.velocity.forward=1.0
 
</source>
 
</source>
 
The deploy script as a help option that shows how it can be used:
 
The deploy script as a help option that shows how it can be used:
 
<source lang='bash'>
 
<source lang='bash'>
./deploy.sh -h
+
deploy.sh [-a|-d|-h|-m|-s]
deploy.sh [-d|-h|-m|-s]
 
  
 +
  -a |--autostart        : configure the remotecar app to autostart on reboot
 
   -d |--debug            : debug this script
 
   -d |--debug            : debug this script
 
   -m |--maven            : run maven install
 
   -m |--maven            : run maven install
 
   -h |--help              : show this usage
 
   -h |--help              : show this usage
   -s |--start            : deploy and start duke-farm fat jar
+
   -s |--start            : deploy and start remotecar (duke) fat jar
 
</source>
 
</source>
 
* <nowiki>deploy -m</nowiki> will create the duke-farm fat jar
 
* <nowiki>deploy -m</nowiki> will create the duke-farm fat jar
 
* <nowiki>deploy -s</nowiki> will send the jar to your PI using rsync and start it
 
* <nowiki>deploy -s</nowiki> will send the jar to your PI using rsync and start it
 +
* <nowiki>deploy -a</nowiki> will create an autostart configuration that restarts the client on reboot see https://github.com/rc-dukes/dukes/issues/26
 +
 +
== Running the server ==
 +
- start 'CarServer' in module 'rc-server' in IDE
 +
- point your browser to http://localhost:8080
 +
=== Creating a fatjar of the server ===
 +
<source lang='bash'>
 +
../scripts/install.sh -h
 +
usage: install.sh [-d|-f|-j|-q]* [-h]?
 +
 +
  -d |--debug        : debug this script
 +
  -f |--fatjar      : create a fat jar
 +
  -j |--javadoc      : with javadoc (default is without)
 +
  -q |--quick        : no tests, no javadoc
 +
 +
  -h |--help        : show this usage
 +
</source>
 +
From the rc-server directory <nowiki>../scripts/install.sh -f -q</nowiki>
 +
should create a fat jar with the maven assembly-plugin
 +
 +
<source lang='bash'>java -jar target/rc-server-0.0.2-jar-with-dependencies.jar</source>
 +
(Please replace 0.0.2 with the current version of the project)
 +
 +
Should then start the server and the web ui should be available by either using
 +
 +
http://localhost:8080
 +
or using the index.html file or detect.html files from the sources in rc-webcontrol/src/main/resources/web/
 +
== Starting all together ==
 +
The start script will let you pick the components you'd like to start.
 +
<source lang='bash'>
 +
scripts/start -h
 +
start [-d|-h]
 +
 +
  -a |--all    : run all parts of the software
 +
  -c |--car    : run car software on pi
 +
  -s |--server  : run server software
 +
  -r |--remote  : point webbrowser to remot control
 +
  -w |--web    : point webbrowser to detect.html
 +
  -d |--debug  : debug this script
 +
  -h |--help    : show this usage
 +
</source>
 +
So <nowiki>scripts/start -a</nowiki> will start
 +
# the car software on the pi
 +
# the server software e.g. on you laptop
 +
# point your webrowser to the detect.html page (after waiting for the page to get available)
  
 
= First Experiments =
 
= First Experiments =
 +
These are just some experiments with the Raspberry PI, Ultrasonic Sensors and Servos that might you get warmed up for the real
 +
challenge of getting your 1:10 RC self driving car going. You don't need to go thru all theses experiments. The basic car only uses the camera and two servos and no ultrasonic sensors.
 
# {{Link|target=Ultrasonic Sensor}}
 
# {{Link|target=Ultrasonic Sensor}}
 
# {{Link|target=SG90-Servo}}
 
# {{Link|target=SG90-Servo}}
 
# {{Link|target=Raspberry PI Camera}}
 
# {{Link|target=Raspberry PI Camera}}
 
# {{Link|target=Raspberry PWM LED Control}}
 
# {{Link|target=Raspberry PWM LED Control}}
 +
# <youtube>2vAoOYF3m8U</youtube>
 +
Author: {{Link|target=Wolfgang Fahl}}
  
 
<headertabs/>
 
<headertabs/>
[[Category:Raspberry]]
+
[[Category:Raspberry]][[Category:Self Driving RC Car]][[Category:frontend]]

Latest revision as of 13:33, 16 March 2021

[edit]

[edit]

Parts-List as Excel File

# picture part example sources documents ~ price
1 RC Car Chassis 2019-06-07.jpeg 1:10 RC Car chassis
  1. 1:10 elektro tourenwagen chassis ARR
  2. TAMIYA 57986" 1:10 RC TT-02-Chassis First Try On-Road 
  1. de/en/fr/nl
  2. Tamiya 57986
70 €
2 SpeedControl 2019-06-06.jpg Speed Control Modelcraft Carbon Series Speed Control "20 Turns" de/en/fr/nl 21 €
3 RC Car Servo 2019-06-06.jpg RC-Car servo  
  1. RC-Car servo 4519
  2. Carson 500502036 - Servo CS-6 - 6 kg/JR-Stecker
de/en 10 €
4 TopFuel-LiPo-25C-ECO-X-1300mAh-3S-21300341 b 0.JPG 
  1. TopFuel LiPo 25C-ECO-X 1300mAh 3S 
  2. NiMH 7.2V 3500 mAh
  16 €
5 Absima CB 1S BatteryCharger 2019-06-06.jpg Battery Charger
  1. Ansmann NiMH Charger
27 €
6 713LX1Z383L. SL1500 .jpg Raspberry PI 3 B+ Raspberry PI 3 B+ en  35 €
7 81UBu4aoQHL. SL1500 .jpg  microSD Card SanDisk 16 GB 7 €
8 61Z5yEYfnAL. SL1426 .jpg Raspberry PI Camera 1080 p Camera Module 23 €
9  41smcErJNjL.jpg DC/DC Converter 12 V-> 5V 12 V->5 V Converter Module    7 €
10 31pzC7A3D3L.jpg Micro USB Connector Delock USB 2.0 Micro USB   6 €
        Total  199 €
a 71AYEqpWHcL. SL1500 .jpg Breadbord Kit MB102 Breadbord Kit 7 €
b 714Ep9LpwoL. SL1200 .jpg Ulrasound Sensor 5 x HC-SR04 + Cables 10 €
[edit]

DCC-DCC converter

To run the Raspberry PI from the 7.4 Volt Battery of the car the DC-DC converter has to be soldered into the voltage supply chain. You might want to select a converter with enough power for your usecase

15 Watt 3 A

This configuration works if you only want to run a Raspberry PI and directly control the motor and steering servos of the RC car.

25 Watt 5 A

This configuration is currently tried for running the servos over an Adafruit 16 channel servo controller and using extra servos. DSC00011-parts.JPG DSC00016-connected.JPG

Camera mount

Servo and LED

RcCarWiring2019-06-22.png

[edit]

For a start a 3D Printed case for the Raspberry PI was used:

2094b280ac54121f9dad5fc172b1a3eb_preview_featured.jpg 081727802f13879a77f4b8bfbd0277d1_preview_featured.jpg

RaspberryWithCaseIMG 0025.JPG

[edit]

see Raspberry PI


WebCam Interface

cd /usr/local/src
sudo git clone https://github.com/silvanmelchior/RPi_Cam_Web_Interface.git
cd RPi_Cam_Web_Interface/
./install.sh

WebCamInterface2019-06-21.png

In case of error

A message like:

#mmal: mmal_component_create_core: could not create component 'vc.ril.camera' (1)
sh: 1: /var/www/html/macros/error_hard.sh: Permission denied

Indicates that you might have a cabling problem.

In case of success

http://<yourpi>/html should show the cam interface: RpiCamControl2019-06-21.png

Servo Interface - Servoblaster

wf@pibee:~ $ cd /usr/local/src
wf@pibee:/usr/local/src $ sudo git clone https://github.com/srcshelton/servoblaster
cd servoblaster
sudo make install
sudo reboot

OpenJDK

sudo apt-get install openjdk-8-jdk

Screen

sudo apt-get install screen
[edit]

Tested on

  1. Mac OS 10.13.6 High Sierra with macports 2.5.4
  2. Ubuntu 18.04.2 LTS

OpenCV

see also OpenCV

MacOS

If you'd like to generally use OpenCV you can get it e.g. from the macports project:

MacPorts

sudo port install opencv +java
ls /opt/local/share/OpenCV/java
libopencv_java343.dylib opencv-343.jar

For your convenience you'll find these two files in the lib directory.

From Source

  1. install5 in opencvubuntu has the commands for MacOS - but does not work even if you install dpkg with
sudo port install dpkg

Ubuntu 18

You might want to use scripts/opencvubuntu to download the 75 MByte libopencv_java343.so and install the backports libjasper libraries that are not published with Ubuntu 18 by default. You'll find some other links in the script that might also give you hints on how to proceed if you have another environment or different needs. You might want to create an Issue if you run into trouble.

Windows

Help Wanted -please file an issue if you want to try to get things running on Windows.

[edit]

Deploying to your Raspberry is done by compiling e.g. on a laptop and then transferring the results to your PI.

Compile

scripts/install.sh

There is a usage for this script if you call it with scripts/install.sh -h. Essentially this is doing a mvn clean install. The clean part is important to get the platform specific native openCV Library integrated into the server code.

Example Configuration

You need to configure your PI's host address and user in a file ~/dukes/dukes.ini in the remotecar section. Also you need to check your GPIO pins and the servo settings for your car for LED,Engine and Wheels. You might want to try these things out before using the software the first time.

The original wiring is:

  • MOTOR: GPIO-17 - Servoblaster ID 1
  • WHEEL: GPIO-18 - Servoblaster ID 2
  • LED: GPIO-24 - Servolbaster ID 6

The software uses the standard Servoblaster ID's above which are hard-coded at this time. The GPIO configuration will only work with other devices which we intend to support in the future.

#
# WF 2019-06-21
#
# rc-duke configuration file
# remote car raspberry PI configuration
remotecar.host=picaro
remotecar.user=wf
# camera url format
camera.url=http://picaro/html/cam_pic_new.php
# webserver configuration
webcontrol.port=8080
imageview.port=8081
# watchdog
# how often to send a heart beat in milliseconds
watchdog.heartbeat.interval.ms=150
# how many beats may be missed before remote car is forced to stop
watchdog.max.missed.beats=6
# use servoblaster as servo control
servo.command=servoblaster
# be careful with your GPIO configuration
# you might damage your PI with a misconfiguration!
# led configuration
led.gpio=24
led.on=250
led.off=0
# wheel configuration
wheel.gpio=18
# positive - higher values mean go right
wheel.orientation=+
wheel.center=144
wheel.stepsize=1
wheel.max.left=115
wheel.max.left.angle=-18.0
wheel.max.right=158
wheel.max.right.angle=14
# engine configuration
engine.gpio=17
# positive - higher values means going quicker
engine.orientation=+
engine.speed.zero=130
engine.stepsize=1
engine.min.speed.reverse=127
engine.max.speed.reverse=122
engine.min.speed.forward=133
engine.max.speed.forward=138
engine.max.velocity.reverse=-1.0
engine.min.velocity.reverse=-0.5
engine.min.velocity.forward=0.23
engine.max.velocity.forward=1.0

The deploy script as a help option that shows how it can be used:

deploy.sh [-a|-d|-h|-m|-s]

  -a |--autostart         : configure the remotecar app to autostart on reboot
  -d |--debug             : debug this script
  -m |--maven             : run maven install
  -h |--help              : show this usage
  -s |--start             : deploy and start remotecar (duke) fat jar
  • deploy -m will create the duke-farm fat jar
  • deploy -s will send the jar to your PI using rsync and start it
  • deploy -a will create an autostart configuration that restarts the client on reboot see https://github.com/rc-dukes/dukes/issues/26

Running the server

- start 'CarServer' in module 'rc-server' in IDE - point your browser to http://localhost:8080

Creating a fatjar of the server

../scripts/install.sh -h
usage: install.sh [-d|-f|-j|-q]* [-h]?

  -d |--debug        : debug this script
  -f |--fatjar       : create a fat jar
  -j |--javadoc      : with javadoc (default is without)
  -q |--quick        : no tests, no javadoc

  -h |--help         : show this usage

From the rc-server directory ../scripts/install.sh -f -q should create a fat jar with the maven assembly-plugin

java -jar target/rc-server-0.0.2-jar-with-dependencies.jar

(Please replace 0.0.2 with the current version of the project)

Should then start the server and the web ui should be available by either using

http://localhost:8080 or using the index.html file or detect.html files from the sources in rc-webcontrol/src/main/resources/web/

Starting all together

The start script will let you pick the components you'd like to start.

scripts/start -h
start [-d|-h]

  -a |--all     : run all parts of the software
  -c |--car     : run car software on pi
  -s |--server  : run server software
  -r |--remote  : point webbrowser to remot control
  -w |--web     : point webbrowser to detect.html
  -d |--debug   : debug this script
  -h |--help    : show this usage

So scripts/start -a will start

  1. the car software on the pi
  2. the server software e.g. on you laptop
  3. point your webrowser to the detect.html page (after waiting for the page to get available)
[edit]

These are just some experiments with the Raspberry PI, Ultrasonic Sensors and Servos that might you get warmed up for the real challenge of getting your 1:10 RC self driving car going. You don't need to go thru all theses experiments. The basic car only uses the camera and two servos and no ultrasonic sensors.

  1. Ultrasonic Sensor
  2. SG90-Servo
  3. Raspberry PI Camera
  4. Raspberry PWM LED Control

Author: Wolfgang Fahl