
#ifndef ROMEOMAINWINDOW_H
#define ROMEOMAINWINDOW_H

// QT Includes
#include <QMainWindow>
#include <QCloseEvent>
#include <QMessageBox>
#include <QProcess>
#include <QString>
#include <QSplashScreen>
#include <QGraphicsEllipseItem>

// Romeo HMI Includes
#include "ui_MainWindow_HMI2.h"
#include "scaledialog.h"
#include "trajectoryDialog.h"
#include "mapscene.h"

// YARP Includes
#include <yarp/os/all.h>
#include <yarp/sig/all.h>

// OpenCV Includes

#undef HAVE_IPL
// #ifndef HAVE_IPL
// #define HAVE_IPL

#include <opencv/cv.h>
#include <opencv/highgui.h>

// URUS Includes
#include "../../dcx/comms.h"
#include "../../ekfloc/comms.h"
#include "../../ekfloc6d/comms.h"
#include "../../common/communications/Comms.h"
#include "../../common/trajectory/Trajectory.h"
#include "../../purpur/comms.h"

// Namespaces
using namespace yarp::sig;
using namespace yarp::sig::draw;
using namespace yarp::sig::file;


class RomeoMainWindow : public QMainWindow, private Ui::MainWindow
{
	Q_OBJECT

	public:	/*$PUBLIC_FUNCTIONS$*/

		RomeoMainWindow(QWidget* parent = 0, Qt::WFlags fl = 0 );
		~RomeoMainWindow();
	
	
	public slots:	/*$PUBLIC_SLOTS$*/
	
	signals:	/*$SIGNAL$*/

		void  message(QString);		// info text message signal
		

	protected:	/*$PROTECTED_FUNCTIONS$*/

		void closeEvent(QCloseEvent *event);
	
	
	protected slots:		/*$PROTECTED_SLOTS$*/

	private slots:	/*$PRIVATE_SLOTS$*/
	
		void about();	
		void aboutQt();	
		void exitApplication();
		void openMap();
		void loadMap(QString mapName);

		void read_odometry_values();
		void check_YARP_network();
		void read_system_status();

		void initialtrajectorypoint();		// Signals for Control Trajectory and
		void nexttrajectorypoint();		// graphic view.
		void changeThetaInit();
	
		void showMessage(QString);    		// Show message on status bar
		void showTrajectory(QString);    	// Show trajectory on Map

		void changeRobotPosition(QPoint position);
		void ungrabRomeo();

		void zooming(int value);
		void zoomFit();

		void openTraject();
		void loadTrajectory(QString trajectoryName);
		void loadSemanticSpots(QString mapname);
		void mapPressEvent(QPointF clickedPoint);

		void trashtrajectory();

		void upArrow();
		void downArrow();
		void leftArrow();
		void rightArrow();
		void panicEvent();
		void launchEvent();
		void trajetoryFinalized();

		void graphicview2romeo(double *x_graph,double *y_graph);
		void romeo2graphicview(double *x_graph,double *y_graph);
 		void map2graphicview(double *x,double *y);
 		void graphicview2map(double *x,double *y);

		void launch_LAUNCHER_Process();
		void stop_LAUNCHER_Process();
		void stop_ALL_CONTROL_Process();

		// Sensors Views

		void connect_LASER2D_sensor();
		void disconnect_LASER2D_sensor();
		void connect_ELEVATIONMAP_sensor();
		void disconnect_ELEVATIONMAP_sensor();
		void connect_TRANSMAP_sensor();
		void disconnect_TRANSMAP_sensor();

		void IplImage2QImage(IplImage *src,QGraphicsPixmapItem * pixmapElement, QGraphicsScene *sensorScene);

		void switchElevationView();
		void switchTransView();


	private:

		void createActions();
		void initialValues();
		void createGraphicsView();
		void startYarpCommunications();

		// CONTROL PROCESS
		QSplashScreen *splash;
		
		QProcess *LAUNCHER_Process;
		QString LAUNCHER_Program;
		QString LAUNCHER_Directory;
	
		// Main Graphic View
		MapScene scene;
		QPixmap map;
		
		int zoomPreviousValue;

		ScaleDialog MapScale;
		trajectoryDialog SelectTrajectory;

		QList <QGraphicsEllipseItem *> spots;
		QList <QGraphicsEllipseItem *> semanticSpotsList;
		QList <QGraphicsTextItem *> semanticSpotsText;
		QList <QGraphicsTextItem *> semanticInfo;

