Compare commits

..

10 Commits

8 changed files with 134 additions and 50 deletions

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject> <!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.8.2, 2019-11-12T09:34:56. --> <!-- Written by QtCreator 4.8.2, 2019-11-18T18:58:05. -->
<qtcreator> <qtcreator>
<data> <data>
<variable>EnvironmentId</variable> <variable>EnvironmentId</variable>

View File

@@ -40,7 +40,11 @@ void mqtt_callback::message_arrived(mqtt::const_message_ptr msg) {
} else if (!intMsg[mem_->comSettings.NODE].compare(mem_->comSettings.nodeNames["recorder"])) { } else if (!intMsg[mem_->comSettings.NODE].compare(mem_->comSettings.nodeNames["recorder"])) {
mem_->commonStatus.recorderRunning = true; mem_->commonStatus.recorderRunning = true;
mem_->commonStatus.recorderLast = std::stod(intMsg[mem_->comSettings.TS]); mem_->commonStatus.recorderLast = std::stod(intMsg[mem_->comSettings.TS]);
log_->trace("HB RECORDER time: [{}]", mem_->commonStatus.recorderLast); log_->trace("HB RECORDER time: [{}]", mem_->commonStatus.recorderLast);
} else if (!intMsg[mem_->comSettings.NODE].compare(mem_->comSettings.nodeNames["broadcaster"])) {
mem_->commonStatus.broadcasterRunning = true;
mem_->commonStatus.broadcasterLast = std::stod(intMsg[mem_->comSettings.TS]);
log_->trace("HB BROADCASTER time: [{}]", mem_->commonStatus.broadcasterLast);
} else { } else {
log_->error("Node {} unknown", intMsg[mem_->comSettings.NODE].c_str()); log_->error("Node {} unknown", intMsg[mem_->comSettings.NODE].c_str());
} }
@@ -53,7 +57,7 @@ void mqtt_callback::message_arrived(mqtt::const_message_ptr msg) {
} else if (msg->get_topic() == mem_->comSettings.subMap.find("coordinates")->second){ } else if (msg->get_topic() == mem_->comSettings.subMap.find("coordinates")->second){
log_->debug("MQTT: Coordinate Message: {}", msg->get_payload().c_str()); log_->debug("MQTT: Coordinate Message: {}", msg->get_payload().c_str());
} else { } else {
log_->error("Unrecognized topic"); log_->error("Unrecognized topic: {}", msg->get_topic().c_str());
} }
} }

View File

