Commit 2dfdafca authored by tecnosapiens's avatar tecnosapiens

Merge branch 'experimental' of git://github.com/malife/qgroundcontrol into experimental

parents f8b4caf4 3ff7452d
......@@ -139,7 +139,6 @@ FORMS += src/ui/MainWindow.ui \
src/ui/WaypointGlobalView.ui \
src/ui/SlugsDataSensorView.ui \
src/ui/SlugsHilSim.ui \
src/ui/SlugsDataSensorView.ui \
src/ui/SlugsPIDControl.ui \
src/ui/SlugsVideoCamControl.ui
INCLUDEPATH += src \
......
......@@ -89,7 +89,8 @@ SerialLink::SerialLink(QString portname, BaudRateType baudrate, FlowType flow, P
}
#else
// *nix (Linux, MacOS tested) serial port support
port = new QextSerialPort(porthandle, QextSerialPort::Polling);
//port = new QextSerialPort(porthandle, QextSerialPort::Polling);
port = new QextSerialPort(porthandle, QextSerialPort::EventDriven);
port->setTimeout(timeout); // Timeout of 0 ms, we don't want to wait for data, we just poll again next time
port->setBaudRate(baudrate);
port->setFlowControl(flow);
......
#ifndef CONFIGURATION_H
#define CONFIGURATION_H
#include "mavlink.h"
/** @brief Polling interval in ms */
#ifdef MAVLINK_ENABLED_SLUGS_MESSAGES_QGC
#ifdef MAVLINK_ENABLED_SLUGS
#define SERIAL_POLL_INTERVAL 7
#else
#define SERIAL_POLL_INTERVAL 2
......
This diff is collapsed.
......@@ -26,7 +26,9 @@ This file is part of the QGROUNDCONTROL project
#include "UAS.h"
#include "mavlink.h"
#include <QTimer>
#define SLUGS_UPDATE_RATE 100 // in ms
class SlugsMAV : public UAS
{
Q_OBJECT
......@@ -38,111 +40,81 @@ public slots:
/** @brief Receive a MAVLink message from this MAV */
void receiveMessage(LinkInterface* link, mavlink_message_t message);
void emitSignals (void);
signals:
// ESPECIAL SLUGS MESSAGE
void slugsCPULoad(int systemId,
uint8_t sensLoad,
uint8_t ctrlLoad,
uint8_t batVolt,
quint64 time);
void slugsAirData(int systemId,
float dinamicPressure,
float staticPresure,
uint16_t temperature,
quint64 time);
void slugsSensorBias(int systemId,
double axBias,
double ayBias,
double azBias,
double gxBias,
double gyBias,
double gzBias,
quint64 time);
void slugsDiagnostic(int systemId,
double diagFl1,
double diagFl2,
double diagFl3,
int16_t diagSh1,
int16_t diagSh2,
int16_t diagSh3,
quint64 time);
void slugsPilotConsolePWM(int systemId,
uint16_t dt,
uint16_t dla,
uint16_t dra,
uint16_t dr,
uint16_t de,
quint64 time);
void slugsPWM(int systemId,
uint16_t dt_c,
uint16_t dla_c,
uint16_t dra_c,
uint16_t dr_c,
uint16_t dle_c,
uint16_t dre_c,
uint16_t dlf_c,
uint16_t drf_c,
uint16_t da1_c,
uint16_t da2_c,
quint64 time);
void slugsNavegation(int systemId,
double u_m,
double phi_c,
double theta_c,
double psiDot_c,
double ay_body,
double totalDist,
double dist2Go,
uint8_t fromWP,
uint8_t toWP,
quint64 time);
void slugsDataLog(int systemId,
double logfl_1,
double logfl_2,
double logfl_3,
double logfl_4,
double logfl_5,
double logfl_6,
quint64 time);
void slugsFilteredData(int systemId,
double filaX,
double filaY,
double filaZ,
double filgX,
double filgY,
double filgZ,
double filmX,
double filmY,
double filmZ,
quint64 time);
void slugsGPSDateTime(int systemId,
uint8_t gpsyear,
uint8_t gpsmonth,
uint8_t gpsday,
uint8_t gpshour,
uint8_t gpsmin,
uint8_t gpssec,
uint8_t gpsvisSat,
quint64 time);
void slugsRawImu(int uasId, const mavlink_raw_imu_t& rawData);
#ifdef MAVLINK_ENABLED_SLUGS
void slugsCPULoad(int systemId, const mavlink_cpu_load_t& cpuLoad);
void slugsAirData(int systemId, const mavlink_air_data_t& airData);
void slugsSensorBias(int systemId, const mavlink_sensor_bias_t& sensorBias);
void slugsDiagnostic(int systemId, const mavlink_diagnostic_t& diagnostic);
void slugsPilotConsolePWM(int systemId, const mavlink_pilot_console_t& pilotConsole);
void slugsPWM(int systemId, const mavlink_pwm_commands_t& pwmCommands);
void slugsNavegation(int systemId, const mavlink_slugs_navigation_t& slugsNavigation);
void slugsDataLog(int systemId, const mavlink_data_log_t& dataLog);
void slugsFilteredData(int systemId, const mavlink_filtered_data_t& filteredData);
void slugsGPSDateTime(int systemId, const mavlink_gps_date_time_t& gpsDateTime);
void slugsActionAck(int systemId, const mavlink_action_ack_t& actionAck);
void slugsBootMsg(int uasId, mavlink_boot_t& boot);
void slugsAttitude(int uasId, mavlink_attitude_t& attitude);
#endif
protected:
typedef struct _mavlink_pid_values_t {
float P[11];
float I[11];
float D[11];
}mavlink_pid_values_t;
unsigned char updateRoundRobin;
QTimer* widgetTimer;
mavlink_raw_imu_t mlRawImuData;
#ifdef MAVLINK_ENABLED_SLUGS
mavlink_gps_raw_t mlGpsData;
mavlink_attitude_t mlAttitude;
mavlink_cpu_load_t mlCpuLoadData;
mavlink_air_data_t mlAirData;
mavlink_sensor_bias_t mlSensorBiasData;
mavlink_diagnostic_t mlDiagnosticData;
mavlink_pilot_console_t mlPilotConsoleData;
mavlink_filtered_data_t mlFilteredData;
mavlink_boot_t mlBoot;
mavlink_gps_date_time_t mlGpsDateTime;
mavlink_mid_lvl_cmds_t mlMidLevelCommands;
mavlink_set_mode_t mlApMode;
mavlink_pwm_commands_t mlPwmCommands;
mavlink_pid_values_t mlPidValues;
mavlink_pid_t mlSinglePid;
mavlink_slugs_navigation_t mlNavigation;
mavlink_data_log_t mlDataLog;
mavlink_ctrl_srfc_pt_t mlPassthrough;
mavlink_action_ack_t mlActionAck;
mavlink_slugs_action_t mlAction;
// Standart messages MAVLINK used by SLUGS
void slugsActionAck(int systemId,
uint8_t action,
uint8_t result);
private:
void emitGpsSignals (void);
int uasId;
#endif // if SLUGS
};
......
......@@ -611,11 +611,6 @@ void UAS::receiveMessage(LinkInterface* link, mavlink_message_t message)
throttle << radioMsg.throttle[i];
QPointer<RadioCalibrationData> radioData = new RadioCalibrationData(aileron,
elevator,
rudder,
gyro,
pitch,
throttle);
emit radioCalibrationReceived(radioData);
delete radioData;
}
......
......@@ -227,8 +227,14 @@ void MainWindow::connectWidgets()
connect(waypointsDockWidget->widget(), SIGNAL(changePositionWPGlobalBySpinBox(int,float,float)), mapWidget, SLOT(changeGlobalWaypointPositionBySpinBox(int,float,float)));
}
if (slugsHilSimWidget->widget()){
connect(UASManager::instance(), SIGNAL(activeUASSet(UASInterface*)), dynamic_cast<SlugsHilSim*>(slugsHilSimWidget->widget()), SLOT(activeUasSet(UASInterface*)) );
if (slugsHilSimWidget && slugsHilSimWidget->widget()){
connect(UASManager::instance(), SIGNAL(activeUASSet(UASInterface*)),
slugsHilSimWidget->widget(), SLOT(activeUasSet(UASInterface*)));
}
if (slugsDataWidget && slugsDataWidget->widget()){
connect(UASManager::instance(), SIGNAL(activeUASSet(UASInterface*)),
slugsDataWidget->widget(), SLOT(setActiveUAS(UASInterface*)));
}
......@@ -558,16 +564,16 @@ void MainWindow::UASCreated(UASInterface* uas)
PxQuadMAV* mav = dynamic_cast<PxQuadMAV*>(uas);
if (mav) loadPixhawkView();
SlugsMAV* mav2 = dynamic_cast<SlugsMAV*>(uas);
if (mav2)
{
dynamic_cast<SlugsDataSensorView*>(slugsDataWidget->widget())->addUAS(uas);
loadSlugsView();
if (slugsDataWidget) {
SlugsDataSensorView* dataWidget = dynamic_cast<SlugsDataSensorView*>(slugsDataWidget->widget());
if (dataWidget) {
SlugsMAV* mav2 = dynamic_cast<SlugsMAV*>(uas);
if (mav2) {
dataWidget->addUAS(uas);
loadSlugsView();
}
}
}
}
}
......
This diff is collapsed.
......@@ -36,6 +36,7 @@ This file is part of the QGROUNDCONTROL project
#include "UASInterface.h"
#include "SlugsMAV.h"
#include "mavlink.h"
namespace Ui {
class SlugsDataSensorView;
......@@ -67,17 +68,10 @@ public slots:
*/
void setActiveUAS(UASInterface* uas);
/**
* @brief Adds the UAS for data display
*
* Adds the UAS and makes all the correct connections for data display on the Widgets
*/
void refresh();
void slugRawDataChanged (int uasId, const mavlink_raw_imu_t& rawData);
#ifdef MAVLINK_ENABLED_SLUGS
/**
* @brief Adds the UAS for data display
*
......@@ -120,240 +114,62 @@ public slots:
double alt,
quint64 time);
/**
* @brief Adds the UAS for data display
*
* Adds the UAS and makes all the correct connections for data display on the Widgets
* @brief Updates the sensor bias widget
*/
void slugsSensorBiasChanged(int systemId,
double axb,
double ayb,
double azb,
double gxb,
double gyb,
double gzb,
quint64 time);
const mavlink_sensor_bias_t& sensorBias);
/**
* @brief Adds the UAS for data display
*
* Adds the UAS and makes all the correct connections for data display on the Widgets
* @brief Updates the diagnostic widget
*/
void slugsDiagnosticMessageChanged(int systemId,
double diagfl1,
double diagfl2,
double diagfl3,
int16_t diagsh1,
int16_t diagsh2,
int16_t diagsh3,
quint64 time);
const mavlink_diagnostic_t& diagnostic);
/**
* @brief Adds the UAS for data display
*
* Adds the UAS and makes all the correct connections for data display on the Widgets
* @brief Updates the CPU load widget
*/
void slugsCpuLoadChanged(int systemId,
uint8_t sensload,
uint8_t ctrlload,
uint8_t batvolt,
quint64 time);
const mavlink_cpu_load_t& cpuLoad);
/**
* @brief Adds the UAS for data display
*
* Adds the UAS and makes all the correct connections for data display on the Widgets
* @brief Updates the Navigation widget
*/
void slugsNavegationChanged(int systemId,
double navu_m,
double navphi_c,
double navtheta_c,
double navpsiDot_c,
double navay_body,
double navtotalDist,
double navdist2Go,
uint8_t navfromWP,
uint8_t navtoWP,
quint64 time);
const mavlink_slugs_navigation_t& slugsNavigation);
/**
* @brief Adds the UAS for data display
*
* Adds the UAS and makes all the correct connections for data display on the Widgets
* @brief Updates the Data Log widget
*/
void slugsDataLogChanged(int systemId,
double logfl_1,
double logfl_2,
double logfl_3,
double logfl_4,
double logfl_5,
double logfl_6,
quint64 time);
const mavlink_data_log_t& dataLog);
/**
* @brief Adds the UAS for data display
*
* Adds the UAS and makes all the correct connections for data display on the Widgets
* @brief Updates the PWM Commands widget
*/
void slugsPWMChanged(int systemId,
uint16_t vdt_c,
uint16_t vdla_c,
uint16_t vdra_c,
uint16_t vdr_c,
uint16_t vdle_c,
uint16_t vdre_c,
uint16_t vdlf_c,
uint16_t vdrf_c,
uint16_t vda1_c,
uint16_t vda2_c,
quint64 time);
const mavlink_pwm_commands_t& pwmCommands);
/**
* @brief Adds the UAS for data display
*
* Adds the UAS and makes all the correct connections for data display on the Widgets
* @brief Updates the filtered sensor measurements widget
*/
void slugsFilteredDataChanged(int systemId,
double filaX,
double filaY,
double filaZ,
double filgX,
double filgY,
double filgZ,
double filmX,
double filmY,
double filmZ,
quint64 time);
const mavlink_filtered_data_t& filteredData);
/**
* @brief Updates the gps Date Time widget
*/
void slugsGPSDateTimeChanged(int systemId,
uint8_t gpsyear,
uint8_t gpsmonth,
uint8_t gpsday,
uint8_t gpshour,
uint8_t gpsmin,
uint8_t gpssec,
uint8_t gpsvisSat,
quint64 time);
const mavlink_gps_date_time_t& gpsDateTime);
#endif // MAVLINK_ENABLED_SLUGS
protected:
QTimer* updateTimer;
UASInterface* activeUAS;
//Global Position
double Latitude;
double Longitude;
double Height;
quint64 timeGlobalPosition;
// Position and Attitude
//Position
double Xpos;
double Ypos;
double Zpos;
quint64 TimeActualPosition;
//Speed
double VXpos;
double VYpos;
double VZpos;
quint64 TimeActualSpeed;
//Attitude
double roll;
double pitch;
double yaw;
quint64 TimeActualAttitude;
//Sensor Biases
//Acelerometer
double Axb;
double Ayb;
double Azb;
//Gyro
double Gxb;
double Gyb;
double Gzb;
quint64 TimeActualBias;
//Diagnostic
double diagFl1;
double diagFl2;
double diagFl3;
int16_t diagSh1;
int16_t diagSh2;
int16_t diagSh3;
quint64 timeDiagnostic;
//CPU Load
uint8_t sensLoad;
uint8_t ctrlLoad;
uint8_t batVolt;
quint64 timeCpuLoad;
//navigation data
double u_m;
double phi_c;
double theta_c;
double psiDot_c;
double ay_body;
double totalDist;
double dist2Go;
uint8_t fromWP;
uint8_t toWP;
quint64 timeNavigation;
// Data Log
double Logfl_1;
double Logfl_2;
double Logfl_3;
double Logfl_4;
double Logfl_5;
double Logfl_6;
quint64 timeDataLog;
//pwm commands
uint16_t dt_c; ///< AutoPilot's throttle command
uint16_t dla_c; ///< AutoPilot's left aileron command
uint16_t dra_c; ///< AutoPilot's right aileron command
uint16_t dr_c; ///< AutoPilot's rudder command
uint16_t dle_c; ///< AutoPilot's left elevator command
uint16_t dre_c; ///< AutoPilot's right elevator command
uint16_t dlf_c; ///< AutoPilot's left flap command
uint16_t drf_c; ///< AutoPilot's right flap command
uint16_t aux1; ///< AutoPilot's aux1 command
uint16_t aux2; ///< AutoPilot's aux2 command
quint64 timePWMCommand;
//filtered data
double aX; ///< Accelerometer X value (m/s^2)
double aY; ///< Accelerometer Y value (m/s^2)
double aZ; ///< Accelerometer Z value (m/s^2)
double gX; ///< Gyro X value (rad/s)
double gY; ///< Gyro Y value (rad/s)
double gZ; ///< Gyro Z value (rad/s)
double mX; ///< Magnetometer X (normalized to 1)
double mY; ///< Magnetometer Y (normalized to 1)
double mZ; ///< Magnetometer Z (normalized to 1)
quint64 timeFiltered;
//gps date and time
uint8_t year; ///< Year reported by Gps
uint8_t month; ///< Month reported by Gps
uint8_t day; ///< Day reported by Gps
uint8_t hour; ///< Hour reported by Gps
uint8_t min; ///< Min reported by Gps
uint8_t sec; ///< Sec reported by Gps
uint8_t visSat; ///< Visible sattelites reported by Gps
quint64 timeGPSDateTime;
private:
Ui::SlugsDataSensorView *ui;
void loadParameters();
};
......
This diff is collapsed.
......@@ -44,11 +44,13 @@ void SlugsPIDControl::activeUasSet(UASInterface* uas)
{
SlugsMAV* slugsMav = dynamic_cast<SlugsMAV*>(uas);
#ifdef MAVLINK_ENABLED_SLUGS
if (slugsMav != NULL)
{
connect(slugsMav,SIGNAL(slugsActionAck(int,uint8_t,uint8_t)),this,SLOT(recibeMensaje(int,uint8_t,uint8_t)));
connect(slugsMav,SIGNAL(slugsActionAck(int,const mavlink_action_ack_t&)),this,SLOT(recibeMensaje(int,mavlink_action_ack_t)));
}
#endif // MAVLINK_ENABLED_SLUG
// Set this UAS as active if it is the first one
if(activeUAS == 0)
{
......@@ -154,6 +156,12 @@ void SlugsPIDControl::changeColor_RED_AirSpeed_groupBox(QString text)
void SlugsPIDControl::changeColor_GREEN_AirSpeed_groupBox()
{
SlugsMAV* slugsMav = dynamic_cast<SlugsMAV*>(activeUAS);
if (slugsMav != NULL)
{
//create the packet
pidMessage.target = activeUAS->getUASID();
pidMessage.idx = 0;
......@@ -161,16 +169,13 @@ void SlugsPIDControl::changeColor_GREEN_AirSpeed_groupBox()
pidMessage.iVal = ui->dT_I_set->text().toFloat();
pidMessage.dVal = ui->dT_D_set->text().toFloat();
UAS *uas = dynamic_cast<UAS*>(UASManager::instance()->getActiveUAS());
mavlink_message_t msg;
mavlink_msg_pid_encode(MG::SYSTEM::ID,MG::SYSTEM::COMPID, &msg, &pidMessage);
uas->sendMessage(msg);
slugsMav->sendMessage(msg);
ui->AirSpeedHold_groupBox->setStyleSheet(GREENcolorStyle);
}
}
......@@ -335,7 +340,11 @@ void SlugsPIDControl::connect_Pitch2dT_LineEdit()
connect(ui->P2dT_FF_set,SIGNAL(textChanged(QString)),this,SLOT(changeColor_RED_Pitch2dT_groupBox(QString)));
}
void SlugsPIDControl::recibeMensaje(int systemId, uint8_t action, uint8_t result)
#ifdef MAVLINK_ENABLED_SLUGS
void SlugsPIDControl::recibeMensaje(int systemId, const mavlink_action_ack_t& action)
{
ui->recepcion_label->setText("Mensaje Recibido: " + QString::number(action));
ui->recepcion_label->setText(QString::number(action.action));
}
#endif // MAVLINK_ENABLED_SLUGS
......@@ -6,7 +6,7 @@
#include "UASInterface.h"
#include "QGCMAVLink.h"
#include "SlugsMAV.h"
#include "mavlink.h"
namespace Ui {
class SlugsPIDControl;
......@@ -184,9 +184,11 @@ public slots:
//Create, send and get Messages PID
// void createMessagePID();
#ifdef MAVLINK_ENABLED_SLUGS
void recibeMensaje(int systemId, uint8_t action, uint8_t result);
void recibeMensaje(int systemId, const mavlink_action_ack_t& action);
#endif // MAVLINK_ENABLED_SLUG
private:
Ui::SlugsPIDControl *ui;
......
......@@ -41,7 +41,10 @@ SlugsHilSim::SlugsHilSim(QWidget *parent) :
rxSocket = new QUdpSocket(this);
txSocket = new QUdpSocket(this);
hilLink = NULL;
connect(LinkManager::instance(), SIGNAL(newLink(LinkInterface*)), this, SLOT(addToCombo(LinkInterface*)));
connect(ui->cb_mavlinkLinks, SIGNAL(currentIndexChanged(int)), this, SLOT(linkSelected(int)));
connect(ui->bt_startHil, SIGNAL(clicked()), this, SLOT(putInHilMode()));
connect(rxSocket, SIGNAL(readyRead()), this, SLOT(readDatagram()));
......@@ -54,23 +57,15 @@ SlugsHilSim::~SlugsHilSim()
delete ui;
}
void SlugsHilSim::linkAdded(void){
// ui->cb_mavlinkLinks->clear();
// QList<LinkInterface *> linkList;
// linkList.append(LinkManager::instance()->getLinks()) ;
// for (int i = 0; i< linkList.size(); i++){
// ui->cb_mavlinkLinks->addItem((linkList.takeFirst())->getName());
// }
}
void SlugsHilSim::addToCombo(LinkInterface* theLink){
ui->cb_mavlinkLinks->addItem(theLink->getName());
linksAvailable.insert(ui->cb_mavlinkLinks->count(),theLink);
if (hilLink == NULL){
hilLink = theLink;
}
}
void SlugsHilSim::putInHilMode(void){
......@@ -86,8 +81,7 @@ void SlugsHilSim::putInHilMode(void){
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::No);
if(msgBox.exec() == QMessageBox::Yes)
{
if(msgBox.exec() == QMessageBox::Yes) {
rxSocket->disconnectFromHost();
rxSocket->bind(QHostAddress::Any, ui->ed_rxPort->text().toInt());
//txSocket->bind(QHostAddress::Broadcast, ui->ed_txPort->text().toInt());
......@@ -99,7 +93,6 @@ void SlugsHilSim::putInHilMode(void){
ui->bt_startHil->setText(buttonCaption);
} else {
ui->bt_startHil->setChecked(false);
}
......@@ -170,9 +163,13 @@ void SlugsHilSim::processHilDatagram(const QByteArray* datagram){
tmpGpsRaw.fix_type = datagram->at(i++);
tmpGpsTime.visSat = datagram->at(i++);
//mavlink_msg_gps_date_time_pack();
mavlink_msg_gps_date_time_encode(MG::SYSTEM::ID,MG::SYSTEM::COMPID, &msg, &tmpGpsTime);
activeUas->sendMessage(hilLink, msg);
memset(&msg, 0, sizeof(mavlink_message_t));
//activeUas->sendMessage();
mavlink_msg_gps_raw_encode(MG::SYSTEM::ID,MG::SYSTEM::COMPID, &msg, &tmpGpsRaw);
activeUas->sendMessage(hilLink,msg);
// TODO: this is legacy of old HIL datagram. Need to remove from Simulink model
i++;
......@@ -190,11 +187,6 @@ float SlugsHilSim::getFloatFromDatagram (const QByteArray* datagram, unsigned ch
tmpF2C.chData[2] = datagram->at((*i)++);
tmpF2C.chData[3] = datagram->at((*i)++);
// if (uas != NULL) {
// //activeUas = uas;
// }
return tmpF2C.flData;
}
......@@ -207,3 +199,7 @@ uint16_t SlugsHilSim::getUint16FromDatagram (const QByteArray* datagram, unsigne
return tmpU2C.uiData;
}
void SlugsHilSim::linkSelected(int cbIndex){
//hilLink = linksAvailable
}
......@@ -60,7 +60,6 @@ protected:
UAS* activeUas;
public slots:
void linkAdded (void);
/**
* @brief Adds a link to the combo box listing so the user can select a link
......@@ -98,6 +97,12 @@ public slots:
*/
void activeUasSet(UASInterface* uas);
/**
* @brief Called when the Link combobox selects a new link.
*
* @param uas The new index of the selected link
*/
void linkSelected (int cbIndex);
public slots:
......
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