		QList <QGraphicsPixmapItem *> maps;
		QList <QGraphicsLineItem *> lines;
		QList <QGraphicsLineItem *> absolutLines;
		QList <QGraphicsTextItem *> waypoints;
		QList <QGraphicsTextItem *> absolutWaypoints;
		QList <QString> trajectory_lines;
	
		QBrush romeo_brush;
		QPen romeo_pen;
	
		QGraphicsPixmapItem *romeo;
		QGraphicsPixmapItem romeo_local;
		// Boolean variables to indicate the actual mode of the Romeo GUI 
		// Both variables at TRUE not allowed.
	
		bool trajectory_edit_mode;
		bool trajectory_executing_mode; 
		bool setting_initial_point;
		bool theta_edit_mode;
		
		bool trajectoriesBYinterface;

		// Boolean variable indicating if Yarp Network is UP
		bool yarpRunning;

		// Trajectory points to use the GUI
		
		QPointF last_trajectory_point;
		QPointF initial_trajectory_point;
		QPointF global_init_point;
		int trajectory_points_number;

		// File and textstream for Test Trajectory 
	
		QFile file;
		QTextStream test_trajectory_line;

		double map_width;	// in Pixels
		double map_height;	// in Pixels
		
		double map_x_axis_length;	// in meters
		double map_y_axis_length;	// in meters
	
		double map_X_scale;	// Pixels/meter
		double map_Y_scale;	// Pixels/meter

		double scene_x_axis_length;
		double scene_y_axis_length;
		
		double x_ini_global;		// Romeo Graphic View Initial Position
		double y_ini_global;

		double x_ini_local;		// Romeo Graphic View Initial Position
		double y_ini_local;

		double theta;
		double previous_theta;
		double theta_offset;

		double locale_romeo_x_ref;
		double locale_romeo_y_ref;

		double romeo_speed_reference;

		double m_stats[4];	// Values from /proc/stat
		double m_stats_new[4];	// For CPU Usage evaluation

                double m_stats_CPU1[7];          // Values from /proc/stat
                double m_stats_new_CPU1[7];	// For CPU Usage evaluation

                double m_stats_CPU2[7];          // Values from /proc/stat
                double m_stats_new_CPU2[7];	// For CPU Usage evaluation

                double CPU1_usage;
                double CPU2_usage;

                double physical_mem_usage;
                double swap_mem_usage;














		double tx_net_stats;	// Values from /proc/dev/net
		double tx_net_stats_new;
		double rx_net_stats;	// Values from /proc/dev/net
		double rx_net_stats_new;

		double x_ref;		// From EKFLOC
		double y_ref; 		// From EKFLOC
		double orient_ref;	// From EKFLOC
		double previous_orient_ref;
		double speed_ref;	// From DCX
		double curv_ref;	// From EKFLOC
		double	yaw_ref;
		double	pitch_ref;
		double	roll_ref;

		// YARP Devices and Pointers for reading from the ports
	
		CDcxData * pyarpDcx;	// Reading fron DCX
//		CLoc6DData * pyarpEkf;	// Reading from EkFloc
		CLocData * pyarpEkf;	// Reading from EkFloc
	
//		yarp::os::BufferedPort<CLoc6DData> locInput;
		yarp::os::BufferedPort<CLocData> locInput;
		yarp::os::BufferedPort<CDcxData> odomInput;
		
		yarp::os::BufferedPort<CPurpurState> purpurStatePort;
		CPurpurState * pyarpPurpur;
		int purpurState;
		int previousPurpurState;

		yarp::os::BufferedPort < yarp::sig::ImageOf<PixelBgr> > laser2DImageInput;
		yarp::sig::ImageOf<PixelBgr> * laser2DImage;
		IplImage *cvLaser2DImage;
		QGraphicsScene laser2Dscene;
		QGraphicsTextItem *laser2DInfoText;
		QGraphicsPixmapItem *laser2DPixmap;
		QGraphicsPixmapItem laser2DPixmap_local;
		QGraphicsEllipseItem *laserRange;
		QGraphicsPixmapItem *romeoImage;
		bool readLaser2DImage;
		double laser2D_x_axis_length;
		double laser2D_y_axis_length;

