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
ba37ee4c
Commit
ba37ee4c
authored
Mar 07, 2018
by
Gus Grubba
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Updating airmapd with its fixes for flight plan updates.
parent
bdb044df
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
67 additions
and
65 deletions
+67
-65
flight_plan.h
libs/airmapd/include/airmap/flight_plan.h
+9
-7
libairmap-qt.0.dylib
libs/airmapd/macOS/Qt.5.9/libairmap-qt.0.dylib
+0
-0
AirMapFlightPlanManager.cc
src/Airmap/AirMapFlightPlanManager.cc
+54
-56
AirMapFlightPlanManager.h
src/Airmap/AirMapFlightPlanManager.h
+2
-0
AirMapManager.cc
src/Airmap/AirMapManager.cc
+2
-2
No files found.
libs/airmapd/include/airmap/flight_plan.h
View file @
ba37ee4c
...
...
@@ -46,13 +46,15 @@ struct FlightPlan {
float
longitude
;
///< The longitude component of the takeoff coordinates in [°].
}
takeoff
;
///< The takeoff coordinate.
struct
{
float
max
;
///< The maximum altitude over the entire flight in [m].
float
min
;
///< The minimum altitude over the entire flight in [m].
}
altitude_agl
;
///< The altitude range of the flight in [m] above ground level.
float
buffer
;
///< The buffer in [m] around the geometry.
Geometry
geometry
;
///< The geometry describing the flight.
DateTime
start_time
;
///< Point in time when the flight will start/was started.
DateTime
end_time
;
///< Point in time when the fligth will end.
float
max
;
///< The maximum altitude over the entire flight in [m].
float
min
;
///< The minimum altitude over the entire flight in [m].
}
altitude_agl
;
///< The altitude range of the flight in [m] above ground level.
float
buffer
;
///< The buffer in [m] around the geometry.
Geometry
geometry
;
///< The geometry describing the flight.
DateTime
start_time
;
///< Point in time when the flight will start/was started.
DateTime
end_time
;
///< Point in time when the fligth will end.
std
::
vector
<
RuleSet
::
Id
>
rulesets
;
///< RuleSets that apply to this flight plan.
std
::
unordered_map
<
std
::
string
,
RuleSet
::
Feature
::
Value
>
features
;
///< Additional properties of the planned flight.
};
}
// namespace airmap
...
...
libs/airmapd/macOS/Qt.5.9/libairmap-qt.0.dylib
View file @
ba37ee4c
No preview for this file type
src/Airmap/AirMapFlightPlanManager.cc
View file @
ba37ee4c
...
...
@@ -17,11 +17,11 @@
#include "PlanMasterController.h"
#include "QGCMAVLink.h"
#include "airmap/pilots.h"
#include "airmap/flights.h"
#include "airmap/date_time.h"
#include "airmap/flight_plans.h"
#include "airmap/flights.h"
#include "airmap/geometry.h"
#include "airmap/pilots.h"
using
namespace
airmap
;
...
...
@@ -411,6 +411,52 @@ AirMapFlightPlanManager::_createFlightPlan()
emit
flightPermitStatusChanged
();
}
//-----------------------------------------------------------------------------
void
AirMapFlightPlanManager
::
_updateRulesAndFeatures
(
std
::
vector
<
RuleSet
::
Id
>&
rulesets
,
std
::
unordered_map
<
std
::
string
,
RuleSet
::
Feature
::
Value
>&
features
)
{
AirMapRulesetsManager
*
pRulesMgr
=
dynamic_cast
<
AirMapRulesetsManager
*>
(
qgcApp
()
->
toolbox
()
->
airspaceManager
()
->
ruleSets
());
if
(
pRulesMgr
)
{
for
(
int
rs
=
0
;
rs
<
pRulesMgr
->
ruleSets
()
->
count
();
rs
++
)
{
AirMapRuleSet
*
ruleSet
=
qobject_cast
<
AirMapRuleSet
*>
(
pRulesMgr
->
ruleSets
()
->
get
(
rs
));
//-- If this ruleset is selected
if
(
ruleSet
&&
ruleSet
->
selected
())
{
rulesets
.
push_back
(
ruleSet
->
id
().
toStdString
());
//-- Features within each rule
for
(
int
r
=
0
;
r
<
ruleSet
->
rules
()
->
count
();
r
++
)
{
AirMapRule
*
rule
=
qobject_cast
<
AirMapRule
*>
(
ruleSet
->
rules
()
->
get
(
r
));
if
(
rule
)
{
for
(
int
f
=
0
;
f
<
rule
->
features
()
->
count
();
f
++
)
{
AirMapRuleFeature
*
feature
=
qobject_cast
<
AirMapRuleFeature
*>
(
rule
->
features
()
->
get
(
f
));
if
(
feature
&&
feature
->
value
().
isValid
())
{
switch
(
feature
->
type
())
{
case
AirspaceRuleFeature
:
:
Boolean
:
features
[
feature
->
name
().
toStdString
()]
=
RuleSet
::
Feature
::
Value
(
feature
->
value
().
toBool
());
break
;
case
AirspaceRuleFeature
:
:
Float
:
//-- Sanity check for floats
if
(
isfinite
(
feature
->
value
().
toFloat
()))
{
features
[
feature
->
name
().
toStdString
()]
=
RuleSet
::
Feature
::
Value
(
feature
->
value
().
toFloat
());
}
break
;
case
AirspaceRuleFeature
:
:
String
:
//-- Skip empty responses
if
(
!
feature
->
value
().
toString
().
isEmpty
())
{
features
[
feature
->
name
().
toStdString
()]
=
RuleSet
::
Feature
::
Value
(
feature
->
value
().
toString
().
toStdString
());
}
break
;
default:
qCWarning
(
AirMapManagerLog
)
<<
"Unknown type for feature"
<<
feature
->
name
();
}
}
}
}
}
}
}
}
}
//-----------------------------------------------------------------------------
void
AirMapFlightPlanManager
::
_uploadFlightPlan
()
...
...
@@ -436,49 +482,8 @@ AirMapFlightPlanManager::_uploadFlightPlan()
quint64
end
=
start
+
60
*
30
*
1000
;
params
.
start_time
=
airmap
::
from_milliseconds_since_epoch
(
airmap
::
Milliseconds
{(
long
long
)
start
});
params
.
end_time
=
airmap
::
from_milliseconds_since_epoch
(
airmap
::
Milliseconds
{(
long
long
)
end
});
//-- Rules
AirMapRulesetsManager
*
pRulesMgr
=
dynamic_cast
<
AirMapRulesetsManager
*>
(
qgcApp
()
->
toolbox
()
->
airspaceManager
()
->
ruleSets
());
if
(
pRulesMgr
)
{
for
(
int
rs
=
0
;
rs
<
pRulesMgr
->
ruleSets
()
->
count
();
rs
++
)
{
AirMapRuleSet
*
ruleSet
=
qobject_cast
<
AirMapRuleSet
*>
(
pRulesMgr
->
ruleSets
()
->
get
(
rs
));
//-- If this ruleset is selected
if
(
ruleSet
&&
ruleSet
->
selected
())
{
params
.
rulesets
.
push_back
(
ruleSet
->
id
().
toStdString
());
//-- Features within each rule
/*
for(int r = 0; r < ruleSet->rules()->count(); r++) {
AirMapRule* rule = qobject_cast<AirMapRule*>(ruleSet->rules()->get(r));
if(rule) {
for(int f = 0; f < rule->features()->count(); f++) {
AirMapRuleFeature* feature = qobject_cast<AirMapRuleFeature*>(rule->features()->get(f));
if(feature && feature->value().isValid()) {
switch(feature->type()) {
case AirspaceRuleFeature::Boolean:
params.features[feature->name().toStdString()] = RuleSet::Feature::Value(feature->value().toBool());
break;
case AirspaceRuleFeature::Float:
//-- Sanity check for floats
if(isfinite(feature->value().toFloat())) {
params.features[feature->name().toStdString()] = RuleSet::Feature::Value(feature->value().toFloat());
}
break;
case AirspaceRuleFeature::String:
//-- Skip empty responses
if(!feature->value().toString().isEmpty()) {
params.features[feature->name().toStdString()] = RuleSet::Feature::Value(feature->value().toString().toStdString());
}
break;
default:
qCWarning(AirMapManagerLog) << "Unknown type for feature" << feature->name();
}
}
}
}
}
*/
}
}
}
//-- Rules & Features
_updateRulesAndFeatures
(
params
.
rulesets
,
params
.
features
);
//-- Geometry: polygon
Geometry
::
Polygon
polygon
;
for
(
const
auto
&
qcoord
:
_flight
.
coords
)
{
...
...
@@ -535,6 +540,10 @@ AirMapFlightPlanManager::_updateFlightPlan()
_flightPlan
.
buffer
=
2.
f
;
_flightPlan
.
takeoff
.
latitude
=
_flight
.
takeoffCoord
.
latitude
();
_flightPlan
.
takeoff
.
longitude
=
_flight
.
takeoffCoord
.
longitude
();
//-- Rules & Features
_flightPlan
.
rulesets
.
clear
();
_flightPlan
.
features
.
clear
();
_updateRulesAndFeatures
(
_flightPlan
.
rulesets
,
_flightPlan
.
features
);
//-- Geometry: polygon
Geometry
::
Polygon
polygon
;
for
(
const
auto
&
qcoord
:
_flight
.
coords
)
{
...
...
@@ -544,17 +553,6 @@ AirMapFlightPlanManager::_updateFlightPlan()
polygon
.
outer_ring
.
coordinates
.
push_back
(
coord
);
}
_flightPlan
.
geometry
=
Geometry
(
polygon
);
//-- Rules
/*
AirMapRulesetsManager* pRulesMgr = dynamic_cast<AirMapRulesetsManager*>(qgcApp()->toolbox()->airspaceManager()->ruleSets());
if(pRulesMgr) {
foreach(QString ruleset, pRulesMgr->rulesetsIDs()) {
params.flight_plan.rulesets.push_back(ruleset.toStdString());
}
}
*/
_state
=
State
::
FlightUpdate
;
std
::
weak_ptr
<
LifetimeChecker
>
isAlive
(
_instance
);
_shared
.
doRequestWithLogin
([
this
,
isAlive
](
const
QString
&
login_token
)
{
...
...
src/Airmap/AirMapFlightPlanManager.h
View file @
ba37ee4c
...
...
@@ -20,6 +20,7 @@
#include "airmap/flight.h"
#include "airmap/flight_plan.h"
#include "airmap/ruleset.h"
class
PlanMasterController
;
...
...
@@ -112,6 +113,7 @@ private slots:
private:
void
_createFlightPlan
();
bool
_collectFlightDtata
();
void
_updateRulesAndFeatures
(
std
::
vector
<
airmap
::
RuleSet
::
Id
>&
rulesets
,
std
::
unordered_map
<
std
::
string
,
airmap
::
RuleSet
::
Feature
::
Value
>&
features
);
private:
enum
class
State
{
...
...
src/Airmap/AirMapManager.cc
View file @
ba37ee4c
...
...
@@ -37,8 +37,8 @@ AirMapManager::AirMapManager(QGCApplication* app, QGCToolbox* toolbox)
{
_logger
=
std
::
make_shared
<
qt
::
Logger
>
();
qt
::
register_types
();
// TODO: still needed?
_logger
->
logging_category
().
setEnabled
(
QtDebugMsg
,
fals
e
);
_logger
->
logging_category
().
setEnabled
(
QtInfoMsg
,
fals
e
);
_logger
->
logging_category
().
setEnabled
(
QtDebugMsg
,
tru
e
);
_logger
->
logging_category
().
setEnabled
(
QtInfoMsg
,
tru
e
);
_logger
->
logging_category
().
setEnabled
(
QtWarningMsg
,
false
);
_dispatchingLogger
=
std
::
make_shared
<
qt
::
DispatchingLogger
>
(
_logger
);
connect
(
&
_shared
,
&
AirMapSharedState
::
error
,
this
,
&
AirMapManager
::
_error
);
...
...
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