Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Valentin Platzgummer
qgroundcontrol
Commits
ba37ee4c
Commit
ba37ee4c
authored
Mar 07, 2018
by
Gus Grubba
Browse files
Updating airmapd with its fixes for flight plan updates.
parent
bdb044df
Changes
5
Hide whitespace changes
Inline
Side-by-side
libs/airmapd/include/airmap/flight_plan.h
View file @
ba37ee4c
...
@@ -46,13 +46,15 @@ struct FlightPlan {
...
@@ -46,13 +46,15 @@ struct FlightPlan {
float
longitude
;
///< The longitude component of the takeoff coordinates in [°].
float
longitude
;
///< The longitude component of the takeoff coordinates in [°].
}
takeoff
;
///< The takeoff coordinate.
}
takeoff
;
///< The takeoff coordinate.
struct
{
struct
{
float
max
;
///< The maximum altitude over the entire flight in [m].
float
max
;
///< The maximum altitude over the entire flight in [m].
float
min
;
///< The minimum 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.
}
altitude_agl
;
///< The altitude range of the flight in [m] above ground level.
float
buffer
;
///< The buffer in [m] around the geometry.
float
buffer
;
///< The buffer in [m] around the geometry.
Geometry
geometry
;
///< The geometry describing the flight.
Geometry
geometry
;
///< The geometry describing the flight.
DateTime
start_time
;
///< Point in time when the flight will start/was started.
DateTime
start_time
;
///< Point in time when the flight will start/was started.
DateTime
end_time
;
///< Point in time when the fligth will end.
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
}
// 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 @@
...
@@ -17,11 +17,11 @@
#include
"PlanMasterController.h"
#include
"PlanMasterController.h"
#include
"QGCMAVLink.h"
#include
"QGCMAVLink.h"
#include
"airmap/pilots.h"
#include
"airmap/flights.h"
#include
"airmap/date_time.h"
#include
"airmap/date_time.h"
#include
"airmap/flight_plans.h"
#include
"airmap/flight_plans.h"
#include
"airmap/flights.h"
#include
"airmap/geometry.h"
#include
"airmap/geometry.h"
#include
"airmap/pilots.h"
using
namespace
airmap
;
using
namespace
airmap
;
...
@@ -411,6 +411,52 @@ AirMapFlightPlanManager::_createFlightPlan()
...
@@ -411,6 +411,52 @@ AirMapFlightPlanManager::_createFlightPlan()
emit
flightPermitStatusChanged
();
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
void
AirMapFlightPlanManager
::
_uploadFlightPlan
()
AirMapFlightPlanManager
::
_uploadFlightPlan
()
...
@@ -436,49 +482,8 @@ AirMapFlightPlanManager::_uploadFlightPlan()
...
@@ -436,49 +482,8 @@ AirMapFlightPlanManager::_uploadFlightPlan()
quint64
end
=
start
+
60
*
30
*
1000
;
quint64
end
=
start
+
60
*
30
*
1000
;
params
.
start_time
=
airmap
::
from_milliseconds_since_epoch
(
airmap
::
Milliseconds
{(
long
long
)
start
});
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
});
params
.
end_time
=
airmap
::
from_milliseconds_since_epoch
(
airmap
::
Milliseconds
{(
long
long
)
end
});
//-- Rules
//-- Rules & Features
AirMapRulesetsManager
*
pRulesMgr
=
dynamic_cast
<
AirMapRulesetsManager
*>
(
qgcApp
()
->
toolbox
()
->
airspaceManager
()
->
ruleSets
());
_updateRulesAndFeatures
(
params
.
rulesets
,
params
.
features
);
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();
}
}
}
}
}
*/
}
}
}
//-- Geometry: polygon
//-- Geometry: polygon
Geometry
::
Polygon
polygon
;
Geometry
::
Polygon
polygon
;
for
(
const
auto
&
qcoord
:
_flight
.
coords
)
{
for
(
const
auto
&
qcoord
:
_flight
.
coords
)
{
...
@@ -535,6 +540,10 @@ AirMapFlightPlanManager::_updateFlightPlan()
...
@@ -535,6 +540,10 @@ AirMapFlightPlanManager::_updateFlightPlan()
_flightPlan
.
buffer
=
2.
f
;
_flightPlan
.
buffer
=
2.
f
;
_flightPlan
.
takeoff
.
latitude
=
_flight
.
takeoffCoord
.
latitude
();
_flightPlan
.
takeoff
.
latitude
=
_flight
.
takeoffCoord
.
latitude
();
_flightPlan
.
takeoff
.
longitude
=
_flight
.
takeoffCoord
.
longitude
();
_flightPlan
.
takeoff
.
longitude
=
_flight
.
takeoffCoord
.
longitude
();
//-- Rules & Features
_flightPlan
.
rulesets
.
clear
();
_flightPlan
.
features
.
clear
();
_updateRulesAndFeatures
(
_flightPlan
.
rulesets
,
_flightPlan
.
features
);
//-- Geometry: polygon
//-- Geometry: polygon
Geometry
::
Polygon
polygon
;
Geometry
::
Polygon
polygon
;
for
(
const
auto
&
qcoord
:
_flight
.
coords
)
{
for
(
const
auto
&
qcoord
:
_flight
.
coords
)
{
...
@@ -544,17 +553,6 @@ AirMapFlightPlanManager::_updateFlightPlan()
...
@@ -544,17 +553,6 @@ AirMapFlightPlanManager::_updateFlightPlan()
polygon
.
outer_ring
.
coordinates
.
push_back
(
coord
);
polygon
.
outer_ring
.
coordinates
.
push_back
(
coord
);
}
}
_flightPlan
.
geometry
=
Geometry
(
polygon
);
_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
;
_state
=
State
::
FlightUpdate
;
std
::
weak_ptr
<
LifetimeChecker
>
isAlive
(
_instance
);
std
::
weak_ptr
<
LifetimeChecker
>
isAlive
(
_instance
);
_shared
.
doRequestWithLogin
([
this
,
isAlive
](
const
QString
&
login_token
)
{
_shared
.
doRequestWithLogin
([
this
,
isAlive
](
const
QString
&
login_token
)
{
...
...
src/Airmap/AirMapFlightPlanManager.h
View file @
ba37ee4c
...
@@ -20,6 +20,7 @@
...
@@ -20,6 +20,7 @@
#include
"airmap/flight.h"
#include
"airmap/flight.h"
#include
"airmap/flight_plan.h"
#include
"airmap/flight_plan.h"
#include
"airmap/ruleset.h"
class
PlanMasterController
;
class
PlanMasterController
;
...
@@ -112,6 +113,7 @@ private slots:
...
@@ -112,6 +113,7 @@ private slots:
private:
private:
void
_createFlightPlan
();
void
_createFlightPlan
();
bool
_collectFlightDtata
();
bool
_collectFlightDtata
();
void
_updateRulesAndFeatures
(
std
::
vector
<
airmap
::
RuleSet
::
Id
>&
rulesets
,
std
::
unordered_map
<
std
::
string
,
airmap
::
RuleSet
::
Feature
::
Value
>&
features
);
private:
private:
enum
class
State
{
enum
class
State
{
...
...
src/Airmap/AirMapManager.cc
View file @
ba37ee4c
...
@@ -37,8 +37,8 @@ AirMapManager::AirMapManager(QGCApplication* app, QGCToolbox* toolbox)
...
@@ -37,8 +37,8 @@ AirMapManager::AirMapManager(QGCApplication* app, QGCToolbox* toolbox)
{
{
_logger
=
std
::
make_shared
<
qt
::
Logger
>
();
_logger
=
std
::
make_shared
<
qt
::
Logger
>
();
qt
::
register_types
();
// TODO: still needed?
qt
::
register_types
();
// TODO: still needed?
_logger
->
logging_category
().
setEnabled
(
QtDebugMsg
,
fals
e
);
_logger
->
logging_category
().
setEnabled
(
QtDebugMsg
,
tru
e
);
_logger
->
logging_category
().
setEnabled
(
QtInfoMsg
,
fals
e
);
_logger
->
logging_category
().
setEnabled
(
QtInfoMsg
,
tru
e
);
_logger
->
logging_category
().
setEnabled
(
QtWarningMsg
,
false
);
_logger
->
logging_category
().
setEnabled
(
QtWarningMsg
,
false
);
_dispatchingLogger
=
std
::
make_shared
<
qt
::
DispatchingLogger
>
(
_logger
);
_dispatchingLogger
=
std
::
make_shared
<
qt
::
DispatchingLogger
>
(
_logger
);
connect
(
&
_shared
,
&
AirMapSharedState
::
error
,
this
,
&
AirMapManager
::
_error
);
connect
(
&
_shared
,
&
AirMapSharedState
::
error
,
this
,
&
AirMapManager
::
_error
);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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