		yarp::os::BufferedPort < yarp::sig::ImageOf<PixelBgr> > elevationMapImageInput;
		yarp::sig::ImageOf<PixelBgr> * elevationMapImage;
		IplImage *cvelevationMapImage;
		QGraphicsScene elevationMapscene;
		QGraphicsTextItem *elevationMapInfoText;
		QGraphicsPixmapItem *elevationMapPixmap;
		QGraphicsPixmapItem elevationMapPixmap_local;
		bool readElevationMapImage;
		bool elevationMapMainView;
		double elevationMap_x_axis_length;
		double elevationMap_y_axis_length;

		yarp::os::BufferedPort < yarp::sig::ImageOf<PixelBgr> > transMapImageInput;
		yarp::sig::ImageOf<PixelBgr> * transMapImage;
		IplImage *cvTransMapImage;
		QGraphicsScene transMapscene;
		QGraphicsTextItem *transMapInfoText;
		QGraphicsPixmapItem *transMapPixmap;
		QGraphicsPixmapItem transMapPixmap_local;
		bool readTransMapImage;
		bool transMapMainView;
		double transMap_x_axis_length;
		double transMap_y_axis_length;
		QFont infoFont;

};

#endif


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es">
	<head>
            <title>e-REdING. Biblioteca de la Escuela Superior de Ingenieros de Sevilla.</title>

                <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="description" content="Buscador de proyectos ETSI" />
<meta name="author" content="Daniel Callejo"/>
<meta name="author" content="Federico L&oacute;pez"/>
<meta name="author" content="Juli&aacute;n P&eacute;rez"/>
<meta name="author" content="Jos&eacute; Mar&iacute;a Vidal Vidal"/>
<base href="/bibing/proyectos/" /><link rel="shortcut icon" href="./favicon.ico" />
<link rel="stylesheet" href="./publico/css/estructura.css" type="text/css" />
<link rel="stylesheet" href="./publico/css/bootstrap.css" type="text/css" media="screen"/>
<link rel="stylesheet" href="./publico/css/enlaces-capas.css" type="text/css"  />
<link rel="stylesheet" href="./publico/css/pestanas.css" type="text/css"  /> 
<link rel="stylesheet" href="./publico/css/formularios.css" type="text/css" />
<link rel="stylesheet" href="./publico/css/lightbox.css" type="text/css"  />
<link rel="stylesheet" href="./publico/css/autocompleter.css" type="text/css"  />
<link rel="stylesheet" href="./publico/css/resultados.css" type="text/css"  />
<link rel="stylesheet" href="./publico/css/milista.css" type="text/css"  />
<link rel="stylesheet" href="./publico/css/explorador.css" type="text/css"  />
<link rel="stylesheet" href="./publico/css/ultimos.css" type="text/css"  />
<link rel="stylesheet" href="./publico/css/contactar.css" type="text/css"  />
<!-- <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" /> -->
<script src="./publico/javascript/jquery-1.9.1.min.js" type="text/javascript"></script>
<script src="./publico/javascript/bootstrap.js" type="text/javascript"></script>

<script src="./publico/javascript/mootools-1.2.4-core.js" type="text/javascript"></script>
<script src="./publico/javascript/mootools-1-1.2.4.2-more.js" type="text/javascript"></script>
<script src="./publico/javascript/targetbl.js" type="text/javascript"></script>
<script src="./publico/javascript/mensajes.js" type="text/javascript"></script>
<script src="./publico/javascript/form.js" type="text/javascript"></script>
<script src="./publico/javascript/autocompleter/Observer.js" type="text/javascript"></script>
<script src="./publico/javascript/autocompleter/Autocompleter.js" type="text/javascript"></script>
<script src="./publico/javascript/autocompleter/Autocompleter.Request.js" type="text/javascript"></script>
<script src="./publico/javascript/domready.js" type="text/javascript"></script>

<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-8T1TSNC1QY"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-8T1TSNC1QY');
</script>



<script type="text/javascript">
function seleccionar_todo(){
   for (i=0;i<document.formulario_marcados.elements.length;i++)
      if(document.formulario_marcados.elements[i].type == "checkbox")
         document.formulario_marcados.elements[i].checked=1
}
function deseleccionar_todo(){
   for (i=0;i<document.formulario_marcados.elements.length;i++)
      if(document.formulario_marcados.elements[i].type == "checkbox")
         document.formulario_marcados.elements[i].checked=0
} 
</script>
	</head>
    <body style="min-width: 960px; background-color: #e2e2e2; height: 100%">	
		<a name="arriba"></a>
