Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cc18c175b5 | ||
|
|
cafa320e9e | ||
|
|
9fa7d255e4 | ||
|
|
7ca96b60c7 | ||
|
|
92d832f26f | ||
|
|
9b8022704c | ||
|
|
af9ad04a85 | ||
|
|
9b61534d27 | ||
|
|
c87220d192 | ||
|
|
c32bfde94e | ||
|
|
129b7e0ee7 | ||
|
|
0fa18290dd |
@@ -1,5 +1,12 @@
|
||||
# discoverpixy
|
||||
Project with the Pixy cam and the STM32F4 Discovery
|
||||
A Project with the Pixy cam and the STM32F4 Discovery. The project can also be run on linux/windows using a qt-based emulator.
|
||||
|
||||

|
||||
<img src="doc/mainscreen_emulator.png" width="300">
|
||||
<img src="doc/tracking_emulator.png" width="300">
|
||||
|
||||
## Documentation
|
||||
Take a look at our [docu.pdf](./doc/docu.pdf) (German)
|
||||
|
||||
## Folder structure
|
||||
* *common*: device independent code and the "Application" itself
|
||||
|
||||
@@ -21,9 +21,6 @@
|
||||
#define REG_PID_KD (0.001f)
|
||||
#define REG_PID_TA (0.01f)
|
||||
|
||||
void int_init(void){
|
||||
// TODO Init ports and outputs if needed.
|
||||
}
|
||||
|
||||
// PID controller implementatoin for the y-axis
|
||||
int16_t pixy_PID_Y(int16_t x, int16_t w)
|
||||
|
||||
@@ -1,14 +1,41 @@
|
||||
/*
|
||||
* pixy_control.h
|
||||
*/
|
||||
|
||||
#ifndef _CONTROL_H_
|
||||
#define _CONTROL_H_
|
||||
#ifndef PIXY_CONTROL_H_
|
||||
#define PIXY_CONTROL_H_
|
||||
|
||||
#include<stdint.h>
|
||||
|
||||
void int_init(void);
|
||||
/**
|
||||
* @addtogroup app
|
||||
*/
|
||||
/*@{*/
|
||||
|
||||
/**
|
||||
* @defgroup pixy_control Pixy Control Helper
|
||||
* A collection of helper functions that contain PID Control code used for object tracking.
|
||||
*/
|
||||
/*@}*/
|
||||
|
||||
|
||||
/**
|
||||
* @addtogroup pixy_control
|
||||
*/
|
||||
/*@{*/
|
||||
|
||||
/**
|
||||
* Execute one step of PID regulation for the Y-servo.
|
||||
* @param x desired value (e.g. current y-position of the biggest block)
|
||||
* @param w actual value (e.g desired y-position)
|
||||
* @return The offset which needs to be added to the Y-Servo position
|
||||
*/
|
||||
int16_t pixy_PID_Y(int16_t x, int16_t w);
|
||||
|
||||
/**
|
||||
* Execute one step of PID regulation for the X-servo.
|
||||
* @param x desired value (e.g. current x-position of the biggest block)
|
||||
* @param w actual value (e.g desired x-position)
|
||||
* @return The offset which needs to be added to the X-Servo position
|
||||
*/
|
||||
int16_t pixy_PID_X(int16_t x, int16_t w);
|
||||
|
||||
#endif
|
||||
/*@}*/
|
||||
|
||||
#endif /* PIXY_CONTROL_H_ */
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#include "pixy_helper.h"
|
||||
#include "pixy_frame.h"
|
||||
#include "pixy.h"
|
||||
#include "tft.h"
|
||||
#include <stdlib.h>
|
||||
@@ -1,10 +1,30 @@
|
||||
#ifndef PIXY_HELPER_H
|
||||
#define PIXY_HELPER_H
|
||||
#ifndef PIXY_FRAME_H
|
||||
#define PIXY_FRAME_H
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include "filesystem.h"
|
||||
|
||||
|
||||
/**
|
||||
* @addtogroup app
|
||||
*/
|
||||
/*@{*/
|
||||
|
||||
/**
|
||||
* @defgroup pixy_helper Pixy Frame Helper
|
||||
* A collection of helper functions that allow receiving and rendering a frame from pixy onto the display.
|
||||
* Furthermore you can select a color in a frame, to use for tracking.
|
||||
*/
|
||||
/*@}*/
|
||||
|
||||
|
||||
/**
|
||||
* @addtogroup pixy_helper
|
||||
*/
|
||||
/*@{*/
|
||||
|
||||
|
||||
/**
|
||||
* Receives a fullsized frame from pixy and display's it on the display with the topleft corner at (x,y)
|
||||
* @param x The x-Coordinate of the top left corner
|
||||
@@ -56,4 +76,6 @@ int pixy_save_cropped_frame(FILE_HANDLE* handle, uint16_t xoffset, uint16_t yoff
|
||||
*/
|
||||
int pixy_cc_set_region(uint8_t signum, uint16_t xoffset, uint16_t yoffset, uint16_t width, uint16_t height);
|
||||
|
||||
#endif /* PIXY_HELPER_H */
|
||||
/*@}*/
|
||||
|
||||
#endif /* PIXY_FRAME_H */
|
||||
@@ -5,7 +5,7 @@
|
||||
#include "touch.h"
|
||||
#include "pixy.h"
|
||||
#include "system.h"
|
||||
#include "pixy_helper.h"
|
||||
#include "pixy_frame.h"
|
||||
|
||||
static bool pixy_connected = false; //Whether or not the pixy cam is currently connected
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#include "tft.h"
|
||||
#include "touch.h"
|
||||
#include "pixy.h"
|
||||
#include "pixy_helper.h"
|
||||
#include "pixy_frame.h"
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#include "touch.h"
|
||||
#include "pixy.h"
|
||||
#include "system.h"
|
||||
#include "pixy_helper.h"
|
||||
#include "pixy_frame.h"
|
||||
|
||||
static volatile enum {detecting, idle,update_servos, update_ledcolor, update_ledcurrent} state; //Current state of the screen state machine
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#include "touch.h"
|
||||
#include "pixy.h"
|
||||
#include "system.h"
|
||||
#include "pixy_helper.h"
|
||||
#include "pixy_frame.h"
|
||||
|
||||
static BUTTON_STRUCT b_back; //Button to navigate back
|
||||
static BUTTON_STRUCT b_select; //Button to start the color region selection
|
||||
|
||||
BIN
doc/docu.odt
BIN
doc/docu.odt
Binary file not shown.
BIN
doc/docu.pdf
BIN
doc/docu.pdf
Binary file not shown.
BIN
doc/mainscreen_emulator.png
Normal file
BIN
doc/mainscreen_emulator.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 37 KiB |
BIN
doc/pixy.png
Normal file
BIN
doc/pixy.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 185 KiB |
BIN
doc/tracking_emulator.png
Normal file
BIN
doc/tracking_emulator.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 57 KiB |
5
emulator/.gitignore
vendored
5
emulator/.gitignore
vendored
@@ -5,8 +5,9 @@ qt/*.o
|
||||
qt/*.a
|
||||
qt/ui_*
|
||||
qt/moc_*
|
||||
qt/Makefile
|
||||
|
||||
qt/Makefile*
|
||||
qt/debug
|
||||
qt/release
|
||||
|
||||
libs/*/obj
|
||||
libs/*/*.a
|
||||
|
||||
@@ -10,7 +10,7 @@ QT_DIR=./qt
|
||||
COMMON_DIR=../common
|
||||
|
||||
#Tools
|
||||
CC=gcc -fdiagnostics-color=auto
|
||||
CC=gcc #-fdiagnostics=auto
|
||||
GDB=gdb
|
||||
|
||||
|
||||
@@ -24,17 +24,22 @@ INCLUDES:=$(addprefix -I,$(INCLUDES))
|
||||
QT_LIB=$(QT_DIR)/libemulatorqt.a
|
||||
|
||||
|
||||
CPPFLAGS= -march=x86-64 -mtune=generic -fPIC $(INCLUDES)
|
||||
CFLAGS= -O0 -g -std=c99
|
||||
CPPFLAGS= -march=x86-64 -mtune=generic #-fPIC
|
||||
CPPFLAGS+= $(INCLUDES)
|
||||
CFLAGS= -O0 -g -std=c99 -mwindows
|
||||
|
||||
|
||||
LIBS= pixy usb-1.0 boost_system boost_timer boost_chrono
|
||||
LIBS+=Qt5Core Qt5Gui Qt5Widgets emulatorqt m stdc++
|
||||
LIBS= emulatorqt pixy usb-1.0
|
||||
LIBS+= boost_system-mgw49-mt-1_58 boost_timer-mgw49-mt-1_58 boost_chrono-mgw49-mt-1_58
|
||||
LIBS+= Qt5Core Qt5Gui Qt5Widgets m stdc++
|
||||
|
||||
|
||||
LDFLAGS= -L$(QT_DIR) $(addprefix -l,$(LIBS))
|
||||
LDFLAGS= -static-libgcc -static-libstdc++ #-Wl,-t -Wl,--Map=a.map
|
||||
LDFLAGS+= -L$(QT_DIR)
|
||||
LDFLAGS+= -L$(LIB_DIR)/Pixy
|
||||
|
||||
LDFLAGS+= -L$(LIB_DIR)/boost/lib
|
||||
LDFLAGS+= -LC:/Qt/5.4/mingw491_32/lib
|
||||
LDFLAGS+= -L$(LIB_DIR)/Pixy/windows
|
||||
LDFLAGS+= $(addprefix -l,$(LIBS))
|
||||
|
||||
#Finding Input files
|
||||
CFILES=$(shell find . -maxdepth 1 -name '*.c')
|
||||
@@ -58,7 +63,7 @@ debug: all
|
||||
$(GDB) ./build/emulator
|
||||
|
||||
$(QT_LIB):
|
||||
cd $(QT_DIR) && qmake &&make
|
||||
cd $(QT_DIR) && qmake && $(MAKE)
|
||||
|
||||
#objects to elf
|
||||
$(BUILD_DIR)/$(TARGET): $(OBJS) $(COMMON_OBJS) $(QT_LIB)
|
||||
@@ -83,7 +88,7 @@ $(OBJ_DIR)/%.o: $(COMMON_DIR)/%.c
|
||||
|
||||
#Clean Obj files and builded stuff
|
||||
clean:
|
||||
cd $(QT_DIR) && $(MAKE) clean && $(RM) Makefile && $(RM) *.a
|
||||
cd $(QT_DIR) && $(MAKE) clean && $(RM) Makefile* && $(RM) *.a && $(RMDIR) debug release
|
||||
$(RMDIR) $(BUILD_DIR) $(OBJ_DIR)
|
||||
|
||||
|
||||
|
||||
@@ -17,11 +17,13 @@ OBJ_DIR=./obj
|
||||
#Architecture flags
|
||||
|
||||
#Compiler, Linker Options
|
||||
CPPFLAGS=-I$(INC_DIR) -D__LINUX__=1 -DHOST=1 #-DDEBUG=1
|
||||
CPPFLAGS=-I$(INC_DIR) -DHOST=1 #-D__LINUX__=1 -DDEBUG=1
|
||||
CFLAGS=$(ARCH_FLAGS) -O0 -g #-ffunction-sections -fdata-sections -g
|
||||
#CFLAGS += -mlittle-endian -mthumb -mcpu=cortex-m4 -mthumb-interwork
|
||||
#CFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16
|
||||
CFLAGS+=-I/usr/include/libusb-1.0
|
||||
CFLAGS+=-I../boost/include/
|
||||
CFLAGS+=-I./windows/
|
||||
|
||||
#Finding Input files
|
||||
CFILES=$(shell find $(SRC_DIR) -name '*.cpp')
|
||||
|
||||
BIN
emulator/libs/Pixy/windows/libusb-1.0.dll
Normal file
BIN
emulator/libs/Pixy/windows/libusb-1.0.dll
Normal file
Binary file not shown.
BIN
emulator/libs/Pixy/windows/libusb-1.0.dll.a
Normal file
BIN
emulator/libs/Pixy/windows/libusb-1.0.dll.a
Normal file
Binary file not shown.
1970
emulator/libs/Pixy/windows/libusb.h
Normal file
1970
emulator/libs/Pixy/windows/libusb.h
Normal file
File diff suppressed because it is too large
Load Diff
2
emulator/libs/boost/.gitignore
vendored
Normal file
2
emulator/libs/boost/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
include
|
||||
lib
|
||||
BIN
emulator/libs/boost/boost.rar
Normal file
BIN
emulator/libs/boost/boost.rar
Normal file
Binary file not shown.
2
emulator/libs/boost/readme.txt
Normal file
2
emulator/libs/boost/readme.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
This directory is only needed on windows, and if you do not have boost installed.
|
||||
Extract the rar file here, to get boost 1.58 header files and the libraries that we need for discoverpixy
|
||||
@@ -8,7 +8,7 @@ QT += widgets gui
|
||||
|
||||
TARGET = emulatorqt
|
||||
TEMPLATE = lib
|
||||
CONFIG += staticlib
|
||||
CONFIG += staticlib debug
|
||||
|
||||
SOURCES += \
|
||||
mainwindow.cpp \
|
||||
@@ -30,3 +30,6 @@ INCLUDEPATH+= ../../common/lowlevel/ \
|
||||
FORMS += \
|
||||
mainwindow.ui
|
||||
|
||||
DESTDIR = $$_PRO_FILE_PWD_ #force windows to not create subfolders
|
||||
|
||||
#QMAKE_CXXFLAGS+= -v
|
||||
|
||||
@@ -52,9 +52,9 @@ uint8_t ll_tft_num_fonts() {
|
||||
QFont get_font(uint8_t fontnum) {
|
||||
switch(fontnum) {
|
||||
case 0:
|
||||
return QFont("Monospace",8);
|
||||
return QFont("Courier New",8);
|
||||
case 1:
|
||||
return QFont("DejaVu Sans Mono",14);
|
||||
return QFont("Courier New",14);
|
||||
default:
|
||||
return QFont();
|
||||
}
|
||||
|
||||
26
emulator/readme_windows.txt
Normal file
26
emulator/readme_windows.txt
Normal file
@@ -0,0 +1,26 @@
|
||||
Prerequisites:
|
||||
- Qt5 for Windows (provides C:\Qt\5.4\mingw491_32 and C:\Qt\Tools\mingw491_32)
|
||||
- Mingw msys-base (provides C:\MinGW\msys\1.0 and make, find )
|
||||
- Boost (check emulator\libs\boost)
|
||||
|
||||
Steps:
|
||||
- Open up the msys shell using the batchfile
|
||||
- Navigate to the emulator folder of the project
|
||||
- Source the qt binaries (qmake, gcc, g++) by executing
|
||||
export PATH=$PATH:/c/Qt/Tools/mingw491_32/bin:/c/Qt/5.4/mingw491_32/bin
|
||||
- navigate to libs/Pixy and execute make
|
||||
- navigate back into the emulator folder and execute make
|
||||
- this should generate you build/emulator.exe
|
||||
|
||||
Starting:
|
||||
- Extract windows_dlls.rar to the build folder
|
||||
- Copy the emulated folder into the build folder
|
||||
- Make sure that you installed the pixy usb driver (e.g. by installing pixymon http://cmucam.org/projects/cmucam5/wiki/Latest_release)
|
||||
- Start emulator.exe
|
||||
|
||||
Pitfalls:
|
||||
- libstdc++ must be provided by qt. do not use one of msys or mingw. you will waste hours with debugging of the make process
|
||||
|
||||
Sources:
|
||||
- libusb for windows was taken from https://github.com/charmedlabs/pixy/tree/master/src/host/windows
|
||||
- Boost was compiled from sources, using http://andres.jaimes.net/718/how-to-install-the-c-boost-libraries-on-windows/ and http://www.boost.org/doc/libs/1_58_0/more/getting_started/windows.html
|
||||
BIN
emulator/windows_dlls.rar
Normal file
BIN
emulator/windows_dlls.rar
Normal file
Binary file not shown.
16
utils/style.astylerc
Normal file
16
utils/style.astylerc
Normal file
@@ -0,0 +1,16 @@
|
||||
|
||||
# general style
|
||||
--style=1tbs
|
||||
--indent=spaces=4 # default
|
||||
--lineend=linux #only \r as line ending
|
||||
|
||||
# alignment
|
||||
--align-pointer=type #put asterisks to the type. eg. char* a
|
||||
--align-reference=type #put references to the type. eg. int& a
|
||||
|
||||
# padding
|
||||
--break-blocks # insert empty lines between header blocks
|
||||
--unpad-paren # remove extra padding around parens
|
||||
--pad-oper # spaces around operators
|
||||
--pad-header # insert space between header blocks and the following paren
|
||||
--add-brackets # add brackets to one line conditionals
|
||||
@@ -3,14 +3,15 @@
|
||||
|
||||
FILES=`find common/ emulator/ discovery/ -name "*.c" -or -name "*.h" -or -name "*.cpp" | grep -v libs | grep -v /pixy/`
|
||||
|
||||
|
||||
for FILE in $FILES; do
|
||||
echo "Adding Header to $FILE"
|
||||
|
||||
#remove old header
|
||||
CONTENT=$(perl -0777 -pe 's%^/\*.*?discoverpixy.*?\*/%%igs' $FILE)
|
||||
#remove old header, and format file with astyle
|
||||
CONTENT=$(perl -0777 -pe 's%^/\*.*?discoverpixy.*?\*/%%igs' $FILE | astyle --options=./utils/style.astylerc)
|
||||
|
||||
#add new header
|
||||
./genheader.sh $FILE > $FILE
|
||||
./utils/genheader.sh $FILE > $FILE
|
||||
|
||||
#append file content
|
||||
echo "$CONTENT" >> $FILE
|
||||
Reference in New Issue
Block a user