<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://airwiki.deib.polimi.it/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=MauroBrenna</id>
		<title>AIRWiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://airwiki.deib.polimi.it/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=MauroBrenna"/>
		<link rel="alternate" type="text/html" href="https://airwiki.deib.polimi.it/index.php/Special:Contributions/MauroBrenna"/>
		<updated>2026-04-07T07:55:03Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.25.6</generator>

	<entry>
		<id>https://airwiki.deib.polimi.it/index.php?title=2D_Mapping_Using_a_Quadtree_Data_Structure&amp;diff=11722</id>
		<title>2D Mapping Using a Quadtree Data Structure</title>
		<link rel="alternate" type="text/html" href="https://airwiki.deib.polimi.it/index.php?title=2D_Mapping_Using_a_Quadtree_Data_Structure&amp;diff=11722"/>
				<updated>2010-05-20T20:51:44Z</updated>
		
		<summary type="html">&lt;p&gt;MauroBrenna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Abstract ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This undergraduate dissertation is intended to investigate the opportunity to use a quad-tree data structure in an effective way in order to provide a consistent global map. The sensor employed was a laser range finder (Hokuyo URG-04LX). The raw data are inserted in the global map using directly the quad-tree so as to produce an occupancy grid without get through an intermediate evenly grid map representation. A scan matcher algorithm is implemented to adjust/accommodate perception according to sensor noise and uncertainty in the motion model (supposed unknown in the work).&lt;br /&gt;
