To receive notifications about scheduled maintenance, please subscribe to the mailing-list gitlab-operations@sympa.ethz.ch. You can subscribe to the mailing-list at https://sympa.ethz.ch

Commit 085f9ad1 authored by beuchatp's avatar beuchatp
Browse files

Adjusted CMakeList so that the flying agent GUI compiles. Requires testing.

parent c8fb318c
......@@ -55,23 +55,29 @@ find_package(Qt5Gui REQUIRED)
find_package(Qt5Svg REQUIRED)
# GUI -- Add src and includes
# GUI -- Add src, includes, and resources
set(MY_GUI_LIB_PATH_SRC ${PROJECT_SOURCE_DIR}/GUI_Qt/CrazyFlyGUI/src)
set(MY_GUI_LIB_PATH_INC ${PROJECT_SOURCE_DIR}/GUI_Qt/CrazyFlyGUI/include)
# GUI -- Resource file
set(MY_RESOURCE_FILE_QRC ${PROJECT_SOURCE_DIR}/GUI_Qt/CrazyFlyGUI/CrazyFlyGUI.qrc)
# StudentGUI -- Add src and includes
# StudentGUI -- Add src, includes, and resources
set(STUDENT_GUI_LIB_PATH_SRC ${PROJECT_SOURCE_DIR}/GUI_Qt/studentGUI/src)
set(STUDENT_GUI_LIB_PATH_INC ${PROJECT_SOURCE_DIR}/GUI_Qt/studentGUI/include)
# StudentGUI -- Resource file
set(STUDENT_RESOURCE_FILE_QRC ${PROJECT_SOURCE_DIR}/GUI_Qt/studentGUI/studentgui.qrc)
# Flying Agent GUI -- Add src, includes, forms, and resources
set(FLYING_AGENT_GUI_LIB_PATH_SRC ${PROJECT_SOURCE_DIR}/GUI_Qt/flyingAgentGUI/src)
set(FLYING_AGENT_GUI_LIB_PATH_INC ${PROJECT_SOURCE_DIR}/GUI_Qt/flyingAgentGUI/include)
set(FLYING_AGENT_GUI_LIB_PATH_FORMS ${PROJECT_SOURCE_DIR}/GUI_Qt/flyingAgentGUI/forms)
set(FLYING_AGENT_GUI_RESOURCE_FILE_QRC ${PROJECT_SOURCE_DIR}/GUI_Qt/flyingAgentGUI/flyingagentgui.qrc)
# #set the default path for built executables to the "bin" directory
# set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
# #set the default path for built libraries to the "lib" directory
......@@ -80,6 +86,8 @@ set(STUDENT_RESOURCE_FILE_QRC ${PROJECT_SOURCE_DIR}/GUI_Qt/studentGUI/studentgui
# GUI -- need c++11 for some things
add_definitions(-std=c++11)
# GUI -- Special Qt sources that need to be wrapped before being compiled
# they have the Qt macro QOBJECT inside, the MOC cpp file needs to be done manually
set(SRC_HDRS_QOBJECT_GUI
......@@ -90,32 +98,59 @@ set(SRC_HDRS_QOBJECT_GUI
${MY_GUI_LIB_PATH_INC}/rosNodeThread.h
${MY_GUI_LIB_PATH_INC}/CFLinker.h
)
# GUI -- wrap UI file and QOBJECT files
qt5_wrap_ui(UIS_HDRS_GUI ${MY_GUI_LIB_PATH_SRC}/mainguiwindow.ui)
qt5_wrap_cpp(SRC_MOC_HDRS_GUI ${SRC_HDRS_QOBJECT_GUI})
# GUI -- wrap resource file qrc->rcc
qt5_add_resources(MY_RESOURCE_FILE_RCC ${MY_RESOURCE_FILE_QRC})
# StudentGUI -- Special Qt sources that need to be wrapped before being compiled
set(SRC_HDRS_QOBJECT_STUDENT_GUI
${STUDENT_GUI_LIB_PATH_INC}/MainWindow.h
${STUDENT_GUI_LIB_PATH_INC}/rosNodeThread.h
)
# StudentGUI -- wrap UI file and QOBJECT files
qt5_wrap_ui(UIS_HDRS_STUDENT_GUI ${STUDENT_GUI_LIB_PATH_SRC}/MainWindow.ui)
qt5_wrap_cpp(SRC_MOC_HDRS_STUDENT_GUI ${SRC_HDRS_QOBJECT_STUDENT_GUI})
# GUI -- wrap resource file qrc->rcc
qt5_add_resources(STUDENT_RESOURCE_FILE_RCC ${STUDENT_RESOURCE_FILE_QRC})
# Flying Agent GUI
# - Special Qt sources that need to be wrapped before being compiled
# they have the Qt macro QOBJECT inside, the MOC cpp file needs to
# be done manually
set(SRC_HDRS_QOBJECT_FLYING_AGENT_GUI
${FLYING_AGENT_GUI_LIB_PATH_INC}/connectstartstopbar.h
${FLYING_AGENT_GUI_LIB_PATH_INC}/controllertabs.h
${FLYING_AGENT_GUI_LIB_PATH_INC}/coordinator.h
${FLYING_AGENT_GUI_LIB_PATH_INC}/coordinatorrow.h
${FLYING_AGENT_GUI_LIB_PATH_INC}/enablecontrollerloadyamlbar.h
${FLYING_AGENT_GUI_LIB_PATH_INC}/mainwindow.h
${FLYING_AGENT_GUI_LIB_PATH_INC}/rosNodeThread.h
${FLYING_AGENT_GUI_LIB_PATH_INC}/safecontrollertab.h
${FLYING_AGENT_GUI_LIB_PATH_INC}/topbanner.h
)
# Flying Agent GUI -- wrap UI file and QOBJECT files
qt5_wrap_ui(UIS_HDRS_FLYING_AGENT_GUI
${FLYING_AGENT_GUI_LIB_PATH_FORMS}/connectstartstopbar.ui
${FLYING_AGENT_GUI_LIB_PATH_FORMS}/controllertabs.ui
${FLYING_AGENT_GUI_LIB_PATH_FORMS}/coordinator.ui
${FLYING_AGENT_GUI_LIB_PATH_FORMS}/coordinatorrow.ui
${FLYING_AGENT_GUI_LIB_PATH_FORMS}/enablecontrollerloadyamlbar.ui
${FLYING_AGENT_GUI_LIB_PATH_FORMS}/mainwindow.ui
${FLYING_AGENT_GUI_LIB_PATH_FORMS}/safecontrollertab.ui
${FLYING_AGENT_GUI_LIB_PATH_FORMS}/topbanner.ui
)
qt5_wrap_cpp(SRC_MOC_HDRS_FLYING_AGENT_GUI ${SRC_HDRS_QOBJECT_FLYING_AGENT_GUI})
# Flying Agent GUI -- wrap resource file qrc->rcc
qt5_add_resources(FLYING_AGENT_GUI_RESOURCE_FILE_RCC ${MY_RESOURCE_FILE_QRC})
## Uncomment this if the package has a setup.py. This macro ensures
## modules and global scripts declared therein get installed
## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
......@@ -234,6 +269,7 @@ generate_messages(
catkin_package(
INCLUDE_DIRS include ${MY_GUI_LIB_PATH_INC} # GUI -- include headers from GUI in package
INCLUDE_DIRS include ${STUDENT_GUI_LIB_PATH_INC} # StudentGUI -- include headers from GUI in package
INCLUDE_DIRS include ${FLYING_AGENT_GUI_LIB_PATH_INC} # StudentGUI -- include headers from GUI in package
LIBRARIES
CATKIN_DEPENDS roscpp rospy std_msgs rosbag roslib
DEPENDS
......@@ -249,6 +285,7 @@ catkin_package(
include_directories(
${MY_GUI_LIB_PATH_INC} # GUI -- include directory inside GUI folder
${STUDENT_GUI_LIB_PATH_INC} # StudentGUI -- include directory inside GUI folder
${FLYING_AGENT_GUI_LIB_PATH_INC} # StudentGUI -- include directory inside GUI folder
${catkin_INCLUDE_DIRS}
include
include/nodes
......@@ -304,6 +341,8 @@ set(MY_CPP_SOURCES_GUI # compilation of sources
${MY_GUI_LIB_PATH_SRC}/centerMarker.cpp
)
# StudentGUI -- Add sources here
set(MY_CPP_SOURCES_STUDENT_GUI # compilation of sources
${STUDENT_GUI_LIB_PATH_SRC}/MainWindow.cpp
......@@ -313,15 +352,38 @@ set(MY_CPP_SOURCES_STUDENT_GUI # compilation of sources
# FLYING AGENT GUI -- Add sources here
set(MY_CPP_SOURCES_FLYING_AGENT_GUI # compilation of sources
${FLYING_AGENT_GUI_LIB_PATH_SRC}/connectstartstopbar.cpp
${FLYING_AGENT_GUI_LIB_PATH_SRC}/controllertabs.cpp
${FLYING_AGENT_GUI_LIB_PATH_SRC}/coordinator.cpp
${FLYING_AGENT_GUI_LIB_PATH_SRC}/coordinatorrow.cpp
${FLYING_AGENT_GUI_LIB_PATH_SRC}/enablecontrollerloadyamlbar.cpp
${FLYING_AGENT_GUI_LIB_PATH_SRC}/main.cpp
${FLYING_AGENT_GUI_LIB_PATH_SRC}/mainwindow.cpp
${FLYING_AGENT_GUI_LIB_PATH_SRC}/rosNodeThread.cpp
${FLYING_AGENT_GUI_LIB_PATH_SRC}/safecontrollertab.cpp
${FLYING_AGENT_GUI_LIB_PATH_SRC}/topbanner.cpp
)
# GUI -- Add executables here
add_executable(my_GUI ${MY_CPP_SOURCES_GUI} ${UIS_HDRS_GUI} ${SRC_MOC_HDRS_GUI} ${MY_RESOURCE_FILE_RCC})
qt5_use_modules(my_GUI Widgets)
# StudentGUI -- Add executables here
add_executable(student_GUI ${MY_CPP_SOURCES_STUDENT_GUI} ${UIS_HDRS_STUDENT_GUI} ${SRC_MOC_HDRS_STUDENT_GUI} ${STUDENT_RESOURCE_FILE_RCC})
qt5_use_modules(student_GUI Widgets)
# FLYING AGENT GUI -- Add executables here
add_executable(flyingAgentGUI ${MY_CPP_SOURCES_FLYING_AGENT_GUI} ${UIS_HDRS_FLYING_AGENT_GUI} ${SRC_MOC_HDRS_FLYING_AGENT_GUI} ${FLYING_AGENT_GUI_RESOURCE_FILE_RCC})
qt5_use_modules(flyingAgentGUI Widgets)
if(VICON_LIBRARY)
add_dependencies(ViconDataPublisher d_fall_pps_generate_messages_cpp ${catkin_EXPORTED_TARGETS})
......@@ -337,12 +399,23 @@ add_dependencies(TuningControllerService d_fall_pps_generate_messages_cpp ${cat
add_dependencies(CentralManagerService d_fall_pps_generate_messages_cpp ${catkin_EXPORTED_TARGETS})
add_dependencies(ParameterService d_fall_pps_generate_messages_cpp ${catkin_EXPORTED_TARGETS})
# GUI-- dependencies
add_dependencies(my_GUI d_fall_pps_generate_messages_cpp ${catkin_EXPORTED_TARGETS})
# StudentGUI-- dependencies
add_dependencies(student_GUI d_fall_pps_generate_messages_cpp ${catkin_EXPORTED_TARGETS})
# FLYING AGENT GUI-- dependencies
add_dependencies(flyingAgentGUI d_fall_pps_generate_messages_cpp ${catkin_EXPORTED_TARGETS})
## Rename C++ executable without prefix
## The above recommended prefix causes long target names, the following renames the
## target back to the shorter version for ease of user use
......@@ -380,6 +453,7 @@ target_link_libraries(CentralManagerService ${catkin_LIBRARIES})
target_link_libraries(ParameterService ${catkin_LIBRARIES})
# GUI -- link libraries
target_link_libraries(my_GUI Qt5::Widgets) # GUI -- let my_GUI have acesss to Qt stuff
target_link_libraries(my_GUI Qt5::Svg)
......@@ -388,11 +462,20 @@ target_link_libraries(my_GUI Qt5::Svg)
# target_link_libraries(my_GUI my_library)
target_link_libraries(my_GUI ${catkin_LIBRARIES})
# StudentGUI -- link libraries
target_link_libraries(student_GUI Qt5::Widgets) # GUI -- let my_GUI have acesss to Qt stuff
target_link_libraries(student_GUI Qt5::Widgets) # GUI -- let student_GUI have acesss to Qt stuff
target_link_libraries(student_GUI ${catkin_LIBRARIES})
# Flying Agent GUI -- link libraries
target_link_libraries(flyingAgentGUI Qt5::Widgets) # GUI -- let flyingAgentGUI have acesss to Qt stuff
target_link_libraries(flyingAgentGUI ${catkin_LIBRARIES})
#############
## Install ##
#############
......
......@@ -45,8 +45,11 @@
#include <ros/network.h>
#include <ros/package.h>
#include "d_fall_pps/AreaBounds.h"
#include "d_fall_pps/CrazyflieContext.h"
#include "d_fall_pps/CMQuery.h"
using namespace d_fall_pps;
#endif
// TYPES OF CONTROLLER BEING USED
......
// Copyright (C) 2017, ETH Zurich, D-ITET, Angel Romero
//
// This file is part of D-FaLL-System.
//
// D-FaLL-System is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// D-FaLL-System is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with D-FaLL-System. If not, see <http://www.gnu.org/licenses/>.
//
//
// ----------------------------------------------------------------------------------
// DDDD FFFFF L L SSSS Y Y SSSS TTTTT EEEEE M M
// D D F aaa L L S Y Y S T E MM MM
// D D --- FFFF a a L L --- SSS Y SSS T EEE M M M
// D D F a aa L L S Y S T E M M
// DDDD F aa a LLLL LLLL SSSS Y SSSS T EEEEE M M
//
//
// DESCRIPTION:
// Creates a thread that runs the ros node.
//
// ----------------------------------------------------------------------------------
#ifndef ___ROSNODETHREAD_H___
#define ___ROSNODETHREAD_H___
#include <QtCore>
#include <QThread>
#include <QStringList>
#include <stdlib.h>
#include <QMutex>
#include <iostream>
#include "assert.h"
#include <ros/ros.h>
#include <ros/network.h>
//#include "d_fall_pps/UnlabeledMarker.h"
//#include "d_fall_pps/CrazyflieData.h"
//#include "d_fall_pps/ViconData.h"
//using namespace d_fall_pps;
//typedef ViconData::ConstPtr ptrToMessage;
//Q_DECLARE_METATYPE(ptrToMessage)
class rosNodeThread : public QObject {
Q_OBJECT
public:
explicit rosNodeThread(int argc, char **pArgv, const char * node_name, QObject *parent = 0);
virtual ~rosNodeThread();
bool init();
// void messageCallback(const ViconData& data);
//void messageCallback(const ptrToMessage& p_msg);
ros::ServiceClient m_read_db_client;
ros::ServiceClient m_update_db_client;
ros::ServiceClient m_command_db_client;
signals:
//void newViconData(const ptrToMessage& p_msg);
public slots:
void run();
private:
int m_Init_argc;
char** m_pInit_argv;
const char * m_node_name;
QThread * m_pThread;
//ViconData m_vicon_data;
//ros::Subscriber m_vicon_subscriber;
// ros::Publisher sim_velocity;
};
#endif
......@@ -595,9 +595,9 @@ void CoordinatorRow::loadCrazyflieContext()
contextCall.request.studentID = my_agentID;
//ROS_INFO_STREAM("StudentID:" << my_agentID);
centralManager.waitForExistence(ros::Duration(-1));
centralManagerDatabaseService.waitForExistence(ros::Duration(-1));
if(centralManager.call(contextCall))
if(centralManagerDatabaseService.call(contextCall))
{
my_context = contextCall.response.crazyflieContext;
ROS_INFO_STREAM("[Coordinator Row GUI] CrazyflieContext:\n" << my_context);
......@@ -710,7 +710,7 @@ void CoordinatorRow::on_enable_flying_button_clicked()
#ifdef CATKIN_MAKE
std_msgs::Int32 msg;
msg.data = CMD_CRAZYFLY_TAKE_OFF;
this->PPSClientCommandPublisher.publish(msg);
this->flyingStateCommandPublisher.publish(msg);
#endif
}
......@@ -719,7 +719,7 @@ void CoordinatorRow::on_disable_flying_button_clicked()
#ifdef CATKIN_MAKE
std_msgs::Int32 msg;
msg.data = CMD_CRAZYFLY_LAND;
this->PPSClientCommandPublisher.publish(msg);
this->flyingStateCommandPublisher.publish(msg);
#endif
}
......@@ -728,6 +728,6 @@ void CoordinatorRow::on_motors_off_button_clicked()
#ifdef CATKIN_MAKE
std_msgs::Int32 msg;
msg.data = CMD_CRAZYFLY_MOTORS_OFF;
this->PPSClientCommandPublisher.publish(msg);
this->flyingStateCommandPublisher.publish(msg);
#endif
}
......@@ -50,7 +50,7 @@ int main(int argc, char *argv[])
QApplication a(argc, argv);
MainWindow w(argc, argv);
w.show();
a.exec();
return a.exec();
// ----------------------------------------------------------- //
}
......@@ -37,7 +37,7 @@ MainWindow::MainWindow(int argc, char **argv, QWidget *parent) :
ui(new Ui::MainWindow)
{
#ifdef CATKIN_MAKE
m_rosNodeThread = new rosNodeThread(argc, argv, "coordinatorGUI");
m_rosNodeThread = new rosNodeThread(argc, argv, "flyingAgentGUI");
#endif
ui->setupUi(this);
......
// Copyright (C) 2017, ETH Zurich, D-ITET, Angel Romero
//
// This file is part of D-FaLL-System.
//
// D-FaLL-System is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// D-FaLL-System is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with D-FaLL-System. If not, see <http://www.gnu.org/licenses/>.
//
//
// ----------------------------------------------------------------------------------
// DDDD FFFFF L L SSSS Y Y SSSS TTTTT EEEEE M M
// D D F aaa L L S Y Y S T E MM MM
// D D --- FFFF a a L L --- SSS Y SSS T EEE M M M
// D D F a aa L L S Y S T E M M
// DDDD F aa a LLLL LLLL SSSS Y SSSS T EEEEE M M
//
//
// DESCRIPTION:
// Creates a thread that runs the ros node.
//
// ----------------------------------------------------------------------------------
#include "rosNodeThread.h"
#include "d_fall_pps/CMRead.h"
#include "d_fall_pps/CMUpdate.h"
#include "d_fall_pps/CMCommand.h"
rosNodeThread::rosNodeThread(int argc, char** pArgv, const char * node_name, QObject* parent)
: QObject(parent),
m_Init_argc(argc),
m_pInit_argv(pArgv),
m_node_name(node_name)
{
/** Constructor for the node thread **/
}
rosNodeThread::~rosNodeThread()
{
if (ros::isStarted())
{
ros::shutdown();
ros::waitForShutdown();
} // end if
m_pThread->wait();
} // end destructor
bool rosNodeThread::init()
{
m_pThread = new QThread();
this->moveToThread(m_pThread); // QObject method
connect(m_pThread, SIGNAL(started()), this, SLOT(run()));
ros::init(m_Init_argc, m_pInit_argv, m_node_name); // flyingAgentGUI is the name of this node
if (!ros::master::check())
{
ROS_ERROR("No master found. Please make sure that there is a master roscore running");
return false; // do not start without ros.
}
ros::start();
ros::Time::init();
ros::NodeHandle nh("~");
//m_vicon_subscriber = nh.subscribe("/ViconDataPublisher/ViconData", 100, &rosNodeThread::messageCallback, this);
// clients for db services:
m_read_db_client = nh.serviceClient<CMRead>("/CentralManagerService/Read", false);
m_update_db_client = nh.serviceClient<CMUpdate>("/CentralManagerService/Update", false);
m_command_db_client = nh.serviceClient<CMCommand>("/CentralManagerService/Command", false);
m_pThread->start();
return true;
} // set up the thread
//void rosNodeThread::messageCallback(const ptrToMessage& p_msg) // When a message arrives to the topic, this callback is executed
//{
// emit newViconData(p_msg); //pass the message to other places
//}
// void rosNodeThread::messageCallback(const ViconData& data) // When a message arrives to the topic, this callback is executed
// {
// QMutex * pMutex = new QMutex();
// pMutex->lock();
// ROS_INFO_STREAM("ViconData: " << data.x << ", " << data.y << ", " << data.z);
// m_vicon_data.x = data.x;
// m_vicon_data.y = data.y;
// m_vicon_data.z = data.z;
// m_vicon_data.yaw = data.yaw;
// m_vicon_data.pitch = data.pitch;
// m_vicon_data.roll = data.roll;
// pMutex->unlock();
// delete pMutex;
// // Q_EMIT newViconData(m_vicon_data.x, m_vicon_data.y, m_vicon_data.z, m_vicon_data.yaw, m_vicon_data.pitch, m_vicon_data.roll);
// emit newViconData(m_vicon_data.x, m_vicon_data.y);
// }
void rosNodeThread::run()
{
ros::Rate loop_rate(100);
QMutex * pMutex;
while (ros::ok())
{
pMutex = new QMutex();
// geometry_msgs::Twist cmd_msg;
pMutex->lock();
// cmd_msg.linear.x = m_speed;
// cmd_msg.angular.z = m_angle;
pMutex->unlock();
// sim_velocity.publish(cmd_msg);
ros::spinOnce();
loop_rate.sleep();
delete pMutex;
} // do ros things.
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment