Compare commits

...

2 Commits

Author SHA1 Message Date
9483e265f3 aggiunto topic interface, cambiato modo di subscribe mqtt 2019-10-30 16:33:36 +01:00
117cf20765 Modifiche interfaccia 2019-10-30 12:06:26 +01:00
9 changed files with 77 additions and 101 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-10-23T17:47:47. --> <!-- Written by QtCreator 4.8.2, 2019-10-29T10:42:37. -->
<qtcreator> <qtcreator>
<data> <data>
<variable>EnvironmentId</variable> <variable>EnvironmentId</variable>

View File

@@ -1,9 +1,10 @@
#include "mqtt_callback.h" #include "mqtt_callback.h"
mqtt_callback::mqtt_callback(mqtt::async_client *cli, std::shared_ptr<spdlog::logger> log) { mqtt_callback::mqtt_callback(mqtt::async_client *cli, std::shared_ptr<spdlog::logger> log, RoboGlue_SHARED *mem) {
//initialize client pointer //initialize client pointer
cli_=cli; cli_=cli;
log_=log; log_=log;
mem_= mem;
} }
void mqtt_callback::connected(const mqtt::string &cause) { void mqtt_callback::connected(const mqtt::string &cause) {
@@ -17,6 +18,17 @@ void mqtt_callback::connection_lost(const mqtt::string &cause) {
void mqtt_callback::message_arrived(mqtt::const_message_ptr msg) { void mqtt_callback::message_arrived(mqtt::const_message_ptr msg) {
log_->debug("Message Arrived: topic->{} - message->{}", log_->debug("Message Arrived: topic->{} - message->{}",
msg->get_topic(), msg->to_string()); msg->get_topic(), msg->to_string());
if(msg->get_topic() == mem_->comSettings.subMap.find("interface")->second) {
log_->debug("MQTT: Interface Message: {}", msg->get_payload().c_str());
} else if (msg->get_topic() == mem_->comSettings.subMap.find("state")->second){
log_->debug("MQTT: State Message: {}", msg->get_payload().c_str());
} else if (msg->get_topic() == mem_->comSettings.subMap.find("commands")->second){
log_->debug("MQTT: Command Message: {}", msg->get_payload().c_str());
} else if (msg->get_topic() == mem_->comSettings.subMap.find("coordinates")->second){
log_->debug("MQTT: Coordinate Message: {}", msg->get_payload().c_str());
} else {
log_->error("Unrecognized topic");
}
} }
void mqtt_callback::delivery_complete(mqtt::delivery_token_ptr tok) { void mqtt_callback::delivery_complete(mqtt::delivery_token_ptr tok) {

View File

@@ -4,15 +4,17 @@
#include <mqtt/client.h> #include <mqtt/client.h>
#include <mqtt/callback.h> #include <mqtt/callback.h>
#include <spdlog/logger.h> #include <spdlog/logger.h>
#include <shared/roboglue_shared.h>
class mqtt_callback : public virtual mqtt::callback { class mqtt_callback : public virtual mqtt::callback {
private: private:
RoboGlue_SHARED *mem_;
mqtt::async_client *cli_ = nullptr; mqtt::async_client *cli_ = nullptr;
std::shared_ptr<spdlog::logger> log_; std::shared_ptr<spdlog::logger> log_;
public: public:
mqtt_callback(mqtt::async_client *cli, std::shared_ptr<spdlog::logger> log); mqtt_callback(mqtt::async_client *cli, std::shared_ptr<spdlog::logger> log,RoboGlue_SHARED *m);
void connected(const mqtt::string &cause) override; void connected(const mqtt::string &cause) override;
void connection_lost(const mqtt::string &cause) override; void connection_lost(const mqtt::string &cause) override;

View File

@@ -5,8 +5,8 @@ RoboGlue_COM::RoboGlue_COM (RoboGlue_SHARED *mem): m(mem) {
//////// SETUP LOGGER ////////// //////// SETUP LOGGER //////////
liblog = spdlog::stdout_logger_mt("URcom_liblog"); liblog = spdlog::stdout_logger_mt("URcom_liblog");
modlog = spdlog::stdout_logger_mt("RoboGlue_comlog"); modlog = spdlog::stdout_logger_mt("RoboGlue_comlog");
liblog->set_level(spdlog::level::debug); liblog->set_level(spdlog::level::warn);
modlog->set_level(spdlog::level::debug); modlog->set_level(spdlog::level::info);
///////// INITIALIZE TCP SERVER /////////// ///////// INITIALIZE TCP SERVER ///////////
server = new QTcpServer(this); server = new QTcpServer(this);
@@ -16,7 +16,7 @@ RoboGlue_COM::RoboGlue_COM (RoboGlue_SHARED *mem): m(mem) {
//////// INITIALIZE MQTT CONNECTOR /////// //////// INITIALIZE MQTT CONNECTOR ///////
client = new mqtt::async_client(std::string("tcp://localhost:1883"),""); client = new mqtt::async_client(std::string("tcp://localhost:1883"),"");
callback = new mqtt_callback(client,modlog);//////////////////////////////////////////////// callback = new mqtt_callback(client,modlog,m);////////////////////////////////////////////////
//////// END EXTERNAL PUBLIC SLOTS ///////////// //////// END EXTERNAL PUBLIC SLOTS /////////////
//////////////////////////////////////////////// ////////////////////////////////////////////////
baseMsg = m->commonSettings.baseMessage; baseMsg = m->commonSettings.baseMessage;
@@ -35,9 +35,8 @@ void RoboGlue_COM::run() {
client->set_callback(*callback); client->set_callback(*callback);
client->connect()->wait(); client->connect()->wait();
// subscrbe to mqtt topics // subscrbe to mqtt topics
std::vector<std::string> subList = m->comSettings.subList; for (auto it=m->comSettings.subMap.begin(); it != m->comSettings.subMap.end(); ++it){
for (uint i=0; i < subList.size(); i++){ client->subscribe(it->second,0);
client->subscribe(subList[i],0);
} }
client->start_consuming(); client->start_consuming();
@@ -270,7 +269,7 @@ void RoboGlue_COM::timed_sendCoordinates(){
baseMsg["value"]["rx"] = sp[3]; baseMsg["value"]["rx"] = sp[3];
baseMsg["value"]["ry"] = sp[4]; baseMsg["value"]["ry"] = sp[4];
baseMsg["value"]["rz"] = sp[5]; baseMsg["value"]["rz"] = sp[5];
MQTTpublish(baseMsg, m->comSettings.pubList[m->comSettings.COORD]); MQTTpublish(baseMsg, m->comSettings.pubMap.find("coordinates")->second);
} }
} }
//////////////////////////////////////////////// ////////////////////////////////////////////////
@@ -329,7 +328,7 @@ void RoboGlue_COM::on_sendROScommand(QString command, QVariantMap params) {
baseMsg["command"] = command.toStdString(); baseMsg["command"] = command.toStdString();
QJsonDocument jparam = QJsonDocument(QJsonObject::fromVariantMap(params)); QJsonDocument jparam = QJsonDocument(QJsonObject::fromVariantMap(params));
baseMsg["params"] = json::parse(jparam.toJson().data()); baseMsg["params"] = json::parse(jparam.toJson().data());
MQTTpublish(baseMsg, m->comSettings.pubList[m->comSettings.COMM]); MQTTpublish(baseMsg, m->comSettings.pubMap.find("commands")->second);
} }
void RoboGlue_COM::on_sendROScoordinates(QList<double> sp) { void RoboGlue_COM::on_sendROScoordinates(QList<double> sp) {
@@ -350,41 +349,3 @@ void RoboGlue_COM::on_sendROSstate(QMap<std::string,bool> digital, QMap<std::str
//////////////////////////////////////////////// ////////////////////////////////////////////////
//////// END EXTERNAL PUBLIC SLOTS ///////////// //////// END EXTERNAL PUBLIC SLOTS /////////////
//////////////////////////////////////////////// ////////////////////////////////////////////////
//void RoboGlue_COM::on_sendSetpointOLD(QList<double> sp) {
// std::string setpoint;
// struct {
// union{
// struct{
// uint32_t x,y,z,a,b,c,keepalive;
// };
// char bytes[28];
// };
// } setPointBytes;
// setPointBytes.keepalive=1;
// int32_t v;
// setpoint = "(";
// for(uchar i=0; i<JOINT_NUMBER; i++){
// v=static_cast<int32_t>(sp[i]*1000);
// if (i>2) v=boost::algorithm::clamp(v, -2680,2680);
// setpoint.append(std::to_string(v));
// boost::algorithm::replace_all(setpoint, ",",".");
// if(i<JOINT_NUMBER) setpoint.append("|");
// }
// setpoint.append("1");
// boost::algorithm::replace_all(setpoint,"|",",");
// setpoint.append(")");
// setPointBytes.x=htonl(static_cast<uint32_t>(sp[0]*1000));
// setPointBytes.y=htonl(static_cast<uint32_t>(sp[1]*1000));
// setPointBytes.z=htonl(static_cast<uint32_t>(sp[2]*1000));
// setPointBytes.a=htonl(static_cast<uint32_t>(sp[3]*1000));
// setPointBytes.b=htonl(static_cast<uint32_t>(sp[4]*1000));
// setPointBytes.c=htonl(static_cast<uint32_t>(sp[5]*1000));
// setPointBytes.keepalive=htonl(setPointBytes.keepalive);
// if(robotIN->write(setPointBytes.bytes,28))
// modlog->trace("Sent Setpoint {}",setpoint.c_str());
// robotIN->flush();
//}

View File

@@ -44,7 +44,8 @@
* della coda di destinazione. * della coda di destinazione.
* 20190311 - La pubblicazione dei messaggi di coordinate verso ros deve essere a rateo costante * 20190311 - La pubblicazione dei messaggi di coordinate verso ros deve essere a rateo costante
* indipendentemente dalla frequenza di ingresso * indipendentemente dalla frequenza di ingresso
*/ * 20191030 - Spostata la documentazione su GIT
*/
#include <QObject> #include <QObject>
#include <QThread> #include <QThread>

View File

@@ -438,7 +438,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string/> <string>-</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
@@ -457,7 +457,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string/> <string>-</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
@@ -476,7 +476,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string/> <string>-</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
@@ -498,7 +498,7 @@
<number>0</number> <number>0</number>
</property> </property>
<property name="text"> <property name="text">
<string/> <string>-</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
@@ -517,7 +517,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string/> <string>-</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
@@ -536,7 +536,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string/> <string>-</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
@@ -588,7 +588,7 @@
<number>0</number> <number>0</number>
</property> </property>
<property name="text"> <property name="text">
<string/> <string>-</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
@@ -607,7 +607,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string/> <string>-</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
@@ -626,7 +626,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string/> <string>-</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
@@ -645,7 +645,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string/> <string>-</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
@@ -664,7 +664,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string/> <string>-</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
@@ -683,7 +683,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string/> <string>-</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
@@ -976,21 +976,21 @@
<item> <item>
<widget class="QLabel" name="lbl_posX"> <widget class="QLabel" name="lbl_posX">
<property name="text"> <property name="text">
<string>TextLabel</string> <string>-</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QLabel" name="lbl_posY"> <widget class="QLabel" name="lbl_posY">
<property name="text"> <property name="text">
<string>TextLabel</string> <string>-</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QLabel" name="lbl_posZ"> <widget class="QLabel" name="lbl_posZ">
<property name="text"> <property name="text">
<string>TextLabel</string> <string>-</string>
</property> </property>
</widget> </widget>
</item> </item>
@@ -1338,12 +1338,12 @@
<resources/> <resources/>
<connections/> <connections/>
<buttongroups> <buttongroups>
<buttongroup name="grp_hilo"/>
<buttongroup name="grp_mod"/> <buttongroup name="grp_mod"/>
<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"/>
</buttongroups> </buttongroups>
</ui> </ui>

View File

@@ -8,34 +8,34 @@ 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
kine\dhtable\1\dha=6.94460589082162e-310 kine\dhtable\1\dha=0
kine\dhtable\1\dhalpha=6.9446058912971e-310 kine\dhtable\1\dhalpha=0
kine\dhtable\1\dhd=1.099340831232476e+248 kine\dhtable\1\dhd=0
kine\dhtable\1\dhtheta=1.332e-320 kine\dhtable\1\dhtheta=0
kine\dhtable\2\dha=0 kine\dhtable\2\dha=0
kine\dhtable\2\dhalpha=6.9446058912884e-310 kine\dhtable\2\dhalpha=0
kine\dhtable\2\dhd=1.3849777432376169e+219 kine\dhtable\2\dhd=0
kine\dhtable\2\dhtheta=6.9446058913382e-310 kine\dhtable\2\dhtheta=0
kine\dhtable\3\dha=0 kine\dhtable\3\dha=0
kine\dhtable\3\dhalpha=5.53e-322 kine\dhtable\3\dhalpha=0
kine\dhtable\3\dhd=2.44861994589e-312 kine\dhtable\3\dhd=0
kine\dhtable\3\dhtheta=8e-323 kine\dhtable\3\dhtheta=0
kine\dhtable\4\dha=2.37e-322 kine\dhtable\4\dha=0
kine\dhtable\4\dhalpha=2.37e-322 kine\dhtable\4\dhalpha=0
kine\dhtable\4\dhd=0 kine\dhtable\4\dhd=0
kine\dhtable\4\dhtheta=0 kine\dhtable\4\dhtheta=0
kine\dhtable\5\dha=2.57e-322 kine\dhtable\5\dha=0
kine\dhtable\5\dhalpha=2.57e-322 kine\dhtable\5\dhalpha=0
kine\dhtable\5\dhd=2.06e-321 kine\dhtable\5\dhd=0
kine\dhtable\5\dhtheta=8.74e-322 kine\dhtable\5\dhtheta=0
kine\dhtable\6\dha=6.9446058915066e-310 kine\dhtable\6\dha=0
kine\dhtable\6\dhalpha=6.9446058913493e-310 kine\dhtable\6\dhalpha=0
kine\dhtable\6\dhd=6.94460589137854e-310 kine\dhtable\6\dhd=0
kine\dhtable\6\dhtheta=6.94460589137854e-310 kine\dhtable\6\dhtheta=0
kine\dhtable\size=6 kine\dhtable\size=6
kine\maxreach=@Variant(\0\0\0\x87?\x99\x99\x9a) kine\maxreach=@Variant(\0\0\0\x87?\x99\x99\x9a)
kine\prefix=0 kine\prefix=0

View File

@@ -2,10 +2,17 @@
RoboGlue_SHARED::RoboGlue_SHARED(QSettings *set){ RoboGlue_SHARED::RoboGlue_SHARED(QSettings *set){
settings=set; settings=set;
//FIXME: inserire la lettura di quesste informazioni da un file
robotVariables.insert(std::pair<std::string, int>("RDY",1)); robotVariables.insert(std::pair<std::string, int>("RDY",1));
comSettings.subMap["commands"] = "roboglue_com/ros2com/commands";
comSettings.subMap["coordinates"] = "roboglue_com/ros2com/coordinates";
comSettings.subMap["state"] = "roboglue_com/ros2com/state";
comSettings.subMap["interface"] = "roboglue_com/ros2com/interface";
comSettings.pubMap["commands"] = "roboglue_com/com2ros/commands";
comSettings.pubMap["coordinates"] = "roboglue_com/com2ros/coordinates";
comSettings.pubMap["state"] = "roboglue_com/com2ros/state";
comSettings.pubMap["interface"] = "roboglue_com/com2ros/interface";
} }
//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////
/////////////////////// RESTORE FUNCTIONS ///////////////////// /////////////////////// RESTORE FUNCTIONS /////////////////////

View File

@@ -21,7 +21,7 @@
* QUESTA COSA VA GIÀ CAMBIATA PERCHÈ È TROPPO CONFUSIONARIA!! * QUESTA COSA VA GIÀ CAMBIATA PERCHÈ È TROPPO CONFUSIONARIA!!
* 20190124 - Implementati tutti i metodi che salvano e ripristinano le configurazioni. * 20190124 - Implementati tutti i metodi che salvano e ripristinano le configurazioni.
* 20190311 - Aggiunta la struttura che tiene gli stati che devono rimanere comuni ai moduli. * 20190311 - Aggiunta la struttura che tiene gli stati che devono rimanere comuni ai moduli.
* * 20191030 - Documentazione spostata in GIT
*/ */
#include <QMutex> #include <QMutex>
@@ -66,7 +66,7 @@ public:
struct { struct {
struct { struct {
std::string robotIp = std::string("192.168.0.31"); std::string robotIp = std::string("localhost");
uint robotPort = 30002; uint robotPort = 30002;
unsigned char retry = 5; unsigned char retry = 5;
bool autoConnect = false; bool autoConnect = false;
@@ -77,16 +77,9 @@ public:
kineDH_t DHtable; kineDH_t DHtable;
float maxReach = 1.2; float maxReach = 1.2;
} kine; } kine;
std::vector<std::string> subList { std::map<std::string, std::string> subMap;
{"roboglue_com/ros2com/commands"}, std::map<std::string, std::string> pubMap;
{"roboglue_com/ros2com/coordinates"}, //FIXME: riempire la mappa dinamicamente da un file, eliminare l'assegnazione manuale
{"roboglue_com/ros2com/state"}
};
std::vector<std::string> pubList {
{"roboglue_com/com2ros/commands"},
{"roboglue_com/com2ros/coordinates"},
{"roboglue_com/com2ros/state"}
};
enum { enum {
COMM, COORD, STAT COMM, COORD, STAT
} tList; } tList;