Commit db2b0bf5 authored by pixhawk's avatar pixhawk

Added controller and position status indicators

parent ff5ceff5
......@@ -62,7 +62,7 @@ This file is part of the PIXHAWK project
Core::Core(int &argc, char* argv[]) : QApplication(argc, argv)
{
this->setApplicationName("QGroundControl");
this->setApplicationVersion("v. 0.7.0 (Beta)");
this->setApplicationVersion("v. 0.7.5 (Beta)");
this->setOrganizationName(QLatin1String("OpenMAV Association"));
this->setOrganizationDomain("http://qgroundcontrol.org");
......
......@@ -124,6 +124,16 @@ void PxQuadMAV::receiveMessage(LinkInterface* link, mavlink_message_t message)
{
mavlink_control_status_t status;
mavlink_msg_control_status_decode(&message, &status);
// Emit control status vector
emit attitudeControlEnabled(static_cast<bool>(status.control_att));
emit positionXYControlEnabled(static_cast<bool>(status.control_pos_xy));
emit positionZControlEnabled(static_cast<bool>(status.control_pos_z));
emit positionYawControlEnabled(static_cast<bool>(status.control_pos_yaw));
// Emit localization status vector
emit localizationChanged(this, status.position_fix);
emit visionLocalizationChanged(this, status.vision_fix);
emit gpsLocalizationChanged(this, status.gps_fix);
}
break;
default:
......
......@@ -84,6 +84,11 @@ HSIDisplay::HSIDisplay(QWidget *parent) :
attControlEnabled(false),
xyControlEnabled(false),
zControlEnabled(false),
yawControlEnabled(false),
positionFix(0),
gpsFix(0),
visionFix(0),
laserFix(0),
mavInitialized(false)
{
connect(UASManager::instance(), SIGNAL(activeUASSet(UASInterface*)), this, SLOT(setActiveUAS(UASInterface*)));
......@@ -130,31 +135,16 @@ void HSIDisplay::paintDisplay()
// Draw background
painter.fillRect(QRect(0, 0, width(), height()), backgroundColor);
// Draw status indicators
QColor statusColor(255, 255, 255);
QString lockStatus;
QString xyContrStatus;
QString zContrStatus;
QString attContrStatus;
// Draw status flags
drawStatusFlag(2, 1, tr("ATT"), attControlEnabled, painter);
drawStatusFlag(22, 1, tr("PXY"), xyControlEnabled, painter);
drawStatusFlag(44, 1, tr("PZ"), zControlEnabled, painter);
QColor lockStatusColor;
// Draw position lock indicators
drawPositionLock(2, 5, tr("POS"), positionFix, painter);
drawPositionLock(22, 5, tr("VIS"), positionFix, painter);
drawPositionLock(44, 5, tr("GPS"), positionFix, painter);
if (positionLock)
{
lockStatus = tr("LOCK");
lockStatusColor = QColor(20, 255, 20);
}
else
{
lockStatus = tr("NO");
lockStatusColor = QColor(255, 20, 20);
}
paintText(tr("POS"), QGC::colorCyan, 1.8f, 2.0f, 2.5f, &painter);
painter.setBrush(lockStatusColor);
painter.setPen(Qt::NoPen);
painter.drawRect(QRect(refToScreenX(9.5f), refToScreenY(2.0f), refToScreenX(7.0f), refToScreenY(4.0f)));
paintText(lockStatus, statusColor, 2.8f, 10.0f, 2.0f, &painter);
// Draw base instrument
// ----------------------
......@@ -245,6 +235,61 @@ void HSIDisplay::paintDisplay()
// bodyYawSet = 0.95 * bodyYawSet + 0.05 * uiYawSet;
}
void HSIDisplay::drawStatusFlag(float x, float y, QString label, bool status, QPainter& painter)
{
paintText(label, QGC::colorCyan, 2.6f, x, y+0.35f, &painter);
QColor statusColor(250, 250, 250);
if(status)
{
painter.setBrush(QGC::colorRed);
}
else
{
painter.setBrush(QGC::colorRed);
}
painter.setPen(Qt::NoPen);
painter.drawRect(QRect(refToScreenX(x+7.3f), refToScreenY(y+0.05), refToScreenX(7.0f), refToScreenY(4.0f)));
paintText((status) ? tr("ON") : tr("OFF"), statusColor, 2.6f, x+7.9f, y+0.35f, &painter);
}
void HSIDisplay::drawPositionLock(float x, float y, QString label, int status, QPainter& painter)
{
paintText(label, QGC::colorCyan, 2.6f, x, y+0.35f, &painter);
QColor negStatusColor(200, 20, 20);
QColor posStatusColor(20, 200, 20);
QColor statusColor(250, 250, 250);
if(status > 0 && status < 4)
{
painter.setBrush(posStatusColor);
}
else
{
painter.setBrush(negStatusColor);
}
// Lock text
QString lockText;
switch (status)
{
case 1:
lockText = tr("LOC");
break;
case 2:
lockText = tr("2D");
break;
case 3:
lockText = tr("3D");
break;
default:
lockText = tr("NO");
break;
}
painter.setPen(Qt::NoPen);
painter.drawRect(QRect(refToScreenX(x+7.3f), refToScreenY(y+0.05), refToScreenX(7.0f), refToScreenY(4.0f)));
paintText(lockText, statusColor, 2.6f, x+7.9f, y+0.35f, &painter);
}
void HSIDisplay::updatePositionLock(UASInterface* uas, bool lock)
{
Q_UNUSED(uas);
......@@ -375,7 +420,12 @@ void HSIDisplay::setActiveUAS(UASInterface* uas)
connect(uas, SIGNAL(attitudeControlEnabled(bool)), this, SLOT(updateAttitudeControllerEnabled(UASInterface*,bool)));
connect(uas, SIGNAL(positionXYControlEnabled(bool)), this, SLOT(updatePositionXYControllerEnabled(UASInterface*,bool)));
connect(uas, SIGNAL(positionZControlEnabled(bool)), this, SLOT(updatePositionZControllerEnabled(UASInterface*,bool)));
connect(uas, SIGNAL(positionYawControlEnabled(bool)), this, SLOT(updatePositionYawControllerEnabled(UASInterface*,bool)))
connect(uas, SIGNAL(positionYawControlEnabled(bool)), this, SLOT(updatePositionYawControllerEnabled(UASInterface*,bool)));
connect(uas, SIGNAL(localizationChanged(UASInterface*,int)), this, SLOT(updateLocalization(UASInterface*,int)));
connect(uas, SIGNAL(visionLocalizationChanged(UASInterface*,int)), this, SLOT(updateVisionLocalization(UASInterface*,int)));
connect(uas, SIGNAL(gpsLocalizationChanged(UASInterface*,int)), this, SLOT(updateGpsLocalization(UASInterface*,int)));
// Now connect the new UAS
//if (this->uas != uas)
......@@ -492,6 +542,36 @@ void HSIDisplay::updateSatellite(int uasid, int satid, float elevation, float az
}
}
void HSIDisplay::updatePositionYawControllerEnabled(bool enabled)
{
yawControlEnabled = enabled;
}
/**
* @param fix 0: lost, 1: 2D local position hold, 2: 2D localization, 3: 3D localization
*/
void HSIDisplay::updateLocalization(UASInterface* uas, int fix)
{
Q_UNUSED(uas);
positionFix = fix;
}
/**
* @param fix 0: lost, 1: at least one satellite, but no GPS fix, 2: 2D localization, 3: 3D localization
*/
void HSIDisplay::updateGpsLocalization(UASInterface* uas, int fix)
{
Q_UNUSED(uas);
gpsFix = fix;
}
/**
* @param fix 0: lost, 1: 2D local position hold, 2: 2D localization, 3: 3D localization
*/
void HSIDisplay::updateVisionLocalization(UASInterface* uas, int fix)
{
Q_UNUSED(uas);
visionFix = fix;
}
QColor HSIDisplay::getColorForSNR(float snr)
{
QColor color;
......
......@@ -62,15 +62,8 @@ public slots:
void updateAttitudeControllerEnabled(UASInterface* uas, bool enabled);
void updatePositionXYControllerEnabled(UASInterface* uas, bool enabled);
void updatePositionZControllerEnabled(UASInterface* uas, bool enabled);
/** @brief Attitude control enabled/disabled */
void attitudeControlEnabled(bool enabled);
/** @brief Position 2D control enabled/disabled */
void positionXYControlEnabled(bool enabled);
/** @brief Altitude control enabled/disabled */
void positionZControlEnabled(bool enabled);
/** @brief Heading control enabled/disabled */
void positionYawControlEnabled(bool enabled);
void updatePositionYawControllerEnabled(bool enabled);
/**
* @brief Localization quality changed
......@@ -100,6 +93,8 @@ protected slots:
void drawPositionDirection(float xRef, float yRef, float radius, const QColor& color, QPainter* painter);
void drawAttitudeDirection(float xRef, float yRef, float radius, const QColor& color, QPainter* painter);
void drawAltitudeSetpoint(float xRef, float yRef, float radius, const QColor& color, QPainter* painter);
void drawStatusFlag(float x, float y, QString label, bool status, QPainter& painter);
void drawPositionLock(float x, float y, QString label, int status, QPainter& painter);
void setBodySetpointCoordinateXY(double x, double y);
void setBodySetpointCoordinateZ(double z);
/** @brief Send the current ui setpoint coordinates as new setpoint to the MAV */
......@@ -220,6 +215,11 @@ protected:
bool attControlEnabled;
bool xyControlEnabled;
bool zControlEnabled;
bool yawControlEnabled;
int positionFix;
int gpsFix;
int visionFix;
int laserFix;
bool mavInitialized; ///< The MAV is initialized once the setpoint has been received
private:
......
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