Files
RoboGlue_QT/gui/roboglue_gui.h
2019-10-21 11:37:31 +02:00

109 lines
4.1 KiB
C++

#ifndef ROBOGLUE_GUI_H
#define ROBOGLUE_GUI_H
/*
* roboglue_gui.cpp
*
* Created on: Jan 21, 2019
* Author: emanuele
*
* Interfaccia utente di roboglue, conterrà la visualizzazione grafica del robot e tutte le
* interfaccce per il richiamo e la registrazione dei programmi di incollaggio
* tutta la logica sarà deferita ad un modulo main.
*
* 20190121 - Prima Scittura
* 20190122 - Disegnata la prima interfaccia grafica a scopo di debug, stampa solo le informazioni
* relative alla posizione cartesiana del robot.
* Impostata la struttura comune a tutti i moduli.
* 20190123 - Aggiunti elementi all'interfaccia grafica, connessione, disconnessione, indirizzo
* e porta del robot.
* 20190124 - Aggiunta logica per mandare comandi URscript senza controllo di ortografia e validità,
* aggiunta la lettura di un file json che include i nomi degli stati di robot
* e controller per una migliore leggibilità dell'interfaccia.
* Piccole modifiche alla grafica.
* 20190125 - Aggiunta una frame i cui fare il tracciamento del mouse per mandare posizioni
* in tempo reale. La Z dovrebbbe essere compito della rotella del mouse che però
* non genera eventi, trovare una soluzione (magari con la tastiera) per sostituirla.
* L'invio dei comandi al robot dalla gui è TEMPORANEO, sarà gestito dal main
* per fare il calcolo della cinematica inversa.
* 20190128 - Sostituita la lettura della rotella con quella dei tasti freccia,
* rimane da risolvere il fatto che quando non si usa il mouse le coordinate impazziscono
* (ma è solo per test quindi va bene così forse)
* 20190131 - Piccole modifiche alla grafica, aggiunte visualizzazioni posizione giunti
* 20190211 - Scrittura delle funzioni che mandano i comandi parametrizzati al modulo roboglue_com
* per l'invio di istruzioni a ros tramite mqtt. L'invio diretto al modulo com è solo
* temporaneo, le comunicazioni andranno gestite tutte dal main.
* 20190308 - Riscrittura delle funzioni associate ai bottoni di Record e Play per includere i metadati del
* file da scrivere o leggere
* 20190311 - Inversione del segno coordinata y prima dell'invio al modulo com.
* 20190322 - Modifica dei nomi segnali tra questo modulo e com.
* 20190402 - Aggiunte due spinbox per il settaggio di delta tempo e delta spazio da salvare nel
* file dei metadati per la pianificazione dei persorsi salvati
*/
#include <QMainWindow>
#include <QString>
#include <QVariantMap>
#include <QJsonObject>
#include <QJsonDocument>
#include <QEvent>
#include <QMouseEvent>
#include <QFile>
#include <QUuid>
#include <QCoreApplication>
#include <boost/algorithm/clamp.hpp>
#include <libURcom/URCLinterface.h>
#include <shared/roboglue_shared.h>
namespace Ui {
class RoboGlue_GUI;
}
using nlohmann::json;
class RoboGlue_GUI : public QMainWindow {
Q_OBJECT
public:
explicit RoboGlue_GUI(RoboGlue_SHARED *mem = nullptr);
~RoboGlue_GUI();
private:
shared_ptr<spdlog::logger> modlog;
RoboGlue_SHARED *m;
Ui::RoboGlue_GUI *ui;
bool eventFilter(QObject* obj, QEvent* event);
json nameDefinitions;
QVariantMap getLockAxes(void);
void enableLockAxes(void);
void disableLockAxes(void);
public slots:
void on_commonStatusChange(void);
void on_newRobotData();
private slots:
void on_btn_sendCommand_clicked();
void on_btn_robotConnect_clicked();
void on_btn_robotDisconnect_clicked();
void on_chk_autoConnect_clicked(bool checked);
void on_pad_hoverEvent(QEvent *e);
void on_btn_record_clicked();
void on_btn_play_clicked();
void on_btn_realtime_clicked();
void on_btn_open_clicked();
signals:
void robotConnect(QString, uint port, uchar retry);
void robotDisconnect();
void robotSendURscript(QString);
void sendROScoordinates(QList<double>);
void sendROScommand(QString command, QVariantMap args);
void sendROSstate(QMap<std::string, bool> digital, QMap<std::string, uint16_t> analog);
void pad_hoverEvent(QEvent *e);
};
#endif // ROBOGLUE_GUI_H