Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • authierj/dfall-system
1 result
Show changes
Commits on Source (439)
Showing
with 5947 additions and 456 deletions
pps_ws/build/ dfall_ws/build/
pps_ws/devel/ dfall_ws/devel/
pps_ws/src/d_fall_pps/lib/vicon/ dfall_ws/src/dfall_pkg/lib/vicon/
pps_ws/src/d_fall_pps/include/DataStreamClient.h dfall_ws/src/dfall_pkg/include/DataStreamClient.h
dfall_ws/src/dfall_pkg/include/IDataStreamClientBase.h
dfall_ws/src/CMakeLists.txt
# Qt Project files with user preferences
*.pro.user
*.pro.user.*
*.pyc *.pyc
*.orig *.orig
...@@ -11,4 +17,25 @@ pps_ws/src/d_fall_pps/include/DataStreamClient.h ...@@ -11,4 +17,25 @@ pps_ws/src/d_fall_pps/include/DataStreamClient.h
TAGS TAGS
build-* build-*
Crazyflie.db
# For LaTeX files in the wiki
wiki/latex/*
!wiki/latex/*.tex
# NOTES:
# > To keep track of configuration-type files that
# are part of the repository, BUT for whcih
# changes are NOT tracked.
# > These files are "skipped" from tracking using
# the following syntax:
# >> git update-index --skip-worktree <FILENAME>
# > The files that should be "skipped" are:
# >> dfall_ws/src/dfall_pkg/launch/Config.sh
# >> dfall_ws/src/dfall_pkg/param/Crazyflie.db
# > To return these files to normal tracking use
# the following syntax:
# >> git update-index --no-skip-worktree <FILENAME>
# > "Skipping" is a setting local to your copy of the
# repository because ".git ignoring" a file already
# in the repository does NOT stop changes from being
# tracked
The repository this patch was done from is this one: # Instructions for Applying Firmware Patches
The repository that these patches are applicable for is:<br>
https://github.com/bitcraze/crazyflie-firmware https://github.com/bitcraze/crazyflie-firmware
And the hash from the exact commit we pulled from: However, it is easiest to locate the official realease versions of the firmware from here:<br>
https://github.com/bitcraze/crazyflie-release/releases
f4d21213d7ce37d7ed7338fad0f9a94a96cec191 The complete instructions for applying the patch are given separately for each firmware version (currently only one firmware version).
To apply the patch, just write the following commands:
`git clone https://github.com/bitcraze/crazyflie-firmware.git`<br>
`cd crazyflie-firmware`<br>
`git submodule init && git submodule update`<br>
`git checkout f4d21213d7ce37d7ed7338fad0f9a94a96cec191`<br>
`git apply <folder_to_D-FaLL-System_repository>/crazyflie_firmware/firmware_modifications.patch`<br>
Now the repository is ready to compile. To do it, first make sure that you have
installed the toolchain. To install it:<br>
## Install Compilation Toolchain
For compilation on Ubuntu 18.04, the toolchain is installed with the following commands:<br>
`sudo apt install gcc-arm-none-eabi`<br>
For compilation on Ubuntu 16.04, the toolchain is installed with the following commands:<br>
`sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa`<br> `sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa`<br>
`sudo apt-get update`<br> `sudo apt-get update`<br>
`sudo apt-get install libnewlib-arm-none-eabi`<br> `sudo apt-get install libnewlib-arm-none-eabi`<br>
Then, in the `crazyflie-firmware` folder where you applied the patch, do:<br>
`make PLATFORM=CF2`
## Firware Version 2020-02
The hash of the exact commit to which this patch applies is:<br>
`e27cd170b7eb8be7ed1cbbc9f5622b469d335d97`<br>
As commited on Mon Feb 3 15:04:52 2020 +0100
To apply the patch, use the following sequence of commands:
**Step 1:** Clone the repository and checkout the appropriate commit:<br>
`git clone --recursive https://github.com/bitcraze/crazyflie-firmware.git`<br>
`cd crazyflie-firmware`<br>
`git checkout e27cd170b7eb8be7ed1cbbc9f5622b469d335d97`<br>
Note that it is also possible to checkout this commit using the commit tag, i.e., using `git checkout 2020.02`
**Step 2:** Apply the patch:<br>
`git apply <folder_to_dfall-system_repository>/crazyflie_firmware/crazyflie-firmware-version-2020-20/firmware_modifications_for_version_2020-20.patch`<br>
Now the repository is ready to compile. To do this, first make sure that you have
installed the necessary toolchain as described above ([Install Compilation Toolchain](#install-compilation-toolchain)).
**Step 3:** In the `crazyflie-firmware` folder where you applied the patch, compile the firmware using the following command:<br>
`make PLATFORM=cf2`
If everything is successful, you will see something like this:<br> If everything is successful, you will see something like this:<br>
<img src="./../pps_wiki/pics/success_building.png" style="width: 400px;"/> <br><br> <img src="success_building_for_version_2020-02.png" style="width: 400px;"/> <br><br>
This should have created the binary file `cf2.bin`.
**Step 4:** upload the binary to the crazyflie processor by following the instructions given here:<br>
https://www.bitcraze.io/documentation/tutorials/getting-started-with-crazyflie-2-x/#update-fw<br>
Instructions are also given in the wiki of this repository under:
`/wiki/setup.md#firmware`
Now the binary file cf2.bin has been created, and can be directly uploaded to The pre-compiled binary files are already included in this repository. To update the firmware of just the main processor, select the file:
the crazyflie `<folder_to_dfall-system_repository>/crazyflie_firmware/crazyflie-firmware-version-2020-02/cf2-2020.02_withDfallPatch.bin`<br>
To update the firmware of both the main processor and the nrf processor, select the file:<br>
`<folder_to_dfall-system_repository>/crazyflie_firmware/crazyflie-firmware-version-2020-02/firmware-cf2-2020.02_withDfallPatch.zip`<br>
\ No newline at end of file
File added
{"subversion": 2, "release": "2020.02", "fw_platform": "cf2", "version": 1, "files": {"cf2-2020.02_withDfallPatch.bin": {"release": "2020.02", "platform": "cf2", "type": "fw", "target": "stm32", "repository": "crazyflie-firmware"}, "cf2_nrf-2020.02.bin": {"release": "2020.02", "platform": "cf2", "type": "fw", "target": "nrf51", "repository": "crazyflie2-nrf-firmware"}}}
\ No newline at end of file
diff --git a/src/modules/interface/attitude_controller.h b/src/modules/interface/attitude_controller.h
index ad23ef0..f79b7d1 100644
--- a/src/modules/interface/attitude_controller.h
+++ b/src/modules/interface/attitude_controller.h
@@ -63,6 +63,11 @@ void attitudeControllerResetRollAttitudePID(void);
*/
void attitudeControllerResetPitchAttitudePID(void);
+/**
+ * Reset controller yaw attitude PID
+ */
+void attitudeControllerResetYawAttitudePID(void);
+
/**
* Reset controller roll, pitch and yaw PID's.
*/
diff --git a/src/modules/interface/stabilizer_types.h b/src/modules/interface/stabilizer_types.h
index 418cc0b..30d031b 100644
--- a/src/modules/interface/stabilizer_types.h
+++ b/src/modules/interface/stabilizer_types.h
@@ -144,6 +144,10 @@ typedef struct control_s {
int16_t pitch;
int16_t yaw;
float thrust;
+ uint16_t cmd1;
+ uint16_t cmd2;
+ uint16_t cmd3;
+ uint16_t cmd4;
} control_t;
typedef enum mode_e {
@@ -152,12 +156,24 @@ typedef enum mode_e {
modeVelocity
} stab_mode_t;
+typedef enum pps_mode_e {
+ modeDisabled = 0,
+ modeMotors,
+ modeRate,
+ modeAngle
+} pps_mode_t;
+
typedef struct setpoint_s {
uint32_t timestamp;
attitude_t attitude;
attitude_t attitudeRate;
float thrust;
+ pps_mode_t pps_mode;
+ uint16_t cmd1;
+ uint16_t cmd2;
+ uint16_t cmd3;
+ uint16_t cmd4;
point_t position;
velocity_t velocity;
bool velocity_body;
diff --git a/src/modules/src/attitude_pid_controller.c b/src/modules/src/attitude_pid_controller.c
index 8b5f4aa..f16288f 100644
--- a/src/modules/src/attitude_pid_controller.c
+++ b/src/modules/src/attitude_pid_controller.c
@@ -142,9 +142,14 @@ void attitudeControllerResetRollAttitudePID(void)
void attitudeControllerResetPitchAttitudePID(void)
{
- pidReset(&pidRoll);
+ pidReset(&pidPitch);
}
+void attitudeControllerResetYawAttitudePID(void)
+{
+ pidReset(&pidYaw);
+}
+
void attitudeControllerResetAllPID(void)
{
pidReset(&pidRoll);
diff --git a/src/modules/src/controller_pid.c b/src/modules/src/controller_pid.c
index 0e5e62d..516315a 100644
--- a/src/modules/src/controller_pid.c
+++ b/src/modules/src/controller_pid.c
@@ -51,9 +51,13 @@ void stateController(control_t *control, setpoint_t *setpoint,
}
if (RATE_DO_EXECUTE(POSITION_RATE, tick)) {
- positionController(&actuatorThrust, &attitudeDesired, setpoint, state);
+ if(setpoint->pps_mode != modeMotors && setpoint->pps_mode != modeRate && setpoint->pps_mode != modeAngle)
+ {
+ positionController(&actuatorThrust, &attitudeDesired, setpoint, state);
+ }
}
+
if (RATE_DO_EXECUTE(ATTITUDE_RATE, tick)) {
// Switch between manual and automatic position control
if (setpoint->mode.z == modeDisable) {
@@ -63,7 +67,7 @@ void stateController(control_t *control, setpoint_t *setpoint,
attitudeDesired.roll = setpoint->attitude.roll;
attitudeDesired.pitch = setpoint->attitude.pitch;
}
-
+ /* if everything is modeVelocity, skip this */
attitudeControllerCorrectAttitudePID(state->attitude.roll, state->attitude.pitch, state->attitude.yaw,
attitudeDesired.roll, attitudeDesired.pitch, attitudeDesired.yaw,
&rateDesired.roll, &rateDesired.pitch, &rateDesired.yaw);
@@ -80,6 +84,12 @@ void stateController(control_t *control, setpoint_t *setpoint,
attitudeControllerResetPitchAttitudePID();
}
+ //added for PPSSafeController to make the Onboard Controller using the external YawRate. Pure speed controller, no position/500 small steps
+ if (setpoint->mode.yaw == modeVelocity) {
+ rateDesired.yaw = (-1) * setpoint->attitudeRate.yaw;
+ attitudeControllerResetYawAttitudePID();
+ }
+
// TODO: Investigate possibility to subtract gyro drift.
attitudeControllerCorrectRatePID(sensors->gyro.x, -sensors->gyro.y, sensors->gyro.z,
rateDesired.roll, rateDesired.pitch, rateDesired.yaw);
@@ -100,19 +110,76 @@ void stateController(control_t *control, setpoint_t *setpoint,
control->thrust = actuatorThrust;
}
- if (control->thrust == 0)
+ if(setpoint->pps_mode == modeMotors)
{
- control->thrust = 0;
- control->roll = 0;
- control->pitch = 0;
- control->yaw = 0;
-
- attitudeControllerResetAllPID();
- positionControllerResetAllPID();
-
- // Reset the calculated YAW angle for rate control
- attitudeDesired.yaw = state->attitude.yaw;
+ control->roll = 0;
+ control->pitch = 0;
+ control->yaw = 0;
+ control->cmd1 = setpoint->cmd1;
+ control->cmd2 = setpoint->cmd2;
+ control->cmd3 = setpoint->cmd3;
+ control->cmd4 = setpoint->cmd4;
+ if ((control->cmd1 == 0 && control->cmd2 == 0 && control->cmd3 == 0 && control->cmd4 == 0))
+ {
+ control->cmd1 = 0;
+ control->cmd2 = 0;
+ control->cmd3 = 0;
+ control->cmd4 = 0;
+ control->roll = 0;
+ control->pitch = 0;
+ control->yaw = 0;
+
+ attitudeControllerResetAllPID();
+ positionControllerResetAllPID();
+
+ // Reset the calculated YAW angle for rate control
+ attitudeDesired.yaw = state->attitude.yaw;
+ }
+ }
+ else if(setpoint->pps_mode == modeRate || setpoint->pps_mode == modeAngle)
+ {
+ control->cmd1 = setpoint->cmd1;
+ control->cmd2 = setpoint->cmd2;
+ control->cmd3 = setpoint->cmd3;
+ control->cmd4 = setpoint->cmd4;
+ if ((control->cmd1 == 0 && control->cmd2 == 0 && control->cmd3 == 0 && control->cmd4 == 0))
+ {
+ control->cmd1 = 0;
+ control->cmd2 = 0;
+ control->cmd3 = 0;
+ control->cmd4 = 0;
+ control->roll = 0;
+ control->pitch = 0;
+ control->yaw = 0;
+
+ attitudeControllerResetAllPID();
+ positionControllerResetAllPID();
+
+ // Reset the calculated YAW angle for rate control
+ attitudeDesired.yaw = state->attitude.yaw;
+ }
}
+ else /* pps_mode == modeDisabled */
+ {
+ control->cmd1 = control->thrust;
+ control->cmd2 = control->thrust;
+ control->cmd3 = control->thrust;
+ control->cmd4 = control->thrust;
+ if (control->thrust == 0)
+ {
+ control->thrust = 0;
+ control->roll = 0;
+ control->pitch = 0;
+ control->yaw = 0;
+
+ attitudeControllerResetAllPID();
+ positionControllerResetAllPID();
+
+ // Reset the calculated YAW angle for rate control
+ attitudeDesired.yaw = state->attitude.yaw;
+ }
+ }
+
}
diff --git a/src/modules/src/crtp_commander_generic.c b/src/modules/src/crtp_commander_generic.c
index 993dead..64447d6 100644
--- a/src/modules/src/crtp_commander_generic.c
+++ b/src/modules/src/crtp_commander_generic.c
@@ -34,6 +34,8 @@
#include "num.h"
#include "FreeRTOS.h"
+/* #include "motors.h" */
+
/* The generic commander format contains a packet type and data that has to be
* decoded into a setpoint_t structure. The aim is to make it future-proof
* by easily allowing the addition of new packets for future use cases.
@@ -67,6 +69,9 @@ enum packet_type {
cppmEmuType = 3,
altHoldType = 4,
hoverType = 5,
+ PPSMotorsType = 6,
+ PPSRateType = 7,
+ PPSAngleType = 8,
};
/* ---===== 2 - Decoding functions =====--- */
@@ -292,6 +297,152 @@ static void hoverDecoder(setpoint_t *setpoint, uint8_t type, const void *data, s
setpoint->velocity_body = true;
}
+struct PPSMotorsPacket_s {
+ uint16_t cmd1;
+ uint16_t cmd2;
+ uint16_t cmd3;
+ uint16_t cmd4;
+} __attribute__((packed));
+
+static void PPSMotorsDecoder(setpoint_t *setpoint, uint8_t type, const void *data, size_t datalen)
+{
+ const struct PPSMotorsPacket_s *values = data;
+ ASSERT(datalen == sizeof(struct PPSMotorsPacket_s));
+
+ /* we dont use position controller onboard */
+ setpoint->mode.x = modeDisable;
+ setpoint->mode.y = modeDisable;
+ setpoint->mode.z = modeDisable;
+
+ setpoint->thrust = 0;
+ setpoint->position.x = 0;
+ setpoint->position.y = 0;
+ setpoint->position.z = 0;
+ setpoint->velocity.x = 0;
+ setpoint->velocity.y = 0;
+ setpoint->velocity.z = 0;
+
+ /* we dont use rate controller onboard either */
+ setpoint->mode.roll = modeDisable;
+ setpoint->mode.pitch = modeDisable;
+ setpoint->mode.yaw = modeDisable;
+
+ setpoint->attitude.roll = 0;
+ setpoint->attitude.pitch = 0;
+ setpoint->attitude.yaw = 0;
+ setpoint->attitudeRate.roll = 0;
+ setpoint->attitudeRate.pitch = 0;
+ setpoint->attitudeRate.yaw = 0;
+
+ /* update cmds */
+
+ setpoint->cmd1 = limitUint16(values->cmd1);
+ setpoint->cmd2 = limitUint16(values->cmd2);
+ setpoint->cmd3 = limitUint16(values->cmd3);
+ setpoint->cmd4 = limitUint16(values->cmd4);
+
+ setpoint->pps_mode = modeMotors;
+}
+
+struct PPSRatePacket_s {
+ uint16_t cmd1;
+ uint16_t cmd2;
+ uint16_t cmd3;
+ uint16_t cmd4;
+ float roll_rate;
+ float pitch_rate;
+ float yaw_rate;
+} __attribute__((packed));
+
+static void PPSRateDecoder(setpoint_t *setpoint, uint8_t type, const void *data, size_t datalen)
+{
+ const struct PPSRatePacket_s *values = data;
+ ASSERT(datalen == sizeof(struct PPSRatePacket_s));
+
+ /* we dont use position controller onboard */
+ setpoint->mode.x = modeDisable;
+ setpoint->mode.y = modeDisable;
+ setpoint->mode.z = modeDisable;
+
+ setpoint->thrust = 0;
+ setpoint->position.x = 0;
+ setpoint->position.y = 0;
+ setpoint->position.z = 0;
+ setpoint->velocity.x = 0;
+ setpoint->velocity.y = 0;
+ setpoint->velocity.z = 0;
+
+ /* we use rate controller onboard either */
+ setpoint->mode.roll = modeVelocity;
+ setpoint->mode.pitch = modeVelocity;
+ setpoint->mode.yaw = modeVelocity;
+
+ setpoint->attitude.roll = 0;
+ setpoint->attitude.pitch = 0;
+ setpoint->attitude.yaw = 0;
+ setpoint->attitudeRate.roll = values->roll_rate;
+ setpoint->attitudeRate.pitch = values->pitch_rate;
+ setpoint->attitudeRate.yaw = values->yaw_rate;
+
+ /* update cmds */
+
+ setpoint->cmd1 = limitUint16(values->cmd1);
+ setpoint->cmd2 = limitUint16(values->cmd2);
+ setpoint->cmd3 = limitUint16(values->cmd3);
+ setpoint->cmd4 = limitUint16(values->cmd4);
+
+ setpoint->pps_mode = modeRate;
+}
+
+struct PPSAnglePacket_s {
+ uint16_t cmd1;
+ uint16_t cmd2;
+ uint16_t cmd3;
+ uint16_t cmd4;
+ float roll;
+ float pitch;
+ float yaw;
+} __attribute__((packed));
+
+static void PPSAngleDecoder(setpoint_t *setpoint, uint8_t type, const void *data, size_t datalen)
+{
+ const struct PPSAnglePacket_s *values = data;
+ ASSERT(datalen == sizeof(struct PPSRatePacket_s));
+
+ /* we dont use position controller onboard */
+ setpoint->mode.x = modeDisable;
+ setpoint->mode.y = modeDisable;
+ setpoint->mode.z = modeDisable;
+
+ setpoint->thrust = 0;
+ setpoint->position.x = 0;
+ setpoint->position.y = 0;
+ setpoint->position.z = 0;
+ setpoint->velocity.x = 0;
+ setpoint->velocity.y = 0;
+ setpoint->velocity.z = 0;
+
+ /* we use position angle controller onboard */
+ setpoint->mode.roll = modeAbs;
+ setpoint->mode.pitch = modeAbs;
+ setpoint->mode.yaw = modeAbs;
+
+ setpoint->attitude.roll = values->roll;
+ setpoint->attitude.pitch = values->pitch;
+ setpoint->attitude.yaw = values->yaw;
+ setpoint->attitudeRate.roll = 0;
+ setpoint->attitudeRate.pitch = 0;
+ setpoint->attitudeRate.yaw = 0;
+
+ /* update cmds */
+ setpoint->cmd1 = limitUint16(values->cmd1);
+ setpoint->cmd2 = limitUint16(values->cmd2);
+ setpoint->cmd3 = limitUint16(values->cmd3);
+ setpoint->cmd4 = limitUint16(values->cmd4);
+
+ setpoint->pps_mode = modeAngle;
+}
+
/* ---===== 3 - packetDecoders array =====--- */
const static packetDecoder_t packetDecoders[] = {
[stopType] = stopDecoder,
@@ -300,6 +451,9 @@ const static packetDecoder_t packetDecoders[] = {
[cppmEmuType] = cppmEmuDecoder,
[altHoldType] = altHoldDecoder,
[hoverType] = hoverDecoder,
+ [PPSMotorsType] = PPSMotorsDecoder,
+ [PPSRateType] = PPSRateDecoder,
+ [PPSAngleType] = PPSAngleDecoder,
};
/* Decoder switch */
diff --git a/src/modules/src/power_distribution_stock.c b/src/modules/src/power_distribution_stock.c
index 0e66c0b..79d5f2c 100644
--- a/src/modules/src/power_distribution_stock.c
+++ b/src/modules/src/power_distribution_stock.c
@@ -76,18 +76,19 @@ void powerDistribution(const control_t *control)
#ifdef QUAD_FORMATION_X
int16_t r = control->roll / 2.0f;
int16_t p = control->pitch / 2.0f;
- motorPower.m1 = limitThrust(control->thrust - r + p + control->yaw);
- motorPower.m2 = limitThrust(control->thrust - r - p - control->yaw);
- motorPower.m3 = limitThrust(control->thrust + r - p + control->yaw);
- motorPower.m4 = limitThrust(control->thrust + r + p - control->yaw);
+ motorPower.m1 = limitThrust(control->cmd1 - r + p + control->yaw);
+ motorPower.m2 = limitThrust(control->cmd2 - r - p - control->yaw);
+ motorPower.m3 = limitThrust(control->cmd3 + r - p + control->yaw);
+ motorPower.m4 = limitThrust(control->cmd4 + r + p - control->yaw);
+
#else // QUAD_FORMATION_NORMAL
- motorPower.m1 = limitThrust(control->thrust + control->pitch +
+ motorPower.m1 = limitThrust(control->cmd1 + control->pitch +
control->yaw);
- motorPower.m2 = limitThrust(control->thrust - control->roll -
+ motorPower.m2 = limitThrust(control->cmd2 - control->roll -
control->yaw);
- motorPower.m3 = limitThrust(control->thrust - control->pitch +
+ motorPower.m3 = limitThrust(control->cmd3 - control->pitch +
control->yaw);
- motorPower.m4 = limitThrust(control->thrust + control->roll -
+ motorPower.m4 = limitThrust(control->cmd4 + control->roll -
control->yaw);
#endif
diff --git a/src/modules/src/stabilizer.c b/src/modules/src/stabilizer.c
index eccc709..6b9fcc3 100644
--- a/src/modules/src/stabilizer.c
+++ b/src/modules/src/stabilizer.c
@@ -130,7 +130,6 @@ static void stabilizerTask(void* param)
commanderGetSetpoint(&setpoint, &state);
sitAwUpdateSetpoint(&setpoint, &sensorData, &state);
-
stateController(&control, &setpoint, &sensorData, &state, tick);
checkEmergencyStopTimeout();
crazyflie-firmware/success_building_for_version_2020-02.png

69.8 KiB

File moved
This diff is collapsed.
#-------------------------------------------------
#
# Project created by QtCreator 2018-04-26T16:04:19
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
#greaterThan(QT_MAJOR_VERSION, 4): QT += svg
greaterThan(QT_MAJOR_VERSION, 4): QT += charts
#greaterThan(QT_MAJOR_VERSION, 4): QT += multimedia
TARGET = flyingAgentGUI
TEMPLATE = app
INCLUDEPATH += $$PWD/include
CONFIG += c++11
SOURCES += src/main.cpp\
src/mainwindow.cpp \
src/topbanner.cpp \
src/connectstartstopbar.cpp \
src/enablecontrollerloadyamlbar.cpp \
src/controllerstatusbanner.cpp \
src/controllertabs.cpp \
src/csonecontrollertab.cpp \
src/safecontrollertab.cpp \
src/coordinator.cpp \
src/coordinatorrow.cpp \
src/studentcontrollertab.cpp \
src/defaultcontrollertab.cpp \
src/pickercontrollertab.cpp \
src/templatecontrollertab.cpp \
src/tutorialcontrollertab.cpp \
src/tuningcontrollertab.cpp \
src/remotecontrollertab.cpp
HEADERS += include/mainwindow.h \
include/topbanner.h \
include/connectstartstopbar.h \
include/enablecontrollerloadyamlbar.h \
include/controllerstatusbanner.h \
include/controllertabs.h \
include/csonecontrollertab.h \
include/safecontrollertab.h \
include/coordinator.h \
include/coordinatorrow.h \
include/studentcontrollertab.h \
include/defaultcontrollertab.h \
include/pickercontrollertab.h \
include/templatecontrollertab.h \
include/tutorialcontrollertab.h \
include/tuningcontrollertab.h \
include/Constants_for_Qt_compile.h \
include/remotecontrollertab.h
FORMS += forms/mainwindow.ui \
forms/topbanner.ui \
forms/connectstartstopbar.ui \
forms/enablecontrollerloadyamlbar.ui \
forms/controllertabs.ui \
forms/controllerstatusbanner.ui \
forms/csonecontrollertab.ui \
forms/safecontrollertab.ui \
forms/coordinator.ui \
forms/coordinatorrow.ui \
forms/studentcontrollertab.ui \
forms/defaultcontrollertab.ui \
forms/pickercontrollertab.ui \
forms/templatecontrollertab.ui \
forms/tutorialcontrollertab.ui \
forms/tuningcontrollertab.ui \
forms/remotecontrollertab.ui
RESOURCES += \
flyingagentgui.qrc
<RCC>
<qresource prefix="/">
<file>images/battery_20.png</file>
<file>images/battery_40.png</file>
<file>images/battery_60.png</file>
<file>images/battery_80.png</file>
<file>images/battery_empty.png</file>
<file>images/battery_full.png</file>
<file>images/battery_unknown.png</file>
<file>images/battery_unavailable.png</file>
<file>images/rf_connected.png</file>
<file>images/rf_connecting.png</file>
<file>images/rf_disconnected.png</file>
<file>images/flying_state_disabling.png</file>
<file>images/flying_state_enabling.png</file>
<file>images/flying_state_flying.png</file>
<file>images/flying_state_off.png</file>
<file>images/flying_state_unknown.png</file>
<file>images/flying_state_unavailable.png</file>
<file>images/emergency_stop.png</file>
</qresource>
</RCC>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ConnectStartStopBar</class>
<widget class="QWidget" name="ConnectStartStopBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1791</width>
<height>300</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>16</pointsize>
</font>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>12</number>
</property>
<property name="leftMargin">
<number>6</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QPushButton" name="rf_disconnect_button">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>50</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>750</width>
<height>50</height>
</size>
</property>
<property name="text">
<string>Disconnect</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="rf_status_label">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>72</width>
<height>55</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>95</width>
<height>70</height>
</size>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="rf_connect_button">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>50</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>750</width>
<height>50</height>
</size>
</property>
<property name="text">
<string>Connect</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="battery_voltage_lineEdit">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>50</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>180</width>
<height>50</height>
</size>
</property>
<property name="font">
<font>
<family>Courier</family>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>-.-- V</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="battery_status_label">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>38</width>
<height>55</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>50</width>
<height>70</height>
</size>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="enable_flying_button">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>50</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>750</width>
<height>50</height>
</size>
</property>
<property name="text">
<string>Take off</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="disable_flying_button">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>50</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>750</width>
<height>50</height>
</size>
</property>
<property name="text">
<string>Land</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="flying_state_label">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>72</width>
<height>55</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>90</width>
<height>70</height>
</size>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="motors_off_button">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>50</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>750</width>
<height>50</height>
</size>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Motors OFF</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ControllerStatusBanner</class>
<widget class="QWidget" name="ControllerStatusBanner">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>173</width>
<height>1282</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>16</pointsize>
</font>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<property name="topMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QFrame" name="frame_isOff">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>80</width>
<height>16777215</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color:rgb(160,40,40);</string>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>15</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_isOff">
<property name="font">
<font>
<pointsize>16</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>O
F
F</string>
</property>
<property name="alignment">
<set>Qt::AlignHCenter|Qt::AlignTop</set>
</property>
<property name="wordWrap">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QFrame" name="frame_isActive">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>80</width>
<height>16777215</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color:rgb(40,120,40);</string>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>15</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_isActive">
<property name="font">
<font>
<pointsize>16</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>A
C
T
I
V
E</string>
</property>
<property name="alignment">
<set>Qt::AlignHCenter|Qt::AlignTop</set>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QFrame" name="frame_isCoord">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>80</width>
<height>16777215</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color:rgb(150,150,150)</string>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout_4">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>15</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_isCoord">
<property name="font">
<font>
<pointsize>16</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>C
O
O
R
D</string>
</property>
<property name="alignment">
<set>Qt::AlignHCenter|Qt::AlignTop</set>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ControllerTabs</class>
<widget class="QWidget" name="ControllerTabs">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1779</width>
<height>718</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<pointsize>16</pointsize>
</font>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QTabWidget" name="controller_tabs_widget">
<property name="currentIndex">
<number>6</number>
</property>
<property name="movable">
<bool>true</bool>
</property>
<widget class="QWidget" name="default_tab">
<attribute name="title">
<string>Default</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_2">
<property name="leftMargin">
<number>3</number>
</property>
<property name="topMargin">
<number>3</number>
</property>
<property name="rightMargin">
<number>3</number>
</property>
<property name="bottomMargin">
<number>3</number>
</property>
<property name="spacing">
<number>5</number>
</property>
<item row="0" column="1">
<widget class="QScrollArea" name="scrollArea_default">
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="DefaultControllerTab" name="default_controller_tab_widget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1638</width>
<height>576</height>
</rect>
</property>
</widget>
</widget>
</item>
<item row="0" column="0">
<widget class="ControllerStatusBanner" name="statusBanner_default" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>80</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="student_tab">
<attribute name="title">
<string>Student</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_4">
<property name="leftMargin">
<number>3</number>
</property>
<property name="topMargin">
<number>3</number>
</property>
<property name="rightMargin">
<number>3</number>
</property>
<property name="bottomMargin">
<number>3</number>
</property>
<property name="spacing">
<number>5</number>
</property>
<item row="0" column="1">
<widget class="QScrollArea" name="scrollArea_student">
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="StudentControllerTab" name="student_controller_tab_widget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1638</width>
<height>576</height>
</rect>
</property>
</widget>
</widget>
</item>
<item row="0" column="0">
<widget class="ControllerStatusBanner" name="statusBanner_student" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>80</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="csone_tab">
<attribute name="title">
<string>CS1</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_8">
<property name="leftMargin">
<number>3</number>
</property>
<property name="topMargin">
<number>3</number>
</property>
<property name="rightMargin">
<number>3</number>
</property>
<property name="bottomMargin">
<number>3</number>
</property>
<property name="spacing">
<number>5</number>
</property>
<item row="0" column="0">
<widget class="ControllerStatusBanner" name="statusBanner_csone" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>80</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QScrollArea" name="scrollArea_csone">
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="CsoneControllerTab" name="csone_controller_tab_widget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1638</width>
<height>576</height>
</rect>
</property>
</widget>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="picker_tab">
<attribute name="title">
<string>Picker</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_5">
<property name="leftMargin">
<number>3</number>
</property>
<property name="topMargin">
<number>3</number>
</property>
<property name="rightMargin">
<number>3</number>
</property>
<property name="bottomMargin">
<number>3</number>
</property>
<property name="spacing">
<number>5</number>
</property>
<item row="0" column="1">
<widget class="QScrollArea" name="scrollArea_picker">
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="PickerControllerTab" name="picker_controller_tab_widget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1638</width>
<height>576</height>
</rect>
</property>
</widget>
</widget>
</item>
<item row="0" column="0">
<widget class="ControllerStatusBanner" name="statusBanner_picker" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>80</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="tuning_tab">
<attribute name="title">
<string>Tuning</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_6">
<property name="leftMargin">
<number>3</number>
</property>
<property name="topMargin">
<number>3</number>
</property>
<property name="rightMargin">
<number>3</number>
</property>
<property name="bottomMargin">
<number>3</number>
</property>
<property name="spacing">
<number>5</number>
</property>
<item row="0" column="0">
<widget class="ControllerStatusBanner" name="statusBanner_tuning" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>80</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QScrollArea" name="scrollArea_tuning">
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="TuningControllerTab" name="tuning_controller_tab_widget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1638</width>
<height>576</height>
</rect>
</property>
</widget>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="remote_tab">
<attribute name="title">
<string>Remote</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_3">
<property name="leftMargin">
<number>3</number>
</property>
<property name="topMargin">
<number>3</number>
</property>
<property name="rightMargin">
<number>3</number>
</property>
<property name="bottomMargin">
<number>3</number>
</property>
<property name="spacing">
<number>5</number>
</property>
<item row="0" column="1">
<widget class="QScrollArea" name="scrollArea_remote">
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="RemoteControllerTab" name="remote_controller_tab_widget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1638</width>
<height>576</height>
</rect>
</property>
</widget>
</widget>
</item>
<item row="0" column="0">
<widget class="ControllerStatusBanner" name="statusBanner_remote" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>80</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="template_tab">
<attribute name="title">
<string>Template</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_7">
<property name="leftMargin">
<number>3</number>
</property>
<property name="topMargin">
<number>3</number>
</property>
<property name="rightMargin">
<number>3</number>
</property>
<property name="bottomMargin">
<number>3</number>
</property>
<property name="spacing">
<number>5</number>
</property>
<item row="0" column="1">
<widget class="QScrollArea" name="scrollArea_template">
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="TemplateControllerTab" name="template_controller_tab_widget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1638</width>
<height>576</height>
</rect>
</property>
</widget>
</widget>
</item>
<item row="0" column="0">
<widget class="ControllerStatusBanner" name="statusBanner_template" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>80</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="tutorial_tab">
<attribute name="title">
<string>Tutorial</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_9">
<property name="leftMargin">
<number>3</number>
</property>
<property name="topMargin">
<number>3</number>
</property>
<property name="rightMargin">
<number>3</number>
</property>
<property name="bottomMargin">
<number>3</number>
</property>
<property name="spacing">
<number>5</number>
</property>
<item row="0" column="1">
<widget class="QScrollArea" name="scrollArea_tutorial">
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="TutorialControllerTab" name="tutorial_controller_tab_widget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1638</width>
<height>576</height>
</rect>
</property>
</widget>
</widget>
</item>
<item row="0" column="0">
<widget class="ControllerStatusBanner" name="statusBanner_tutorial" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>80</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>StudentControllerTab</class>
<extends>QWidget</extends>
<header>studentcontrollertab.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>DefaultControllerTab</class>
<extends>QWidget</extends>
<header>defaultcontrollertab.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>PickerControllerTab</class>
<extends>QWidget</extends>
<header>pickercontrollertab.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>TuningControllerTab</class>
<extends>QWidget</extends>
<header>tuningcontrollertab.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>TemplateControllerTab</class>
<extends>QWidget</extends>
<header>templatecontrollertab.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>TutorialControllerTab</class>
<extends>QWidget</extends>
<header>tutorialcontrollertab.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>RemoteControllerTab</class>
<extends>QWidget</extends>
<header>remotecontrollertab.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>CsoneControllerTab</class>
<extends>QWidget</extends>
<header>csonecontrollertab.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>ControllerStatusBanner</class>
<extends>QWidget</extends>
<header>controllerstatusbanner.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Coordinator</class>
<widget class="QWidget" name="Coordinator">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>603</width>
<height>1050</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>16</pointsize>
</font>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="coordintor_title_label">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Coordinator</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="coordinator_id_label">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>ID = </string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="refresh_button">
<property name="text">
<string>Refresh</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="toggle_details_button">
<property name="text">
<string>Toggle Details</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="delete_button">
<property name="text">
<string>Remove All</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="coordinate_all_checkBox">
<property name="font">
<font>
<pointsize>16</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">QCheckBox::indicator{ width:30px ; height:30px }</string>
</property>
<property name="text">
<string>Coordinate All</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QScrollArea" name="coordinated_agents_scrollArea">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="coordinated_agents_scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>565</width>
<height>622</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_for_coordinatedAgentsScrollArea"/>
</widget>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CoordinatorRow</class>
<widget class="QWidget" name="CoordinatorRow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>740</width>
<height>45</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>45</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>45</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>2</number>
</property>
<property name="leftMargin">
<number>2</number>
</property>
<property name="topMargin">
<number>5</number>
</property>
<property name="rightMargin">
<number>2</number>
</property>
<property name="bottomMargin">
<number>5</number>
</property>
<item>
<widget class="QCheckBox" name="shouldCoordinate_checkBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>50</width>
<height>35</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>180</width>
<height>35</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">QCheckBox::indicator{ width:30px ; height:30px }</string>
</property>
<property name="text">
<string>IDYYY , CFXX</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="rf_disconnect_button">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>40</width>
<height>35</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>40</width>
<height>35</height>
</size>
</property>
<property name="text">
<string>DIS</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="rf_status_label">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>43</width>
<height>35</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>43</width>
<height>35</height>
</size>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="rf_connect_button">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>40</width>
<height>35</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>40</width>
<height>35</height>
</size>
</property>
<property name="text">
<string>CON</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="battery_voltage_lineEdit">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>68</width>
<height>35</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>68</width>
<height>35</height>
</size>
</property>
<property name="font">
<font>
<family>Courier</family>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>-.-- V</string>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="battery_status_label">
<property name="minimumSize">
<size>
<width>25</width>
<height>35</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>25</width>
<height>35</height>
</size>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="enable_flying_button">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>40</width>
<height>35</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>40</width>
<height>35</height>
</size>
</property>
<property name="text">
<string>EN</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="disable_flying_button">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>40</width>
<height>35</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>40</width>
<height>35</height>
</size>
</property>
<property name="text">
<string>DIS</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="flying_state_label">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>50</width>
<height>35</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>50</width>
<height>35</height>
</size>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="motors_off_button">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>40</width>
<height>35</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>40</width>
<height>35</height>
</size>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>OFF</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="controller_enabled_label">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>50</width>
<height>35</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>180</width>
<height>35</height>
</size>
</property>
<property name="text">
<string>Controller</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>