@@ -91,22 +91,18 @@ void RoboGlue_GUI::disableLockAxes(){
//////////////////////////////////////////////// ////////////////////////////////////////////////
void RoboGlue_GUI::on_commonStatusChange() { void RoboGlue_GUI::on_commonStatusChange() {
modlog->trace("on_commonStatusChange Received"); modlog->trace("on_commonStatusChange Received");
// TODO: aggiungere e interpretare le flag per capire se i nodi ros sono tutti vivi dall'heartbeat
this->ui->lbl_relay->setText(QString().fromStdString(this->m->comSettings.nodeNames.find("relay")->second+": "+std::to_string(static_cast<uint>(m->commonStatus.relayTime)))); this->ui->lbl_relay->setText(QString().fromStdString(this->m->comSettings.nodeNames.find("relay")->second+": "+std::to_string(static_cast<uint>(m->commonStatus.relayTime))));
this->ui->lbl_follower->setText(QString().fromStdString(this->m->comSettings.nodeNames.find("follower")->second+": "+std::to_string(static_cast<uint>(m->commonStatus.followerTime)))); this->ui->lbl_follower->setText(QString().fromStdString(this->m->comSettings.nodeNames.find("follower")->second+": "+std::to_string(static_cast<uint>(m->commonStatus.followerTime))));
this->ui->lbl_recorder->setText(QString().fromStdString(this->m->comSettings.nodeNames.find("recorder")->second+": "+std::to_string(static_cast<uint>(m->commonStatus.recorderTime)))); this->ui->lbl_recorder->setText(QString().fromStdString(this->m->comSettings.nodeNames.find("recorder")->second+": "+std::to_string(static_cast<uint>(m->commonStatus.recorderTime))));
this->ui->lbl_broadcaster->setText(QString().fromStdString(this->m->comSettings.nodeNames.find("broadcaster")->second+": "+std::to_string(static_cast<uint>(m->commonStatus.broadcasterTime))));
if(m->commonStatus.relayTime > m->comSettings.deadTime || if (!m->commonStatus.relayRunning) this->ui->lbl_relay->setStyleSheet("QLabel { background-color : red; color : white; }");
m->commonStatus.followerTime > m->comSettings.deadTime || else this->ui->lbl_relay->setStyleSheet("QLabel { background-color : green; color : white; }");
m->commonStatus.recorderTime > m->comSettings.deadTime) { if (!m->commonStatus.recorderRunning) this->ui->lbl_recorder->setStyleSheet("QLabel { background-color : red; color : white; }");
this->ui->lbl_relay->setStyleSheet("QLabel { background-color : red; color : white; }"); else this->ui->lbl_recorder->setStyleSheet("QLabel { background-color : green; color : white; }");
this->ui->lbl_follower->setStyleSheet("QLabel { background-color : red; color : white; }"); if (!m->commonStatus.followerRunning) this->ui->lbl_follower->setStyleSheet("QLabel { background-color : red; color : white; }");
this->ui->lbl_recorder->setStyleSheet("QLabel { background-color : red; color : white; }"); else this->ui->lbl_follower->setStyleSheet("QLabel { background-color : green; color : white; }");
} else { if (!m->commonStatus.broadcasterRunning) this->ui->lbl_broadcaster->setStyleSheet("QLabel { background-color : red; color : white; }");
this->ui->lbl_relay->setStyleSheet("QLabel { background-color : green; color : white; }"); else this->ui->lbl_broadcaster->setStyleSheet("QLabel { background-color : green; color : white; }");
this->ui->lbl_follower->setStyleSheet("QLabel { background-color : green; color : white; }");
this->ui->lbl_recorder->setStyleSheet("QLabel { background-color : green; color : white; }");
}
} }
void RoboGlue_GUI::on_pad_hoverEvent(QEvent* e) { void RoboGlue_GUI::on_pad_hoverEvent(QEvent* e) {
@@ -271,7 +267,7 @@ void RoboGlue_GUI::on_btn_open_clicked() {
m->commonStatus.isFileOpen = true; m->commonStatus.isFileOpen = true;
fileOpen = true; fileOpen = true;
metadata["name"] = ui->txt_fileName->text(); metadata["name"] = ui->txt_fileName->text();
metadata["plot"] = true; metadata["plot"] = ui->chk_plot->isChecked();
param["action"] = "open"; param["action"] = "open";
param["metadata"] = metadata; param["metadata"] = metadata;
ui->btn_record->setEnabled(false); ui->btn_record->setEnabled(false);
@@ -329,15 +325,29 @@ void RoboGlue_GUI::on_btn_home_clicked() {
emit sendROScommand("HOME", param); emit sendROScommand("HOME", param);
} }
void RoboGlue_GUI::on_btn_setFrame_clicked() { void RoboGlue_GUI::on_btn_setFrame_clicked() {
QVariantMap param; QVariantMap param, frm;
std::string frametext; QList<QString> tempPos, TempOr;
modlog->debug("setFrame"); modlog->debug("setFrame");
param["action"]="set"; param["action"]="set";
param["framename"]=ui->txt_frameName->text();
for(auto tp : ui->txt_framePos->text().split(",")){
frm[tp.split(":").first()]=tp.split(":").last().replace(" ", "").toDouble();
}
for(auto tp : ui->txt_frameOr->text().split(",")){
frm[tp.split(":").first()]=tp.split(":").last().replace(" ", "").toDouble();
}
param["frame"]=frm;
emit m->commonStatusChange(); emit m->commonStatusChange();
emit sendROScommand("SETFRAME", param); emit sendROScommand("SETFRAME", param);
}
void RoboGlue_GUI::on_btn_stopRos_clicked() {
QVariantMap param;
modlog->debug("stopRos");
param["action"]=false;
emit m->commonStatusChange();
emit sendROScommand("QUIT", param);
} }
//////////////////////////////////////////////// ////////////////////////////////////////////////
////////END INTERNAL PRIVATE SLOTS////////////// ////////END INTERNAL PRIVATE SLOTS//////////////
@@ -384,4 +394,3 @@ void RoboGlue_GUI::on_newRobotData() {
//////// END EXTERNAL PUBLIC SLOTS ///////////// //////// END EXTERNAL PUBLIC SLOTS /////////////
//////////////////////////////////////////////// ////////////////////////////////////////////////
/// ///

View File

@@ -97,6 +97,8 @@ private slots:
void on_btn_setFrame_clicked(); void on_btn_setFrame_clicked();
void on_btn_stopRos_clicked();
signals: signals:
void robotConnect(QString, uint port, uchar retry); void robotConnect(QString, uint port, uchar retry);
void robotDisconnect(); void robotDisconnect();

View File

@@ -6,7 +6,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>948</width> <width>1018</width>
<height>826</height> <height>826</height>
</rect> </rect>
</property> </property>
@@ -1046,7 +1046,21 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QLineEdit" name="txt_fileName"/> <widget class="QLineEdit" name="txt_fileName">
<property name="minimumSize">
<size>
<width>50</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="chk_plot">
<property name="text">
<string>Plot</string>
</property>
</widget>
</item> </item>
</layout> </layout>
</item> </item>
@@ -1219,6 +1233,13 @@
</item> </item>
</layout> </layout>
</item> </item>
<item>
<widget class="Line" name="line_12">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item> <item>
<layout class="QHBoxLayout" name="horizontalLayout_6"> <layout class="QHBoxLayout" name="horizontalLayout_6">
<item> <item>
@@ -1299,15 +1320,15 @@
</item> </item>
</layout> </layout>
</item> </item>
<item>
<widget class="Line" name="line_13">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item> <item>
<layout class="QGridLayout" name="gridLayout_5"> <layout class="QGridLayout" name="gridLayout_5">
<item row="0" column="0">
<widget class="QPushButton" name="btn_setFrame">
<property name="text">
<string>SetFrame</string>
</property>
</widget>
</item>
<item row="0" column="2"> <item row="0" column="2">
<widget class="QLineEdit" name="txt_framePos"> <widget class="QLineEdit" name="txt_framePos">
<property name="inputMask"> <property name="inputMask">
@@ -1315,10 +1336,10 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="2"> <item row="1" column="1">
<widget class="QLineEdit" name="txt_frameOr"> <widget class="QLabel" name="label_21">
<property name="inputMask"> <property name="text">
<string>rx:000,ry:000,rz:000 </string> <string>Orientation</string>
</property> </property>
</widget> </widget>
</item> </item>
@@ -1329,13 +1350,39 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1"> <item row="1" column="2">
<widget class="QLabel" name="label_21"> <widget class="QLineEdit" name="txt_frameOr">
<property name="text"> <property name="inputMask">
<string>Orientation</string> <string>r\x:#00.0,ry:#00.0,rz:#00.0 </string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="0">
<widget class="QPushButton" name="btn_setFrame">
<property name="text">
<string>SetFrame</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QLabel" name="label_24">
<property name="minimumSize">
<size>
<width>150</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Name</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QLineEdit" name="txt_frameName"/>
</item>
</layout> </layout>
</item> </item>
<item> <item>
@@ -1397,6 +1444,20 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QLabel" name="lbl_broadcaster">
<property name="text">
<string>-</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btn_stopRos">
<property name="text">
<string>Stop_ROS</string>
</property>
</widget>
</item>
</layout> </layout>
</item> </item>
</layout> </layout>
@@ -1406,7 +1467,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>948</width> <width>1018</width>
<height>22</height> <height>22</height>
</rect> </rect>
</property> </property>
@@ -1428,12 +1489,12 @@
<resources/> <resources/>
<connections/> <connections/>
<buttongroups> <buttongroups>
<buttongroup name="grp_hilo"/>
<buttongroup name="gpr_lock"> <buttongroup name="gpr_lock">
<property name="exclusive"> <property name="exclusive">
<bool>false</bool> <bool>false</bool>
</property> </property>
</buttongroup> </buttongroup>
<buttongroup name="grp_hilo"/>
<buttongroup name="grp_mod"/> <buttongroup name="grp_mod"/>
</buttongroups> </buttongroups>
</ui> </ui>

View File

@@ -8,7 +8,7 @@ automain=false
autotrack=false autotrack=false
[robot] [robot]
connection\autoconnect=false connection\autoconnect=true
connection\robotip=10.0.0.5 connection\robotip=10.0.0.5
connection\robotport=30002 connection\robotport=30002
connection\robotretry=5 connection\robotretry=5
@@ -51,6 +51,7 @@ ros_nodes\mqtt_subscribers\commands=roboglue_com/ros2com/commands
ros_nodes\mqtt_subscribers\coordinates=roboglue_com/ros2com/coordinates ros_nodes\mqtt_subscribers\coordinates=roboglue_com/ros2com/coordinates
ros_nodes\mqtt_subscribers\interface=roboglue_com/ros2com/interface ros_nodes\mqtt_subscribers\interface=roboglue_com/ros2com/interface
ros_nodes\mqtt_subscribers\state=roboglue_com/ros2com/state ros_nodes\mqtt_subscribers\state=roboglue_com/ros2com/state
ros_nodes\node_names\broadcaster=roboglue_ros_broadcaster
ros_nodes\node_names\follower=roboglue_ros_follower ros_nodes\node_names\follower=roboglue_ros_follower
ros_nodes\node_names\recorder=roboglue_ros_recorder ros_nodes\node_names\recorder=roboglue_ros_recorder
ros_nodes\node_names\relay=roboglue_ros_relay ros_nodes\node_names\relay=roboglue_ros_relay

View File

@@ -16,9 +16,10 @@ RoboGlue_SHARED::~RoboGlue_SHARED(){
void RoboGlue_SHARED::on_statusTimer(void){ void RoboGlue_SHARED::on_statusTimer(void){
double curTime = static_cast<double>(std::time(NULL)); double curTime = static_cast<double>(std::time(NULL));
commonStatus.relayTime = fabs(commonStatus.relayLast - curTime); commonStatus.relayRunning = (commonStatus.relayTime = fabs(commonStatus.relayLast - curTime)) < comSettings.deadTime;
commonStatus.followerTime = fabs(commonStatus.followerLast - curTime); commonStatus.followerRunning = (commonStatus.followerTime = fabs(commonStatus.followerLast - curTime)) < comSettings.deadTime;
commonStatus.recorderTime = fabs(commonStatus.recorderLast - curTime); commonStatus.recorderRunning = (commonStatus.recorderTime = fabs(commonStatus.recorderLast - curTime)) < comSettings.deadTime;
commonStatus.broadcasterRunning = (commonStatus.broadcasterTime = fabs(commonStatus.broadcasterLast - curTime)) < comSettings.deadTime;
emit this->commonStatusChange(); emit this->commonStatusChange();
} }
//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////
@@ -88,6 +89,7 @@ void RoboGlue_SHARED::restoreComSettings() {
comSettings.nodeNames["relay"] = settings->value("relay").toString().toStdString(); comSettings.nodeNames["relay"] = settings->value("relay").toString().toStdString();
comSettings.nodeNames["follower"] = settings->value("follower").toString().toStdString(); comSettings.nodeNames["follower"] = settings->value("follower").toString().toStdString();
comSettings.nodeNames["recorder"] = settings->value("recorder").toString().toStdString(); comSettings.nodeNames["recorder"] = settings->value("recorder").toString().toStdString();
comSettings.nodeNames["broadcaster"] = settings->value("broadcaster").toString().toStdString();
settings->endGroup(); settings->endGroup();
settings->endGroup(); settings->endGroup();
settings->endGroup(); settings->endGroup();
@@ -153,6 +155,7 @@ void RoboGlue_SHARED::saveComSettings() {
settings->setValue("relay", QString().fromStdString(comSettings.nodeNames.find("relay")->second)); settings->setValue("relay", QString().fromStdString(comSettings.nodeNames.find("relay")->second));
settings->setValue("follower", QString().fromStdString(comSettings.nodeNames.find("follower")->second)); settings->setValue("follower", QString().fromStdString(comSettings.nodeNames.find("follower")->second));
settings->setValue("recorder", QString().fromStdString(comSettings.nodeNames.find("recorder")->second)); settings->setValue("recorder", QString().fromStdString(comSettings.nodeNames.find("recorder")->second));
settings->setValue("broadcaster", QString().fromStdString(comSettings.nodeNames.find("broadcaster")->second));
settings->endGroup(); settings->endGroup();
settings->endGroup(); settings->endGroup();
settings->endGroup(); settings->endGroup();

View File

@@ -30,6 +30,7 @@
#include <QSize> #include <QSize>
#include <QTimer> #include <QTimer>
#include <stdexcept> #include <stdexcept>
#include <ctime>
#include <libJson/json.hpp> #include <libJson/json.hpp>
#include <libURcom/URCLinterface.h> #include <libURcom/URCLinterface.h>
#include <boost/algorithm/string.hpp> #include <boost/algorithm/string.hpp>
@@ -55,13 +56,16 @@ public:
bool relayRunning = false; bool relayRunning = false;
bool followerRunning = false; bool followerRunning = false;
bool recorderRunning = false; bool recorderRunning = false;
bool broadcasterRunning = false;
// ROS node last seen // ROS node last seen
double relayLast = 0.0; double relayLast = static_cast<double>(time(NULL));
double followerLast = 0.0; double followerLast = static_cast<double>(time(NULL));
double recorderLast = 0.0; double recorderLast = static_cast<double>(time(NULL));
double relayTime = 0.0; double broadcasterLast = static_cast<double>(time(NULL));
double followerTime = 0.0; double relayTime = static_cast<double>(time(NULL));
double recorderTime = 0.0; double followerTime = static_cast<double>(time(NULL));
double recorderTime = static_cast<double>(time(NULL));
double broadcasterTime = static_cast<double>(time(NULL));
} commonStatus; } commonStatus;
/////////// PERMANENT SETTINGS VARIABLES ///////// /////////// PERMANENT SETTINGS VARIABLES /////////