&lt;br /&gt;
The following parts of the document are used to give you hints about techniques and software used so that you can speed up your software development without bothering about trifling details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Bachelor's Thesis titled ''Costruzioni di mappe basate su quadtree'' [[Media:MauroBrennaTesiTriennale.pdf‎]] (in Italian)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quad-tree Used and Insertion Method ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The idea is using directly the quad-tree map representation from the very start.&lt;br /&gt;
Simply:&lt;br /&gt;
&lt;br /&gt;
# choose a resolution limit;&lt;br /&gt;
# select  a way to retrieve the occupancy probability of each cell, for instance : occprob= occ/vis.&lt;br /&gt;
occ value indicates how many times the laser endpoint is bound in that cell, while vis expresses how many times the 'segment' sensor-laser_endpoint passes through that cell.&lt;br /&gt;
&lt;br /&gt;
The starting quad-tree is a simple 4 squared map. Every time a single laser acquisition is read, just create the tree deepening only the cell where the point is bound 'till the resolution limit is reached.&lt;br /&gt;
Then you can update the occupancy probability of the interested cell.&lt;br /&gt;
In creating the 'segment' is advisable exploit a line rasterization algorithm such as [http://en.wikipedia.org/wiki/Bresenham's_line_algorithm Bresenham]'s one to avoid possible discretization problems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scan Matcher ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For that phase, it's possible to use the classic scan matcher algorithms or look for something cheaper in terms of computational resources exploiting the tree map.&lt;br /&gt;
For an overview of the techniques in references you can find worth reading papers.&lt;br /&gt;
A simple observation occurs if a a similar quad-tree to the former described one is used:&lt;br /&gt;
if you are looking for the cells with the highest occupancy probability value you should look the maximum resolution nodes only.&lt;br /&gt;
To compare/correlate the local map you have just retrieved with a reference scan you may:&lt;br /&gt;
&lt;br /&gt;
* use the global map formed by these max resolution cells only;&lt;br /&gt;
* use the previous scan, saving it in memory, and find the correlation between the two.&lt;br /&gt;
&lt;br /&gt;
A nutty, and for many reason opinable, method consists in use as correlation value the sum of the occupancy probability of each cell in which the data of the current scan is bound (given a testing pose).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== From Quad-tree Map Representation to Human Readable Map ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now that the hard work is done it would be nice and pleasant to build a JPG/PNG image describing the global map. Here you can find some advice.&lt;br /&gt;
&lt;br /&gt;
First, which library to use? &lt;br /&gt;
Probably Image Magick[++] or OpenGL. Testing the former we can assure you that it is not suitable for creating maps above 3000x3000px; At this threshold, compile and running the program to build the image can last very long and cause errors.&lt;br /&gt;
Anyway in every image manipulation library you should find a method like create_square(geometry,colour). Obviously you can set the colour mapping the grey-scale to occupancy probability values.&lt;br /&gt;
The second thing you would probably want to point out is uncouple the robot quad-tree map generation and the human readable output (not to CPU time during the SLAM).&lt;br /&gt;
The easiest way is to provide a method for each node that write a string that is an instruction of the image manipulation library (the create_square()s ). You can generate a sort of map log file visiting the tree and calling this method for each node. Offline you can assemble that file with other two, for example the beginning of a C program which includes that library and its end, using a simple script; compile it and run the program to create the image. This technique is easy to automate and waste the least amount of time.&lt;br /&gt;
You may also think about a vector format image, e.g. SVG, in order to skip the 'assemble and compile' phase.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References: ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://openslam.org/&lt;br /&gt;
&lt;br /&gt;
http://www.opengl.org/&lt;br /&gt;
&lt;br /&gt;
http://www.imagemagick.org/www/Magick++/&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Bresenham's_line_algorithm&lt;br /&gt;
&lt;br /&gt;
G. Grisetti, C. Stachniss, and W Burgard. Improved techniques for grid&lt;br /&gt;
mapping with rao-blackwellized particle filters, 2006.&lt;br /&gt;
&lt;br /&gt;
A. Censi, L. Iocchi, and G. Grisetti. Scan matching in the hough&lt;br /&gt;
domain, in proc. of intern. conference on robotics and automation&lt;br /&gt;
(icra’05), 2005. Technical report, 2005.&lt;br /&gt;
&lt;br /&gt;
Sebastian Thrun, Wolfram Burgard, and Dieter Fox. Probabilistic&lt;br /&gt;
robotics. MIT Press, 2005.&lt;br /&gt;
&lt;br /&gt;
Y. Kang D. Caveney and J.K. Hedrick. Probabilistic mapping for unmanned rotorcraft using point-mass targets and  quadtree structures. In Proc. of ASME IMECE Orlando, FL, Nov., 2005.&lt;br /&gt;
&lt;br /&gt;
Gerhard K. Kraetzschmar, Guillem Pag`s Gassull, and Klaus Uhl. Probabilistic quadtrees for variable-resolution mapping of large environments. In M. I. Ribeiro and J. Santos Victor, editors, Proceedings of the 5th IFAC/EURON  symposium on Intelligent Autonomous Vehicles, Lisbon, Portugal, July 2004. Elsevier Science.&lt;br /&gt;
&lt;br /&gt;
Ioannis M. Rekleitis. A particle filter tutorial for mobile robot&lt;br /&gt;
localization. (TR-CIM-04-02), 2004.&lt;br /&gt;
&lt;br /&gt;
J.-S. Gutmann, C. Schlegel, &amp;quot;AMOS: comparison of scan matching approaches for self-localization in indoor environments,&amp;quot; eurobot, p. 61,  1st Euromicro Workshop on Advanced Mobile Robots (EUROBOT),  1996&lt;/div&gt;</summary>
		<author><name>MauroBrenna</name></author>	</entry>

	<entry>
		<id>https://airwiki.deib.polimi.it/index.php?title=User:MauroBrenna&amp;diff=11721</id>
		<title>User:MauroBrenna</title>
		<link rel="alternate" type="text/html" href="https://airwiki.deib.polimi.it/index.php?title=User:MauroBrenna&amp;diff=11721"/>
				<updated>2010-05-20T20:49:19Z</updated>
		
		<summary type="html">&lt;p&gt;MauroBrenna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Student&lt;br /&gt;
|firstname=Mauro&lt;br /&gt;
|lastname=Brenna&lt;br /&gt;
|email=mauro(dot)brenna(at)mail(dot)polimi(dot)it&lt;br /&gt;
|advisor=MatteoMatteucci&lt;br /&gt;
|projectpage=LURCH_-_The_autonomous_wheelchair&lt;br /&gt;
|photo=MauroBrenna.jpg |&lt;br /&gt;
|status=active&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Mauro Brenna'''&lt;br /&gt;
&lt;br /&gt;
nato a Como (CO) il 22-05-1985&lt;br /&gt;
&lt;br /&gt;
'''Istruzione e formazione'''&lt;br /&gt;
&lt;br /&gt;
- ''2007- 2010'' Ingegneria informatica (2° livello) votazione 110 e lode con tesi ''Scan Matching, Covariance Estimation and SLAM: Models and Solutions for the scanSLAM Algorithm''. La tesi è stata svolta nel contesto del progetto [[LURCH - The autonomous wheelchair]]&lt;br /&gt;
&lt;br /&gt;
- ''2004 - 2007'' Laurea in Ingegneria informatica (1° livello) votazione 110 e lode con tesina:&amp;quot;Costruzione di mappe basate su quadtree&amp;quot;. Una piccola descrizione è presente a questo indirizzo: [[2D Mapping Using a Quadtree Data Structure|2D Mapping Using a Quadtree Data Structure ]]&lt;br /&gt;
&lt;br /&gt;
'''Attività in AIRLab'''&lt;br /&gt;
&lt;br /&gt;
Svolta tesi laurea in Ingegneria informatica (2° livello). Tematiche trattate: scanmatching, autocalibrazione e odometria su laser, tecniche di filtraggio (Extended Kalman Filter).&lt;br /&gt;
&lt;br /&gt;
'''Tesi e Materiale'''&lt;br /&gt;
&lt;br /&gt;
- Master's Thesis titled ''Scan Matching, Covariance Estimation and SLAM: Models and Solution for the scanSLAM Algorithm'': [[Media:MauroBrennaMastersThesis2010.pdf‎]] (in English)&lt;br /&gt;
&lt;br /&gt;
- Bachelor's Thesis titled ''Costruzioni di mappe basate su quadtree'' [[Media:MauroBrennaTesiTriennale.pdf‎]] (in Italian)&lt;br /&gt;
&lt;br /&gt;
'''Contatti'''&lt;br /&gt;
&lt;br /&gt;
[http://it.linkedin.com/in/maurobrenna Linked in]&lt;/div&gt;</summary>
		<author><name>MauroBrenna</name></author>	</entry>

	<entry>
		<id>https://airwiki.deib.polimi.it/index.php?title=File:MauroBrennaTesiTriennale.pdf&amp;diff=11720</id>
		<title>File:MauroBrennaTesiTriennale.pdf</title>
		<link rel="alternate" type="text/html" href="https://airwiki.deib.polimi.it/index.php?title=File:MauroBrennaTesiTriennale.pdf&amp;diff=11720"/>
				<updated>2010-05-20T20:40:21Z</updated>
		
		<summary type="html">&lt;p&gt;MauroBrenna: Mauro Brenna bachelor's thesis titled ''Costruzioni di mappe basate su quadtree'' (in Italian)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mauro Brenna bachelor's thesis titled ''Costruzioni di mappe basate su quadtree'' (in Italian)&lt;/div&gt;</summary>
		<author><name>MauroBrenna</name></author>	</entry>

	<entry>
		<id>https://airwiki.deib.polimi.it/index.php?title=LURCH_-_The_autonomous_wheelchair&amp;diff=11719</id>
		<title>LURCH - The autonomous wheelchair</title>
		<link rel="alternate" type="text/html" href="https://airwiki.deib.polimi.it/index.php?title=LURCH_-_The_autonomous_wheelchair&amp;diff=11719"/>
				<updated>2010-05-20T20:35:55Z</updated>
		
		<summary type="html">&lt;p&gt;MauroBrenna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Project&lt;br /&gt;
|title=LURCH - the autonomous wheelchair&lt;br /&gt;
|image=LURCH wheelchair.jpg&lt;br /&gt;
|short_descr=augmenting commercial electric wheelchairs with autonomous navigation and obstacle avoidance&lt;br /&gt;
|coordinator=MatteoMatteucci&lt;br /&gt;
|tutor=SimoneCeriani;DavideMigliore&lt;br /&gt;
|collaborator=GiulioFontana&lt;br /&gt;
|students=MatteoRossi;MauroBrenna&lt;br /&gt;
|resarea=Robotics&lt;br /&gt;
|restopic=Robot development&lt;br /&gt;
|start=2007/02/01&lt;br /&gt;
|end=2010/12/31&lt;br /&gt;
|status=Active&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;!--[[Image:LURCH wheelchair.jpg|thumb|right|300px|LURCH in DEI exploration]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L.U.R.C.H. is the acronym of &amp;quot;Let Unleashed Robots Crawl the House&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
LURCH is an extended version of an commercial electric wheelchair (Rabbit by OttoBock) equipped with:&lt;br /&gt;
# An interface circuit for digital drive via a radio serial link (XBee modules)&lt;br /&gt;
# Two on-board computers ([[PCBricks]]), powered by wheelchair batteries&lt;br /&gt;
# A 7-inch touchscreen monitor ([http://www.xenarc.com/product/700tsv.html Xenarc 700TSV]), 800x480 resolution (16:10 AR)&lt;br /&gt;
# Two laser scanners Hokuyo URG 04LX&lt;br /&gt;
# A colour camera FireI400 (resolution 640×480)&lt;br /&gt;
# An odometry system based on encoders applied to the rear wheels&lt;br /&gt;
&amp;lt;!-- #Accelerometer, gyroscope, magnetometer XSens MTi.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Main goals of the LURCH project are:&lt;br /&gt;
# Add sensors and robotic functionalities to the powered wheelchair.&lt;br /&gt;
# Add various command interfaces, such as Joypad wireless, speech command, [[Brain-Computer Interface|brain-computer interface]].&lt;br /&gt;
# Semi-autonomous navigation with collision and obstacle avoidance.&lt;br /&gt;
# Autonomous navigation by path planning and localization.&lt;br /&gt;
&lt;br /&gt;
Functions currently provided by LURCH:&lt;br /&gt;
# Driving by the original joystick or a Logitech RumblePad2 wireless joypad.&lt;br /&gt;
# Obstacle sensing using planar scanner lasers.&lt;br /&gt;
# Basic collision and obstacle avoidance behaviours.&lt;br /&gt;
# Indoor localization by a ''fiducial marker system''&lt;br /&gt;
# Path planning and basic autonomous navigation.&lt;br /&gt;
# [[Brain-Computer Interface|Brain-computer interface]] driving system &lt;br /&gt;
&lt;br /&gt;
==Media Coverage==&lt;br /&gt;
Lurch project appeared in many national and international media. You can see the related articles and videos in the [[MediaCoverage]] page.&lt;br /&gt;
&lt;br /&gt;
==Available Documentation==&lt;br /&gt;
&lt;br /&gt;
- Documentation on the interface circuit between the wheelchair joystick and computer: [[Media:LurchCircuitDocument.pdf]].&lt;br /&gt;
&lt;br /&gt;
- '''WARNING''': the circuit was modified and the documentation above is upgraded by this new file: [[Media:LurchXBee.pdf]].&lt;br /&gt;
&lt;br /&gt;
- How to modify the wheelchair joystick to connect to the interface circuit: [[Media:LurchCircuitJoystick.pdf]].&lt;br /&gt;
&lt;br /&gt;
- Brief discussion about the interface circuit between the wheelchair joystick and computer: [[Media:LurchCircuitJoystickBrief.pdf]].&lt;br /&gt;
&lt;br /&gt;
- Brief description of the LURCH project: [[Media:LurchBriefDesc.pdf]].&lt;br /&gt;
&lt;br /&gt;
- Brief description of the communication between the wheelchair interface circuit and a PC via RS232 port: [[Media:LurchProtocol.pdf]].&lt;br /&gt;
&lt;br /&gt;
- Source code for PIC 18F452 microprocessor and Eagle project (schematic and board): [[Media:LurchCircuitProject.zip]].&lt;br /&gt;
&lt;br /&gt;
- Battery replacement done on May 2009, description of work: [[Media:LurchBatteryReplacement.pdf]].&lt;br /&gt;
&lt;br /&gt;
- Thesis by Simone Ceriani, titled ''Sviluppo di una carrozzina autonoma d'ausilio ai disabili motori'' (Development of an autonomous wheelchair to help motor-disabled persons): [[Media:LurchThesisCeriani.pdf]] (in Italian)&lt;br /&gt;
&lt;br /&gt;
- Thesis presentation by Simone Ceriani (note: Videos don't work, you can found similar videos below): [[Media:LurchPresentazioneThesisCeriani.zip]]&lt;br /&gt;
&lt;br /&gt;
- Thesis by Marco Dalli, titled ''Sviluppo di un sistema di controllo basato su odometria per una carrozzina robotica'' (Development of a control system based on odometry for a robotic wheelchair): [[Media:LurchThesisDalli.pdf]] (in Italian)&lt;br /&gt;
&lt;br /&gt;
- Thesis presentation by Marco Dalli: [[Media:LurchPresentazioneThesisDalli.zip]]&lt;br /&gt;
&lt;br /&gt;
- Thesis by Marco Assini, titled ''Sviluppo di un pianificatore di percorsi geometrici per una carrozzina autonoma'' (Development of a geometric path planner for an autonomous wheelchair): [[Media:LurchThesisAssini.pdf]] (in Italian)&lt;br /&gt;
&lt;br /&gt;
- Thesis presentation by Marco Assini (the  file contains a ppt version, a pptx, and a simplified pdf version without animation): [[Media:LurchPresentazioneThesisAssini.zip]]&lt;br /&gt;
&lt;br /&gt;
- Thesis by Mauro Brenna, titled ''Scan Matching, Covariance Estimation and SLAM: Models and Solution for the scanSLAM Algorithm'': [[Media:MauroBrennaMastersThesis2010.pdf‎]] (in English)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Pdf with ArtoolKitPlus Fiducial Markers collection. Dimension are 160x160mm. [[Media:ArtoolKitPlusMarkers-160mm.pdf.zip]]&lt;br /&gt;
&lt;br /&gt;
==PCBricks Configuration==&lt;br /&gt;
PCBrick-03 and PCBrick-05 feature Xubuntu Linux 7.10, Xfce Window Manager, Openchrome graphics drivers and eGalax touchscreen drivers v1.08.1227 (Drivers [http://210.64.17.162/web20/TouchKitDriver/linuxDriver.htm here]).&lt;br /&gt;
The touchscreen is configured and calibrated on both machines, hence it can be used with either one or the other indifferently.&lt;br /&gt;
&lt;br /&gt;
==Electronics development==&lt;br /&gt;
We are currently designing a new electronic main board for the wheelchair.&lt;br /&gt;
&lt;br /&gt;
The idea is to base the whole system on a CANbus, allowing a complete modularization of the on-board electronics.&lt;br /&gt;
&lt;br /&gt;
[[Lurch_electronics_development|Read more on this topics here...]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software development==&lt;br /&gt;
* Try a different sw architecture, now we are examinating orocos [http://www.orocos.org]&lt;br /&gt;
* Integrate Marco Assini's thesis (RRT planning) with current release&lt;br /&gt;
* Develop an improved navigation system [[Navigation_system_for_LURCH|Read more on this topics here...]]&lt;br /&gt;
&lt;br /&gt;
==LURCH YouTube Videos==&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|7bZ45sGf3qs}}&lt;br /&gt;
&lt;br /&gt;
*[http://www.youtube.com/watch?v=7bZ45sGf3qs External link]&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|PFjlmcTbGVs}}&lt;br /&gt;
*[http://www.youtube.com/watch?v=PFjlmcTbGVs External link]&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|RBfIq8eQJ6Q}}&lt;br /&gt;
*[http://www.youtube.com/watch?v=RBfIq8eQJ6Q External link]&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|iRw8PhY8IF4}}&lt;br /&gt;
*[http://www.youtube.com/watch?v=iRw8PhY8IF4 External link]&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|zlhePZbRxZA}}&lt;br /&gt;
*[http://www.youtube.com/watch?v=zlhePZbRxZA External link]&lt;br /&gt;
&lt;br /&gt;
=People Involved=&lt;br /&gt;
&lt;br /&gt;
[[User:AndreaBonarini|Andrea Bonarini]]&lt;br /&gt;
&lt;br /&gt;
[[User:MatteoMatteucci|Matteo Matteucci]]&lt;br /&gt;
&lt;br /&gt;
[[User:DavideMigliore|Davide Migliore]]&lt;br /&gt;
&lt;br /&gt;
[[User:GiulioFontana|Giulio Fontana]]&lt;br /&gt;
&lt;br /&gt;
[[User:BernardoDalSeno|Bernardo Dal Seno]]&lt;br /&gt;
&lt;br /&gt;
[[User:MarcoDalli|Marco Dalli]] (ex-Tesista)&lt;br /&gt;
&lt;br /&gt;
[[User:SimoneCeriani|Simone Ceriani]] (Assegnista di ricerca)&lt;br /&gt;
&lt;br /&gt;
[[User:MatteoRossi|Matteo Rossi]] (Tesista)&lt;br /&gt;
&lt;br /&gt;
[[User:MarcoAssini|Marco Assini]] (ex-Tesista)&lt;br /&gt;
&lt;br /&gt;
[[User:MauroBrenna|Mauro Brenna]] (Tesista)&lt;br /&gt;
&lt;br /&gt;
=== Laboratory work and risk analysis ===&lt;br /&gt;
&lt;br /&gt;
Laboratory work for this project is mainly performed at AIRLab/Lambrate. It includes some mechanical work and electrical and electronic activity. Potentially risky activities are the following:&lt;br /&gt;
* Use of mechanical tools. Standard safety measures described in [http://airlab.elet.polimi.it/index.php/airlab/content/download/461/4110/file/documento_valutazione_rischi_AIRLab.pdf Safety norms] will be followed.&lt;br /&gt;
* Use of soldering iron. Standard safety measures described in [http://airlab.elet.polimi.it/index.php/airlab/content/download/461/4110/file/documento_valutazione_rischi_AIRLab.pdf Safety norms] will be followed.&lt;br /&gt;
* Transportation of heavy loads (e.g. robots).  Standard safety measures described in [http://airlab.elet.polimi.it/index.php/airlab/content/download/461/4110/file/documento_valutazione_rischi_AIRLab.pdf Safety norms] will be followed.&lt;br /&gt;
* Robot testing.  Standard safety measures described in [http://airlab.elet.polimi.it/index.php/airlab/content/download/461/4110/file/documento_valutazione_rischi_AIRLab.pdf Safety norms] will be followed.&lt;/div&gt;</summary>
		<author><name>MauroBrenna</name></author>	</entry>

	<entry>
		<id>https://airwiki.deib.polimi.it/index.php?title=File:MauroBrennaMastersThesis2010.pdf&amp;diff=11718</id>
		<title>File:MauroBrennaMastersThesis2010.pdf</title>
		<link rel="alternate" type="text/html" href="https://airwiki.deib.polimi.it/index.php?title=File:MauroBrennaMastersThesis2010.pdf&amp;diff=11718"/>
				<updated>2010-05-20T20:27:55Z</updated>
		
		<summary type="html">&lt;p&gt;MauroBrenna: Mauro Brenna master's thesis:

&amp;quot;Scan Matching, Covariance Estimation and SLAM: Models and Solutions for the scanSLAM Algorithm&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mauro Brenna master's thesis:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Scan Matching, Covariance Estimation and SLAM: Models and Solutions for the scanSLAM Algorithm&amp;quot;&lt;/div&gt;</summary>
		<author><name>MauroBrenna</name></author>	</entry>

	<entry>
		<id>https://airwiki.deib.polimi.it/index.php?title=Tips_%27n%27_tricks&amp;diff=9200</id>
		<title>Tips 'n' tricks</title>
		<link rel="alternate" type="text/html" href="https://airwiki.deib.polimi.it/index.php?title=Tips_%27n%27_tricks&amp;diff=9200"/>
				<updated>2009-11-04T12:32:28Z</updated>
		
		<summary type="html">&lt;p&gt;MauroBrenna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Below you can find some useful ideas or info about common tasks or problems.&lt;br /&gt;
&lt;br /&gt;
== AIRWiki ==&lt;br /&gt;
* When you are facing a problem, before starting to browse the Internet and scratch your head, take a look to AIRWiki: it's possible that other users already solved it for you. If you don't find the solution on AIRWiki and have to look elsewhere for it (and possibly do a lot of work), when you finish... add it to AIRWiki!&lt;br /&gt;
* If you find a page useful and you want to know if someone ever adds other good stuff to it, you can ''watch'' the page. Just click on the ''watch'' button at the top of the page you're interested in.  You will receive an email notification for any update.&lt;br /&gt;
&lt;br /&gt;
== Writing and reading==&lt;br /&gt;
* Give a look at some [[Tesi|suggestions]] for preparing your thesis (only in Italian for now... translators are welcome!).&lt;br /&gt;
* You can access all the papers for which Politecnico has bought a subscription even when you are at home if you enable the [[http://www.asi.polimi.it/rete/proxy/index.html Politecnico proxy]]. The instruction page is provided by the nice people of [[http://www.asi.polimi.it/ ASI]] in Italian only.  For an English version of the page, try to poke them if you find a way to contact them.&lt;br /&gt;
* For [http://ph.dei.polimi.it/phday PhDay08] we've set up an [http://www.easychair.org Easychair] account for paper reviews. Here's a little [[EasyChair Reviews|tutorial for reviewers]] that might be useful in case you have to review somehing/teach someone how the system works.&lt;br /&gt;
&lt;br /&gt;
== Software and programming ==&lt;br /&gt;
* Someone wrote some advice about [[Writing Good Code|writing code]]&lt;br /&gt;
* Info about [[Mathematica]]&lt;br /&gt;
* How to plot using gnuplot in your C/C++ project [[Gnuplot in cpp]]&lt;br /&gt;
* The ever-growing AIRLab guide about [[Getting Started With PIC(TM) MCU]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
* Need to learn how to solder? Check the following links: [http://www.wireless.hackaday.com/2007/10/26/how-to-introduction-to-soldering/ 1] [http://www.wireless.hackaday.com/2007/10/28/followup-soldering-how-to/ 2] [http://www.make-digital.com/make/vol01/?pg=166 3]&lt;br /&gt;
* Some useful addresses and links about shops, stores, factories. With some of them we have partnerships for discounts. You can found information [[Shops| here]].&lt;br /&gt;
&lt;br /&gt;
== Producing videos and publishing them ==&lt;br /&gt;
* Usually, at the end of the project, people tend to produce a video and put it on the web. The best way to do this is to [[produce a video]] and then send it to [[User:AndreaBonarini | Andrea Bonarini]] to have it published on the YouTube channel of the AIRLab. Then you can put the link wherever you want, hopefully also in the page of your project on AIRWiki, as done, e.g. in [[ROBOWII]]&lt;br /&gt;
&lt;br /&gt;
== Miscellanea (uncategorized) ==&lt;br /&gt;
* If you are searching the homepage of a DEI professor (or PhD Student) try this [http://mycroft.mozdev.org/download.html?name=dei+people&amp;amp;skipcache=yes Mozilla plugin]&lt;/div&gt;</summary>
		<author><name>MauroBrenna</name></author>	</entry>

	<entry>
		<id>https://airwiki.deib.polimi.it/index.php?title=Gnuplot_in_cpp&amp;diff=9199</id>
		<title>Gnuplot in cpp</title>
		<link rel="alternate" type="text/html" href="https://airwiki.deib.polimi.it/index.php?title=Gnuplot_in_cpp&amp;diff=9199"/>
				<updated>2009-11-04T12:11:44Z</updated>
		
		<summary type="html">&lt;p&gt;MauroBrenna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''How to plot using gnuplot in your C/C++ programs'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a little guide that shows you how you can add a plotting function in your C/C++ program.&lt;br /&gt;
This approach has some advantages and disadvantages:&lt;br /&gt;
&lt;br /&gt;
PROS&lt;br /&gt;
- You don't need to write on files or similar and plot in a second moment through a Matlab/Octave/Gnuplot script&lt;br /&gt;
&lt;br /&gt;
CONTRAS&lt;br /&gt;
- You don't have all the potentiality of Matlab/Octave plotting even if you can program your plotting utilities&lt;br /&gt;
&lt;br /&gt;
'''HOW TO'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# You should download gnuplot-cpp library. I suggest you to use my version [[Media: Gnuplot-cpp_modified.zip‎]] because the official one [http://code.google.com/p/gnuplot-cpp/ gnuplot-cpp] has problems, (see below).&lt;br /&gt;
#To use the plotting library you should only need to include: &amp;quot;gnuplot-cpp/gnuplot_i.hpp&amp;quot;&lt;br /&gt;
# A code snippet is here presented that simply plots a 2D set of points:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    if(ANIMATIONON){&lt;br /&gt;
         // GNUPLOT&lt;br /&gt;
         // GNUPLOT INITIALIZATION&lt;br /&gt;
         Gnuplot gp(&amp;quot;My plot&amp;quot;);&lt;br /&gt;
         //std::vector&amp;lt;double&amp;gt; x,y; // this are the vector containing (x,y) points&lt;br /&gt;
         // END GNUPLOT INITIALIZATION&lt;br /&gt;
         try {&lt;br /&gt;
            gp.remove_tmpfiles(); // it is always better to do it&lt;br /&gt;
            gp.reset_plot(); // delete the plot (like Matlab figure())&lt;br /&gt;
            cout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; &amp;quot;*** user-defined lists of points (x,y)&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
            gp.set_grid();&lt;br /&gt;
            gp.set_style(&amp;quot;points&amp;quot;).plot_xy(x,y,&amp;quot;user-defined points 2d&amp;quot;);&lt;br /&gt;
            //sleep(1);  &lt;br /&gt;
            //usleep(3e5);&lt;br /&gt;
         }&lt;br /&gt;
         catch (GnuplotException ge)&lt;br /&gt;
         {&lt;br /&gt;
            cout &amp;lt;&amp;lt; ge.what() &amp;lt;&amp;lt; endl;&lt;br /&gt;
        }&lt;br /&gt;
      } // END GNUPLOT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''HOW IT WORKS'''&lt;br /&gt;
&lt;br /&gt;
For what I understood, the program writes a temp file (/tmp) in GNU/Linux and use it to plot in the correct way using [http://www.gnuplot.info/ Gnuplot].&lt;br /&gt;
&lt;br /&gt;
'''PROBLEM OF THE OFFICIAL VERSION'''&lt;br /&gt;
&lt;br /&gt;
Up to now (read the data of this post), the official package provided [http://code.google.com/p/gnuplot-cpp/ gnuplot-cpp] it has problems that deals with tempFiles. In many cases, for example in the destructor the function ''remove_tmpfiles()'' is commented. In this way many and many files are created in /tmp and after the max files limit is reached no other plots are created. Note that this could be useful if you want to save your points in a file for other processing.&lt;br /&gt;
Moreover a major problem is due to the wrong use of the header file. Some functions are not inline and global constats are defined. These cause linking problems when you include official &amp;quot;gnuplot-cpp/gnuplot_i.hpp&amp;quot; in more than one source files.&lt;/div&gt;</summary>
		<author><name>MauroBrenna</name></author>	</entry>

	<entry>
		<id>https://airwiki.deib.polimi.it/index.php?title=Gnuplot_in_cpp&amp;diff=9198</id>
		<title>Gnuplot in cpp</title>
		<link rel="alternate" type="text/html" href="https://airwiki.deib.polimi.it/index.php?title=Gnuplot_in_cpp&amp;diff=9198"/>
				<updated>2009-11-04T12:09:40Z</updated>
		
		<summary type="html">&lt;p&gt;MauroBrenna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''How to plot using gnuplot in your C/C++ programs'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a little guide that shows you how you can add a plotting function in your C/C++ program.&lt;br /&gt;
This approach has some advantages and disadvantages:&lt;br /&gt;
&lt;br /&gt;
PROS&lt;br /&gt;
- You don't need to write on files or similar and plot in a second moment through a Matlab/Octave/Gnuplot script&lt;br /&gt;
&lt;br /&gt;
CONTRAS&lt;br /&gt;
- You don't have all the potentiality of Matlab/Octave plotting even if you can program your plotting utilities&lt;br /&gt;
&lt;br /&gt;
'''HOW TO'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# You should download gnuplot-cpp library. I suggest you to use my version [[Media:Gnuplot-cpp_modified.zip‎]] because the official one [http://code.google.com/p/gnuplot-cpp/ gnuplot-cpp] has problems, (see below).&lt;br /&gt;
#To use the plotting library you should only need to include: &amp;quot;gnuplot-cpp/gnuplot_i.hpp&amp;quot;&lt;br /&gt;
# A code snippet is here presented that simply plots a 2D set of points:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    if(ANIMATIONON){&lt;br /&gt;
         // GNUPLOT&lt;br /&gt;
         // GNUPLOT INITIALIZATION&lt;br /&gt;
         Gnuplot gp(&amp;quot;My plot&amp;quot;);&lt;br /&gt;
         //std::vector&amp;lt;double&amp;gt; x,y; // this are the vector containing (x,y) points&lt;br /&gt;
         // END GNUPLOT INITIALIZATION&lt;br /&gt;
         try {&lt;br /&gt;
            gp.remove_tmpfiles(); // it is always better to do it&lt;br /&gt;
            gp.reset_plot(); // delete the plot (like Matlab figure())&lt;br /&gt;
            cout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; &amp;quot;*** user-defined lists of points (x,y)&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
            gp.set_grid();&lt;br /&gt;
            gp.set_style(&amp;quot;points&amp;quot;).plot_xy(x,y,&amp;quot;user-defined points 2d&amp;quot;);&lt;br /&gt;
            //sleep(1);  &lt;br /&gt;
            //usleep(3e5);&lt;br /&gt;
         }&lt;br /&gt;
         catch (GnuplotException ge)&lt;br /&gt;
         {&lt;br /&gt;
            cout &amp;lt;&amp;lt; ge.what() &amp;lt;&amp;lt; endl;&lt;br /&gt;
        }&lt;br /&gt;
      } // END GNUPLOT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''HOW IT WORKS'''&lt;br /&gt;
&lt;br /&gt;
For what I understood, the program writes a temp file (/tmp) in GNU/Linux and use it to plot in the correct way using [http://www.gnuplot.info/ Gnuplot].&lt;br /&gt;
&lt;br /&gt;
'''PROBLEM OF THE OFFICIAL VERSION'''&lt;br /&gt;
&lt;br /&gt;
Up to now (read the data of this post), the official package provided [http://code.google.com/p/gnuplot-cpp/ gnuplot-cpp] it has problems that deals with tempFiles. In many cases, for example in the destructor the function ''remove_tmpfiles()'' is commented. In this way many and many files are created in /tmp and after the max files limit is reached no other plots are created. Note that this could be useful if you want to save your points in a file for other processing.&lt;br /&gt;
Moreover a major problem is due to the wrong use of the header file. Some functions are not inline and global constats are defined. These cause linking problems when you include official &amp;quot;gnuplot-cpp/gnuplot_i.hpp&amp;quot; in more than one source files.&lt;/div&gt;</summary>
		<author><name>MauroBrenna</name></author>	</entry>

	<entry>
		<id>https://airwiki.deib.polimi.it/index.php?title=File:Gnuplot-cpp_modified.zip&amp;diff=9197</id>
		<title>File:Gnuplot-cpp modified.zip</title>
		<link rel="alternate" type="text/html" href="https://airwiki.deib.polimi.it/index.php?title=File:Gnuplot-cpp_modified.zip&amp;diff=9197"/>
				<updated>2009-11-04T12:04:09Z</updated>
		
		<summary type="html">&lt;p&gt;MauroBrenna: The source package of the modified version of gnuplot-cpp.
For the official one see: http://code.google.com/p/gnuplot-cpp/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The source package of the modified version of gnuplot-cpp.&lt;br /&gt;
For the official one see: http://code.google.com/p/gnuplot-cpp/&lt;/div&gt;</summary>
		<author><name>MauroBrenna</name></author>	</entry>

	<entry>
		<id>https://airwiki.deib.polimi.it/index.php?title=Gnuplot_in_cpp&amp;diff=9196</id>
		<title>Gnuplot in cpp</title>
		<link rel="alternate" type="text/html" href="https://airwiki.deib.polimi.it/index.php?title=Gnuplot_in_cpp&amp;diff=9196"/>
				<updated>2009-11-04T12:02:00Z</updated>
		
		<summary type="html">&lt;p&gt;MauroBrenna: How to plot using gnuplot in your C/C++ project&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''How to plot using gnuplot in your C/C++ programs'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a little guide that shows you how you can add a plotting function in your C/C++ program.&lt;br /&gt;
This approach has some advantages and disadvantages:&lt;br /&gt;
&lt;br /&gt;
PROS&lt;br /&gt;
- You don't need to write on files or similar and plot in a second moment through a Matlab/Octave/Gnuplot script&lt;br /&gt;
&lt;br /&gt;
CONTRAS&lt;br /&gt;
- You don't have all the potentiality of Matlab/Octave plotting even if you can program your plotting utilities&lt;br /&gt;
&lt;br /&gt;
'''HOW TO'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# You should download gnuplot-cpp library. I suggest you to use my version LINKHERE because the official one [http://code.google.com/p/gnuplot-cpp/ gnuplot-cpp] has problems, (see below).&lt;br /&gt;
#To use the plotting library you should only need to include: &amp;quot;gnuplot-cpp/gnuplot_i.hpp&amp;quot;&lt;br /&gt;
# A code snippet is here presented that simply plots a 2D set of points:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    if(ANIMATIONON){&lt;br /&gt;
         // GNUPLOT&lt;br /&gt;
         // GNUPLOT INITIALIZATION&lt;br /&gt;
         Gnuplot gp(&amp;quot;My plot&amp;quot;);&lt;br /&gt;
         //std::vector&amp;lt;double&amp;gt; x,y; // this are the vector containing (x,y) points&lt;br /&gt;
         // END GNUPLOT INITIALIZATION&lt;br /&gt;
         try {&lt;br /&gt;
            gp.remove_tmpfiles(); // it is always better to do it&lt;br /&gt;
            gp.reset_plot(); // delete the plot (like Matlab figure())&lt;br /&gt;
            cout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; &amp;quot;*** user-defined lists of points (x,y)&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
            gp.set_grid();&lt;br /&gt;
            gp.set_style(&amp;quot;points&amp;quot;).plot_xy(x,y,&amp;quot;user-defined points 2d&amp;quot;);&lt;br /&gt;
            //sleep(1);  &lt;br /&gt;
            //usleep(3e5);&lt;br /&gt;
         }&lt;br /&gt;
         catch (GnuplotException ge)&lt;br /&gt;
         {&lt;br /&gt;
            cout &amp;lt;&amp;lt; ge.what() &amp;lt;&amp;lt; endl;&lt;br /&gt;
        }&lt;br /&gt;
      } // END GNUPLOT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''HOW IT WORKS'''&lt;br /&gt;
&lt;br /&gt;
For what I understood, the program writes a temp file (/tmp) in GNU/Linux and use it to plot in the correct way using [http://www.gnuplot.info/ Gnuplot].&lt;br /&gt;
&lt;br /&gt;
'''PROBLEM OF THE OFFICIAL VERSION'''&lt;br /&gt;
&lt;br /&gt;
Up to now (read the data of this post), the official package provided [http://code.google.com/p/gnuplot-cpp/ gnuplot-cpp] it has problems that deals with tempFiles. In many cases, for example in the destructor the function ''remove_tmpfiles()'' is commented. In this way many and many files are created in /tmp and after the max files limit is reached no other plots are created. Note that this could be useful if you want to save your points in a file for other processing.&lt;br /&gt;
Moreover a major problem is due to the wrong use of the header file. Some functions are not inline and global constats are defined. These cause linking problems when you include official &amp;quot;gnuplot-cpp/gnuplot_i.hpp&amp;quot; in more than one source files.&lt;/div&gt;</summary>
		<author><name>MauroBrenna</name></author>	</entry>

	<entry>
		<id>https://airwiki.deib.polimi.it/index.php?title=Gnuplot_in_cpp&amp;diff=9195</id>
		<title>Gnuplot in cpp</title>
		<link rel="alternate" type="text/html" href="https://airwiki.deib.polimi.it/index.php?title=Gnuplot_in_cpp&amp;diff=9195"/>
				<updated>2009-11-04T12:01:32Z</updated>
		
		<summary type="html">&lt;p&gt;MauroBrenna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''How to plot using gnuplot in your C/C++ programs'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a little guide that shows you how you can add a plotting function in your C/C++ program.&lt;br /&gt;
This approach has some advantages and disadvantages:&lt;br /&gt;
&lt;br /&gt;
PROS&lt;br /&gt;
- You don't need to write on files or similar and plot in a second moment through a Matlab/Octave/Gnuplot script&lt;br /&gt;
&lt;br /&gt;
CONTRAS&lt;br /&gt;
- You don't have all the potentiality of Matlab/Octave plotting even if you can program your plotting utilities&lt;br /&gt;
&lt;br /&gt;
'''HOW TO'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# You should download gnuplot-cpp library. I suggest you to use my version LINKHERE because the official one [http://code.google.com/p/gnuplot-cpp/ gnuplot-cpp] has problems, (see below).&lt;br /&gt;
#To use the plotting library you should only need to include: &amp;quot;gnuplot-cpp/gnuplot_i.hpp&amp;quot;&lt;br /&gt;
# A code snippet is here presented that simply plots a 2D set of points:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    if(ANIMATIONON){&lt;br /&gt;
         // GNUPLOT&lt;br /&gt;
         // GNUPLOT INITIALIZATION&lt;br /&gt;
         Gnuplot gp(&amp;quot;My plot&amp;quot;);&lt;br /&gt;
         //std::vector&amp;lt;double&amp;gt; x,y; // this are the vector containing (x,y) points&lt;br /&gt;
         // END GNUPLOT INITIALIZATION&lt;br /&gt;
         try {&lt;br /&gt;
            gp.remove_tmpfiles(); // it is always better to do it&lt;br /&gt;
            gp.reset_plot(); // delete the plot (like Matlab figure())&lt;br /&gt;
            cout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; &amp;quot;*** user-defined lists of points (x,y)&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
            gp.set_grid();&lt;br /&gt;
            gp.set_style(&amp;quot;points&amp;quot;).plot_xy(x,y,&amp;quot;user-defined points 2d&amp;quot;);&lt;br /&gt;
            //sleep(1);  &lt;br /&gt;
            //usleep(3e5);&lt;br /&gt;
         }&lt;br /&gt;
         catch (GnuplotException ge)&lt;br /&gt;
         {&lt;br /&gt;
            cout &amp;lt;&amp;lt; ge.what() &amp;lt;&amp;lt; endl;&lt;br /&gt;
        }&lt;br /&gt;
      } // END GNUPLOT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''HOW IT WORKS'''&lt;br /&gt;
For what I understood, the program writes a temp file (/tmp) in GNU/Linux and use it to plot in the correct way using [http://www.gnuplot.info/ Gnuplot].&lt;br /&gt;
&lt;br /&gt;
'''PROBLEM OF THE OFFICIAL VERSION'''&lt;br /&gt;
Up to now (read the data of this post), the official package provided [http://code.google.com/p/gnuplot-cpp/ gnuplot-cpp] it has problems that deals with tempFiles. In many cases, for example in the destructor the function ''remove_tmpfiles()'' is commented. In this way many and many files are created in /tmp and after the max files limit is reached no other plots are created. Note that this could be useful if you want to save your points in a file for other processing.&lt;br /&gt;
Moreover a major problem is due to the wrong use of the header file. Some functions are not inline and global constats are defined. These cause linking problems when you include official &amp;quot;gnuplot-cpp/gnuplot_i.hpp&amp;quot; in more than one source files.&lt;/div&gt;</summary>
		<author><name>MauroBrenna</name></author>	</entry>

	<entry>
		<id>https://airwiki.deib.polimi.it/index.php?title=Gnuplot_in_cpp&amp;diff=9194</id>
		<title>Gnuplot in cpp</title>
		<link rel="alternate" type="text/html" href="https://airwiki.deib.polimi.it/index.php?title=Gnuplot_in_cpp&amp;diff=9194"/>
				<updated>2009-11-04T11:54:01Z</updated>
		
		<summary type="html">&lt;p&gt;MauroBrenna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''How to plot using gnuplot in your C/C++ programs'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a little guide that shows you how you can add a plotting function in your C/C++ program.&lt;br /&gt;
This approach has some advantages and disadvantages:&lt;br /&gt;
&lt;br /&gt;
PROS&lt;br /&gt;
- You don't need to write on files or similar and plot in a second moment through a Matlab/Octave/Gnuplot script&lt;br /&gt;
&lt;br /&gt;
CONTRAS&lt;br /&gt;
- You don't have all the potentiality of Matlab/Octave plotting even if you can program your plotting utilities&lt;br /&gt;
&lt;br /&gt;
'''HOW TO'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# You should download gnuplot-cpp library. I suggest you to use my version LINKHERE because the official one [http://code.google.com/p/gnuplot-cpp/ gnuplot-cpp]has problems, (see below).&lt;br /&gt;
#To use the plotting library you should only need to include: &amp;quot;gnuplot-cpp/gnuplot_i.hpp&amp;quot;&lt;br /&gt;
# A code snippet is here presented that simply plots a 2D set of points:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    if(ANIMATIONON){&lt;br /&gt;
         // GNUPLOT&lt;br /&gt;
         // GNUPLOT INITIALIZATION&lt;br /&gt;
         Gnuplot gp(&amp;quot;My plot&amp;quot;);&lt;br /&gt;
         //std::vector&amp;lt;double&amp;gt; x,y; // this are the vector containing (x,y) points&lt;br /&gt;
         // END GNUPLOT INITIALIZATION&lt;br /&gt;
         try {&lt;br /&gt;
            gp.remove_tmpfiles(); // it is always better to do it&lt;br /&gt;
            gp.reset_plot(); // delete the plot (like Matlab figure())&lt;br /&gt;
            cout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; &amp;quot;*** user-defined lists of points (x,y)&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
            gp.set_grid();&lt;br /&gt;
            gp.set_style(&amp;quot;points&amp;quot;).plot_xy(x,y,&amp;quot;user-defined points 2d&amp;quot;);&lt;br /&gt;
            //sleep(1);  &lt;br /&gt;
            //usleep(3e5);&lt;br /&gt;
         }&lt;br /&gt;
         catch (GnuplotException ge)&lt;br /&gt;
         {&lt;br /&gt;
            cout &amp;lt;&amp;lt; ge.what() &amp;lt;&amp;lt; endl;&lt;br /&gt;
        }&lt;br /&gt;
      } // END GNUPLOT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>MauroBrenna</name></author>	</entry>

	<entry>
		<id>https://airwiki.deib.polimi.it/index.php?title=Gnuplot_in_cpp&amp;diff=9193</id>
		<title>Gnuplot in cpp</title>
		<link rel="alternate" type="text/html" href="https://airwiki.deib.polimi.it/index.php?title=Gnuplot_in_cpp&amp;diff=9193"/>
				<updated>2009-11-04T11:53:44Z</updated>
		
		<summary type="html">&lt;p&gt;MauroBrenna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''How to plot using gnuplot in your C/C++ programs'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a little guide that shows you how you can add a plotting function in your C/C++ program.&lt;br /&gt;
This approach has some advantages and disadvantages:&lt;br /&gt;
&lt;br /&gt;
PROS&lt;br /&gt;
- You don't need to write on files or similar and plot in a second moment through a Matlab/Octave/Gnuplot script&lt;br /&gt;
&lt;br /&gt;
CONTRAS&lt;br /&gt;
- You don't have all the potentiality of Matlab/Octave plotting even if you can program your plotting utilities&lt;br /&gt;
&lt;br /&gt;
'''HOW TO'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# You should download gnuplot-cpp library. I suggest you to use my version LINKHERE because the official one [http://code.google.com/p/gnuplot-cpp/ gnuplot-cpp]has problems, (see below).&lt;br /&gt;
#To use the plotting library you should only need to include: &amp;quot;gnuplot-cpp/gnuplot_i.hpp&amp;quot;&lt;br /&gt;
# A code snippet is here presented that simply plots a 2D set of points:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    if(ANIMATIONON){&lt;br /&gt;
         // GNUPLOT&lt;br /&gt;
         // GNUPLOT INITIALIZATION&lt;br /&gt;
         Gnuplot gp(&amp;quot;My plot&amp;quot;);&lt;br /&gt;
         //std::vector&amp;lt;double&amp;gt; x,y; // this are the vector containing (x,y) points&lt;br /&gt;
         // END GNUPLOT INITIALIZATION&lt;br /&gt;
         try {&lt;br /&gt;
&lt;br /&gt;
            gp.remove_tmpfiles(); // it is always better to do it&lt;br /&gt;
            gp.reset_plot(); // delete the plot (like Matlab figure())&lt;br /&gt;
            cout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; &amp;quot;*** user-defined lists of points (x,y)&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
            gp.set_grid();&lt;br /&gt;
            gp.set_style(&amp;quot;points&amp;quot;).plot_xy(x,y,&amp;quot;user-defined points 2d&amp;quot;);&lt;br /&gt;
            //sleep(1);  &lt;br /&gt;
            //usleep(3e5);&lt;br /&gt;
         }&lt;br /&gt;
         catch (GnuplotException ge)&lt;br /&gt;
         {&lt;br /&gt;
            cout &amp;lt;&amp;lt; ge.what() &amp;lt;&amp;lt; endl;&lt;br /&gt;
        }&lt;br /&gt;
      } // END GNUPLOT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>MauroBrenna</name></author>	</entry>

	<entry>
		<id>https://airwiki.deib.polimi.it/index.php?title=Gnuplot_in_cpp&amp;diff=9192</id>
		<title>Gnuplot in cpp</title>
		<link rel="alternate" type="text/html" href="https://airwiki.deib.polimi.it/index.php?title=Gnuplot_in_cpp&amp;diff=9192"/>
				<updated>2009-11-04T11:53:11Z</updated>
		
		<summary type="html">&lt;p&gt;MauroBrenna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''How to plot using gnuplot in your C/C++ programs'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a little guide that shows you how you can add a plotting function in your C/C++ program.&lt;br /&gt;
This approach has some advantages and disadvantages:&lt;br /&gt;
&lt;br /&gt;
PROS&lt;br /&gt;
- You don't need to write on files or similar and plot in a second moment through a Matlab/Octave/Gnuplot script&lt;br /&gt;
&lt;br /&gt;
CONTRAS&lt;br /&gt;
- You don't have all the potentiality of Matlab/Octave plotting even if you can program your plotting utilities&lt;br /&gt;
&lt;br /&gt;
'''HOW TO'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# You should download gnuplot-cpp library. I suggest you to use my version LINKHERE because the official one [http://code.google.com/p/gnuplot-cpp/ gnuplot-cpp]has problems, (see below).&lt;br /&gt;
#To use the plotting library you should only need to include: &amp;quot;gnuplot-cpp/gnuplot_i.hpp&amp;quot;&lt;br /&gt;
# A code snippet is here presented that simply plots a 2D set of points:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    if(ANIMATIONON){&lt;br /&gt;
         // GNUPLOT&lt;br /&gt;
&lt;br /&gt;
         // GNUPLOT INITIALIZATION&lt;br /&gt;
         Gnuplot gp(&amp;quot;My plot&amp;quot;);&lt;br /&gt;
         //std::vector&amp;lt;double&amp;gt; x,y; // this are the vector containing (x,y) points&lt;br /&gt;
         // END GNUPLOT INITIALIZATION&lt;br /&gt;
         try {&lt;br /&gt;
&lt;br /&gt;
            gp.remove_tmpfiles(); // it is always better to do it&lt;br /&gt;
            gp.reset_plot(); // delete the plot (like Matlab figure())&lt;br /&gt;
            cout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; &amp;quot;*** user-defined lists of points (x,y)&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
            gp.set_grid();&lt;br /&gt;
            gp.set_style(&amp;quot;points&amp;quot;).plot_xy(x,y,&amp;quot;user-defined points 2d&amp;quot;);&lt;br /&gt;
            //sleep(1);  &lt;br /&gt;
            //usleep(3e5);&lt;br /&gt;
         }&lt;br /&gt;
         catch (GnuplotException ge)&lt;br /&gt;
         {&lt;br /&gt;
            cout &amp;lt;&amp;lt; ge.what() &amp;lt;&amp;lt; endl;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
      } // END GNUPLOT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>MauroBrenna</name></author>	</entry>

	<entry>
		<id>https://airwiki.deib.polimi.it/index.php?title=Gnuplot_in_cpp&amp;diff=9191</id>
		<title>Gnuplot in cpp</title>
		<link rel="alternate" type="text/html" href="https://airwiki.deib.polimi.it/index.php?title=Gnuplot_in_cpp&amp;diff=9191"/>
				<updated>2009-11-04T11:46:54Z</updated>
		
		<summary type="html">&lt;p&gt;MauroBrenna: How to plot using gnuplot in your C/C++ project&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''How to plot using gnuplot in your C/C++ programs'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a little guide that shows you how you can add a plotting function in your C/C++ program.&lt;br /&gt;
This approach has some advantages and disadvantages:&lt;br /&gt;
&lt;br /&gt;
PROS&lt;br /&gt;
- You don't need to write on files or similar and plot in a second moment through a Matlab/Octave/Gnuplot script&lt;br /&gt;
&lt;br /&gt;
CONTRAS&lt;br /&gt;
- You don't have all the potentiality of Matlab/Octave plotting even if you can program your plotting utilities&lt;br /&gt;
&lt;br /&gt;
'''HOW TO'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# You should download gnuplot-cpp library. I suggest you to use my version LINKHERE because the official one [http://code.google.com/p/gnuplot-cpp/ gnuplot-cpp]has problems, (see below).&lt;br /&gt;
#To use the plotting library you should only need to include: &amp;quot;gnuplot-cpp/gnuplot_i.hpp&amp;quot;&lt;/div&gt;</summary>
		<author><name>MauroBrenna</name></author>	</entry>

	<entry>
		<id>https://airwiki.deib.polimi.it/index.php?title=User:MauroBrenna&amp;diff=6866</id>
		<title>User:MauroBrenna</title>
		<link rel="alternate" type="text/html" href="https://airwiki.deib.polimi.it/index.php?title=User:MauroBrenna&amp;diff=6866"/>
				<updated>2009-05-31T13:46:53Z</updated>
		
		<summary type="html">&lt;p&gt;MauroBrenna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SMWUser&lt;br /&gt;
|firstname=Mauro&lt;br /&gt;
|lastname=Brenna&lt;br /&gt;
|email=mauro(dot)brenna(at)mail(dot)polimi(dot)it&lt;br /&gt;
|advisor=MatteoMatteucci&lt;br /&gt;
|projectpage=LURCH_-_The_autonomous_wheelchair&lt;br /&gt;
|photo=MauroBrenna.jpg |&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Mauro Brenna'''&lt;br /&gt;
&lt;br /&gt;
nato a Como (CO) il 22-05-1985&lt;br /&gt;
&lt;br /&gt;
'''Istruzione e formazione'''&lt;br /&gt;
&lt;br /&gt;
- ''2007- '' Ingegneria informatica (2° livello)&lt;br /&gt;
- ''2004 - 2007'' Laurea in Ingegneria informatica (1° livello) votazione 110 e lode con tesina:&amp;quot;Costruzione di mappe basate su quadtree&amp;quot; Una piccola descrizione è presente a questo indirizzo: [[2D Mapping Using a Quadtree Data Structure|2D Mapping Using a Quadtree Data Structure ]]&lt;br /&gt;
&lt;br /&gt;
'''Attività in AIRLab'''&lt;br /&gt;
&lt;br /&gt;
Svolgimento tesi laurea in Ingegneria informatica (2° livello). Tematiche da trattare: scanmatching, autocalibrazione e odometria su laser, tecniche di sensor fusion.&lt;/div&gt;</summary>
		<author><name>MauroBrenna</name></author>	</entry>

	<entry>
		<id>https://airwiki.deib.polimi.it/index.php?title=User:MauroBrenna&amp;diff=6865</id>
		<title>User:MauroBrenna</title>
		<link rel="alternate" type="text/html" href="https://airwiki.deib.polimi.it/index.php?title=User:MauroBrenna&amp;diff=6865"/>
				<updated>2009-05-31T13:11:35Z</updated>
		
		<summary type="html">&lt;p&gt;MauroBrenna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SMWUser&lt;br /&gt;
|firstname=Mauro&lt;br /&gt;
|lastname=Brenna&lt;br /&gt;
|email=mauro(dot)brenna(at)mail(dot)polimi(dot)it&lt;br /&gt;
|advisor=MatteoMatteucci&lt;br /&gt;
|projectpage=LURCH_-_The_autonomous_wheelchair&lt;br /&gt;
|photo=MauroBrenna.jpg |&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Mauro Brenna'''&lt;br /&gt;
&lt;br /&gt;
nato a Como (CO) il 22-05-1985&lt;br /&gt;
&lt;br /&gt;
'''Istruzione e formazione'''&lt;br /&gt;
&lt;br /&gt;
- ''2007- '' Ingegneria informatica (2° livello)&lt;br /&gt;
- ''2004 - 2007'' Laurea in Ingegneria informatica (1° livello) votazione 110 e lode con tesina:&amp;quot;Costruzione di mappe basate su quadtree&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Attività in AIRLab'''&lt;br /&gt;
&lt;br /&gt;
Svolgimento tesi laurea in Ingegneria informatica (2° livello). Tematiche da trattare: scanmatching, autocalibrazione e odometria su laser, tecniche di sensor fusion.&lt;/div&gt;</summary>
		<author><name>MauroBrenna</name></author>	</entry>

	<entry>
		<id>https://airwiki.deib.polimi.it/index.php?title=File:MauroBrenna.jpg&amp;diff=6864</id>
		<title>File:MauroBrenna.jpg</title>
		<link rel="alternate" type="text/html" href="https://airwiki.deib.polimi.it/index.php?title=File:MauroBrenna.jpg&amp;diff=6864"/>
				<updated>2009-05-31T13:11:09Z</updated>
		
		<summary type="html">&lt;p&gt;MauroBrenna: Photo of Mauro Brenna for the profile&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Photo of Mauro Brenna for the profile&lt;/div&gt;</summary>
		<author><name>MauroBrenna</name></author>	</entry>

	<entry>
		<id>https://airwiki.deib.polimi.it/index.php?title=User:MauroBrenna&amp;diff=6863</id>
		<title>User:MauroBrenna</title>
		<link rel="alternate" type="text/html" href="https://airwiki.deib.polimi.it/index.php?title=User:MauroBrenna&amp;diff=6863"/>
				<updated>2009-05-31T12:55:44Z</updated>
		
		<summary type="html">&lt;p&gt;MauroBrenna: New page: {{SMWUser |firstname=Mauro |lastname=Brenna |email=mauro(dot)brenna(at)mail(dot)polimi(dot)it |advisor=MatteoMatteucci |projectpage=LURCH_-_The_autonomous_wheelchair |photo= a.jpg| }}  '''...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SMWUser&lt;br /&gt;
|firstname=Mauro&lt;br /&gt;
|lastname=Brenna&lt;br /&gt;
|email=mauro(dot)brenna(at)mail(dot)polimi(dot)it&lt;br /&gt;
|advisor=MatteoMatteucci&lt;br /&gt;
|projectpage=LURCH_-_The_autonomous_wheelchair&lt;br /&gt;
|photo= a.jpg|&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Mauro Brenna'''&lt;br /&gt;
&lt;br /&gt;
nato a Como (CO) il 22-05-1985&lt;br /&gt;
&lt;br /&gt;
'''Istruzione e formazione'''&lt;br /&gt;
&lt;br /&gt;
- ''2007- '' Ingegneria informatica (2° livello)&lt;br /&gt;
- ''2004 - 2007'' Laurea in Ingegneria informatica (1° livello) votazione 110 e lode con tesina:&amp;quot;Costruzione di mappe basate su quadtree&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Attività in AIRLab'''&lt;br /&gt;
&lt;br /&gt;
Svolgimento tesi laurea in Ingegneria informatica (2° livello). Tematiche da trattare: scanmatching, autocalibrazione e odometria su laser, tecniche di sensor fusion.&lt;/div&gt;</summary>
		<author><name>MauroBrenna</name></author>	</entry>

	<entry>
		<id>https://airwiki.deib.polimi.it/index.php?title=2D_Mapping_Using_a_Quadtree_Data_Structure&amp;diff=1408</id>
		<title>2D Mapping Using a Quadtree Data Structure</title>
		<link rel="alternate" type="text/html" href="https://airwiki.deib.polimi.it/index.php?title=2D_Mapping_Using_a_Quadtree_Data_Structure&amp;diff=1408"/>
				<updated>2007-11-15T20:23:09Z</updated>
		
		<summary type="html">&lt;p&gt;MauroBrenna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Abstract ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This undergraduate dissertation is intended to investigate the opportunity to use a quad-tree data structure in an effective way in order to provide a consistent global map. The sensor employed was a laser range finder (Hokuyo URG-04LX). The raw data are inserted in the global map using directly the quad-tree so as to produce an occupancy grid without get through an intermediate evenly grid map representation. A scan matcher algorithm is implemented to adjust/accommodate perception according to sensor noise and uncertainty in the motion model (supposed unknown in the work).&lt;br /&gt;
&lt;br /&gt;
The following parts of the document are used to give you hints about techniques and software used so that you can speed up your software development without bothering about trifling details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quad-tree Used and Insertion Method ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The idea is using directly the quad-tree map representation from the very start.&lt;br /&gt;
Simply:&lt;br /&gt;
&lt;br /&gt;
# choose a resolution limit;&lt;br /&gt;
# select  a way to retrieve the occupancy probability of each cell, for instance : occprob= occ/vis.&lt;br /&gt;
occ value indicates how many times the laser endpoint is bound in that cell, while vis expresses how many times the 'segment' sensor-laser_endpoint passes through that cell.&lt;br /&gt;
&lt;br /&gt;
The starting quad-tree is a simple 4 squared map. Every time a single laser acquisition is read, just create the tree deepening only the cell where the point is bound 'till the resolution limit is reached.&lt;br /&gt;
Then you can update the occupancy probability of the interested cell.&lt;br /&gt;
In creating the 'segment' is advisable exploit a line rasterization algorithm such as [http://en.wikipedia.org/wiki/Bresenham's_line_algorithm Bresenham]'s one to avoid possible discretization problems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scan Matcher ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For that phase, it's possible to use the classic scan matcher algorithms or look for something cheaper in terms of computational resources exploiting the tree map.&lt;br /&gt;
For an overview of the techniques in references you can find worth reading papers.&lt;br /&gt;
A simple observation occurs if a a similar quad-tree to the former described one is used:&lt;br /&gt;
if you are looking for the cells with the highest occupancy probability value you should look the maximum resolution nodes only.&lt;br /&gt;
To compare/correlate the local map you have just retrieved with a reference scan you may:&lt;br /&gt;
&lt;br /&gt;
* use the global map formed by these max resolution cells only;&lt;br /&gt;
* use the previous scan, saving it in memory, and find the correlation between the two.&lt;br /&gt;
&lt;br /&gt;
A nutty, and for many reason opinable, method consists in use as correlation value the sum of the occupancy probability of each cell in which the data of the current scan is bound (given a testing pose).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== From Quad-tree Map Representation to Human Readable Map ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now that the hard work is done it would be nice and pleasant to build a JPG/PNG image describing the global map. Here you can find some advice.&lt;br /&gt;
&lt;br /&gt;
First, which library to use? &lt;br /&gt;
Probably Image Magick[++] or OpenGL. Testing the former we can assure you that it is not suitable for creating maps above 3000x3000px; At this threshold, compile and running the program to build the image can last very long and cause errors.&lt;br /&gt;
Anyway in every image manipulation library you should find a method like create_square(geometry,colour). Obviously you can set the colour mapping the grey-scale to occupancy probability values.&lt;br /&gt;
The second thing you would probably want to point out is uncouple the robot quad-tree map generation and the human readable output (not to CPU time during the SLAM).&lt;br /&gt;
The easiest way is to provide a method for each node that write a string that is an instruction of the image manipulation library (the create_square()s ). You can generate a sort of map log file visiting the tree and calling this method for each node. Offline you can assemble that file with other two, for example the beginning of a C program which includes that library and its end, using a simple script; compile it and run the program to create the image. This technique is easy to automate and waste the least amount of time.&lt;br /&gt;
You may also think about a vector format image, e.g. SVG, in order to skip the 'assemble and compile' phase.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References: ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://openslam.org/&lt;br /&gt;
&lt;br /&gt;
http://www.opengl.org/&lt;br /&gt;
&lt;br /&gt;
http://www.imagemagick.org/www/Magick++/&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Bresenham's_line_algorithm&lt;br /&gt;
&lt;br /&gt;
G. Grisetti, C. Stachniss, and W Burgard. Improved techniques for grid&lt;br /&gt;
mapping with rao-blackwellized particle filters, 2006.&lt;br /&gt;
&lt;br /&gt;
A. Censi, L. Iocchi, and G. Grisetti. Scan matching in the hough&lt;br /&gt;
domain, in proc. of intern. conference on robotics and automation&lt;br /&gt;
(icra’05), 2005. Technical report, 2005.&lt;br /&gt;
&lt;br /&gt;
Sebastian Thrun, Wolfram Burgard, and Dieter Fox. Probabilistic&lt;br /&gt;
robotics. MIT Press, 2005.&lt;br /&gt;
&lt;br /&gt;
Y. Kang D. Caveney and J.K. Hedrick. Probabilistic mapping for unmanned rotorcraft using point-mass targets and  quadtree structures. In Proc. of ASME IMECE Orlando, FL, Nov., 2005.&lt;br /&gt;
&lt;br /&gt;
Gerhard K. Kraetzschmar, Guillem Pag`s Gassull, and Klaus Uhl. Probabilistic quadtrees for variable-resolution mapping of large environments. In M. I. Ribeiro and J. Santos Victor, editors, Proceedings of the 5th IFAC/EURON  symposium on Intelligent Autonomous Vehicles, Lisbon, Portugal, July 2004. Elsevier Science.&lt;br /&gt;
&lt;br /&gt;
Ioannis M. Rekleitis. A particle filter tutorial for mobile robot&lt;br /&gt;
localization. (TR-CIM-04-02), 2004.&lt;br /&gt;
&lt;br /&gt;
J.-S. Gutmann, C. Schlegel, &amp;quot;AMOS: comparison of scan matching approaches for self-localization in indoor environments,&amp;quot; eurobot, p. 61,  1st Euromicro Workshop on Advanced Mobile Robots (EUROBOT),  1996&lt;/div&gt;</summary>
		<author><name>MauroBrenna</name></author>	</entry>

	<entry>
		<id>https://airwiki.deib.polimi.it/index.php?title=2D_Mapping_Using_a_Quadtree_Data_Structure&amp;diff=1407</id>
		<title>2D Mapping Using a Quadtree Data Structure</title>
		<link rel="alternate" type="text/html" href="https://airwiki.deib.polimi.it/index.php?title=2D_Mapping_Using_a_Quadtree_Data_Structure&amp;diff=1407"/>
				<updated>2007-11-15T20:22:02Z</updated>
		
		<summary type="html">&lt;p&gt;MauroBrenna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Abstract ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This undergraduate dissertation is intended to investigate the opportunity to use a quad-tree data structure in an effective way in order to provide a consistent global map. The sensor employed was a laser range finder (Hokuyo URG-04LX). The raw data are inserted in the global map using directly the quad-tree so as to produce an occupancy grid without get through an intermediate evenly grid map representation. A scan matcher algorithm is implemented to adjust/accommodate perception according to sensor noise and uncertainty in the motion model (supposed unknown in the work).&lt;br /&gt;
&lt;br /&gt;
The following parts of the document are used to give you hints about techniques and software used so that you can speed up your software development without bothering about trifling details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quad-tree Used and Insertion Method ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The idea is using directly the quad-tree map representation from the very start.&lt;br /&gt;
Simply:&lt;br /&gt;
&lt;br /&gt;
# choose a resolution limit;&lt;br /&gt;
# select  a way to retrieve the occupancy probability of each cell, for instance : occprob= occ/vis.&lt;br /&gt;
occ value indicates how many times the laser endpoint is bound in that cell, while vis expresses how many times the 'segment' sensor-laser_endpoint passes through that cell.&lt;br /&gt;
&lt;br /&gt;
The starting quad-tree is a simple 4 squared map. Every time a single laser acquisition is read, just create the tree deepening only the cell where the point is bound 'till the resolution limit is reached.&lt;br /&gt;
Then you can update the occupancy probability of the interested cell.&lt;br /&gt;
In creating the 'segment' is advisable exploit a line rasterization algorithm such as [http://en.wikipedia.org/wiki/Bresenham's_line_algorithm Bresenham]'s one to avoid possible discretization problems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scan Matcher ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For that phase, it's possible to use the classic scan matcher algorithms or look for something cheaper in terms of computational resources exploiting the tree map.&lt;br /&gt;
For an overview of the techniques in references you can find worth reading papers.&lt;br /&gt;
A simple observation occurs if a a similar quad-tree to the former described one is used:&lt;br /&gt;
if you are looking for the cells with the highest occupancy probability value you should look the maximum resolution nodes only.&lt;br /&gt;
To compare/correlate the local map you have just retrieved with a reference scan you may:&lt;br /&gt;
&lt;br /&gt;
* use the global map formed by these max resolution cells only;&lt;br /&gt;
* use the previous scan, saving it in memory, and find the correlation between the two.&lt;br /&gt;
&lt;br /&gt;
A nutty, and for many reason opinable, method consists in use as correlation value the sum of the occupancy probability of each cell in which the data of the current scan is bound (given a testing pose).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== From Quad-tree Map Representation to Human Readable Map ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now that the hard work is done it would be nice and pleasant to build a JPG/PNG image describing the global map. Here you can find some advice.&lt;br /&gt;
&lt;br /&gt;
First, which library to use? Probably Image Magick[++] or OpenGL. &lt;br /&gt;
Testing the former we can assure you that it is not suitable for creating maps above 3000x3000px; At this threshold, compile and running the program to build the image can last very long and cause errors.&lt;br /&gt;
Anyway in every image manipulation library you should find a method like create_square(geometry,colour). Obviously you can set the colour mapping the grey-scale to occupancy probability values.&lt;br /&gt;
The second thing you would probably want to point out is uncouple the robot quad-tree map generation and the human readable output (not to CPU time during the SLAM).&lt;br /&gt;
The easiest way is to provide a method for each node that write a string that is an instruction of the image manipulation library (the create_square()s ). You can generate a sort of map log file visiting the tree and calling this method for each node. Offline you can assemble that file with other two, for example the beginning of a C program which includes that library and its end, using a simple script; compile it and run the program to create the image. This technique is easy to automate and waste the least amount of time.&lt;br /&gt;
You may also think about a vector format image, e.g. SVG, in order to skip the 'assemble and compile' phase.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References: ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://openslam.org/&lt;br /&gt;
&lt;br /&gt;
http://www.opengl.org/&lt;br /&gt;
&lt;br /&gt;
http://www.imagemagick.org/www/Magick++/&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Bresenham's_line_algorithm&lt;br /&gt;
&lt;br /&gt;
G. Grisetti, C. Stachniss, and W Burgard. Improved techniques for grid&lt;br /&gt;
mapping with rao-blackwellized particle filters, 2006.&lt;br /&gt;
&lt;br /&gt;
A. Censi, L. Iocchi, and G. Grisetti. Scan matching in the hough&lt;br /&gt;
domain, in proc. of intern. conference on robotics and automation&lt;br /&gt;
(icra’05), 2005. Technical report, 2005.&lt;br /&gt;
&lt;br /&gt;
Sebastian Thrun, Wolfram Burgard, and Dieter Fox. Probabilistic&lt;br /&gt;
robotics. MIT Press, 2005.&lt;br /&gt;
&lt;br /&gt;
Y. Kang D. Caveney and J.K. Hedrick. Probabilistic mapping for unmanned rotorcraft using point-mass targets and  quadtree structures. In Proc. of ASME IMECE Orlando, FL, Nov., 2005.&lt;br /&gt;
&lt;br /&gt;
Gerhard K. Kraetzschmar, Guillem Pag`s Gassull, and Klaus Uhl. Probabilistic quadtrees for variable-resolution mapping of large environments. In M. I. Ribeiro and J. Santos Victor, editors, Proceedings of the 5th IFAC/EURON  symposium on Intelligent Autonomous Vehicles, Lisbon, Portugal, July 2004. Elsevier Science.&lt;br /&gt;
&lt;br /&gt;
Ioannis M. Rekleitis. A particle filter tutorial for mobile robot&lt;br /&gt;
localization. (TR-CIM-04-02), 2004.&lt;br /&gt;
&lt;br /&gt;
J.-S. Gutmann, C. Schlegel, &amp;quot;AMOS: comparison of scan matching approaches for self-localization in indoor environments,&amp;quot; eurobot, p. 61,  1st Euromicro Workshop on Advanced Mobile Robots (EUROBOT),  1996&lt;/div&gt;</summary>
		<author><name>MauroBrenna</name></author>	</entry>

	</feed>