Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Q
qgroundcontrol
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Valentin Platzgummer
qgroundcontrol
Commits
daf07a1f
Commit
daf07a1f
authored
Jun 04, 2010
by
pixhawk
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of git@pixhawk.ethz.ch:qgroundcontrol
parents
3e803237
09ebae05
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
137 additions
and
65 deletions
+137
-65
PxQuadMAV.cc
src/uas/PxQuadMAV.cc
+26
-0
UAS.cc
src/uas/UAS.cc
+5
-31
UASInterface.h
src/uas/UASInterface.h
+15
-0
MapWidget.cc
src/ui/MapWidget.cc
+68
-33
MapWidget.h
src/ui/MapWidget.h
+4
-0
UASInfoWidget.cc
src/ui/uas/UASInfoWidget.cc
+16
-1
UASInfoWidget.h
src/ui/uas/UASInfoWidget.h
+3
-0
No files found.
src/uas/PxQuadMAV.cc
View file @
daf07a1f
#include "PxQuadMAV.h"
#include "GAudioOutput.h"
PxQuadMAV
::
PxQuadMAV
(
MAVLinkProtocol
*
mavlink
,
int
id
)
:
UAS
(
mavlink
,
id
)
...
...
@@ -60,6 +61,31 @@ void PxQuadMAV::receiveMessage(LinkInterface* link, mavlink_message_t message)
emit
valueChanged
(
uasId
,
str
+
".z"
,
vect
.
z
,
MG
::
TIME
::
getGroundTimeNow
());
}
break
;
case
MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE
:
{
mavlink_vision_position_estimate_t
pos
;
mavlink_msg_vision_position_estimate_decode
(
&
message
,
&
pos
);
quint64
time
=
getUnixTime
(
pos
.
usec
);
emit
valueChanged
(
uasId
,
"vis. time"
,
pos
.
usec
,
time
);
emit
valueChanged
(
uasId
,
"vis. roll"
,
pos
.
roll
,
time
);
emit
valueChanged
(
uasId
,
"vis. pitch"
,
pos
.
pitch
,
time
);
emit
valueChanged
(
uasId
,
"vis. yaw"
,
pos
.
yaw
,
time
);
emit
valueChanged
(
uasId
,
"vis. x"
,
pos
.
x
,
time
);
emit
valueChanged
(
uasId
,
"vis. y"
,
pos
.
y
,
time
);
emit
valueChanged
(
uasId
,
"vis. z"
,
pos
.
z
,
time
);
emit
valueChanged
(
uasId
,
"vis. vx"
,
pos
.
vx
,
time
);
emit
valueChanged
(
uasId
,
"vis. vy"
,
pos
.
vy
,
time
);
emit
valueChanged
(
uasId
,
"vis. vz"
,
pos
.
vz
,
time
);
emit
valueChanged
(
uasId
,
"vis. vyaw"
,
pos
.
vyaw
,
time
);
// Set internal state
if
(
!
positionLock
)
{
// If position was not locked before, notify positive
GAudioOutput
::
instance
()
->
notifyPositive
();
}
positionLock
=
true
;
}
break
;
default:
// Do nothing
break
;
...
...
src/uas/UAS.cc
View file @
daf07a1f
...
...
@@ -254,6 +254,11 @@ void UAS::receiveMessage(LinkInterface* link, mavlink_message_t message)
mavlink_aux_status_t
status
;
mavlink_msg_aux_status_decode
(
&
message
,
&
status
);
emit
loadChanged
(
this
,
status
.
load
/
10.0
f
);
emit
errCountChanged
(
uasId
,
"IMU"
,
"I2C0"
,
status
.
i2c0_err_count
);
emit
errCountChanged
(
uasId
,
"IMU"
,
"I2C1"
,
status
.
i2c1_err_count
);
emit
errCountChanged
(
uasId
,
"IMU"
,
"SPI0"
,
status
.
spi0_err_count
);
emit
errCountChanged
(
uasId
,
"IMU"
,
"SPI1"
,
status
.
spi1_err_count
);
emit
errCountChanged
(
uasId
,
"IMU"
,
"UART"
,
status
.
uart_total_err_count
);
emit
valueChanged
(
this
,
"Load"
,
((
float
)
status
.
load
)
/
1000.0
f
,
MG
::
TIME
::
getGroundTimeNow
());
}
break
;
...
...
@@ -302,37 +307,6 @@ void UAS::receiveMessage(LinkInterface* link, mavlink_message_t message)
emit
attitudeChanged
(
this
,
mavlink_msg_attitude_get_roll
(
&
message
),
mavlink_msg_attitude_get_pitch
(
&
message
),
mavlink_msg_attitude_get_yaw
(
&
message
),
time
);
}
break
;
case
MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE
:
{
mavlink_vision_position_estimate_t
pos
;
mavlink_msg_vision_position_estimate_decode
(
&
message
,
&
pos
);
quint64
time
=
getUnixTime
(
pos
.
usec
);
emit
valueChanged
(
uasId
,
"vis. time"
,
pos
.
usec
,
time
);
emit
valueChanged
(
uasId
,
"vis. roll"
,
pos
.
roll
,
time
);
emit
valueChanged
(
uasId
,
"vis. pitch"
,
pos
.
pitch
,
time
);
emit
valueChanged
(
uasId
,
"vis. yaw"
,
pos
.
yaw
,
time
);
emit
valueChanged
(
uasId
,
"vis. x"
,
pos
.
x
,
time
);
emit
valueChanged
(
uasId
,
"vis. y"
,
pos
.
y
,
time
);
emit
valueChanged
(
uasId
,
"vis. z"
,
pos
.
z
,
time
);
// FIXME Only for testing for now
emit
valueChanged
(
uasId
,
"vis. rot r1"
,
pos
.
r1
,
time
);
emit
valueChanged
(
uasId
,
"vis. rot r2"
,
pos
.
r2
,
time
);
emit
valueChanged
(
uasId
,
"vis. rot r3"
,
pos
.
r3
,
time
);
emit
valueChanged
(
uasId
,
"vis. rot r4"
,
pos
.
r4
,
time
);
emit
valueChanged
(
uasId
,
"vis. rot r5"
,
pos
.
r5
,
time
);
emit
valueChanged
(
uasId
,
"vis. rot r6"
,
pos
.
r6
,
time
);
emit
valueChanged
(
uasId
,
"vis. rot r7"
,
pos
.
r7
,
time
);
emit
valueChanged
(
uasId
,
"vis. rot r8"
,
pos
.
r8
,
time
);
emit
valueChanged
(
uasId
,
"vis. rot r9"
,
pos
.
r9
,
time
);
// Set internal state
if
(
!
positionLock
)
{
// If position was not locked before, notify positive
GAudioOutput
::
instance
()
->
notifyPositive
();
}
positionLock
=
true
;
}
break
;
case
MAVLINK_MSG_ID_LOCAL_POSITION
:
//std::cerr << std::endl;
//std::cerr << "Decoded attitude message:" << " roll: " << std::dec << mavlink_msg_attitude_get_roll(message.payload) << " pitch: " << mavlink_msg_attitude_get_pitch(message.payload) << " yaw: " << mavlink_msg_attitude_get_yaw(message.payload) << std::endl;
...
...
src/uas/UASInterface.h
View file @
daf07a1f
...
...
@@ -232,6 +232,21 @@ signals:
* @param severity The severity of the message, 0 for plain debug messages, 10 for very critical messages
*/
void
textMessageReceived
(
int
uasid
,
int
severity
,
QString
text
);
/**
* @brief Update the error count of a device
*
* The error count indicates how many errors occured during the use of a device.
* Usually a random error from time to time is acceptable, e.g. through electromagnetic
* interferences on device lines like I2C and SPI. A constantly and rapidly increasing
* error count however can help to identify broken cables or misbehaving drivers.
*
* @param uasid System ID
* @param component Name of the component, e.g. "IMU"
* @param device Name of the device, e.g. "SPI0" or "I2C1"
* @param count Errors occured since system startup
*/
void
errCountChanged
(
int
uasid
,
QString
component
,
QString
device
,
int
count
);
/**
* @brief Drop rate of communication link updated
*
...
...
src/ui/MapWidget.cc
View file @
daf07a1f
...
...
@@ -34,9 +34,13 @@ This file is part of the PIXHAWK project
#include "UASInterface.h"
#include "UASManager.h"
#include "MG.h"
MapWidget
::
MapWidget
(
QWidget
*
parent
)
:
QWidget
(
parent
),
zoomLevel
(
0
),
uasIcons
(),
uasTrails
(),
m_ui
(
new
Ui
::
MapWidget
)
{
m_ui
->
setupUi
(
this
);
...
...
@@ -48,6 +52,8 @@ MapWidget::MapWidget(QWidget *parent) :
mc
->
showScale
(
true
);
mc
->
enablePersistentCache
();
//uasIcons = QMap<int, CirclePoint*>();
//QSize(480,640)
// ImageManager::instance()->setProxy("www-cache", 8080);
...
...
@@ -120,27 +126,55 @@ void MapWidget::addUAS(UASInterface* uas)
void
MapWidget
::
updateGlobalPosition
(
UASInterface
*
uas
,
double
lat
,
double
lon
,
double
alt
,
quint64
usec
)
{
Q_UNUSED
(
usec
);
quint64
currTime
=
MG
::
TIME
::
getGroundTimeNow
();
if
(
currTime
-
lastUpdate
>
90
)
{
lastUpdate
=
currTime
;
// create a LineString
QList
<
Point
*>
points
;
//
QList<Point*> points;
// Points with a circle
// A QPen can be used to customize the
QPen
*
pointpen
=
new
QPen
(
uas
->
getColor
());
pointpen
->
setWidth
(
3
);
points
.
append
(
new
CirclePoint
(
lat
,
lon
,
alt
,
uas
->
getUASName
(),
Point
::
Middle
,
pointpen
));
// points.append(new CirclePoint(8.275145, 50.016992, 15, "Wiesbaden-Mainz-Kastel, Johannes-Goßner-Straße", Point::Middle, pointpen));
// points.append(new CirclePoint(8.270476, 50.021426, 15, "Wiesbaden-Mainz-Kastel, Ruthof", Point::Middle, pointpen));
// // "Blind" Points
// points.append(new Point(8.266445, 50.025913, "Wiesbaden-Mainz-Kastel, Mudra Kaserne"));
// points.append(new Point(8.260378, 50.030345, "Wiesbaden-Mainz-Amoneburg, Dyckerhoffstraße"));
//pointpen->setWidth(3);
//points.append(new CirclePoint(lat, lon, 10, uas->getUASName(), Point::Middle, pointpen));
if
(
!
uasIcons
.
contains
(
uas
->
getUASID
()))
{
// Get the UAS color
QColor
uasColor
=
uas
->
getColor
();
// Icon
QPen
*
pointpen
=
new
QPen
(
uasColor
);
CirclePoint
*
p
=
new
CirclePoint
(
lat
,
lon
,
10
,
uas
->
getUASName
(),
Point
::
Middle
,
pointpen
);
uasIcons
.
insert
(
uas
->
getUASID
(),
p
);
osmLayer
->
addGeometry
(
p
);
// Line
// A QPen also can use transparency
QPen
*
linepen
=
new
QPen
(
QColor
(
0
,
0
,
255
,
100
));
linepen
->
setWidth
(
5
);
QList
<
Point
*>
points
;
points
.
append
(
new
Point
(
lat
,
lon
,
QString
(
"lat: %1 lon: %2"
).
arg
(
lat
,
lon
)));
QPen
*
linepen
=
new
QPen
(
uasColor
.
darker
());
linepen
->
setWidth
(
2
);
// Add the Points and the QPen to a LineString
LineString
*
ls
=
new
LineString
(
points
,
"Path"
,
linepen
);
LineString
*
ls
=
new
LineString
(
points
,
uas
->
getUASName
(),
linepen
);
uasTrails
.
insert
(
uas
->
getUASID
(),
ls
);
// Add the LineString to the layer
osmLayer
->
addGeometry
(
ls
);
}
else
{
CirclePoint
*
p
=
uasIcons
.
value
(
uas
->
getUASID
());
p
->
setCoordinate
(
QPointF
(
lat
,
lon
));
// Extend trail
uasTrails
.
value
(
uas
->
getUASID
())
->
addPoint
(
new
Point
(
lat
,
lon
,
QString
(
"lat: %1 lon: %2"
).
arg
(
lat
,
lon
)));
}
// points.append(new CirclePoint(8.275145, 50.016992, 15, "Wiesbaden-Mainz-Kastel, Johannes-Goßner-Straße", Point::Middle, pointpen));
// points.append(new CirclePoint(8.270476, 50.021426, 15, "Wiesbaden-Mainz-Kastel, Ruthof", Point::Middle, pointpen));
// // "Blind" Points
// points.append(new Point(8.266445, 50.025913, "Wiesbaden-Mainz-Kastel, Mudra Kaserne"));
// points.append(new Point(8.260378, 50.030345, "Wiesbaden-Mainz-Amoneburg, Dyckerhoffstraße"));
// Connect click events of the layer to this object
//connect(osmLayer, SIGNAL(geometryClicked(Geometry*, QPoint)),
...
...
@@ -152,6 +186,7 @@ void MapWidget::updateGlobalPosition(UASInterface* uas, double lat, double lon,
//view.append(QPointF(8.28412, 49.9998));
// mc->setView(view);
updatePosition
(
0
,
lat
,
lon
);
}
}
...
...
src/ui/MapWidget.h
View file @
daf07a1f
...
...
@@ -33,6 +33,7 @@ This file is part of the PIXHAWK project
#define MAPWIDGET_H
#include <QtGui/QWidget>
#include <QMap>
#include "qmapcontrol.h"
#include "UASInterface.h"
...
...
@@ -71,7 +72,10 @@ protected:
Layer
*
osmLayer
;
Layer
*
gSatLayer
;
QMap
<
int
,
CirclePoint
*>
uasIcons
;
QMap
<
int
,
LineString
*>
uasTrails
;
UASInterface
*
mav
;
quint64
lastUpdate
;
private:
Ui
::
MapWidget
*
m_ui
;
...
...
src/ui/uas/UASInfoWidget.cc
View file @
daf07a1f
...
...
@@ -69,6 +69,7 @@ UASInfoWidget::UASInfoWidget(QWidget *parent, QString name) : QWidget(parent)
this
->
load
=
0
;
receiveLoss
=
0
;
sendLoss
=
0
;
errors
=
QMap
<
QString
,
int
>
();
updateTimer
=
new
QTimer
(
this
);
connect
(
updateTimer
,
SIGNAL
(
timeout
()),
this
,
SLOT
(
refresh
()));
...
...
@@ -88,6 +89,7 @@ void UASInfoWidget::addUAS(UASInterface* uas)
connect
(
uas
,
SIGNAL
(
batteryChanged
(
UASInterface
*
,
double
,
double
,
int
)),
this
,
SLOT
(
updateBattery
(
UASInterface
*
,
double
,
double
,
int
)));
connect
(
uas
,
SIGNAL
(
dropRateChanged
(
int
,
float
)),
this
,
SLOT
(
updateReceiveLoss
(
int
,
float
)));
connect
(
uas
,
SIGNAL
(
loadChanged
(
UASInterface
*
,
double
)),
this
,
SLOT
(
updateCPULoad
(
UASInterface
*
,
double
)));
connect
(
uas
,
SIGNAL
(
errCountChanged
(
int
,
QString
,
QString
,
int
)),
this
,
SLOT
(
updateErrorCount
(
int
,
QString
,
QString
,
int
)));
// Set this UAS as active if it is the first one
if
(
activeUAS
==
0
)
activeUAS
=
uas
;
...
...
@@ -106,6 +108,16 @@ void UASInfoWidget::updateBattery(UASInterface* uas, double voltage, double perc
setTimeRemaining
(
uas
,
seconds
);
}
void
UASInfoWidget
::
updateErrorCount
(
int
uasid
,
QString
component
,
QString
device
,
int
count
)
{
qDebug
()
<<
__FILE__
<<
__LINE__
<<
activeUAS
->
getUASID
()
<<
"="
<<
uasid
;
if
(
activeUAS
->
getUASID
()
==
uasid
)
{
errors
.
remove
(
component
+
":"
+
device
);
errors
.
insert
(
component
+
":"
+
device
,
count
);
}
}
/**
*
*/
...
...
@@ -168,4 +180,7 @@ void UASInfoWidget::refresh()
ui
.
sendLossBar
->
setValue
(
sendLoss
);
ui
.
sendLossLabel
->
setText
(
QString
::
number
(
sendLoss
,
'f'
,
2
));
QString
errorString
;
// ui.
}
src/ui/uas/UASInfoWidget.h
View file @
daf07a1f
...
...
@@ -60,6 +60,8 @@ public slots:
void
updateReceiveLoss
(
int
uasId
,
float
receiveLoss
);
/** @brief Set the loss rate of packets sent from the MAV */
void
updateSendLoss
(
int
uasId
,
float
sendLoss
);
/** @brief Update the error count */
void
updateErrorCount
(
int
uasid
,
QString
component
,
QString
device
,
int
count
);
void
setVoltage
(
UASInterface
*
uas
,
double
voltage
);
void
setChargeLevel
(
UASInterface
*
uas
,
double
chargeLevel
);
...
...
@@ -90,6 +92,7 @@ protected:
QTimer
*
updateTimer
;
QString
name
;
quint64
startTime
;
QMap
<
QString
,
int
>
errors
;
// double lastRemainingTime;
// double lastChargeLevel;
// double startVoltage;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment