Commit 716915e3 authored by Lorenz Meier's avatar Lorenz Meier

Improved HSI display, hooking up next to UAS object

parent 8fd1afc5
......@@ -108,8 +108,8 @@ HSIDisplay::HSIDisplay(QWidget *parent) :
laserFix(0),
iruFix(0),
mavInitialized(false),
topMargin(18.0f),
bottomMargin(12.0f),
topMargin(20.0f),
bottomMargin(14.0f),
attControlKnown(false),
xyControlKnown(false),
zControlKnown(false),
......@@ -134,7 +134,7 @@ HSIDisplay::HSIDisplay(QWidget *parent) :
setPalette(pal);
vwidth = 80.0f;
vheight = 80.0f;
vheight = 100.0f;
xCenterPos = vwidth/2.0f;
yCenterPos = vheight/2.0f + topMargin - bottomMargin;
......@@ -213,7 +213,7 @@ void HSIDisplay::renderOverlay()
// Size of the ring instrument
//const float margin = 0.1f; // 10% margin of total width on each side
float baseRadius = (vheight - topMargin - bottomMargin) / 2.0f - bottomMargin / 2.0f;
float baseRadius = (vheight - topMargin - bottomMargin) / 2.0f - (topMargin + bottomMargin) / 2.8f;
// Draw instruments
// TESTING THIS SHOULD BE MOVED INTO A QGRAPHICSVIEW
......@@ -230,16 +230,16 @@ void HSIDisplay::renderOverlay()
// Draw base instrument
// ----------------------
painter.setBrush(Qt::NoBrush);
const QColor ringColor = QColor(200, 250, 200);
const QColor ringColor = QColor(200, 200, 200);
QPen pen;
pen.setColor(ringColor);
pen.setWidth(refLineWidthToPen(0.1f));
pen.setWidth(refLineWidthToPen(1.0f));
painter.setPen(pen);
const int ringCount = 2;
for (int i = 0; i < ringCount; i++)
{
float radius = (vwidth - (topMargin + bottomMargin)*0.3f) / (1.35f * i+1) / 2.0f - bottomMargin / 2.0f;
drawCircle(xCenterPos, yCenterPos, radius, 0.1f, ringColor, &painter);
drawCircle(xCenterPos, yCenterPos, radius, 1.0f, ringColor, &painter);
paintText(tr("%1 m").arg(refToMetric(radius), 5, 'f', 1, ' '), QGC::colorCyan, 1.6f, vwidth/2-4, vheight/2+radius+2.2, &painter);
}
......@@ -320,25 +320,37 @@ void HSIDisplay::renderOverlay()
drawWaypoints(painter);
// Draw status flags
drawStatusFlag(2, 1, tr("ATT"), attControlEnabled, attControlKnown, painter);
drawStatusFlag(22, 1, tr("PXY"), xyControlEnabled, xyControlKnown, painter);
drawStatusFlag(44, 1, tr("PZ"), zControlEnabled, zControlKnown, painter);
drawStatusFlag(66, 1, tr("YAW"), yawControlEnabled, yawControlKnown, painter);
drawStatusFlag(1, 1, tr("RAT"), rateControlEnabled, rateControlKnown, painter);
drawStatusFlag(17, 1, tr("ATT"), attControlEnabled, attControlKnown, painter);
drawStatusFlag(33, 1, tr("PXY"), xyControlEnabled, xyControlKnown, painter);
drawStatusFlag(49, 1, tr("PZ"), zControlEnabled, zControlKnown, painter);
drawStatusFlag(65, 1, tr("YAW"), yawControlEnabled, yawControlKnown, painter);
// Draw position lock indicators
drawPositionLock(2, 5, tr("POS"), positionFix, positionFixKnown, painter);
drawPositionLock(22, 5, tr("VIS"), visionFix, visionFixKnown, painter);
drawPositionLock(44, 5, tr("GPS"), gpsFix, gpsFixKnown, painter);
drawPositionLock(66, 5, tr("IRU"), iruFix, iruFixKnown, painter);
drawPositionLock(1, 6, tr("POS"), positionFix, positionFixKnown, painter);
drawPositionLock(17, 6, tr("GPS"), gpsFix, gpsFixKnown, painter);
drawStatusFlag(33, 6, tr("FLO"), flowON, flowKnown, flowOK, painter);
drawPositionLock(49, 6, tr("VIS"), visionFix, visionFixKnown, painter);
drawPositionLock(65, 6, tr("IRU"), iruFix, iruFixKnown, painter);
drawStatusFlag(1, 11, tr("GYR"), gyroON, gyroKnown, gyroOK, painter);
drawStatusFlag(17, 11, tr("ACC"), accelON, accelKnown, accelOK, painter);
drawStatusFlag(33, 11, tr("MAG"), magON, magKnown, magOK, painter);
drawStatusFlag(49, 11, tr("BAR"), pressureON, pressureKnown, pressureOK, painter);
drawStatusFlag(65, 11, tr("PIT"), diffPressureON, diffPressureKnown, diffPressureOK, painter);
drawStatusFlag(1, 16, tr("ACT"), actuatorsON, actuatorsKnown, actuatorsOK, painter);
drawStatusFlag(17, 16, tr("LAS"), laserON, laserKnown, laserOK, painter);
drawStatusFlag(33, 16, tr("VCN"), viconON, viconKnown, viconOK, painter);
// Draw speed to top left
paintText(tr("SPEED"), QGC::colorCyan, 2.2f, 2, 11, &painter);
paintText(tr("%1 m/s").arg(speed, 5, 'f', 2, '0'), Qt::white, 2.2f, 12, 11, &painter);
paintText(tr("SPEED"), QGC::colorCyan, 2.2f, 2, topMargin+2, &painter);
paintText(tr("%1 m/s").arg(speed, 5, 'f', 2, '0'), Qt::white, 2.2f, 12, topMargin+2, &painter);
// Draw crosstrack error to top right
float crossTrackError = 0;
paintText(tr("XTRACK"), QGC::colorCyan, 2.2f, 54, 11, &painter);
paintText(tr("%1 m").arg(crossTrackError, 5, 'f', 2, '0'), Qt::white, 2.2f, 67, 11, &painter);
paintText(tr("XTRACK"), QGC::colorCyan, 2.2f, 54, topMargin+2, &painter);
paintText(tr("%1 m").arg(crossTrackError, 5, 'f', 2, '0'), Qt::white, 2.2f, 67, topMargin+2, &painter);
// Draw position to bottom left
if (localAvailable > 0)
......@@ -390,13 +402,23 @@ void HSIDisplay::renderOverlay()
}
void HSIDisplay::drawStatusFlag(float x, float y, QString label, bool status, bool known, QPainter& painter)
{
drawStatusFlag(x, y, label, status, known, true, painter);
}
void HSIDisplay::drawStatusFlag(float x, float y, QString label, bool status, bool known, bool ok, QPainter& painter)
{
paintText(label, QGC::colorCyan, 2.6f, x, y+0.8f, &painter);
QColor statusColor(250, 250, 250);
if(status) {
painter.setBrush(QGC::colorGreen);
} else {
if (!ok) {
painter.setBrush(QGC::colorDarkYellow);
} else {
if(status) {
painter.setBrush(QGC::colorGreen);
} else {
painter.setBrush(Qt::darkGray);
}
}
painter.setPen(Qt::NoPen);
......@@ -409,7 +431,7 @@ void HSIDisplay::drawStatusFlag(float x, float y, QString label, bool status, bo
if (!known)
{
QPen pen(Qt::yellow);
pen.setWidth(2);
pen.setWidth(3);
painter.setPen(pen);
// Top left to bottom right
QPointF p1, p2, p3, p4;
......@@ -468,7 +490,7 @@ void HSIDisplay::drawPositionLock(float x, float y, QString label, int status, b
// Cross out instrument if state unknown
if (!known) {
QPen pen(Qt::yellow);
pen.setWidth(2);
pen.setWidth(3);
painter.setPen(pen);
// Top left to bottom right
QPointF p1, p2, p3, p4;
......
......@@ -109,6 +109,7 @@ protected slots:
void drawAltitudeSetpoint(float xRef, float yRef, float radius, const QColor& color, QPainter* painter);
/** @brief Draw a status flag indicator */
void drawStatusFlag(float x, float y, QString label, bool status, bool known, QPainter& painter);
void drawStatusFlag(float x, float y, QString label, bool status, bool known, bool ok, QPainter& painter);
/** @brief Draw a position lock indicator */
void drawPositionLock(float x, float y, QString label, int status, bool known, QPainter& painter);
void setBodySetpointCoordinateXY(double x, double y);
......@@ -268,6 +269,7 @@ protected:
float yCenterPos; ///< Y center of instrument in virtual coordinates
bool positionLock;
bool rateControlEnabled; ///< Rate control enabled
bool attControlEnabled; ///< Attitude control enabled
bool xyControlEnabled; ///< Horizontal control enabled
bool zControlEnabled; ///< Vertical control enabled
......@@ -277,10 +279,12 @@ protected:
int visionFix; ///< Localizaiton dimensions based on computer vision
int laserFix; ///< Localization dimensions based on laser
int iruFix; ///< Localization dimensions based on ultrasound
bool mavInitialized; ///< The MAV is initialized once the setpoint has been received
float topMargin; ///< Margin on top of the page, in virtual coordinates
float bottomMargin; ///< Margin on the bottom of the page, in virtual coordinates
bool rateControlKnown; ///< Rate control status known flag
bool attControlKnown; ///< Attitude control status known flag
bool xyControlKnown; ///< XY control status known flag
bool zControlKnown; ///< Z control status known flag
......@@ -292,6 +296,43 @@ protected:
bool gpsFixKnown; ///< GPS fix status known flag
bool iruFixKnown; ///< Infrared/Ultrasound fix status known flag
// System state indicators
bool gyroKnown;
bool gyroON;
bool gyroOK;
bool accelKnown;
bool accelON;
bool accelOK;
bool magKnown;
bool magON;
bool magOK;
bool pressureKnown;
bool pressureON;
bool pressureOK;
bool diffPressureKnown;
bool diffPressureON;
bool diffPressureOK;
bool flowKnown;
bool flowON;
bool flowOK;
bool laserKnown;
bool laserON;
bool laserOK;
bool viconKnown;
bool viconON;
bool viconOK;
bool actuatorsKnown;
bool actuatorsON;
bool actuatorsOK;
// Data indicators
bool setPointKnown; ///< Controller setpoint known status flag
bool positionSetPointKnown; ///< Position setpoint known status flag
......
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