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
1ac6cd32
Commit
1ac6cd32
authored
Mar 23, 2018
by
Don Gagne
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
FW Landing Glide Slope support
parent
2296ed0d
Changes
4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
138 additions
and
113 deletions
+138
-113
FWLandingPattern.FactMetaData.json
src/MissionManager/FWLandingPattern.FactMetaData.json
+4
-4
FixedWingLandingComplexItem.cc
src/MissionManager/FixedWingLandingComplexItem.cc
+73
-25
FixedWingLandingComplexItem.h
src/MissionManager/FixedWingLandingComplexItem.h
+38
-32
FWLandingPatternEditor.qml
src/PlanView/FWLandingPatternEditor.qml
+23
-52
No files found.
src/MissionManager/FWLandingPattern.FactMetaData.json
View file @
1ac6cd32
...
...
@@ -44,12 +44,12 @@
"defaultValue"
:
0.0
},
{
"name"
:
"
DescentRat
e"
,
"shortDescription"
:
"
Descent rate between landing and loiter altitude
."
,
"name"
:
"
GlideSlop
e"
,
"shortDescription"
:
"
The glide slope between the loiter and landing point
."
,
"type"
:
"double"
,
"units"
:
"
%
"
,
"units"
:
"
deg
"
,
"min"
:
0.1
,
"max"
:
10
0
,
"max"
:
9
0
,
"decimalPlaces"
:
1
,
"defaultValue"
:
12.0
}
...
...
src/MissionManager/FixedWingLandingComplexItem.cc
View file @
1ac6cd32
This diff is collapsed.
Click to expand it.
src/MissionManager/FixedWingLandingComplexItem.h
View file @
1ac6cd32
...
...
@@ -24,26 +24,26 @@ class FixedWingLandingComplexItem : public ComplexMissionItem
public:
FixedWingLandingComplexItem
(
Vehicle
*
vehicle
,
QObject
*
parent
=
NULL
);
Q_PROPERTY
(
Fact
*
loiterAltitude
READ
loiterAltitude
CONSTANT
)
Q_PROPERTY
(
Fact
*
loiterRadius
READ
loiterRadius
CONSTANT
)
Q_PROPERTY
(
Fact
*
landingAltitude
READ
landingAltitude
CONSTANT
)
Q_PROPERTY
(
Fact
*
landing
Distance
READ
landingDistance
CONSTANT
)
Q_PROPERTY
(
Fact
*
landingHeading
READ
landingHeading
CONSTANT
)
Q_PROPERTY
(
Fact
*
fallRate
READ
fallRate
CONSTANT
)
Q_PROPERTY
(
bool
loiterClockwise
MEMBER
_loiterClockwise
NOTIFY
loiterClockwiseChanged
)
Q_PROPERTY
(
bool
loiter
AltitudeRelative
MEMBER
_loiterAltitudeRelative
NOTIFY
loiterAltitudeRelativ
eChanged
)
Q_PROPERTY
(
bool
landingAltitudeRelative
MEMBER
_landingAltitudeRelative
NOTIFY
landingAltitud
eRelativeChanged
)
Q_PROPERTY
(
QGeoCoordinate
loiterCoordinate
READ
loiterCoordinate
WRITE
setLoiterCoordinate
NOTIFY
loiterCoordinateChanged
)
Q_PROPERTY
(
QGeoCoordinate
loiterTangentCoordinate
READ
loiterTangentCoordinate
NOTIFY
loiterTangentCoordinateChanged
)
Q_PROPERTY
(
QGeoCoordinate
landingCoordinate
READ
landingCoordinate
WRITE
setLandingCoordinate
NOTIFY
landingCoordinateChanged
)
Q_PROPERTY
(
bool
landingCoordSet
MEMBER
_landingCoordSet
NOTIFY
landingCoordSetChanged
)
Q_PROPERTY
(
Fact
*
loiterAltitude
READ
loiterAltitude
CONSTANT
)
Q_PROPERTY
(
Fact
*
loiterRadius
READ
loiterRadius
CONSTANT
)
Q_PROPERTY
(
Fact
*
landingAltitude
READ
landingAltitude
CONSTANT
)
Q_PROPERTY
(
Fact
*
landing
Heading
READ
landingHeading
CONSTANT
)
Q_PROPERTY
(
bool
valueSetIsDistance
MEMBER
_valueSetIsDistance
NOTIFY
valueSetIsDistanceChanged
)
Q_PROPERTY
(
Fact
*
landingDistance
READ
landingDistance
CONSTANT
)
Q_PROPERTY
(
Fact
*
glideSlope
READ
glideSlope
CONSTANT
)
Q_PROPERTY
(
bool
loiter
Clockwise
MEMBER
_loiterClockwise
NOTIFY
loiterClockwis
eChanged
)
Q_PROPERTY
(
bool
altitudesAreRelative
MEMBER
_altitudesAreRelative
NOTIFY
altitudesAr
eRelativeChanged
)
Q_PROPERTY
(
QGeoCoordinate
loiterCoordinate
READ
loiterCoordinate
WRITE
setLoiterCoordinate
NOTIFY
loiterCoordinateChanged
)
Q_PROPERTY
(
QGeoCoordinate
loiterTangentCoordinate
READ
loiterTangentCoordinate
NOTIFY
loiterTangentCoordinateChanged
)
Q_PROPERTY
(
QGeoCoordinate
landingCoordinate
READ
landingCoordinate
WRITE
setLandingCoordinate
NOTIFY
landingCoordinateChanged
)
Q_PROPERTY
(
bool
landingCoordSet
MEMBER
_landingCoordSet
NOTIFY
landingCoordSetChanged
)
Fact
*
loiterAltitude
(
void
)
{
return
&
_loiterAltitudeFact
;
}
Fact
*
loiterRadius
(
void
)
{
return
&
_loiterRadiusFact
;
}
Fact
*
landingAltitude
(
void
)
{
return
&
_landingAltitudeFact
;
}
Fact
*
landingDistance
(
void
)
{
return
&
_landingDistanceFact
;
}
Fact
*
landingHeading
(
void
)
{
return
&
_landingHeadingFact
;
}
Fact
*
fallRate
(
void
)
{
return
&
_fallRat
eFact
;
}
Fact
*
glideSlope
(
void
)
{
return
&
_glideSlop
eFact
;
}
QGeoCoordinate
landingCoordinate
(
void
)
const
{
return
_landingCoordinate
;
}
QGeoCoordinate
loiterCoordinate
(
void
)
const
{
return
_loiterCoordinate
;
}
QGeoCoordinate
loiterTangentCoordinate
(
void
)
const
{
return
_loiterTangentCoordinate
;
}
...
...
@@ -81,8 +81,8 @@ public:
void
appendMissionItems
(
QList
<
MissionItem
*>&
items
,
QObject
*
missionItemParent
)
final
;
void
applyNewAltitude
(
double
newAltitude
)
final
;
bool
coordinateHasRelativeAltitude
(
void
)
const
final
{
return
_
loiterAltitud
eRelative
;
}
bool
exitCoordinateHasRelativeAltitude
(
void
)
const
final
{
return
_
landingAltitud
eRelative
;
}
bool
coordinateHasRelativeAltitude
(
void
)
const
final
{
return
_
altitudesAr
eRelative
;
}
bool
exitCoordinateHasRelativeAltitude
(
void
)
const
final
{
return
_
altitudesAr
eRelative
;
}
bool
exitCoordinateSameAsEntry
(
void
)
const
final
{
return
false
;
}
void
setDirty
(
bool
dirty
)
final
;
...
...
@@ -97,7 +97,7 @@ public:
static
const
char
*
loiterRadiusName
;
static
const
char
*
landingHeadingName
;
static
const
char
*
landingAltitudeName
;
static
const
char
*
fallRat
eName
;
static
const
char
*
glideSlop
eName
;
signals:
void
loiterCoordinateChanged
(
QGeoCoordinate
coordinate
);
...
...
@@ -105,21 +105,23 @@ signals:
void
landingCoordinateChanged
(
QGeoCoordinate
coordinate
);
void
landingCoordSetChanged
(
bool
landingCoordSet
);
void
loiterClockwiseChanged
(
bool
loiterClockwise
);
void
loiterAltitudeRelativeChanged
(
bool
loiterAltitud
eRelative
);
void
landingAltitudeRelativeChanged
(
bool
loiterAltitudeRelativ
e
);
void
altitudesAreRelativeChanged
(
bool
altitudesAr
eRelative
);
void
valueSetIsDistanceChanged
(
bool
valueSetIsDistanc
e
);
private
slots
:
void
_recalcFromHeadingAndDistanceChange
(
void
);
void
_recalcFromCoordinateChange
(
void
);
void
_recalcFromRadiusChange
(
void
);
void
_updateLoiterCoodinateAltitudeFromFact
(
void
);
void
_updateLandingCoodinateAltitudeFromFact
(
void
);
double
_mathematicAngleToHeading
(
double
angle
);
double
_headingToMathematicAngle
(
double
heading
);
void
_setDirty
(
void
);
void
_recalcFromHeadingAndDistanceChange
(
void
);
void
_recalcFromCoordinateChange
(
void
);
void
_recalcFromRadiusChange
(
void
);
void
_updateLoiterCoodinateAltitudeFromFact
(
void
);
void
_updateLandingCoodinateAltitudeFromFact
(
void
);
double
_mathematicAngleToHeading
(
double
angle
);
double
_headingToMathematicAngle
(
double
heading
);
void
_setDirty
(
void
);
void
_glideSlopeChanged
(
void
);
private:
QPointF
_rotatePoint
(
const
QPointF
&
point
,
const
QPointF
&
origin
,
double
angle
);
QPointF
_rotatePoint
(
const
QPointF
&
point
,
const
QPointF
&
origin
,
double
angle
);
void
_calcGlideSlope
(
void
);
int
_sequenceNumber
;
bool
_dirty
;
...
...
@@ -136,18 +138,22 @@ private:
Fact
_loiterRadiusFact
;
Fact
_landingHeadingFact
;
Fact
_landingAltitudeFact
;
Fact
_
fallRat
eFact
;
Fact
_
glideSlop
eFact
;
bool
_loiterClockwise
;
bool
_
loiterAltitud
eRelative
;
bool
_
landingAltitudeRelativ
e
;
bool
_
altitudesAr
eRelative
;
bool
_
valueSetIsDistanc
e
;
static
const
char
*
_jsonLoiterCoordinateKey
;
static
const
char
*
_jsonLoiterRadiusKey
;
static
const
char
*
_jsonLoiterClockwiseKey
;
static
const
char
*
_jsonLoiterAltitudeRelativeKey
;
static
const
char
*
_jsonLandingCoordinateKey
;
static
const
char
*
_jsonValueSetIsDistanceKey
;
static
const
char
*
_jsonAltitudesAreRelativeKey
;
// Only in older file formats
static
const
char
*
_jsonLandingAltitudeRelativeKey
;
static
const
char
*
_jsonLoiterAltitudeRelativeKey
;
static
const
char
*
_jsonFallRateKey
;
};
...
...
src/PlanView/FWLandingPatternEditor.qml
View file @
1ac6cd32
...
...
@@ -34,6 +34,8 @@ Rectangle {
property
real
_margin
:
ScreenTools
.
defaultFontPixelWidth
/
2
property
real
_spacer
:
ScreenTools
.
defaultFontPixelWidth
/
2
ExclusiveGroup
{
id
:
distanceGlideGroup
}
Column
{
id
:
editorColumn
anchors.margins
:
_margin
...
...
@@ -58,17 +60,6 @@ Rectangle {
Item
{
width
:
1
;
height
:
_spacer
}
QGCCheckBox
{
id
:
loiterAltRelative
anchors.right
:
parent
.
right
text
:
qsTr
(
"
Altitude relative to home
"
)
checked
:
missionItem
.
loiterAltitudeRelative
onClicked
:
missionItem
.
loiterAltitudeRelative
=
checked
}
Item
{
width
:
1
;
height
:
_spacer
}
QGCCheckBox
{
anchors.left
:
loiterAltRelative
.
left
text
:
qsTr
(
"
Loiter clockwise
"
)
checked
:
missionItem
.
loiterClockwise
onClicked
:
missionItem
.
loiterClockwise
=
checked
...
...
@@ -98,53 +89,33 @@ Rectangle {
}
QGCRadioButton
{
id
:
useLandingDistance
text
:
qsTr
(
"
Landing dist
"
)
checked
:
!
useFallRate
.
checked
onClicked
:
{
useFallRate
.
checked
=
false
missionItem
.
fallRate
.
value
=
parseFloat
(
missionItem
.
loiterAltitude
.
value
)
*
100
/
parseFloat
(
missionItem
.
landingDistance
.
value
)
}
Layout.fillWidth
:
true
id
:
specifyLandingDistance
text
:
qsTr
(
"
Landing Dist
"
)
checked
:
missionItem
.
valueSetIsDistance
exclusiveGroup
:
distanceGlideGroup
onClicked
:
missionItem
.
valueSetIsDistance
=
checked
Layout.fillWidth
:
true
}
FactTextField
{
fact
:
missionItem
.
landingDistance
enabled
:
use
LandingDistance
.
checked
Layout.fillWidth
:
true
fact
:
missionItem
.
landingDistance
enabled
:
specify
LandingDistance
.
checked
Layout.fillWidth
:
true
}
QGCRadioButton
{
id
:
useFallRate
text
:
qsTr
(
"
Descent rate
"
)
checked
:
!
useLandingDistance
.
checked
onClicked
:
{
useLandingDistance
.
checked
=
false
missionItem
.
landingDistance
.
value
=
parseFloat
(
missionItem
.
loiterAltitude
.
value
)
*
100
/
parseFloat
(
missionItem
.
fallRate
.
value
)
}
Layout.fillWidth
:
true
id
:
specifyGlideSlope
text
:
qsTr
(
"
Glide Slope
"
)
checked
:
!
missionItem
.
valueSetIsDistance
exclusiveGroup
:
distanceGlideGroup
onClicked
:
missionItem
.
valueSetIsDistance
=
checked
Layout.fillWidth
:
true
}
FactTextField
{
fact
:
missionItem
.
fallRate
enabled
:
useFallRate
.
checked
Layout.fillWidth
:
true
}
Connections
{
target
:
missionItem
.
landingDistance
onValueChanged
:
{
missionItem
.
fallRate
.
value
=
parseFloat
(
missionItem
.
loiterAltitude
.
value
)
*
100
/
parseFloat
(
missionItem
.
landingDistance
.
value
)
}
}
Connections
{
target
:
missionItem
.
fallRate
onValueChanged
:
{
missionItem
.
landingDistance
.
value
=
parseFloat
(
missionItem
.
loiterAltitude
.
value
)
*
100
/
parseFloat
(
missionItem
.
fallRate
.
value
)
}
fact
:
missionItem
.
glideSlope
enabled
:
specifyGlideSlope
.
checked
Layout.fillWidth
:
true
}
}
...
...
@@ -152,9 +123,9 @@ Rectangle {
QGCCheckBox
{
anchors.right
:
parent
.
right
text
:
qsTr
(
"
Altitude relative to home
"
)
checked
:
missionItem
.
landingAltitud
eRelative
onClicked
:
missionItem
.
landingAltitud
eRelative
=
checked
text
:
qsTr
(
"
Altitude
s
relative to home
"
)
checked
:
missionItem
.
altitudesAr
eRelative
onClicked
:
missionItem
.
altitudesAr
eRelative
=
checked
}
}
...
...
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