Change history:
5/20/16: code modified
1. to support ffplay instead of motion – less video latency from the tank’s eye, floating window (does not launch in browser), less configuration
2. added software limits to pan left and pan right. This was required to prevent cable strain/stress on motor and servo wires running to their respective hats in the 3D tank build
This section will discuss the installation/build process of various software components to support the building of a robotic tank and will be dictated by the hardware employed. Currently I am using a Raspberry Pi2, and either Adafruit MotorHATS or Pyborg MotorHATS, and PS3 Game Controller (don’t know if a PS4 GameController will work). I will try to streamline the procedure by reducing it to a series of cut and paste commands where possible. This installation sequence is important.
1. Operating System
Linux. Your choice of distribution. I am currently using Ubuntu Mate and this procedure will be based upon that distribution.
After the initial install bring your OS up to latest revision by doing:
sudo apt-get update
sudo apt-get upgrade
Be sure that python is installed by:
python -V – will provide the version number
if it is not installed then:
sudo apt-get install python
2. Additional Linux software – install from distribution’s repository
You should check to see if these additional packages are installed. Many are installed by the generic OS install. The easiest way to do this is to launch the graphical Ubuntu Software Center. If you search for it and there is a “check” by the code then it is installed. Go on to the next package. Many of these packages were installed during the initial build in my case.
GIT – sudo apt-get install git
compiler – sudo apt-get install gcc
motion – sudo apt-get install motion – onboard video support – optional
I2C – sudo apt-get install python-smbus
sudo apt-get install i2c-tools
sudo apt-get install libi2c-dev
3. Software to support specific Hardware
A. Adafruit
1. setup up base path – $HOME will contain two directories for Adafruit. One will be for the motorHAT (tanks tracks) and the other for the ServoHAT (robotic arm/(Camera Pan/Tilt)
cd $HOME
MotorHAT:
git clone https://github.com/adafruit/Adafruit-Motor-HAT-Python-Library.git
ServoHAT:
git clone https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git
python support – sudo apt-get install python-dev
cd $HOME/Adafruit-Motor-HAT-Python-Library
sudo python setup.py install
sudo vi /etc/modules – add the following 2 lines
i2c-bcm2708
i2c-dev
if the file /etc/modprobe.d/raspi-blacklist.conf exists on your system then comment out the following lines:
blacklist spi-bcm2708
blacklist i2c-bcm2708
sudo vi /boot/config.txt and add the following 2 lines:
dtparam=i2c1=on
dtparam=i2c_arm=on
sudo shutdown -Fr now – reboot the Pi
login
cd $HOME
sudo i2cdetect -y 1 (for a Pi2)
This should produce output similar to the following.
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: — — — — — — — — — — — — —
10: — — — — — — — — — — — — — — — —
20: — — — — — — — — — — — — — — — —
30: — — — — — — — — — — — — — — — —
40: 40 — — — — — — — — — — — — — — —
50: — — — — — — — — — — — — — — — —
60: 60 — — — — — — — — — — — — — — —
70: 70 — — — — — — —
sudo i2cdetect -y 0 (for an older Pi)
B. Pyborg – not done yet
C. PS3 Game contoller support
joystick support
sudo apt-get install python-pygame
bluetooth support
might already be installed. Please note that on Ubuntu Mate the following packages were installed under one package known as “bluez”. If you see that package installed then you wont need to install the following:
sudo apt-get -y install bluez-utils bluez-compat bluez-hcidump
joystick diagnostic tool – very helpful
sudo apt-get install jstest-gtk
configuring, pairing PS3
sudo apt-get -y install checkinstall
Insert your bluetooth dongle
hciconfig – should produce output similar to the following:
hci0: Type: BR/EDR Bus: USB
BD Address: 98:58:8A:04:09:5C ACL MTU: 1021:8 SCO MTU: 64:1
UP RUNNING PSCAN
RX bytes:612 acl:0 sco:0 events:37 errors:0
TX bytes:942 acl:0 sco:0 commands:37 errors:0
If you do not see output similar to the above then do not proceed until you fix this problem.
DO NOT EXECUTE THE FOLLOWING LINE!!!! I HAVE LEFT IT IN FOR BACKWARDS REFERENCE. IT CREATED ERRORS LATER IN THE INSTALLATION. INSTEAD SKIP AROUND IT
—skip this statement—
sudo apt-get install libusb-dev libbluetooth-dev joystick pyqt4-dev-tools libjack-dev qt3-designer
–end skip —
continue!!!
sudo apt-get install libusb-dev
sudo apt-get install libbluetooth-dev
Pairing Support
mkdir $HOME/joystick
cd $HOME/joystick
wget http://www.pabr.org/sixlinux/sixpair.c
gcc -o sixpair sixpair.c -lusb – generates an executable called sixpair in current directory
now connect your PS3 controller to the Pi2 using a USB cable.
sudo ./sixpair – you should see something like the following:
Current Bluetooth master: 00:00:00:00:00:00
Setting master bd_addr to 98:58:8a:04:09:5c
Talk to the PS3 Game Controller
Please read ahead. You will probably get an error if the “wget” command fails to get “clean” code, i.e., it has not been fixed yet. If so I provide a work around.
cd $HOME/joystick
wget http://sourceforge.net/projects/qtsixa/files/QtSixA%201.5.1/QtSixA-1.5.1-src.tar.gz
tar xfvz QtSixA-1.5.1-src.tar.gz
cd QtSixA-1.5.1/sixad
make
if you get errors like: error: ‘close’ was not declared in this scope
you need to fix them. Here is how:
1. cd $HOME/joystick/QtSixA-1.5.1
2. vi compilation_sid.patch in the current directory – not that this patch file with patch the shared.h file in the sixad directory, i.e., you are one directory above. This patch file can be a royal pain. If you have problems by getting the same error messages it means it do not patch correctly. Try to good for “qtsixa path” and try a “cut and paste” from that file.
3. in the file put the following snippet. Pay attention to the indentation of each line or the patch will fail to install. I have made every effort to ensure accuracy but on a cut/paste things have a way of changing. If the patch screws up remove the QtSixA-1.5.1 directory and untar again. You can not patch a screwed up patch file.
--- QtSixA-1.5.1.orig/sixad/shared.h 2011-10-12 03:37:38.000000000 +0300
+++ QtSixA-1.5.1/sixad/shared.h 2012-08-14 19:30:12.190379004 +0300
@@ -18,6 +18,8 @@
#ifndef SHARED_H
#define SHARED_H
+#include
+
struct dev_led {
bool enabled;
bool anim;
4. save the file
5. patch -Np1 -i compilation_sid.patch – install the patch
6. make clean
7. make – should run without errors. errors are bad so you will need to fix them
8. sudo mkdir -p /var/lib/sixad/profiles
9. sudo checkinstall
create default set? y
descriptor: sixad <enter> <enter>
package will build
<enter>
Done. The new package has been installed and saved to: YOUR_$HOME/joystick/QtSixA-1.5.1/sixad/sixad_20150804-1_armhf.deb
you can remove it from your system anytime using:
dpkg -r sixad
D. Video Support – this is optional. you have 2 choices: motion or ffplay. You can install both and decide later which to use. My preference is ffplay because there seems to be less latency than with motion, its much easier to configure (all parameters passed on command line).
1. Motion – optional
sudo apt-get install motion
cd /etc/motion
vi motion.conf – make following changes
v4l2_palette 8 # based upon your cameras attributes
framerate = 30
output_pictures = off
stream_motion = on
stream_maxrate 100
stream_localhost off
norm = 1 # if you use NTSC
Make sure “target_dir” (/var/lib/motion) is not filling up
start motion at boot – do:
vi /etc/motion/motion.conf and change “daemon off” to “daemon on”
vi /etc/default/motion and set “start_motion_daemon=no” to “start_motion_daemon=yes”
start motion manually:
motion
2. ffplay – optional but preferred
sudo apt-get install libav-tools
The tank control code launches/activates ffplay automatically. Comment this line out and uncomment the line for motion if you are going to use it instead of ffplay.
Software install is now complete.
4. Lets get it working.opencv
a. pair the device – PS3 game controller must be connected by USB to Pi2
cd $HOME/joystick
sudo ./sixpair
b. talk to the PS3 game controller
sudo sixad –start & (be sure it is: dash dash start)
should get something like:
output follows: SUCCESS!!!!
[1] 27711
sixad-bin[27735]: started
sixad-bin[27735]: sixad started, press the PS button now <—–NOTE!!!!!!
disconnect the USB cable from PS3 THEN PRESS THE PS BUTTON
c. done
to stop the sixad app: sudo sixad –stop
d. Lets check our PS3 Game Controller
Launch the graphical joystick app: jstest-gtk by using the appropriate icon
it should look like the video below:
You might notice that 3 of the axis scroll continuously. This is ok because your PS3 game controller is reacting to its own movement. Place it on a table and all should settle down. Now move a joystick and note the effected axis and shown in the video below.
4. Install Software to control the tank
a. login
b. mkdir $HOME/tank – or some directory where you want the application
c. cd $HOME/tank
d. download the following code – this code has been modified to use ffplay instead of motion.
ps3_tank.py_.gz (791 downloads)
e. uncompress and extract the tar file: tar -zxvf ps3_tank.gz
f. things you should be aware of:
1. the code assumes the following path configuration:
$HOME/Adafruit……MotorHAT
$HOME/Adafrujit…..ServoHAT
If your setup for the Adafruit software is different then you will need to go into the PS3_tank.py program and changes the “append” lines to your path for these drivers.
2. The program determines your $HOME and your Pi’s HOSTNAME
3. I had determined that the best video performance was achieved using Linux
Motionffplay.Motion needs to be running before starting the program or it will fail to start. You can auto run motion at boot by following the instruction earlier in this procedure, or you can start it manually: sudo motion. ffplay is launched by the Ps3_tank.py program. The program contains entries for both motion and ffplay, but the motion statement has been commented out.4. The code header defines which buttons on a PS3 Game Controller provide which functionality but I will detail it here.