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

	<entry>
		<id>https://airwiki.elet.polimi.it/index.php?title=E2GoHome&amp;diff=17004</id>
		<title>E2GoHome</title>
		<link rel="alternate" type="text/html" href="https://airwiki.elet.polimi.it/index.php?title=E2GoHome&amp;diff=17004"/>
				<updated>2014-07-18T15:24:56Z</updated>
		
		<summary type="html">&lt;p&gt;LorenzoRipani: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Project&lt;br /&gt;
 | title=E2GoHome&lt;br /&gt;
 | short_descr=The goal of the project is to develop a system to bring E-2? home while maintaining a relationship with people that interacts with it.&lt;br /&gt;
 | coordinator=AndreaBonarini&lt;br /&gt;
 | tutor=AndreaBonarini&lt;br /&gt;
 | students=LorenzoRipani&lt;br /&gt;
 | resarea=Robotics&lt;br /&gt;
 | restopic=Robot development&lt;br /&gt;
 | start=5/05/2013&lt;br /&gt;
 | end=20/12/2013&lt;br /&gt;
 | type = Thesis&lt;br /&gt;
 | status=Active&lt;br /&gt;
 | level = Ms&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[File:e2_full_1.png|thumb|E-2]]&lt;br /&gt;
The robot was created as a project for an exhibition environment, and its purpose is to attract people's attention and bring them to a particular stand after a careful assessment of the interest of the speaker. This kind of action requires a high level of interaction with the person and it is therefore necessary to increase the human-robot experience, and that's why the robot has been equipped with a neck capable of complex movements and a series of behaviours to enable a communication with the person the robot is talking to.&lt;br /&gt;
&lt;br /&gt;
The elaborate encloses a set of projects developed over time within the AIR-lab. For a complete list see [[E-2? - A robot for exhibitions]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware &amp;amp; Components==&lt;br /&gt;
The robot consists of three main sections: a mobile base, a neck and an mechanical head able to show different facial expressions. &lt;br /&gt;
The head of the robot accommodate all the mechanical control of the eyes, eyebrows and mouth, and support the Kinect sensor, used for the artificial vision system and as navigation sensor.&lt;br /&gt;
&lt;br /&gt;
The neck is designed to ensure better rigidity of the whole structure and, to increase the set of reproducible movements. &lt;br /&gt;
This is made ​​up of 5 servomotors that provide differt degrees of freedom wich allow the robot to make even very complex movements. &lt;br /&gt;
&lt;br /&gt;
The base of the robot is an omni-directional base ( see [[Triskar2]] ) made up of three pairs of electric motors to drive robot's wheels, a mini-PC Zotac and three pairs of 12V batteries  which supply all the components of the robot. &lt;br /&gt;
&lt;br /&gt;
All the control is achieved by using a set of ROS nodes which communicate to handle all robot's tasks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Behavior==&lt;br /&gt;
&lt;br /&gt;
The robot is able to perform different actions as a result of external inputs. The following will describe some of the main behavior that the robot is able to perform.&lt;br /&gt;
&lt;br /&gt;
* GoHome: When the robot realizes that it has attracted the user's attention , E-2? plans its trajectory towards the stand of the Airlab. The robot relies on facial analysis coming from kinect sensor to determine the speaker's interest.&lt;br /&gt;
&lt;br /&gt;
* UserFollowing: The robot is capable of determine if an user is following him. The robot periodically checks if the person with whom it started an interaction is near of itself. The robot takes frames of the enviroment to detect people faces. Once detected it compares them with the info stored in memory.&lt;br /&gt;
&lt;br /&gt;
* Wait: The robot can perceice distances from  people and when it detect a long distance from the user it first try to engage him by calling him, if this doesn't work the robot will approach the user to check if he still want to follow itself.&lt;br /&gt;
&lt;br /&gt;
* RecoverUser: When the robot lose the focus with the user it plan a backward trajectory towards the last detection point to retrive the person. During navigation it will periodically check for known faces.&lt;br /&gt;
&lt;br /&gt;
* AvoidObstacles: The robot can avoid obstacles in the environment by transforming kinect's images in LaserScan to have a representation of the workspace. With this informations E-2 is able to calculate new trajectories when an obstacle is detected in front of the robot.&lt;br /&gt;
&lt;br /&gt;
* KeepUserConnection: If the robot is following a path that brings to the stand, and has perceived the presence of the user, E-2? begins an interaction with the person talking about projects and  news concerning robotic field, to keep high the level of interest of the speaker.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Media &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
* Video: Coming soon...&lt;br /&gt;
* Full paper: Coming soon...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[http://wiki.ros.org/ ROS wiki]&lt;/div&gt;</summary>
		<author><name>LorenzoRipani</name></author>	</entry>

	<entry>
		<id>https://airwiki.elet.polimi.it/index.php?title=File:E2_full_1.png&amp;diff=17003</id>
		<title>File:E2 full 1.png</title>
		<link rel="alternate" type="text/html" href="https://airwiki.elet.polimi.it/index.php?title=File:E2_full_1.png&amp;diff=17003"/>
				<updated>2014-07-18T15:05:44Z</updated>
		
		<summary type="html">&lt;p&gt;LorenzoRipani: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>LorenzoRipani</name></author>	</entry>

	<entry>
		<id>https://airwiki.elet.polimi.it/index.php?title=Talk:E2GoHome&amp;diff=16488</id>
		<title>Talk:E2GoHome</title>
		<link rel="alternate" type="text/html" href="https://airwiki.elet.polimi.it/index.php?title=Talk:E2GoHome&amp;diff=16488"/>
				<updated>2013-07-01T08:19:59Z</updated>
		
		<summary type="html">&lt;p&gt;LorenzoRipani: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==DeadLine==&lt;br /&gt;
&lt;br /&gt;
* Navigazione - END 31/06&lt;br /&gt;
** Scegliere Path planner e Simulazione -done&lt;br /&gt;
** Simulazione modulo di localizzazione su mappa -done&lt;br /&gt;
** Creazione mappa 2D -done&lt;br /&gt;
&lt;br /&gt;
* Comportamenti - END 31/07&lt;br /&gt;
** Completare comportamenti&lt;br /&gt;
** Simulazione modulo mrt &lt;br /&gt;
** Codice per comportamenti&lt;br /&gt;
&lt;br /&gt;
* Testing su robot - End ?&lt;br /&gt;
&lt;br /&gt;
==Comportamenti==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* GoHome: Se viene rilevata una persona interessata, il comportamento si occupa di riportare il robot a casa.&lt;br /&gt;
&lt;br /&gt;
* UserFollowing: Se il robot sta tornando verso casa, controlla che l'utente lo stia effettivamente seguendo. Il robot effettua l'azione sulla base del tempo dall'ultimo controllo e in base al numero di persone presenti nel campo visivo.&lt;br /&gt;
&lt;br /&gt;
* Wait: Se la distanza della persona è eccessiva E-2 si ferma per aspettarla&lt;br /&gt;
&lt;br /&gt;
* RecoverUser: Se E-2 perde il contatto con la persona per un tempo abbastanza lungo, torna sui suoi passi per cercare la persona&lt;br /&gt;
&lt;br /&gt;
* AvoidObstacle: Comportamento che ha lo scopo di evitare gli ostacoli durante gli spostamenti del robot. Eventualmente si feram se gli ostacoli sono persone in movimento e ce ne sono troppe.&lt;br /&gt;
&lt;br /&gt;
* KeepUserConnection: Se l'utente sta seguendo il robot e c'è ancora molta distanza da &amp;quot;casa&amp;quot; il robot intrattiene l'utente per mantenere una connessione.&lt;br /&gt;
&lt;br /&gt;
===GoHome===&lt;br /&gt;
&lt;br /&gt;
Il robot fa affidamento su un altro modulo che valuta l'interesse della persona. Se viene mostrato interesse il robot calcola la traiettoria migliore per tornare a &amp;quot;casa&amp;quot; e inizia a seguire la traiettoria creata. Vedi [[E2GoHome#Navigazione|Navigazione]].&lt;br /&gt;
&lt;br /&gt;
===UserFollowing===&lt;br /&gt;
&lt;br /&gt;
Lo scopo di questo comportamento è quello di determinare se la persona che è stata ingaggiata stia effettivamente seguendo il Robot.&lt;br /&gt;
Il comportamento viene attivato sulla base di due variabili: il tempo trascorso dall'ultimo controllo, e il numero di persone rilevate nel campo visivo(Si considera che un numero elevato di persone aumenti le probabilità che il robot perda il contatto con la persona). &lt;br /&gt;
&lt;br /&gt;
Una possibile sequenza di movimenti potrebbe essere:&lt;br /&gt;
 &lt;br /&gt;
* Ridurre la velocità fino al completo stop delle ruote. &lt;br /&gt;
* Rotazione del collo fin quando non viene rilevata una persona.&lt;br /&gt;
* Centrare il volto della persona e controllare se è la persona ingaggiata. (Controllare come viene effettuato il controllo su openni-kinect):&lt;br /&gt;
** Se la persona è la stessa il collo torna alla posizione iniziale e riprende la navigazione&lt;br /&gt;
*** Se la distanza rilevata dalla persona supera una certa soglia si deve attivare il comportamento[[E2GoHome#Wait|Wait]].&lt;br /&gt;
** Se la persona non è la stessa torna al punto 3 finchè non viene effettuato un giro completo di 360°. Se La persona non viene rilevata allora deve essere attivato il comportamento [[E2GoHome#RecoverUser|RecoverUser]].&lt;br /&gt;
&lt;br /&gt;
In aggiunta al controllo visivo può essere usato il sonar per ridurre le iterazioni di controllo. Se ad esempio l'ultimo controllo rileva che la persona è alla destra di E-2?, allora fintanto che viene rilevata una presenza alla destra del robot non è necessario effettuare il controllo, o comunque viene ridotto il numero di controlli.&lt;br /&gt;
&lt;br /&gt;
===Wait===&lt;br /&gt;
&lt;br /&gt;
Questo comportamento ha l'obbiettivo di aspettare la persona nel caso la distanza dall'utente sia maggiore di una certa soglia.&lt;br /&gt;
Può essere attivato mediante l'ausilio del sonar e dell'ultima posizione rilevata della persona, o nel caso in cui durante il comportamento [[E2GoHome#UserFollowing|UserFollowing]] sia stata rilevata una distanza eccessiva. Inoltre il robot sta seguendo una traiettoria che lo riporti a &amp;quot;casa&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Le azioni che il robot deve effettuare possono essere di 2 tipi. Nel caso il robot sia in movimento, la velocità può essere modificata proporzionalmente alla distanza dalla persona per ridurre quest'ultima. Nel caso invece il robot sia già fermo a seguito del comportamento [[E2GoHome#UserFollowing|UserFollowing]] allora E-2? rimane fermo&lt;br /&gt;
&lt;br /&gt;
Da info, il sonar percepisce min e max distanze comprese tra [0-6]m Occorre pero' considerare che il sonar non riconosce la persona, ma misura solo una distanza, quindi puo' essere solo relativamente affidabile.&lt;br /&gt;
&lt;br /&gt;
===RecoverUser===&lt;br /&gt;
&lt;br /&gt;
Se non è stata rilevata la persona che si sta accompagnando durante l'ultimo controllo e si sta seguendo una traiettoria che porta il robot a &amp;quot;casa&amp;quot;, viene attivato questo comportamento che ha lo scopo di cercare la persona a ritroso seguendo la traiettoria seguita fino a quel momento. E' quindi necessario che il robot tenga traccia degli spostamenti eseguiti per poter effettuare una ricerca. Inoltre è necessario che il robot si fermi in determinati punti via ruotando il collo per cercare la persona in più direzioni(180° ?).&lt;br /&gt;
&lt;br /&gt;
===AvoidObstacles===&lt;br /&gt;
&lt;br /&gt;
Lo scopo di questo comportamento è quello di evitare gli ostacoli. Le variabili che ne determinano l'attivazione sono la distanza dagli oggetti e la loro posizione, mediante l'utilizzo del sonar. Ad es. Se è presente un ostacolo frontalmente e il robot sta proseguendo in quella direzione allora è necessario cambiare traiettoria. Si possono presentare 2 tipi di ostacoli, fissi o mobili. Nel caso di oggetti fissi, non ci sono particolari problemi, mentre nel secondo caso si potrebbe valutare la direzione del movimento dell'oggetto con l'ausilio del kinect per determinare la direzione dell'oggetto, mediante confronto tra frame. INoltre, se ci fosse tropo traffico si potrebbe decidere di fermarsi e magari attivare un comportamento per cercare di ottenere campo libero (&amp;quot;Per favore, fateci passare...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
===KeepUserConnection===&lt;br /&gt;
&lt;br /&gt;
Se il robot sta seguendo una traiettoria che lo riporta a casa, e viene determinata la presenza della persona con l'ausilio del sonar e dell'ultima posizione rilevata, (ad es. destra, sinistra), E-2? inizia un interazione con la persona parlando di progetti o altro per tentare di mantenere alto l'interesse della persona che si sta accompagnando.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fuzzy Sets==&lt;br /&gt;
&lt;br /&gt;
Di seguito vengono riportati gli insiemi fuzzy che verranno utilizzati per la valutazione dei predicati&lt;br /&gt;
&lt;br /&gt;
===Distance===&lt;br /&gt;
&lt;br /&gt;
Viene rilevata dal Kinect mediante triangolazione (Kourosh Khoshelham massima distanza percepibile ca. 5m).&lt;br /&gt;
&lt;br /&gt;
Si può utilizzare una MF che copra tutto l'universo del discorso e che assuma valore massimo agli estremi [0-3?5]m&lt;br /&gt;
Si possono utilizzare tre insiemi, [CLOSE,MEDIUM,FAR] di forma trapezoidale.&lt;br /&gt;
&lt;br /&gt;
Immagine&lt;br /&gt;
&lt;br /&gt;
===Time===&lt;br /&gt;
&lt;br /&gt;
Definisce un insieme fuzzy per valutare quando è stato effettuato l'ultimo controllo da parte del robot. Una possibile definizione per l'intervallo di tempo potrebbe essere [0;60]s con i seguenti label [VERY_RECENT, RECENT, OBSOLETE] con forma trapezoidale.&lt;br /&gt;
&lt;br /&gt;
===Sonar===&lt;br /&gt;
&lt;br /&gt;
Insieme fuzzy che determina la distanza di un oggetto dal robot. Intervallo [?;?]. Label [VERY_NEAR,NEAR,FAR]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Crowding===&lt;br /&gt;
&lt;br /&gt;
Fuzzy che definisce quanto è affollato il campo di visione. [Vedere limiti kinect] Label [LOW,MEDIUM,HIGH]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Angle===&lt;br /&gt;
&lt;br /&gt;
Fuzzy set utilizzato per definire la posizione della testa rispetto al corpo. Intervallo [0;360]° Label [N,NE,NW....]&lt;br /&gt;
&lt;br /&gt;
===Percentage===&lt;br /&gt;
&lt;br /&gt;
Fuzzy set per il controllo della batteria. [0,100]% Label [VERY_LOW,LOW,MEDIUM,GOOD]&lt;br /&gt;
&lt;br /&gt;
==Predicati &amp;amp; Cando/Want Conditions==&lt;br /&gt;
&lt;br /&gt;
* Dubbi&lt;br /&gt;
** Vanno definiti anche predicati per il controllo HW ? &lt;br /&gt;
** La testa deve essere usata principalmente per orientarsi durante la navigazione quindi è necessario ridurre i controlli da parte del kinect per controllare se la persona sta seguendo il robot. Quindi Bisogna usare il sonar per assicurarsi che venga seguito.&lt;br /&gt;
&lt;br /&gt;
===Predicati===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* ( '''HeadAlign''' ANGLE )&lt;br /&gt;
* ( '''BatteryStatus''' PERCENTAGE )&lt;br /&gt;
&lt;br /&gt;
* ( '''PeopleDetected''' CROWDING )&lt;br /&gt;
&lt;br /&gt;
* ( '''UserDistance''' DISTANCE )&lt;br /&gt;
* ( '''UserDetected''' BOOLEAN )&lt;br /&gt;
* ( '''UserCheck''' TIME )&lt;br /&gt;
* ( '''UserInterested''' BOOLEAN )&lt;br /&gt;
* ( '''UserLeft''' BOOLEAN )&lt;br /&gt;
* ( '''UserRight''' BOOLEAN )&lt;br /&gt;
&lt;br /&gt;
* ( '''SonarSE''' SONAR )&lt;br /&gt;
* ( '''SonarE''' SONAR )&lt;br /&gt;
* ( '''SonarNE''' SONAR )&lt;br /&gt;
* ( '''SonarN''' SONAR )&lt;br /&gt;
* ( '''SonarNW''' SONAR )&lt;br /&gt;
* ( '''SonarW''' SONAR )&lt;br /&gt;
* ( '''SonarSW''' SONAR )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''User_is_near''' = ( D '''UserDistance''' NEAR )&lt;br /&gt;
* '''User_is_interested''' = ( D '''UserInterested''' TRUE )&lt;br /&gt;
* '''PersonInFront''' = ( AND ( D '''HeadAlign''' FRONT ) ( AND ( D '''UserDetected''' TRUE ) ( P '''User_is_near''' ) ) )&lt;br /&gt;
* '''ObjectInFront''' = ( OR ( D '''SonarN''' NEAR)  ( OR ( D '''SonarNE''' VERY_NEAR ) ( D '''SonarNW''' VERY_NEAR ) ) )&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* '''User_is_left''' = ( D '''UserLeft''' TRUE )&lt;br /&gt;
* '''User_is_right''' = ( D '''UserRight''' TRUE )&lt;br /&gt;
* '''ObjectLeft''' = ( OR ( D '''SonarE''' VERY_NEAR) ( D '''SonarSE''' VERY_NEAR ) )&lt;br /&gt;
* '''ObjectRight''' =  ( OR ( D '''SonarW''' VERY_NEAR) ( D '''SonarSW''' VERY_NEAR ) )&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* '''Obstacle_detected''' = ( OR ( P '''PersonInFront''' ) ( P '''ObjectInFront''' ) )&lt;br /&gt;
&lt;br /&gt;
* '''Many_people''' = ( D '''PeopleDetected''' HIGH)&lt;br /&gt;
&lt;br /&gt;
* '''Check_is_recent''' = ( D '''UserCheck''' RECENT )&lt;br /&gt;
&lt;br /&gt;
* '''User_is_following''' = ( OR ( AND ( P '''User_is_left''') ( P '''ObjectLeft''' ) ) ( AND ( P '''User_is_right''') ( P '''ObjectRight''' ) ))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Battery_is_low''' = ( OR ( D '''BatteryStatus''' LOW ) ( D '''BatteryStatus''' VERY_LOW ) )&lt;br /&gt;
* '''Following_trajectory''' = ()&lt;br /&gt;
&lt;br /&gt;
===Cando/Want Conditions===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:#000;background-color:#ffffff;&amp;quot; cellpadding=&amp;quot;20&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Behaviours&lt;br /&gt;
!Cando&lt;br /&gt;
!Want&lt;br /&gt;
|-&lt;br /&gt;
|'''GoHome'''&lt;br /&gt;
|( OR (P '''Battery_is_low''' ) ( AND ( P '''User_is_interested''') ( P '''User_is_near''') )&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''UserFollowing'''&lt;br /&gt;
| ( OR ( NOT ( P '''Check_is_recent''') ) (P '''Very_crowded''' ) )&lt;br /&gt;
| ( P '''Following_trajectory''')&lt;br /&gt;
|-&lt;br /&gt;
|'''Wait'''&lt;br /&gt;
|( OR ( AND ( P '''Check_is_recent''') ( NOT (P '''User_is_following''') ) ) ( AND ( P '''RobotStopped''') (AND ( P '''User_is_interested''') ( NOT ( P '''User_is_near''') ) ) )&lt;br /&gt;
|( P '''Following_trajectory''')&lt;br /&gt;
|-&lt;br /&gt;
|'''RecoverUser'''&lt;br /&gt;
|( AND ( P '''Check_is_recent''') ( NOT (P '''User_is_following''') ) )&lt;br /&gt;
|( AND ( P '''Following_trajectory''') ( P '''RobotStopped''') )&lt;br /&gt;
|-&lt;br /&gt;
|'''AvoidObstacles'''&lt;br /&gt;
| ( OR ( P '''Obstacle_detected''' ) ( P '''Many_people''') ) &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''KeepUserConnection'''&lt;br /&gt;
|( AND ( P '''Check_is_recent''') ( P '''User_is_following''') ) &lt;br /&gt;
|( P '''Following_trajectory''')&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Navigazione==&lt;/div&gt;</summary>
		<author><name>LorenzoRipani</name></author>	</entry>

	<entry>
		<id>https://airwiki.elet.polimi.it/index.php?title=Talk:E2GoHome&amp;diff=16444</id>
		<title>Talk:E2GoHome</title>
		<link rel="alternate" type="text/html" href="https://airwiki.elet.polimi.it/index.php?title=Talk:E2GoHome&amp;diff=16444"/>
				<updated>2013-06-05T16:47:18Z</updated>
		
		<summary type="html">&lt;p&gt;LorenzoRipani: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==DeadLine==&lt;br /&gt;
&lt;br /&gt;
* Navigazione - END 31/06&lt;br /&gt;
** Scegliere Path planner e Simulazione&lt;br /&gt;
** Simulazione modulo di localizzazione su mappa&lt;br /&gt;
** Creazione mappa 2D&lt;br /&gt;
&lt;br /&gt;
* Comportamenti - END 31/07&lt;br /&gt;
** Completare comportamenti&lt;br /&gt;
** Simulazione modulo mrt &lt;br /&gt;
** Codice per comportamenti&lt;br /&gt;
&lt;br /&gt;
* Testing su robot - End ?&lt;br /&gt;
&lt;br /&gt;
==Comportamenti==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* GoHome: Se viene rilevata una persona interessata, il comportamento si occupa di riportare il robot a casa.&lt;br /&gt;
&lt;br /&gt;
* UserFollowing: Se il robot sta tornando verso casa, controlla che l'utente lo stia effettivamente seguendo. Il robot effettua l'azione sulla base del tempo dall'ultimo controllo e in base al numero di persone presenti nel campo visivo.&lt;br /&gt;
&lt;br /&gt;
* Wait: Se la distanza della persona è eccessiva E-2 si ferma per aspettarla&lt;br /&gt;
&lt;br /&gt;
* RecoverUser: Se E-2 perde il contatto con la persona per un tempo abbastanza lungo, torna sui suoi passi per cercare la persona&lt;br /&gt;
&lt;br /&gt;
* AvoidObstacle: Comportamento che ha lo scopo di evitare gli ostacoli durante gli spostamenti del robot. Eventualmente si feram se gli ostacoli sono persone in movimento e ce ne sono troppe.&lt;br /&gt;
&lt;br /&gt;
* KeepUserConnection: Se l'utente sta seguendo il robot e c'è ancora molta distanza da &amp;quot;casa&amp;quot; il robot intrattiene l'utente per mantenere una connessione.&lt;br /&gt;
&lt;br /&gt;
===GoHome===&lt;br /&gt;
&lt;br /&gt;
Il robot fa affidamento su un altro modulo che valuta l'interesse della persona. Se viene mostrato interesse il robot calcola la traiettoria migliore per tornare a &amp;quot;casa&amp;quot; e inizia a seguire la traiettoria creata. Vedi [[E2GoHome#Navigazione|Navigazione]].&lt;br /&gt;
&lt;br /&gt;
===UserFollowing===&lt;br /&gt;
&lt;br /&gt;
Lo scopo di questo comportamento è quello di determinare se la persona che è stata ingaggiata stia effettivamente seguendo il Robot.&lt;br /&gt;
Il comportamento viene attivato sulla base di due variabili: il tempo trascorso dall'ultimo controllo, e il numero di persone rilevate nel campo visivo(Si considera che un numero elevato di persone aumenti le probabilità che il robot perda il contatto con la persona). &lt;br /&gt;
&lt;br /&gt;
Una possibile sequenza di movimenti potrebbe essere:&lt;br /&gt;
 &lt;br /&gt;
* Ridurre la velocità fino al completo stop delle ruote. &lt;br /&gt;
* Rotazione del collo fin quando non viene rilevata una persona.&lt;br /&gt;
* Centrare il volto della persona e controllare se è la persona ingaggiata. (Controllare come viene effettuato il controllo su openni-kinect):&lt;br /&gt;
** Se la persona è la stessa il collo torna alla posizione iniziale e riprende la navigazione&lt;br /&gt;
*** Se la distanza rilevata dalla persona supera una certa soglia si deve attivare il comportamento[[E2GoHome#Wait|Wait]].&lt;br /&gt;
** Se la persona non è la stessa torna al punto 3 finchè non viene effettuato un giro completo di 360°. Se La persona non viene rilevata allora deve essere attivato il comportamento [[E2GoHome#RecoverUser|RecoverUser]].&lt;br /&gt;
&lt;br /&gt;
In aggiunta al controllo visivo può essere usato il sonar per ridurre le iterazioni di controllo. Se ad esempio l'ultimo controllo rileva che la persona è alla destra di E-2?, allora fintanto che viene rilevata una presenza alla destra del robot non è necessario effettuare il controllo, o comunque viene ridotto il numero di controlli.&lt;br /&gt;
&lt;br /&gt;
===Wait===&lt;br /&gt;
&lt;br /&gt;
Questo comportamento ha l'obbiettivo di aspettare la persona nel caso la distanza dall'utente sia maggiore di una certa soglia.&lt;br /&gt;
Può essere attivato mediante l'ausilio del sonar e dell'ultima posizione rilevata della persona, o nel caso in cui durante il comportamento [[E2GoHome#UserFollowing|UserFollowing]] sia stata rilevata una distanza eccessiva. Inoltre il robot sta seguendo una traiettoria che lo riporti a &amp;quot;casa&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Le azioni che il robot deve effettuare possono essere di 2 tipi. Nel caso il robot sia in movimento, la velocità può essere modificata proporzionalmente alla distanza dalla persona per ridurre quest'ultima. Nel caso invece il robot sia già fermo a seguito del comportamento [[E2GoHome#UserFollowing|UserFollowing]] allora E-2? rimane fermo&lt;br /&gt;
&lt;br /&gt;
Da info, il sonar percepisce min e max distanze comprese tra [0-6]m Occorre pero' considerare che il sonar non riconosce la persona, ma misura solo una distanza, quindi puo' essere solo relativamente affidabile.&lt;br /&gt;
&lt;br /&gt;
===RecoverUser===&lt;br /&gt;
&lt;br /&gt;
Se non è stata rilevata la persona che si sta accompagnando durante l'ultimo controllo e si sta seguendo una traiettoria che porta il robot a &amp;quot;casa&amp;quot;, viene attivato questo comportamento che ha lo scopo di cercare la persona a ritroso seguendo la traiettoria seguita fino a quel momento. E' quindi necessario che il robot tenga traccia degli spostamenti eseguiti per poter effettuare una ricerca. Inoltre è necessario che il robot si fermi in determinati punti via ruotando il collo per cercare la persona in più direzioni(180° ?).&lt;br /&gt;
&lt;br /&gt;
===AvoidObstacles===&lt;br /&gt;
&lt;br /&gt;
Lo scopo di questo comportamento è quello di evitare gli ostacoli. Le variabili che ne determinano l'attivazione sono la distanza dagli oggetti e la loro posizione, mediante l'utilizzo del sonar. Ad es. Se è presente un ostacolo frontalmente e il robot sta proseguendo in quella direzione allora è necessario cambiare traiettoria. Si possono presentare 2 tipi di ostacoli, fissi o mobili. Nel caso di oggetti fissi, non ci sono particolari problemi, mentre nel secondo caso si potrebbe valutare la direzione del movimento dell'oggetto con l'ausilio del kinect per determinare la direzione dell'oggetto, mediante confronto tra frame. INoltre, se ci fosse tropo traffico si potrebbe decidere di fermarsi e magari attivare un comportamento per cercare di ottenere campo libero (&amp;quot;Per favore, fateci passare...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
===KeepUserConnection===&lt;br /&gt;
&lt;br /&gt;
Se il robot sta seguendo una traiettoria che lo riporta a casa, e viene determinata la presenza della persona con l'ausilio del sonar e dell'ultima posizione rilevata, (ad es. destra, sinistra), E-2? inizia un interazione con la persona parlando di progetti o altro per tentare di mantenere alto l'interesse della persona che si sta accompagnando.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fuzzy Sets==&lt;br /&gt;
&lt;br /&gt;
Di seguito vengono riportati gli insiemi fuzzy che verranno utilizzati per la valutazione dei predicati&lt;br /&gt;
&lt;br /&gt;
===Distance===&lt;br /&gt;
&lt;br /&gt;
Viene rilevata dal Kinect mediante triangolazione (Kourosh Khoshelham massima distanza percepibile ca. 5m).&lt;br /&gt;
&lt;br /&gt;
Si può utilizzare una MF che copra tutto l'universo del discorso e che assuma valore massimo agli estremi [0-3?5]m&lt;br /&gt;
Si possono utilizzare tre insiemi, [CLOSE,MEDIUM,FAR] di forma trapezoidale.&lt;br /&gt;
&lt;br /&gt;
Immagine&lt;br /&gt;
&lt;br /&gt;
===Time===&lt;br /&gt;
&lt;br /&gt;
Definisce un insieme fuzzy per valutare quando è stato effettuato l'ultimo controllo da parte del robot. Una possibile definizione per l'intervallo di tempo potrebbe essere [0;60]s con i seguenti label [VERY_RECENT, RECENT, OBSOLETE] con forma trapezoidale.&lt;br /&gt;
&lt;br /&gt;
===Sonar===&lt;br /&gt;
&lt;br /&gt;
Insieme fuzzy che determina la distanza di un oggetto dal robot. Intervallo [?;?]. Label [VERY_NEAR,NEAR,FAR]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Crowding===&lt;br /&gt;
&lt;br /&gt;
Fuzzy che definisce quanto è affollato il campo di visione. [Vedere limiti kinect] Label [LOW,MEDIUM,HIGH]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Angle===&lt;br /&gt;
&lt;br /&gt;
Fuzzy set utilizzato per definire la posizione della testa rispetto al corpo. Intervallo [0;360]° Label [N,NE,NW....]&lt;br /&gt;
&lt;br /&gt;
===Percentage===&lt;br /&gt;
&lt;br /&gt;
Fuzzy set per il controllo della batteria. [0,100]% Label [VERY_LOW,LOW,MEDIUM,GOOD]&lt;br /&gt;
&lt;br /&gt;
==Predicati &amp;amp; Cando/Want Conditions==&lt;br /&gt;
&lt;br /&gt;
* Dubbi&lt;br /&gt;
** Vanno definiti anche predicati per il controllo HW ? &lt;br /&gt;
** La testa deve essere usata principalmente per orientarsi durante la navigazione quindi è necessario ridurre i controlli da parte del kinect per controllare se la persona sta seguendo il robot. Quindi Bisogna usare il sonar per assicurarsi che venga seguito.&lt;br /&gt;
&lt;br /&gt;
===Predicati===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* ( '''HeadAlign''' ANGLE )&lt;br /&gt;
* ( '''BatteryStatus''' PERCENTAGE )&lt;br /&gt;
&lt;br /&gt;
* ( '''PeopleDetected''' CROWDING )&lt;br /&gt;
&lt;br /&gt;
* ( '''UserDistance''' DISTANCE )&lt;br /&gt;
* ( '''UserDetected''' BOOLEAN )&lt;br /&gt;
* ( '''UserCheck''' TIME )&lt;br /&gt;
* ( '''UserInterested''' BOOLEAN )&lt;br /&gt;
* ( '''UserLeft''' BOOLEAN )&lt;br /&gt;
* ( '''UserRight''' BOOLEAN )&lt;br /&gt;
&lt;br /&gt;
* ( '''SonarSE''' SONAR )&lt;br /&gt;
* ( '''SonarE''' SONAR )&lt;br /&gt;
* ( '''SonarNE''' SONAR )&lt;br /&gt;
* ( '''SonarN''' SONAR )&lt;br /&gt;
* ( '''SonarNW''' SONAR )&lt;br /&gt;
* ( '''SonarW''' SONAR )&lt;br /&gt;
* ( '''SonarSW''' SONAR )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''User_is_near''' = ( D '''UserDistance''' NEAR )&lt;br /&gt;
* '''User_is_interested''' = ( D '''UserInterested''' TRUE )&lt;br /&gt;
* '''PersonInFront''' = ( AND ( D '''HeadAlign''' FRONT ) ( AND ( D '''UserDetected''' TRUE ) ( P '''User_is_near''' ) ) )&lt;br /&gt;
* '''ObjectInFront''' = ( OR ( D '''SonarN''' NEAR)  ( OR ( D '''SonarNE''' VERY_NEAR ) ( D '''SonarNW''' VERY_NEAR ) ) )&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* '''User_is_left''' = ( D '''UserLeft''' TRUE )&lt;br /&gt;
* '''User_is_right''' = ( D '''UserRight''' TRUE )&lt;br /&gt;
* '''ObjectLeft''' = ( OR ( D '''SonarE''' VERY_NEAR) ( D '''SonarSE''' VERY_NEAR ) )&lt;br /&gt;
* '''ObjectRight''' =  ( OR ( D '''SonarW''' VERY_NEAR) ( D '''SonarSW''' VERY_NEAR ) )&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* '''Obstacle_detected''' = ( OR ( P '''PersonInFront''' ) ( P '''ObjectInFront''' ) )&lt;br /&gt;
&lt;br /&gt;
* '''Many_people''' = ( D '''PeopleDetected''' HIGH)&lt;br /&gt;
&lt;br /&gt;
* '''Check_is_recent''' = ( D '''UserCheck''' RECENT )&lt;br /&gt;
&lt;br /&gt;
* '''User_is_following''' = ( OR ( AND ( P '''User_is_left''') ( P '''ObjectLeft''' ) ) ( AND ( P '''User_is_right''') ( P '''ObjectRight''' ) ))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Battery_is_low''' = ( OR ( D '''BatteryStatus''' LOW ) ( D '''BatteryStatus''' VERY_LOW ) )&lt;br /&gt;
* '''Following_trajectory''' = ()&lt;br /&gt;
&lt;br /&gt;
===Cando/Want Conditions===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:#000;background-color:#ffffff;&amp;quot; cellpadding=&amp;quot;20&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Behaviours&lt;br /&gt;
!Cando&lt;br /&gt;
!Want&lt;br /&gt;
|-&lt;br /&gt;
|'''GoHome'''&lt;br /&gt;
|( OR (P '''Battery_is_low''' ) ( AND ( P '''User_is_interested''') ( P '''User_is_near''') )&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''UserFollowing'''&lt;br /&gt;
| ( OR ( NOT ( P '''Check_is_recent''') ) (P '''Very_crowded''' ) )&lt;br /&gt;
| ( P '''Following_trajectory''')&lt;br /&gt;
|-&lt;br /&gt;
|'''Wait'''&lt;br /&gt;
|( OR ( AND ( P '''Check_is_recent''') ( NOT (P '''User_is_following''') ) ) ( AND ( P '''RobotStopped''') (AND ( P '''User_is_interested''') ( NOT ( P '''User_is_near''') ) ) )&lt;br /&gt;
|( P '''Following_trajectory''')&lt;br /&gt;
|-&lt;br /&gt;
|'''RecoverUser'''&lt;br /&gt;
|( AND ( P '''Check_is_recent''') ( NOT (P '''User_is_following''') ) )&lt;br /&gt;
|( AND ( P '''Following_trajectory''') ( P '''RobotStopped''') )&lt;br /&gt;
|-&lt;br /&gt;
|'''AvoidObstacles'''&lt;br /&gt;
| ( OR ( P '''Obstacle_detected''' ) ( P '''Many_people''') ) &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''KeepUserConnection'''&lt;br /&gt;
|( AND ( P '''Check_is_recent''') ( P '''User_is_following''') ) &lt;br /&gt;
|( P '''Following_trajectory''')&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Navigazione==&lt;/div&gt;</summary>
		<author><name>LorenzoRipani</name></author>	</entry>

	<entry>
		<id>https://airwiki.elet.polimi.it/index.php?title=User:LorenzoRipani&amp;diff=16425</id>
		<title>User:LorenzoRipani</title>
		<link rel="alternate" type="text/html" href="https://airwiki.elet.polimi.it/index.php?title=User:LorenzoRipani&amp;diff=16425"/>
				<updated>2013-06-04T06:48:48Z</updated>
		
		<summary type="html">&lt;p&gt;LorenzoRipani: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Student&lt;br /&gt;
|category=Student&lt;br /&gt;
|firstname=Lorenzo&lt;br /&gt;
|lastname=Ripani&lt;br /&gt;
|photo=LorenzoR.jpg&lt;br /&gt;
|email=ripani.lorenzo@gmail.com&lt;br /&gt;
|projectpage=E2GoHome&lt;br /&gt;
|advisor=AndreaBonarini&lt;br /&gt;
|status=active&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>LorenzoRipani</name></author>	</entry>

	<entry>
		<id>https://airwiki.elet.polimi.it/index.php?title=File:LorenzoR.jpg&amp;diff=16424</id>
		<title>File:LorenzoR.jpg</title>
		<link rel="alternate" type="text/html" href="https://airwiki.elet.polimi.it/index.php?title=File:LorenzoR.jpg&amp;diff=16424"/>
				<updated>2013-06-04T06:47:28Z</updated>
		
		<summary type="html">&lt;p&gt;LorenzoRipani: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>LorenzoRipani</name></author>	</entry>

	<entry>
		<id>https://airwiki.elet.polimi.it/index.php?title=Talk:E2GoHome&amp;diff=16354</id>
		<title>Talk:E2GoHome</title>
		<link rel="alternate" type="text/html" href="https://airwiki.elet.polimi.it/index.php?title=Talk:E2GoHome&amp;diff=16354"/>
				<updated>2013-05-20T11:20:16Z</updated>
		
		<summary type="html">&lt;p&gt;LorenzoRipani: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Comportamenti==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* GoHome: Se viene rilevata una persona interessata, il comportamento si occupa di riportare il robot a casa.&lt;br /&gt;
&lt;br /&gt;
* UserFollowing: Se il robot sta tornando verso casa, controlla che l'utente lo stia effettivamente seguendo. Il robot effettua l'azione sulla base del tempo dall'ultimo controllo e in base al numero di persone presenti nel campo visivo.&lt;br /&gt;
&lt;br /&gt;
* Wait: Se la distanza della persona è eccessiva E-2 si ferma per aspettarla&lt;br /&gt;
&lt;br /&gt;
* RecoverUser: Se E-2 perde il contatto con la persona per un tempo abbastanza lungo, torna sui suoi passi per cercare la persona&lt;br /&gt;
&lt;br /&gt;
* AvoidObstacle: Comportamento che ha lo scopo di evitare gli ostacoli durante gli spostamenti del robot. Eventualmente si feram se gli ostacoli sono persone in movimento e ce ne sono troppe.&lt;br /&gt;
&lt;br /&gt;
* KeepUserConnection: Se l'utente sta seguendo il robot e c'è ancora molta distanza da &amp;quot;casa&amp;quot; il robot intrattiene l'utente per mantenere una connessione.&lt;br /&gt;
&lt;br /&gt;
===GoHome===&lt;br /&gt;
&lt;br /&gt;
Il robot fa affidamento su un altro modulo che valuta l'interesse della persona. Se viene mostrato interesse il robot calcola la traiettoria migliore per tornare a &amp;quot;casa&amp;quot; e inizia a seguire la traiettoria creata. Vedi [[E2GoHome#Navigazione|Navigazione]].&lt;br /&gt;
&lt;br /&gt;
===UserFollowing===&lt;br /&gt;
&lt;br /&gt;
Lo scopo di questo comportamento è quello di determinare se la persona che è stata ingaggiata stia effettivamente seguendo il Robot.&lt;br /&gt;
Il comportamento viene attivato sulla base di due variabili: il tempo trascorso dall'ultimo controllo, e il numero di persone rilevate nel campo visivo(Si considera che un numero elevato di persone aumenti le probabilità che il robot perda il contatto con la persona). &lt;br /&gt;
&lt;br /&gt;
Una possibile sequenza di movimenti potrebbe essere:&lt;br /&gt;
 &lt;br /&gt;
* Ridurre la velocità fino al completo stop delle ruote. &lt;br /&gt;
* Rotazione del collo fin quando non viene rilevata una persona.&lt;br /&gt;
* Centrare il volto della persona e controllare se è la persona ingaggiata. (Controllare come viene effettuato il controllo su openni-kinect):&lt;br /&gt;
** Se la persona è la stessa il collo torna alla posizione iniziale e riprende la navigazione&lt;br /&gt;
*** Se la distanza rilevata dalla persona supera una certa soglia si deve attivare il comportamento[[E2GoHome#Wait|Wait]].&lt;br /&gt;
** Se la persona non è la stessa torna al punto 3 finchè non viene effettuato un giro completo di 360°. Se La persona non viene rilevata allora deve essere attivato il comportamento [[E2GoHome#RecoverUser|RecoverUser]].&lt;br /&gt;
&lt;br /&gt;
In aggiunta al controllo visivo può essere usato il sonar per ridurre le iterazioni di controllo. Se ad esempio l'ultimo controllo rileva che la persona è alla destra di E-2?, allora fintanto che viene rilevata una presenza alla destra del robot non è necessario effettuare il controllo, o comunque viene ridotto il numero di controlli.&lt;br /&gt;
&lt;br /&gt;
===Wait===&lt;br /&gt;
&lt;br /&gt;
Questo comportamento ha l'obbiettivo di aspettare la persona nel caso la distanza dall'utente sia maggiore di una certa soglia.&lt;br /&gt;
Può essere attivato mediante l'ausilio del sonar e dell'ultima posizione rilevata della persona, o nel caso in cui durante il comportamento [[E2GoHome#UserFollowing|UserFollowing]] sia stata rilevata una distanza eccessiva. Inoltre il robot sta seguendo una traiettoria che lo riporti a &amp;quot;casa&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Le azioni che il robot deve effettuare possono essere di 2 tipi. Nel caso il robot sia in movimento, la velocità può essere modificata proporzionalmente alla distanza dalla persona per ridurre quest'ultima. Nel caso invece il robot sia già fermo a seguito del comportamento [[E2GoHome#UserFollowing|UserFollowing]] allora E-2? rimane fermo&lt;br /&gt;
&lt;br /&gt;
Da info, il sonar percepisce min e max distanze comprese tra [0-6]m Occorre pero' considerare che il sonar non riconosce la persona, ma misura solo una distanza, quindi puo' essere solo relativamente affidabile.&lt;br /&gt;
&lt;br /&gt;
===RecoverUser===&lt;br /&gt;
&lt;br /&gt;
Se non è stata rilevata la persona che si sta accompagnando durante l'ultimo controllo e si sta seguendo una traiettoria che porta il robot a &amp;quot;casa&amp;quot;, viene attivato questo comportamento che ha lo scopo di cercare la persona a ritroso seguendo la traiettoria seguita fino a quel momento. E' quindi necessario che il robot tenga traccia degli spostamenti eseguiti per poter effettuare una ricerca. Inoltre è necessario che il robot si fermi in determinati punti via ruotando il collo per cercare la persona in più direzioni(180° ?).&lt;br /&gt;
&lt;br /&gt;
===AvoidObstacles===&lt;br /&gt;
&lt;br /&gt;
Lo scopo di questo comportamento è quello di evitare gli ostacoli. Le variabili che ne determinano l'attivazione sono la distanza dagli oggetti e la loro posizione, mediante l'utilizzo del sonar. Ad es. Se è presente un ostacolo frontalmente e il robot sta proseguendo in quella direzione allora è necessario cambiare traiettoria. Si possono presentare 2 tipi di ostacoli, fissi o mobili. Nel caso di oggetti fissi, non ci sono particolari problemi, mentre nel secondo caso si potrebbe valutare la direzione del movimento dell'oggetto con l'ausilio del kinect per determinare la direzione dell'oggetto, mediante confronto tra frame. INoltre, se ci fosse tropo traffico si potrebbe decidere di fermarsi e magari attivare un comportamento per cercare di ottenere campo libero (&amp;quot;Per favore, fateci passare...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
===KeepUserConnection===&lt;br /&gt;
&lt;br /&gt;
Se il robot sta seguendo una traiettoria che lo riporta a casa, e viene determinata la presenza della persona con l'ausilio del sonar e dell'ultima posizione rilevata, (ad es. destra, sinistra), E-2? inizia un interazione con la persona parlando di progetti o altro per tentare di mantenere alto l'interesse della persona che si sta accompagnando.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fuzzy Sets==&lt;br /&gt;
&lt;br /&gt;
Di seguito vengono riportati gli insiemi fuzzy che verranno utilizzati per la valutazione dei predicati&lt;br /&gt;
&lt;br /&gt;
===Distance===&lt;br /&gt;
&lt;br /&gt;
Viene rilevata dal Kinect mediante triangolazione (Kourosh Khoshelham massima distanza percepibile ca. 5m).&lt;br /&gt;
&lt;br /&gt;
Si può utilizzare una MF che copra tutto l'universo del discorso e che assuma valore massimo agli estremi [0-3?5]m&lt;br /&gt;
Si possono utilizzare tre insiemi, [CLOSE,MEDIUM,FAR] di forma trapezoidale.&lt;br /&gt;
&lt;br /&gt;
Immagine&lt;br /&gt;
&lt;br /&gt;
===Time===&lt;br /&gt;
&lt;br /&gt;
Definisce un insieme fuzzy per valutare quando è stato effettuato l'ultimo controllo da parte del robot. Una possibile definizione per l'intervallo di tempo potrebbe essere [0;60]s con i seguenti label [VERY_RECENT, RECENT, OBSOLETE] con forma trapezoidale.&lt;br /&gt;
&lt;br /&gt;
===Sonar===&lt;br /&gt;
&lt;br /&gt;
Insieme fuzzy che determina la distanza di un oggetto dal robot. Intervallo [?;?]. Label [VERY_NEAR,NEAR,FAR]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Crowding===&lt;br /&gt;
&lt;br /&gt;
Fuzzy che definisce quanto è affollato il campo di visione. [Vedere limiti kinect] Label [LOW,MEDIUM,HIGH]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Angle===&lt;br /&gt;
&lt;br /&gt;
Fuzzy set utilizzato per definire la posizione della testa rispetto al corpo. Intervallo [0;360]° Label [N,NE,NW....]&lt;br /&gt;
&lt;br /&gt;
===Percentage===&lt;br /&gt;
&lt;br /&gt;
Fuzzy set per il controllo della batteria. [0,100]% Label [VERY_LOW,LOW,MEDIUM,GOOD]&lt;br /&gt;
&lt;br /&gt;
==Predicati &amp;amp; Cando/Want Conditions==&lt;br /&gt;
&lt;br /&gt;
* Dubbi&lt;br /&gt;
** Vanno definiti anche predicati per il controllo HW ? &lt;br /&gt;
** La testa deve essere usata principalmente per orientarsi durante la navigazione quindi è necessario ridurre i controlli da parte del kinect per controllare se la persona sta seguendo il robot. Quindi Bisogna usare il sonar per assicurarsi che venga seguito.&lt;br /&gt;
&lt;br /&gt;
===Predicati===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* ( '''HeadAlign''' ANGLE )&lt;br /&gt;
* ( '''BatteryStatus''' PERCENTAGE )&lt;br /&gt;
&lt;br /&gt;
* ( '''PeopleDetected''' CROWDING )&lt;br /&gt;
&lt;br /&gt;
* ( '''UserDistance''' DISTANCE )&lt;br /&gt;
* ( '''UserDetected''' BOOLEAN )&lt;br /&gt;
* ( '''UserCheck''' TIME )&lt;br /&gt;
* ( '''UserInterested''' BOOLEAN )&lt;br /&gt;
* ( '''UserLeft''' BOOLEAN )&lt;br /&gt;
* ( '''UserRight''' BOOLEAN )&lt;br /&gt;
&lt;br /&gt;
* ( '''SonarSE''' SONAR )&lt;br /&gt;
* ( '''SonarE''' SONAR )&lt;br /&gt;
* ( '''SonarNE''' SONAR )&lt;br /&gt;
* ( '''SonarN''' SONAR )&lt;br /&gt;
* ( '''SonarNW''' SONAR )&lt;br /&gt;
* ( '''SonarW''' SONAR )&lt;br /&gt;
* ( '''SonarSW''' SONAR )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''User_is_near''' = ( D '''UserDistance''' NEAR )&lt;br /&gt;
* '''User_is_interested''' = ( D '''UserInterested''' TRUE )&lt;br /&gt;
* '''PersonInFront''' = ( AND ( D '''HeadAlign''' FRONT ) ( AND ( D '''UserDetected''' TRUE ) ( P '''User_is_near''' ) ) )&lt;br /&gt;
* '''ObjectInFront''' = ( OR ( D '''SonarN''' NEAR)  ( OR ( D '''SonarNE''' VERY_NEAR ) ( D '''SonarNW''' VERY_NEAR ) ) )&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* '''User_is_left''' = ( D '''UserLeft''' TRUE )&lt;br /&gt;
* '''User_is_right''' = ( D '''UserRight''' TRUE )&lt;br /&gt;
* '''ObjectLeft''' = ( OR ( D '''SonarE''' VERY_NEAR) ( D '''SonarSE''' VERY_NEAR ) )&lt;br /&gt;
* '''ObjectRight''' =  ( OR ( D '''SonarW''' VERY_NEAR) ( D '''SonarSW''' VERY_NEAR ) )&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* '''Obstacle_detected''' = ( OR ( P '''PersonInFront''' ) ( P '''ObjectInFront''' ) )&lt;br /&gt;
&lt;br /&gt;
* '''Many_people''' = ( D '''PeopleDetected''' HIGH)&lt;br /&gt;
&lt;br /&gt;
* '''Check_is_recent''' = ( D '''UserCheck''' RECENT )&lt;br /&gt;
&lt;br /&gt;
* '''User_is_following''' = ( OR ( AND ( P '''User_is_left''') ( P '''ObjectLeft''' ) ) ( AND ( P '''User_is_right''') ( P '''ObjectRight''' ) ))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Battery_is_low''' = ( OR ( D '''BatteryStatus''' LOW ) ( D '''BatteryStatus''' VERY_LOW ) )&lt;br /&gt;
* '''Following_trajectory''' = ()&lt;br /&gt;
&lt;br /&gt;
===Cando/Want Conditions===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:#000;background-color:#ffffff;&amp;quot; cellpadding=&amp;quot;20&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Behaviours&lt;br /&gt;
!Cando&lt;br /&gt;
!Want&lt;br /&gt;
|-&lt;br /&gt;
|'''GoHome'''&lt;br /&gt;
|( OR (P '''Battery_is_low''' ) ( AND ( P '''User_is_interested''') ( P '''User_is_near''') )&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''UserFollowing'''&lt;br /&gt;
| ( OR ( NOT ( P '''Check_is_recent''') ) (P '''Very_crowded''' ) )&lt;br /&gt;
| ( P '''Following_trajectory''')&lt;br /&gt;
|-&lt;br /&gt;
|'''Wait'''&lt;br /&gt;
|( OR ( AND ( P '''Check_is_recent''') ( NOT (P '''User_is_following''') ) ) ( AND ( P '''RobotStopped''') (AND ( P '''User_is_interested''') ( NOT ( P '''User_is_near''') ) ) )&lt;br /&gt;
|( P '''Following_trajectory''')&lt;br /&gt;
|-&lt;br /&gt;
|'''RecoverUser'''&lt;br /&gt;
|( AND ( P '''Check_is_recent''') ( NOT (P '''User_is_following''') ) )&lt;br /&gt;
|( AND ( P '''Following_trajectory''') ( P '''RobotStopped''') )&lt;br /&gt;
|-&lt;br /&gt;
|'''AvoidObstacles'''&lt;br /&gt;
| ( OR ( P '''Obstacle_detected''' ) ( P '''Many_people''') ) &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''KeepUserConnection'''&lt;br /&gt;
|( AND ( P '''Check_is_recent''') ( P '''User_is_following''') ) &lt;br /&gt;
|( P '''Following_trajectory''')&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Navigazione==&lt;/div&gt;</summary>
		<author><name>LorenzoRipani</name></author>	</entry>

	<entry>
		<id>https://airwiki.elet.polimi.it/index.php?title=Talk:E2GoHome&amp;diff=16280</id>
		<title>Talk:E2GoHome</title>
		<link rel="alternate" type="text/html" href="https://airwiki.elet.polimi.it/index.php?title=Talk:E2GoHome&amp;diff=16280"/>
				<updated>2013-05-16T10:41:29Z</updated>
		
		<summary type="html">&lt;p&gt;LorenzoRipani: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Comportamenti==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* GoHome: Se viene rilevata una persona interessata, il comportamento si occupa di riportare il robot a casa.&lt;br /&gt;
&lt;br /&gt;
* UserFollowing: Se il robot sta tornando verso casa, controlla che l'utente lo stia effettivamente seguendo. Il robot effettua l'azione sulla base del tempo dall'ultimo controllo e in base al numero di persone presenti nel campo visivo.&lt;br /&gt;
&lt;br /&gt;
* Wait: Se la distanza della persona è maggiore di X E-2 si ferma per aspettarla&lt;br /&gt;
&lt;br /&gt;
* RecoverUser: Se E-2 perde il contatto con la persona per un tempo X torna sui suoi passi per cercare la persona&lt;br /&gt;
&lt;br /&gt;
* AvoidObstacle: Comportamento che ha lo scopo di evitare gli ostacoli durante gli spostamenti del robot.&lt;br /&gt;
&lt;br /&gt;
* KeepUserConnection: Se l'utente sta seguendo il robot e c'è ancora molta distanza da &amp;quot;casa&amp;quot; il robot intrattiene l'utente per mantenere una connessione.&lt;br /&gt;
&lt;br /&gt;
===GoHome===&lt;br /&gt;
&lt;br /&gt;
Il robot fa affidamento su un altro modulo che valuta l'interesse della persona. Se viene mostrato interesse il robot calcola la traiettoria migliore per tornare a &amp;quot;casa&amp;quot; e inizia a seguire la traiettoria creata. Vedi [[E2GoHome#Navigazione|Navigazione]].&lt;br /&gt;
&lt;br /&gt;
===UserFollowing===&lt;br /&gt;
&lt;br /&gt;
Lo scopo di questo comportamento è quello di determinare se la persona che è stata ingaggiata stia effettivamente seguendo il Robot.&lt;br /&gt;
Il comportamento viene attivato sulla base di due variabili: il tempo trascorso dall'ultimo controllo, e il numero di persone rilevate nel campo visivo(Si considera che un numero elevato di persone aumenti le probabilità che il robot perda il contatto con la persona). &lt;br /&gt;
&lt;br /&gt;
Una possibile sequenza di movimenti potrebbe essere:&lt;br /&gt;
 &lt;br /&gt;
* Ridurre la velocità fino al completo stop delle ruote. &lt;br /&gt;
* Rotazione del collo fin quando non viene rilevata una persona.&lt;br /&gt;
* Centrare il volto della persona e controllare se è la persona ingaggiata. (Controllare come viene effettuato il controllo su openni-kinect):&lt;br /&gt;
** Se la persona è la stessa il collo torna alla posizione iniziale e riprende la navigazione&lt;br /&gt;
*** Se la distanza rilevata dalla persona supera una certa soglia si deve attivare il comportamento[[E2GoHome#Wait|Wait]].&lt;br /&gt;
** Se la persona non è la stessa torna al punto 3 finchè non viene effettuato un giro completo di 360°. Se La persona non viene rilevata allora deve essere attivato il comportamento [[E2GoHome#RecoverUser|RecoverUser]].&lt;br /&gt;
&lt;br /&gt;
In aggiunta al controllo visivo può essere usato il sonar per ridurre le iterazioni di controllo. Se ad esempio l'ultimo controllo rileva che la persona è alla destra di E-2?, allora fintanto che viene rilevata una presenza alla destra del robot non è necessario effettuare il controllo, o comunque viene ridotto il numero di controlli.&lt;br /&gt;
&lt;br /&gt;
===Wait===&lt;br /&gt;
&lt;br /&gt;
Questo comportamento ha l'obbiettivo di aspettare la persona nel caso la distanza dall'utente sia maggiore di una certa soglia.&lt;br /&gt;
Può essere attivato mediante l'ausilio del sonar e dell'ultima posizione rilevata della persona, o nel caso in cui durante il comportamento [[E2GoHome#UserFollowing|UserFollowing]] sia stata rilevata una distanza eccessiva. Inoltre il robot sta seguendo una traiettoria che lo riporti a &amp;quot;casa&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Le azioni che il robot deve effettuare possono essere di 2 tipi. Nel caso il robot sia in movimento, la velocità può essere modificata proporzionalmente alla distanza dalla persona per ridurre quest'ultima. Nel caso invece il robot sia già fermo a seguito del comportamento [[E2GoHome#UserFollowing|UserFollowing]] allora E-2? rimane fermo&lt;br /&gt;
&lt;br /&gt;
Da info, il sonar percepisce min e max distanze comprese tra [0-6]m&lt;br /&gt;
&lt;br /&gt;
===RecoverUser===&lt;br /&gt;
&lt;br /&gt;
Se non è stata rilevata la persona che si sta accompagnando durante l'ultimo controllo e si sta seguendo una traiettoria che porta il robot a &amp;quot;casa&amp;quot;, viene attivato questo comportamento che ha lo scopo di cercare la persona a ritroso seguendo la traiettoria seguita fino a quel momento. E' quindi necessario che il robot tenga traccia degli spostamenti eseguiti per poter effettuare una ricerca. Inoltre è necessario che il robot si fermi in determinati punti via ruotando il collo per cercare la persona in più direzioni(180° ?).&lt;br /&gt;
&lt;br /&gt;
===AvoidObstacles===&lt;br /&gt;
&lt;br /&gt;
Lo scopo di questo comportamento è quello di evitare gli ostacoli. Le variabili che ne determinano l'attivazione sono la distanza dagli oggetti e la loro posizione, mediante l'utilizzo del sonar. Ad es. Se è presente un ostacolo frontalmente e il robot sta proseguendo in quella direzione allora è necessario cambiare traiettoria. Si possono presentare 2 tipi di ostacoli, fissi o mobili. Nel caso di oggetti fissi, non ci sono particolari problemi, mentre nel secondo caso si potrebbe valutare la direzione del movimento dell'oggetto con l'ausilio del kinect per determinare la direzione dell'oggetto, mediante confronto tra frame. &lt;br /&gt;
&lt;br /&gt;
===KeepUserConnection===&lt;br /&gt;
&lt;br /&gt;
Se il robot sta seguendo una traiettoria che lo riporta a casa, e viene determinata la presenza della persona con l'ausilio del sonar e dell'ultima posizione rilevata, (ad es. destra, sinistra), E-2? inizia un interazione con la persona parlando di progetti o altro per tentare di mantenere alto l'interesse della persona che si sta accompagnando.&lt;br /&gt;
&lt;br /&gt;
==Navigazione==&lt;/div&gt;</summary>
		<author><name>LorenzoRipani</name></author>	</entry>

	<entry>
		<id>https://airwiki.elet.polimi.it/index.php?title=Talk:E2GoHome&amp;diff=16278</id>
		<title>Talk:E2GoHome</title>
		<link rel="alternate" type="text/html" href="https://airwiki.elet.polimi.it/index.php?title=Talk:E2GoHome&amp;diff=16278"/>
				<updated>2013-05-15T13:52:17Z</updated>
		
		<summary type="html">&lt;p&gt;LorenzoRipani: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Comportamenti==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* GoHome: Se viene rilevata una persona interessata, il comportamento si occupa di riportare il robot a casa.&lt;br /&gt;
&lt;br /&gt;
* UserFollowing: Se il robot sta tornando verso casa, controlla che l'utente lo stia effettivamente seguendo. Il robot effettua l'azione sulla base del tempo dall'ultimo controllo e in base al numero di persone presenti nel campo visivo.&lt;br /&gt;
&lt;br /&gt;
* Wait: Se la distanza della persona è maggiore di X E-2 si ferma per aspettarla&lt;br /&gt;
&lt;br /&gt;
* RecoverUser: Se E-2 perde il contatto con la persona per un tempo X torna sui suoi passi per cercare la persona&lt;br /&gt;
&lt;br /&gt;
* AvoidObstacle: Comportamento che ha lo scopo di evitare gli ostacoli durante gli spostamenti del robot.&lt;br /&gt;
&lt;br /&gt;
* KeepUserConnection: Se l'utente sta seguendo il robot e c'è ancora molta distanza da &amp;quot;casa&amp;quot; il robot intrattiene l'utente per mantenere una connessione.&lt;br /&gt;
&lt;br /&gt;
===GoHome===&lt;br /&gt;
&lt;br /&gt;
Il robot fa affidamento su un altro modulo che valuta l'interesse della persona. Se viene mostrato interesse il robot calcola la traiettoria migliore per tornare a &amp;quot;casa&amp;quot; e inizia a seguire la traiettoria creata. Vedi [[E2GoHome#Navigazione|Navigazione]].&lt;br /&gt;
&lt;br /&gt;
===UserFollowing===&lt;br /&gt;
&lt;br /&gt;
Lo scopo di questo comportamento è quello di determinare se la persona che è stata ingaggiata stia effettivamente seguendo il Robot.&lt;br /&gt;
Il controllo viene attivato sulla base di due variabili: il tempo trascorso dall'ultimo controllo, e il numero di persone rilevate nel campo visivo(Si considera che un numero elevato di persone aumenti le probabilità che il robot perda il contatto con la persona). &lt;br /&gt;
&lt;br /&gt;
Una possibile sequenza di movimenti potrebbe essere:&lt;br /&gt;
 &lt;br /&gt;
* Completo stop delle ruote. &lt;br /&gt;
* Rotazione del collo fin quando non viene rilevata una persona.&lt;br /&gt;
* Centrare il volto della persona e controllare se è la persona ingaggiata. (Controllare come viene effettuato il controllo su openni-kinect):&lt;br /&gt;
** Se la persona è la stessa il collo torna alla posizione iniziale e riprende la navigazione&lt;br /&gt;
*** Se la distanza rilevata dalla persona supera una certa soglia si può utilizzare una variabile interna per forzare il comportamento[[E2GoHome#Wait|Wait]].&lt;br /&gt;
** Se la persona non è la stessa torna al punto 3 finchè non viene effettuato un giro completo di 360°. Se La persona non viene rilevata allora deve essere attivato il comportamento [[E2GoHome#RecoverUser|RecoverUser]].&lt;br /&gt;
&lt;br /&gt;
In aggiunta al controllo visivo può essere usato il sonar per ridurre le iterazioni di controllo. Se ad esempio l'ultimo controllo rileva che la persona è alla destra di E-2?, allora fintanto che viene rilevata una presenza alla destra del robot non è necessario effettuare il controllo, o comunque viene ridotto il numero di controlli.&lt;br /&gt;
&lt;br /&gt;
===Wait===&lt;br /&gt;
&lt;br /&gt;
Questo comportamento ha l'obbiettivo di aspettare la persona nel caso la distanza dall'utente sia maggiore di una certa soglia.&lt;br /&gt;
Può essere attivato mediante l'ausilio del sonar e dell'ultima posizione rilevata della persona, o nel caso in cui durante il comportamento [[E2GoHome#UserFollowing|UserFollowing]] sia stata rilevata una distanza eccessiva.&lt;br /&gt;
&lt;br /&gt;
Le azioni che il robot deve effettuare possono essere di 2 tipi. Nel caso il robot sia in movimento, la velocità può essere modificata in proporzione alla distanza dalla persona. Nel caso invece il robot sia già fermo a seguito del comportamento [[E2GoHome#UserFollowing|UserFollowing]] allora E-2? rimane fermo&lt;br /&gt;
&lt;br /&gt;
Da info, il sonar percepisce min e max distanze comprese tra [0-6]m&lt;br /&gt;
&lt;br /&gt;
===RecoverUser===&lt;br /&gt;
&lt;br /&gt;
Se non è stata rilevata la persona che si sta accompagnando durante l'ultimo controllo, viene attivato questo comportamento che ha lo scopo di cercare la persona a ritroso seguendo la traiettoria seguita fino a quel momento. E' quindi necessario che il robot tenga traccia degli spostamenti eseguiti per poter effettuare una ricerca. Inoltre è necessario che il robot si fermi in determinati punti via ruotando il collo per cercare la persona in più direzioni(180° ?). &lt;br /&gt;
&lt;br /&gt;
===AvoidObstacles===&lt;br /&gt;
&lt;br /&gt;
Lo scopo di questo comportamento è quello di evitare gli ostacoli. Le variabili che ne determinano l'attivazione sono la distanza dagli oggetti e la loro posizione, mediante l'utilizzo del sonar. Ad es. Se è presente un ostacolo frontalmente e il robot sta proseguendo in quella direzione allora è necessario cambiare traiettoria. Si possono presentare 2 tipi di ostacoli, fissi o mobili. Nel caso di oggetti fissi, non ci sono particolari problemi, mentre nel secondo caso si potrebbe valutare la direzione del movimento dell'oggetto con l'ausilio del kinect per determinare la direzione dell'oggetto, mediante confronto tra frame. &lt;br /&gt;
&lt;br /&gt;
===KeepUserConnection===&lt;br /&gt;
&lt;br /&gt;
Se il robot sta seguendo una traiettoria che lo riporta a casa, e viene determinata la presenza della persona con l'ausilio del sonar e dell'ultima posizione rilevata, (ad es. destra, sinistra), E-2? inizia un interazione con la persona parlando di progetti o altro per tentare di mantenere alto l'interesse della persona che si sta accompagnando.&lt;br /&gt;
&lt;br /&gt;
==Navigazione==&lt;/div&gt;</summary>
		<author><name>LorenzoRipani</name></author>	</entry>

	<entry>
		<id>https://airwiki.elet.polimi.it/index.php?title=Talk:E2GoHome&amp;diff=16277</id>
		<title>Talk:E2GoHome</title>
		<link rel="alternate" type="text/html" href="https://airwiki.elet.polimi.it/index.php?title=Talk:E2GoHome&amp;diff=16277"/>
				<updated>2013-05-13T20:38:15Z</updated>
		
		<summary type="html">&lt;p&gt;LorenzoRipani: Created page with &amp;quot; ==Comportamenti==   * GoHome: Se viene rilevata una persona interessata, il comportamento si occupa di riportare il robot a casa.  * UserFollowing: Se il robot sta tornando v...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Comportamenti==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* GoHome: Se viene rilevata una persona interessata, il comportamento si occupa di riportare il robot a casa.&lt;br /&gt;
&lt;br /&gt;
* UserFollowing: Se il robot sta tornando verso casa, controlla che l'utente lo stia effettivamente seguendo. Il robot effettua l'azione sulla base del tempo dall'ultimo controllo e in base al numero di persone presenti nel campo visivo.&lt;br /&gt;
&lt;br /&gt;
* Wait: Se la distanza della persona è maggiore di X E-2 si ferma per aspettarla&lt;br /&gt;
&lt;br /&gt;
* RecoverUser: Se E-2 perde il contatto con la persona per un tempo X torna sui suoi passi per cercare la persona&lt;br /&gt;
&lt;br /&gt;
* AvoidObstacle: Comportamento che ha lo scopo di evitare gli ostacoli durante gli spostamenti del robot.&lt;br /&gt;
&lt;br /&gt;
* KeepUserConnection: Se l'utente sta seguendo il robot e c'è ancora molta distanza da &amp;quot;casa&amp;quot; il robot intrattiene l'utente per mantenere una connessione.&lt;br /&gt;
&lt;br /&gt;
===GoHome===&lt;br /&gt;
&lt;br /&gt;
Il robot fa affidamento su un altro modulo che valuta l'interesse della persona. Se viene mostrato interesse il robot calcola la traiettoria migliore per tornare a &amp;quot;casa&amp;quot; e inizia a seguire la traiettoria creata. Vedi [[E2GoHome#Navigazione|Navigazione]].&lt;br /&gt;
&lt;br /&gt;
===UserFollowing===&lt;br /&gt;
&lt;br /&gt;
Lo scopo di questo comportamento è quello di determinare se la persona che è stata ingaggiata stia effettivamente seguendo il Robot.&lt;br /&gt;
Il controllo viene attivato sulla base di due variabili: il tempo trascorso dall'ultimo controllo, e il numero di persone rilevate nel campo visivo(Si considera che un numero elevato di persone aumenti le probabilità che il robot perda il contatto con la persona). &lt;br /&gt;
&lt;br /&gt;
Una possibile sequenza di movimenti potrebbe essere al seguito dell'attivazione del comportamento: &lt;br /&gt;
* Completo stop delle ruote. &lt;br /&gt;
* Rotazione del collo fin quando non viene rilevata una persona.&lt;br /&gt;
* Centrare il volto della persona e controllare se è la persona ingaggiata. (Controllare come viene effettuato il controllo su openni-kinect):&lt;br /&gt;
** Se la persona è la stessa il collo torna alla posizione iniziale e riprende la navigazione&lt;br /&gt;
*** Se la distanza rilevata dalla persona supera una certa soglia si può utilizzare una variabile interna per forzare il comportamento[[E2GoHome#Wait|Wait]].&lt;br /&gt;
** Se la persona non è la stessa torna al punto 3 finchè non viene effettuato un giro completo di 360°. Se La persona non viene rilevata allora deve essere attivato il comportamento [[E2GoHome#RecoverUser|RecoverUser]].&lt;br /&gt;
&lt;br /&gt;
Come secondo metodo può essere utilizzato il sonar in aggiunta al controllo visivo per ridurre le interazioni di controllo. Se ad esempio l'ultimo controllo rileva che la persona è alla destra di E-2?, allora fintanto che viene rilevata una presenza alla destra del robot non è necessario effettuare il controllo, o comunque viene ridotto il numero di controlli.&lt;br /&gt;
&lt;br /&gt;
===Wait===&lt;br /&gt;
&lt;br /&gt;
Questo comportamento ha l'obbiettivo di aspettare la persona nel caso la distanza dall'utente sia maggiore di una certa soglia.&lt;br /&gt;
Può essere attivato mediante l'ausilio del sonar e dell'ultima posizione rilevata della persona, o nel caso in cui durante il il comportamento [[E2GoHome#UserFollowing|UserFollowing]] sia stata rillevata una distanza eccessiva.&lt;br /&gt;
&lt;br /&gt;
Le azioni che il robot dovrebbe compiere possono essere proporzionali alla distanza rilevata dall'utente. Ad esempio nel caso di una distanza elevata il robot si ferma completamente e aspetta la persona. Nel caso di distanze minori il robot potrebbe solamente ridurre la velocità. &lt;br /&gt;
&lt;br /&gt;
===RecoverUser===&lt;br /&gt;
&lt;br /&gt;
Se non è stata rilevata la persona che si sta accompagnando durante l'ultimo controllo, viene attivato questo comportamento che ha lo scopo di cercare la persona a ritroso seguendo la traiettoria seguita fino a quel momento. E' quindi necessario che il robot tenga traccia degli spostamenti eseguiti per poter effettuare una ricerca. Inoltre è necessario che il robot si fermi in determinati punti via ruotando il collo per cercare la persona in più direzioni(180° ?). &lt;br /&gt;
&lt;br /&gt;
===AvoidObstacles===&lt;br /&gt;
&lt;br /&gt;
Lo scopo di questo comportamento è quello di evitare gli ostacoli. Le variabili che ne determinano l'attivazione sono la distanza dagli oggetti e la loro posizione, mediante l'utilizzo del sonar. Ad es. Se è presente un ostacolo frontalmente e il robot sta proseguendo in quella direzione allora è necessario cambiare traiettoria. Si possono presentare 2 tipi di ostacoli, fissi o mobili. Nel caso di oggetti fissi, non ci sono particolari problemi, mentre nel secondo caso si potrebbe valutare la direzione del movimento dell'oggetto con l'ausilio del kinect per determinare la direzione dell'oggetto, mediante confronto tra frame. &lt;br /&gt;
&lt;br /&gt;
===KeepUserConnection===&lt;br /&gt;
&lt;br /&gt;
Se il robot sta seguendo una traiettoria che lo riporta a casa, e viene determinata la presenza della persona con l'ausilio del sonar e dell'ultima posizione rilevata, (ad es. destra, sinistra), E-2? inizia un interazione con la persona parlando di progetti o altro per tentare di mantenere alto l'interesse della persona che si sta accompagnando.&lt;br /&gt;
&lt;br /&gt;
==Navigazione==&lt;/div&gt;</summary>
		<author><name>LorenzoRipani</name></author>	</entry>

	</feed>