<div>
<div id="header">
    <table id="Tabla_01" height="105" border="0" cellpadding="0" cellspacing="0">
    <tr>
        <td>
            <img src="./publico/imagenes/cabecera/banner_new2_01.jpg" width="3" height="105" alt="">
        </td>
        <td>
            <img src="./publico/imagenes/cabecera/banner_new2_02.jpg" width="100" height="105" alt="">
        </td>
        <td width="100%" align="right"  style="min-width: 613px; background-repeat: no-repeat; background-position: top right; font-size: medium; font-weight: bold; color: white;">
            <table width="100%" height="105" border="0">
                <tr>
                    <td style=" vertical-align: top; width: 547px">
                        <!-- <a style="text-decoration: none" href="./"><img src="./publico/imagenes/cabecera/banner_new2_03.jpg"alt=""></a> -->
                        <a style="text-decoration: none" href="/bibing/proyectos/"><img src="./publico/imagenes/cabecera/banner_new2_03.jpg"alt=""></a>
                     </td>
                     <td  background="./publico/imagenes/cabecera/banner_new2_04.jpg" style="background-repeat: no-repeat; background-color: #c6d4e8;"><br><br><br>
                         &nbsp;
                        </td>
                    </tr>
             </table>
        </td>
    </tr>
    <tr style="border-top: 1px solid #ffffff;">
        <td colspan="3" id="menu_sup" style="font-size: small; text-align: right; background-color: #9c1f2f; vertical-align: bottom">
             
					<a href="/bibing/proyectos/" class="enlace " style=" color: #ffffff">Inicio&nbsp;&nbsp;|</a>
					<a href="/bibing/proyectos/acerca/" style=" color: #ffffff" class="enlace ">&nbsp;&nbsp;Acerca de&nbsp;&nbsp;|</a>
					
					<a href="/bibing/proyectos/contactar/" style=" color: #ffffff" class="enlace ">&nbsp;&nbsp;Contactar&nbsp;&nbsp;</a>
			 <!--       <a href="/bibing/proyectos/ayuda/" style=" color: #ffffff" class="enlace  ">&nbsp;&nbsp;Ayuda&nbsp;&nbsp;|</a> -->
					<!-- <form id="idioma" class=""  method="post" action="">
					<div class="inline" style="color: white">
					<input type="submit" class="tipo_letra " style=" color: #ffffff"name="idioma" value="Castellanossss" />&nbsp;&nbsp;
					</div>	
					</form> -->
			        </td>

    </tr>
    </table>
</div>
<br><br>
<div class="colmask rightmenu">
<div class="panel panel-default" style="margin:20px">
            <div class="panel-heading"><h4>DISEÑO E IMPLEMENTACIÓN DE INTERFAZ PERSONA MÁQUINA Y SISTEMA DE ANÁLISIS POST-MISIÓN PARA ROBOT AUTÓNOMO MÓVIL ROMEO-4R</h4><h5 style="color:grey"><span class="glyphicon glyphicon-user""></span> : <b>PÉREZ DOMÍNGUEZ, DANIEL</b><br><span class="glyphicon glyphicon-book""></span>  :<b> Ingenier&iacute;a Telecomunicación</b></h5></div><div class="panel-body"><div class="contenido_proyecto"><div class="titulo2_explorador">Contenido del proyecto:</div><div class="ruta"><a href="use/abreproy/12095">Directorio ra&iacute;z</a>&nbsp;&nbsp;>&nbsp;&nbsp;<a href="use/abreproy/12095/direccion/CODE%252F">CODE</a>&nbsp;&nbsp;>&nbsp;&nbsp;<a href="use/abreproy/12095/direccion/CODE%252Fhmi3%252F">hmi3</a>&nbsp;&nbsp;>&nbsp;&nbsp;<a href="use/abreproy/12095/direccion/CODE%252Fhmi3%252Fsrc%252F">src</a>&nbsp;&nbsp;>&nbsp;&nbsp;<a href="use/abreproy/12095/direccion/CODE%252Fhmi3%252Fsrc%252Fromeomainwindow.h%252F">romeomainwindow.h</a></div><div class="listing"></div></div></div></div>
</div>
</div>

        
	</body>
 
 
<!-- Inicio Google Analytics -->
<!--
	<script type="text/javascript">
		var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
		document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
	</script>
	
	<script type="text/javascript">
		try {
		var pageTracker = _gat._getTracker("UA-7789620-1");
		pageTracker._trackPageview();
	} 
		catch(err) {}
	</script>
-->
<!-- Fin Google Analytics -->

</html>

