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
c8d3af3a
Commit
c8d3af3a
authored
Feb 27, 2015
by
Don Gagne
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
New Qml based sensor config
parent
b6376530
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
415 additions
and
0 deletions
+415
-0
SensorsComponent.qml
src/AutoPilotPlugins/PX4/SensorsComponent.qml
+203
-0
SensorsComponentController.cc
src/AutoPilotPlugins/PX4/SensorsComponentController.cc
+141
-0
SensorsComponentController.h
src/AutoPilotPlugins/PX4/SensorsComponentController.h
+71
-0
No files found.
src/AutoPilotPlugins/PX4/SensorsComponent.qml
0 → 100644
View file @
c8d3af3a
import
QtQuick
2.2
import
QtQuick
.
Controls
1.2
import
QtQuick
.
Controls
.
Styles
1.2
import
QGroundControl
.
FactSystem
1.0
import
QGroundControl
.
FactControls
1.0
import
QGroundControl
.
Palette
1.0
import
QGroundControl
.
Controls
1.0
Rectangle
{
property
QGCPalette
qgcPal
:
QGCPalette
{
colorGroupEnabled
:
true
}
readonly
property
int
rotationColumnWidth
:
200
readonly
property
var
rotations
:
[
"
ROTATION_NONE
"
,
"
ROTATION_YAW_45
"
,
"
ROTATION_YAW_90
"
,
"
ROTATION_YAW_135
"
,
"
ROTATION_YAW_180
"
,
"
ROTATION_YAW_225
"
,
"
ROTATION_YAW_270
"
,
"
ROTATION_YAW_315
"
,
"
ROTATION_ROLL_180
"
,
"
ROTATION_ROLL_180_YAW_45
"
,
"
ROTATION_ROLL_180_YAW_90
"
,
"
ROTATION_ROLL_180_YAW_135
"
,
"
ROTATION_PITCH_180
"
,
"
ROTATION_ROLL_180_YAW_225
"
,
"
ROTATION_ROLL_180_YAW_270
"
,
"
ROTATION_ROLL_180_YAW_315
"
,
"
ROTATION_ROLL_90
"
,
"
ROTATION_ROLL_90_YAW_45
"
,
"
ROTATION_ROLL_90_YAW_90
"
,
"
ROTATION_ROLL_90_YAW_135
"
,
"
ROTATION_ROLL_270
"
,
"
ROTATION_ROLL_270_YAW_45
"
,
"
ROTATION_ROLL_270_YAW_90
"
,
"
ROTATION_ROLL_270_YAW_135
"
,
"
ROTATION_PITCH_90
"
,
"
ROTATION_PITCH_270
"
,
"
ROTATION_ROLL_270_YAW_270
"
]
width
:
600
height
:
600
color
:
qgcPal
.
window
// We use this bogus loader just so we can get an onLoaded signal to hook to in order to
// finish controller initialization.
Component
{
id
:
loadSignal
;
Item
{
}
}
Loader
{
sourceComponent
:
loadSignal
onLoaded
:
controller
.
statusLog
=
statusTextArea
}
Column
{
anchors.fill
:
parent
QGCLabel
{
text
:
"
SENSORS CONFIG
"
font.pointSize
:
20
}
Item
{
height
:
20
;
width
:
10
}
// spacer
Item
{
readonly
property
int
calibrationAreaHeight
:
300
width
:
parent
.
width
height
:
calibrationAreaHeight
TextArea
{
id
:
statusTextArea
width
:
parent
.
width
-
rotationColumnWidth
height
:
parent
.
height
readOnly
:
true
frameVisible
:
false
text
:
qsTr
(
"
Sensor config is a work in progress which currently supports textual instructions only. Updated visuals coming soon.
"
)
style
:
TextAreaStyle
{
textColor
:
qgcPal
.
text
backgroundColor
:
qgcPal
.
windowShade
}
}
Column
{
// Compass rotation parameter < 0 indicates either internal compass, or no compass. So in
// both those cases we do not show a rotation combo.
property
bool
showCompass0
:
autopilot
.
parameters
[
"
CAL_MAG0_ROT
"
].
value
>=
0
property
bool
showCompass1
:
autopilot
.
parameters
[
"
CAL_MAG1_ROT
"
].
value
>=
0
property
bool
showCompass2
:
autopilot
.
parameters
[
"
CAL_MAG2_ROT
"
].
value
>=
0
x
:
parent
.
width
-
rotationColumnWidth
QGCLabel
{
text
:
"
Autpilot Orientation
"
}
FactComboBox
{
width
:
rotationColumnWidth
;
model
:
rotations
fact
:
autopilot
.
parameters
[
"
SENS_BOARD_ROT
"
]
}
// Compass 0 rotation
Component
{
id
:
compass0ComponentLabel
QGCLabel
{
text
:
"
Compass Orientation
"
}
}
Component
{
id
:
compass0ComponentCombo
FactComboBox
{
width
:
rotationColumnWidth
model
:
rotations
fact
:
autopilot
.
parameters
[
"
CAL_MAG0_ROT
"
]
}
}
Loader
{
sourceComponent
:
parent
.
showCompass0
?
compass0ComponentLabel
:
null
}
Loader
{
sourceComponent
:
parent
.
showCompass0
?
compass0ComponentCombo
:
null
}
// Compass 1 rotation
Component
{
id
:
compass1ComponentLabel
QGCLabel
{
text
:
"
Compass 1 Orientation
"
}
}
Component
{
id
:
compass1ComponentCombo
FactComboBox
{
width
:
rotationColumnWidth
model
:
rotations
fact
:
autopilot
.
parameters
[
"
CAL_MAG1_ROT
"
]
}
}
Loader
{
sourceComponent
:
parent
.
showCompass1
?
compass1ComponentLabel
:
null
}
Loader
{
sourceComponent
:
parent
.
showCompass1
?
compass1ComponentCombo
:
null
}
// Compass 2 rotation
Component
{
id
:
compass2ComponentLabel
QGCLabel
{
text
:
"
Compass 2 Orientation
"
}
}
Component
{
id
:
compass2ComponentCombo
FactComboBox
{
width
:
rotationColumnWidth
model
:
rotations
fact
:
autopilot
.
parameters
[
"
CAL_MAG2_ROT
"
]
}
}
Loader
{
sourceComponent
:
parent
.
showCompass2
?
compass2ComponentLabel
:
null
}
Loader
{
sourceComponent
:
parent
.
showCompass2
?
compass2ComponentCombo
:
null
}
}
}
Item
{
height
:
20
;
width
:
10
}
// spacer
Row
{
readonly
property
int
buttonWidth
:
120
spacing
:
20
QGCLabel
{
text
:
"
Calibrate:
"
;
anchors.baseline
:
firstButton
.
baseline
}
IndicatorButton
{
id
:
firstButton
width
:
parent
.
buttonWidth
text
:
"
Compass
"
indicatorGreen
:
autopilot
.
parameters
[
"
CAL_MAG0_ID
"
].
value
!=
0
onClicked
:
controller
.
calibrateCompass
()
}
IndicatorButton
{
width
:
parent
.
buttonWidth
text
:
"
Gyroscope
"
indicatorGreen
:
autopilot
.
parameters
[
"
CAL_GYRO0_ID
"
].
value
!=
0
onClicked
:
controller
.
calibrateGyro
()
}
IndicatorButton
{
width
:
parent
.
buttonWidth
text
:
"
Acceleromter
"
indicatorGreen
:
autopilot
.
parameters
[
"
CAL_ACC0_ID
"
].
value
!=
0
onClicked
:
controller
.
calibrateAccel
()
}
IndicatorButton
{
width
:
parent
.
buttonWidth
text
:
"
Airspeed
"
visible
:
controller
.
fixedWing
indicatorGreen
:
autopilot
.
parameters
[
"
SENS_DPRES_OFF
"
].
value
!=
0
onClicked
:
controller
.
calibrateAirspeed
()
}
}
}
}
src/AutoPilotPlugins/PX4/SensorsComponentController.cc
0 → 100644
View file @
c8d3af3a
/*=====================================================================
QGroundControl Open Source Ground Control Station
(c) 2009, 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
This file is part of the QGROUNDCONTROL project
QGROUNDCONTROL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
QGROUNDCONTROL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
======================================================================*/
/// @file
/// @author Don Gagne <don@thegagnes.com>
#include "SensorsComponentController.h"
#include "QGCMAVLink.h"
#include "UASManager.h"
#include <QVariant>
#include <QQmlProperty>
SensorsComponentController
::
SensorsComponentController
(
AutoPilotPlugin
*
autopilot
,
QObject
*
parent
)
:
QObject
(
parent
),
_autopilot
(
autopilot
)
{
Q_ASSERT
(
autopilot
);
}
/// Appends the specified text to the status log area in the ui
void
SensorsComponentController
::
_appendStatusLog
(
const
QString
&
text
)
{
Q_ASSERT
(
_statusLog
);
QVariant
returnedValue
;
QVariant
varText
=
text
;
QMetaObject
::
invokeMethod
(
_statusLog
,
"append"
,
Q_RETURN_ARG
(
QVariant
,
returnedValue
),
Q_ARG
(
QVariant
,
varText
));
}
void
SensorsComponentController
::
calibrateGyro
(
void
)
{
_beginTextLogging
();
UASInterface
*
uas
=
_autopilot
->
uas
();
Q_ASSERT
(
uas
);
uas
->
executeCommand
(
MAV_CMD_PREFLIGHT_CALIBRATION
,
1
,
1.0
f
,
0.0
f
,
0.0
f
,
0.0
f
,
0.0
f
,
0.0
f
,
0.0
f
,
0
);
}
void
SensorsComponentController
::
calibrateCompass
(
void
)
{
_beginTextLogging
();
UASInterface
*
uas
=
_autopilot
->
uas
();
Q_ASSERT
(
uas
);
uas
->
executeCommand
(
MAV_CMD_PREFLIGHT_CALIBRATION
,
1
,
0.0
f
,
1.0
f
,
0.0
f
,
0.0
f
,
0.0
f
,
0.0
f
,
0.0
f
,
0
);
}
void
SensorsComponentController
::
calibrateAccel
(
void
)
{
_beginTextLogging
();
UASInterface
*
uas
=
_autopilot
->
uas
();
Q_ASSERT
(
uas
);
uas
->
executeCommand
(
MAV_CMD_PREFLIGHT_CALIBRATION
,
1
,
0.0
f
,
0.0
f
,
0.0
f
,
0.0
f
,
1.0
f
,
0.0
f
,
0.0
f
,
0
);
}
void
SensorsComponentController
::
calibrateAirspeed
(
void
)
{
_beginTextLogging
();
UASInterface
*
uas
=
_autopilot
->
uas
();
Q_ASSERT
(
uas
);
uas
->
executeCommand
(
MAV_CMD_PREFLIGHT_CALIBRATION
,
1
,
0.0
f
,
0.0
f
,
0.0
f
,
0.0
f
,
0.0
f
,
1.0
f
,
0.0
f
,
0
);
}
void
SensorsComponentController
::
_beginTextLogging
(
void
)
{
UASInterface
*
uas
=
_autopilot
->
uas
();
Q_ASSERT
(
uas
);
connect
(
uas
,
&
UASInterface
::
textMessageReceived
,
this
,
&
SensorsComponentController
::
_handleUASTextMessage
);
}
void
SensorsComponentController
::
_handleUASTextMessage
(
int
uasId
,
int
compId
,
int
severity
,
QString
text
)
{
Q_UNUSED
(
compId
);
Q_UNUSED
(
severity
);
UASInterface
*
uas
=
_autopilot
->
uas
();
Q_ASSERT
(
uas
);
if
(
uasId
!=
uas
->
getUASID
())
{
return
;
}
QStringList
ignorePrefixList
;
ignorePrefixList
<<
"[cmd]"
<<
"[mavlink pm]"
<<
"[ekf check]"
;
foreach
(
QString
ignorePrefix
,
ignorePrefixList
)
{
if
(
text
.
startsWith
(
ignorePrefix
))
{
return
;
}
}
_appendStatusLog
(
text
);
if
(
text
.
endsWith
(
" calibration: done"
)
||
text
.
endsWith
(
" calibration: failed"
))
{
_refreshParams
();
}
}
void
SensorsComponentController
::
_refreshParams
(
void
)
{
#if 0
// FIXME: Not sure if firmware issue yet
_autopilot->refreshParametersPrefix("CAL_");
_autopilot->refreshParametersPrefix("SENS_");
#else
// Sending too many parameter requests like above doesn't seem to work. So for now,
// ask for everything back
_autopilot
->
refreshAllParameters
();
#endif
}
bool
SensorsComponentController
::
fixedWing
(
void
)
{
UASInterface
*
uas
=
_autopilot
->
uas
();
Q_ASSERT
(
uas
);
return
uas
->
getSystemType
()
==
MAV_TYPE_FIXED_WING
;
}
src/AutoPilotPlugins/PX4/SensorsComponentController.h
0 → 100644
View file @
c8d3af3a
/*=====================================================================
QGroundControl Open Source Ground Control Station
(c) 2009, 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
This file is part of the QGROUNDCONTROL project
QGROUNDCONTROL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
QGROUNDCONTROL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
======================================================================*/
/// @file
/// @author Don Gagne <don@thegagnes.com>
#ifndef SENSORSCOMPONENTCONTROLLER_H
#define SENSORSCOMPONENTCONTROLLER_H
#include <QObject>
#include <QQuickItem>
#include "UASInterface.h"
#include "AutoPilotPlugin.h"
/// Sensors Component MVC Controller for SensorsComponent.qml.
class
SensorsComponentController
:
public
QObject
{
Q_OBJECT
public:
SensorsComponentController
(
AutoPilotPlugin
*
autopilot
,
QObject
*
parent
=
NULL
);
Q_PROPERTY
(
bool
fixedWing
READ
fixedWing
CONSTANT
)
/// TextArea for log output
Q_PROPERTY
(
QQuickItem
*
statusLog
MEMBER
_statusLog
)
Q_INVOKABLE
void
calibrateCompass
(
void
);
Q_INVOKABLE
void
calibrateGyro
(
void
);
Q_INVOKABLE
void
calibrateAccel
(
void
);
Q_INVOKABLE
void
calibrateAirspeed
(
void
);
bool
fixedWing
(
void
);
signals:
void
bogusNotify
(
void
);
private
slots
:
void
_handleUASTextMessage
(
int
uasId
,
int
compId
,
int
severity
,
QString
text
);
private:
void
_beginTextLogging
(
void
);
void
_appendStatusLog
(
const
QString
&
text
);
void
_refreshParams
(
void
);
QQuickItem
*
_statusLog
;
///< Status log TextArea Qml control
AutoPilotPlugin
*
_autopilot
;
};
#endif
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