Project 2014-2015-CannonBall/developer guide

= Preambule =

Configuration
Setting up the project

opencv_calib3d249d.lib opencv_contrib249d.lib opencv_core249d.lib opencv_features2d249d.lib opencv_flann249d.lib opencv_gpu249d.lib opencv_highgui249d.lib opencv_imgproc249d.lib opencv_legacy249d.lib opencv_ml249d.lib opencv_nonfree249d.lib opencv_objdetect249d.lib opencv_ocl249d.lib opencv_photo249d.lib opencv_stitching249d.lib opencv_superres249d.lib opencv_ts249d.lib opencv_video249d.lib opencv_videostab249d.lib mosquittopp.lib mosquitto.lib
 * 1) Download the project from our Github repository Github
 * 2) Download and install Visual Studio (we used the 2013 version)
 * 3) Launch CanonBall\QRCode\QRcode.vcxproj with a double click
 * 4) Adding the includes
 * 5) * Add these 3 environment variables (Please refer to your OS documentation for any further indications). If you use Windows : Right click on Computer -> Properties -> Advanced properties -> Environment variables -> Add
 * 6) ** CANNON_BALL 	       path_to_your_cannon_ball_project
 * 7) ** PATH 			$(CANNON_BALL)\QRcode\dll\mosquitto
 * 8) ** PATH 			$(CANNON_BALL)\QRcode\dll\opencv\build\x86\v12\bin
 * 9) * In Visual Studio :
 * 10) ** Add the include path : Right click on CannonBall project (Solution Explorer panel) -> Properties -> C/C++ -> Additional Include Directories : $(CANNON_BALL)\QRcode\include\opencv;$(CANNON_BALL)\QRcode\include
 * 11) ** Add the include path : Right click on CannonBall project (Solution Explorer panel) -> Properties -> C/C++ -> Additional #using Directories : C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1\ExtensionSDKs\Microsoft.VCLibs\12.0\References\CommonConfiguration\neutral;C:\Program Files (x86)\Windows Kits\8.1\References\CommonConfiguration\Neutral. Please ensure that the path to Windows.pltfiurmd and windows.h is correct through windows explorer
 * 12) ** Add the include path : Right click on CannonBall project (Solution Explorer panel) -> Properties -> Linker -> General -> Additional Library Directories : $(CANNON_BALL)\QRcode\lib\opencv;$(CANNON_BALL)\QRcode\lib
 * 13) ** Add the include path : Right click on CannonBall project (Solution Explorer panel) -> Properties -> Linker -> Input -> Additional Dependencies :

= Technology watch =


 * The idea of using a rasberry pi for images processing was put away because of a lack of cpu power. Pour se donner un ordre d'idée le core i3 de la tablette Lenovo Thinkpad ....a ajouter des chiffre par rapport à la tablette


 * The idea of using a raspberry pi to broadcast the video stream to a local server and processing it by a another machine is not conceivable because of the transmission latency of the stream. To give an order of magnitude if the latency is ~1 second, a car at 30 km/h would carry ~8.3 m before the second machine performs its processing.


 * The idea of using a mini and compact tower (example: GB-XM1-3537) is interesting but the absence of in board batteries makes it dependente to a 220 Volts source power.

Moreover a phone is small and has onboard battery. The main concern of our predecessor was that external cameras were not supported on android system. -> We will check on this what was was true a year ago, might be wrong now.
 * The idea of using a phone is interesting because of the richness and accuracy of the sensors (accelerometer, gyroscope, ...). Especially if it has a Tegra type processor, offering greater processing performance. Notice that an simple ARM processor would not do it.

= Technologies chosen =


 * We keep MongoBD database because it offers high write performance and that it is scalable.


 * We keep Node.js for creating a local server from which the tablet can display all the data. We use different modules :
 * socket.io for real time messaging between the client and the server
 * mqtt for a subscribe/pusblish protocol
 * mongoose for manipulating the MongoDB database from JavaScript


 * We keep arUco library which we judge to be powerful enough to our requirements. Plus, it is based on opencv library.

= What we have to accomplish =


 * Finish the prototype in order to be able to present it march 18th, 2015.
 * Redirect the metrics and the webcam stream from the car to any computer accessing to the tablet network
 * Enhance the algorithms of the car.
 * Create a car convoy algorithm.

Notice that we have been joined with two colleague, A.Le Jean and H.Rodriguez.

= What we want to do =


 * Skip to a Linux environnent with a none proprietary IDE to replace Visual Studio 2013
 * We will stick to C++ language because it is more close of the opencv library which is actually coded in C++ language.

= What is expected from us to consider =


 * Enhense the moves of the mini car. There are two ways to do so :
 * Add a shield to the uno arduino
 * Replace the arduino with a STM32 card which is already equipped with embedded sensors. MEMS (microelectromechanical sensors including accelerometers, gyroscopes, digital compasses, inertial modules, pressure sensors, humidity sensors and microphones).

= The risks =


 * Our ability to take over our predecessors' code, and not going back from scratch