= Vision Framework = == Objective == Create a reprogrammable module in which a Raspberry Pi 3, protective case, power cable, light ring, and camera are self contained and execute a base program on startup. The base code of the module continuously reads the camera feed (subscribes to camera) and publishes corresponding data via the Pi's serial output (located on the Pi's GPIO connector). This data can then be fairly simply read by the RoboRIO. We hope that this will make implementing a vision subsystem a more simple proposition, allowing more teams to do so. == Materials == * Clear Case * Raspberry Pi 3 (with NOOBS installed on Micro SD card) * Ribbon Cable Camera (need 3) * Micro USB Cable * Light Ring * 3-pin female to female jumper wire == Raspberry Pi Setup == === Raspbian Lite === Install [https://sourceforge.net/projects/win32diskimager/ Win32 Disk Imager][[BR]] Install [https://downloads.raspberrypi.org/raspbian_lite_latest Raspian Lite] onto MicroSD card via Win32 Disk Imager Load Raspberry Pi 3 (rpi) with the newly imaged MicroSD {{{ username: pi password: raspberry }}} connect to wifi by adding the following to the /etc/network/interfaces file: {{{ auto wlan0 iface wlan0 inet dhcp wpa-ssid "your-ssid" wpa-psk "your-password" }}} reboot the pi: {{{ sudo shutdown -r now }}} update with the following commands: {{{ sudo apt-get update sudo apt-get upgrade sudo apt-get dist-upgrade sudo apt-get clean }}} set localization configuration options: {{{ sudo raspi-config }}} reboot: {{{ sudo shutdown -r now }}} ---- ---- ---- === X server === Install Xorg and Xinit: {{{ sudo apt-get install --no-install-recommends xserver-xorg sudo apt-get install --no-install-recommends xinit }}} Install the MATE GUI: {{{ sudo apt-get install mate-desktop-environment-core }}} Install LightDM login manager: {{{ sudo apt-get install lightdm }}} reboot: {{{ sudo shutdown -r now }}} login to MATE[[BR]] At the top left:[[BR]] navigate to {{{preferences -> hardware -> keyboard shortcuts}}} to set Run a Terminal to {{{Ctrl + Alt + T}}} or the like open a terminal[[BR]] navigate to {{{Edit -> Profile Preferences -> Colors}}} to deselect {{{Use colors from system theme}}}[[BR]] select {{{Built-in schemas: White on black}}} ---- ---- ---- === Development Tools === ==== Java 8 ==== Now that the terminal color scheme is not killing you, we are going to start off by installing java: {{{ sudo apt-get install oracle-java8-jdk }}} test the java installation (output should include "1.8.0_65" and should not include "openjdk"): {{{ java -version }}} Let's also set the JAVA_HOME variable to be exported on startup:[[BR]] edit your bashrc: {{{ sudo nano ~/.bashrc }}} and add the following line: {{{ export JAVA_HOME=/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt }}} ---- ---- ==== Pi4J (Java-GPIO Interface) ==== Now we can install [http://pi4j.com/install.html pi4j], a Java interface for the pi GPIO: {{{ curl -s get.pi4j.com | sudo bash }}} ---- ---- ==== rpi_ws281x (NeoPixel Control Library) ==== Then we can use the rpi_ws281x library for controlling the [https://www.adafruit.com/category/168 Adafruit NeoPixel lightring][[BR]] But first, let's install some tools and dependencies: {{{ sudo apt-get install build-essential python-dev git scons swig }}} Now we can install the rpi_ws281x library: {{{ git clone https://github.com/jgarff/rpi_ws281x.git cd rpi_ws281x scons }}} Let's also install the python library: {{{ cd python sudo python setup.py install }}} ---- ---- ==== OpenCV ==== First of all, you need a heatsink for your processor before building OpenCV. If you see this overheating symbol, you will die. Straight up.[[BR]] [[Image(https://i.imgur.com/kYydNgVm.jpg)]][[BR]] If you don't have a heatsink on hand, tape some pennies to the CPU like we did:[[BR]] [[Image(https://i.imgur.com/KqWLvKJm.jpg)]][[BR]] If this still doesn't work, it may be necessary to water cool your pi:[[BR]] [[Image(https://i.imgur.com/DPOazIJm.jpg)]][[BR]] Make sure to change the ice cube at least once per hour.[[BR]][[BR]][[BR]] Now we are going to install OpenCV and its dependencies.[[BR]] We only install OpenCV for C++ and Java, not for Python (we ain't scrubs): {{{ sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev cd git clone https://github.com/opencv/opencv.git cd opencv mkdir build cd build cmake -DCMAKE_RELEASE_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DBUILD_SHARED_LIBS=OFF .. make -j $[$(nproc)+1] sudo make install }}}