mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2024-12-02 10:24:11 +01:00
Updated some parts of the map plugin to use the new UAVObject utility.
git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@2831 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
parent
a5f17b148b
commit
9b10842f5d
@ -8,5 +8,6 @@
|
|||||||
<dependencyList>
|
<dependencyList>
|
||||||
<dependency name="Core" version="1.0.0"/>
|
<dependency name="Core" version="1.0.0"/>
|
||||||
<dependency name="UAVObjects" version="1.0.0"/>
|
<dependency name="UAVObjects" version="1.0.0"/>
|
||||||
</dependencyList>
|
<dependency name="UAVObjectUtil" version="1.0.0"/>
|
||||||
|
</dependencyList>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
TEMPLATE = lib
|
TEMPLATE = lib
|
||||||
TARGET = OPMapGadget
|
TARGET = OPMapGadget
|
||||||
|
|
||||||
include(../../openpilotgcsplugin.pri)
|
include(../../openpilotgcsplugin.pri)
|
||||||
include(../../plugins/coreplugin/coreplugin.pri)
|
include(../../plugins/coreplugin/coreplugin.pri)
|
||||||
include(../../libs/opmapcontrol/opmapcontrol.pri)
|
include(../../libs/opmapcontrol/opmapcontrol.pri)
|
||||||
include(../../plugins/uavobjects/uavobjects.pri)
|
include(../../plugins/uavobjects/uavobjects.pri)
|
||||||
|
include(../../plugins/uavobjectutil/uavobjectutil.pri)
|
||||||
include(../../plugins/uavtalk/uavtalk.pri)
|
include(../../plugins/uavtalk/uavtalk.pri)
|
||||||
include(../../libs/utils/utils.pri)
|
include(../../libs/utils/utils.pri)
|
||||||
|
|
||||||
HEADERS += opmapplugin.h \
|
HEADERS += opmapplugin.h \
|
||||||
opmapgadgetoptionspage.h \
|
opmapgadgetoptionspage.h \
|
||||||
opmapgadgetfactory.h \
|
opmapgadgetfactory.h \
|
||||||
@ -17,6 +20,7 @@ HEADERS += opmapplugin.h \
|
|||||||
opmap_zoom_slider_widget.h \
|
opmap_zoom_slider_widget.h \
|
||||||
opmap_statusbar_widget.h \
|
opmap_statusbar_widget.h \
|
||||||
opmap_overlay_widget.h
|
opmap_overlay_widget.h
|
||||||
|
|
||||||
SOURCES += opmapplugin.cpp \
|
SOURCES += opmapplugin.cpp \
|
||||||
opmapgadgetwidget.cpp \
|
opmapgadgetwidget.cpp \
|
||||||
opmapgadgetoptionspage.cpp \
|
opmapgadgetoptionspage.cpp \
|
||||||
@ -28,7 +32,9 @@ SOURCES += opmapplugin.cpp \
|
|||||||
opmap_zoom_slider_widget.cpp \
|
opmap_zoom_slider_widget.cpp \
|
||||||
opmap_statusbar_widget.cpp \
|
opmap_statusbar_widget.cpp \
|
||||||
opmap_overlay_widget.cpp
|
opmap_overlay_widget.cpp
|
||||||
|
|
||||||
OTHER_FILES += OPMapGadget.pluginspec
|
OTHER_FILES += OPMapGadget.pluginspec
|
||||||
|
|
||||||
FORMS += opmapgadgetoptionspage.ui \
|
FORMS += opmapgadgetoptionspage.ui \
|
||||||
opmap_widget.ui \
|
opmap_widget.ui \
|
||||||
# opmap_waypointeditor_dialog.ui \
|
# opmap_waypointeditor_dialog.ui \
|
||||||
@ -36,4 +42,5 @@ FORMS += opmapgadgetoptionspage.ui \
|
|||||||
opmap_zoom_slider_widget.ui \
|
opmap_zoom_slider_widget.ui \
|
||||||
opmap_statusbar_widget.ui \
|
opmap_statusbar_widget.ui \
|
||||||
opmap_overlay_widget.ui
|
opmap_overlay_widget.ui
|
||||||
|
|
||||||
RESOURCES += opmap.qrc
|
RESOURCES += opmap.qrc
|
||||||
|
@ -47,6 +47,7 @@
|
|||||||
#include "uavtalk/telemetrymanager.h"
|
#include "uavtalk/telemetrymanager.h"
|
||||||
|
|
||||||
#include "extensionsystem/pluginmanager.h"
|
#include "extensionsystem/pluginmanager.h"
|
||||||
|
#include "uavobjectutilmanager.h"
|
||||||
#include "uavobjectmanager.h"
|
#include "uavobjectmanager.h"
|
||||||
#include "uavobject.h"
|
#include "uavobject.h"
|
||||||
#include "objectpersistence.h"
|
#include "objectpersistence.h"
|
||||||
@ -973,32 +974,25 @@ void OPMapGadgetWidget::onTelemetryConnect()
|
|||||||
{
|
{
|
||||||
telemetry_connected = true;
|
telemetry_connected = true;
|
||||||
|
|
||||||
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
bool set;
|
||||||
if (!pm) return;
|
double LLA[3];
|
||||||
|
|
||||||
UAVObjectManager *obm = pm->getObject<UAVObjectManager>();
|
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
||||||
if (!obm) return;
|
if (!pm) return;
|
||||||
|
UAVObjectUtilManager *obum = pm->getObject<UAVObjectUtilManager>();
|
||||||
|
if (!obum) return;
|
||||||
|
|
||||||
UAVDataObject *obj;
|
// ***********************
|
||||||
// UAVObjectField *field;
|
// fetch the home location
|
||||||
|
|
||||||
// ***********************
|
if (obum->getHomeLocation(set, LLA) < 0)
|
||||||
// fetch the home location
|
return; // error
|
||||||
|
|
||||||
obj = dynamic_cast<UAVDataObject*>(obm->getObject(QString("HomeLocation")));
|
setHome(internals::PointLatLng(LLA[0], LLA[1]));
|
||||||
if (!obj) return;
|
|
||||||
|
|
||||||
double lat = obj->getField("Latitude")->getDouble() * 1e-7;
|
|
||||||
double lon = obj->getField("Longitude")->getDouble() * 1e-7;
|
|
||||||
// double alt = obj->getField("Altitude")->getDouble();
|
|
||||||
setHome(internals::PointLatLng(lat, lon));
|
|
||||||
|
|
||||||
if (m_map)
|
if (m_map)
|
||||||
m_map->SetCurrentPosition(home_position.coord); // set the map position
|
m_map->SetCurrentPosition(home_position.coord); // set the map position
|
||||||
|
|
||||||
// field = obj->getField(QString("Be"));
|
|
||||||
// if (!field) return;
|
|
||||||
|
|
||||||
// ***********************
|
// ***********************
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2264,42 +2258,19 @@ bool OPMapGadgetWidget::getUAV_LLA(double &latitude, double &longitude, double &
|
|||||||
|
|
||||||
bool OPMapGadgetWidget::getGPS_LLA(double &latitude, double &longitude, double &altitude)
|
bool OPMapGadgetWidget::getGPS_LLA(double &latitude, double &longitude, double &altitude)
|
||||||
{
|
{
|
||||||
UAVObject *obj;
|
double LLA[3];
|
||||||
|
|
||||||
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
||||||
if (!pm) return false;
|
if (!pm) return false;
|
||||||
UAVObjectManager *om = pm->getObject<UAVObjectManager>();
|
UAVObjectUtilManager *obum = pm->getObject<UAVObjectUtilManager>();
|
||||||
if (!om) return false;
|
if (!obum) return false;
|
||||||
|
|
||||||
obj = dynamic_cast<UAVDataObject*>(om->getObject(QString("GPSPosition")));
|
if (obum->getGPSPosition(LLA) < 0)
|
||||||
if (!obj) return false;
|
return false; // error
|
||||||
latitude = obj->getField(QString("Latitude"))->getDouble();
|
|
||||||
longitude = obj->getField(QString("Longitude"))->getDouble();
|
|
||||||
altitude = obj->getField(QString("Altitude"))->getDouble();
|
|
||||||
|
|
||||||
latitude *= 1E-7;
|
latitude = LLA[0];
|
||||||
longitude *= 1E-7;
|
longitude = LLA[1];
|
||||||
|
altitude = LLA[2];
|
||||||
if (latitude != latitude) latitude = 0; // nan detection
|
|
||||||
// if (isNan(latitude)) latitude = 0; // nan detection
|
|
||||||
else
|
|
||||||
// if (!isFinite(latitude)) latitude = 0;
|
|
||||||
// else
|
|
||||||
if (latitude > 90) latitude = 90;
|
|
||||||
else
|
|
||||||
if (latitude < -90) latitude = -90;
|
|
||||||
|
|
||||||
if (longitude != longitude) longitude = 0; // nan detection
|
|
||||||
else
|
|
||||||
// if (longitude > std::numeric_limits<double>::max()) longitude = 0; // +infinite
|
|
||||||
// else
|
|
||||||
// if (longitude < -std::numeric_limits<double>::max()) longitude = 0; // -infinite
|
|
||||||
// else
|
|
||||||
if (longitude > 180) longitude = 180;
|
|
||||||
else
|
|
||||||
if (longitude < -180) longitude = -180;
|
|
||||||
|
|
||||||
if (altitude != altitude) altitude = 0; // nan detection
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -2322,42 +2293,6 @@ double OPMapGadgetWidget::getUAV_Yaw()
|
|||||||
return yaw;
|
return yaw;
|
||||||
}
|
}
|
||||||
|
|
||||||
// *************************************************************************************
|
|
||||||
// save an object to SD card
|
|
||||||
|
|
||||||
void OPMapGadgetWidget::saveObjectToSD(UAVObject *obj)
|
|
||||||
{
|
|
||||||
if (!obj) return;
|
|
||||||
|
|
||||||
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
|
||||||
if (!pm) return;
|
|
||||||
|
|
||||||
UAVObjectManager *obm = pm->getObject<UAVObjectManager>();
|
|
||||||
if (!obm) return;
|
|
||||||
|
|
||||||
ObjectPersistence *objper = dynamic_cast<ObjectPersistence *>( obm->getObject(ObjectPersistence::NAME) );
|
|
||||||
if (!objper) return;
|
|
||||||
|
|
||||||
connect(objper, SIGNAL(transactionCompleted(UAVObject *, bool)), this, SLOT(uavObjectTransactionCompleted(UAVObject *, bool)));
|
|
||||||
|
|
||||||
ObjectPersistence::DataFields data;
|
|
||||||
data.Operation = ObjectPersistence::OPERATION_SAVE;
|
|
||||||
data.Selection = ObjectPersistence::SELECTION_SINGLEOBJECT;
|
|
||||||
data.ObjectID = obj->getObjID();
|
|
||||||
data.InstanceID = obj->getInstID();
|
|
||||||
|
|
||||||
objper->setData(data);
|
|
||||||
objper->updated();
|
|
||||||
}
|
|
||||||
|
|
||||||
void OPMapGadgetWidget::uavObjectTransactionCompleted(UAVObject *obj, bool success)
|
|
||||||
{
|
|
||||||
Q_UNUSED(success);
|
|
||||||
|
|
||||||
// Disconnect from sending object
|
|
||||||
if (obj) obj->disconnect(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
// *************************************************************************************
|
// *************************************************************************************
|
||||||
|
|
||||||
void OPMapGadgetWidget::setMapFollowingMode()
|
void OPMapGadgetWidget::setMapFollowingMode()
|
||||||
@ -2390,76 +2325,15 @@ void OPMapGadgetWidget::setMapFollowingMode()
|
|||||||
|
|
||||||
void OPMapGadgetWidget::setHomeLocationObject()
|
void OPMapGadgetWidget::setHomeLocationObject()
|
||||||
{
|
{
|
||||||
double LLA[3];
|
double LLA[3] = {home_position.coord.Lat(), home_position.coord.Lng(), home_position.altitude};
|
||||||
double ECEF[3];
|
|
||||||
double RNE[9];
|
|
||||||
double Be[3];
|
|
||||||
|
|
||||||
LLA[0] = home_position.coord.Lat();
|
|
||||||
LLA[1] = home_position.coord.Lng();
|
|
||||||
LLA[2] = home_position.altitude;
|
|
||||||
|
|
||||||
if (Utils::HomeLocationUtil().getDetails(LLA, ECEF, RNE, Be) < 0)
|
|
||||||
return; // error
|
|
||||||
|
|
||||||
// ******************
|
|
||||||
// save the new home location details
|
|
||||||
|
|
||||||
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
||||||
if (!pm) return;
|
if (!pm) return;
|
||||||
|
UAVObjectUtilManager *obum = pm->getObject<UAVObjectUtilManager>();
|
||||||
|
if (!obum) return;
|
||||||
|
|
||||||
UAVObjectManager *obm = pm->getObject<UAVObjectManager>();
|
if (obum->setHomeLocation(LLA, true) < 0)
|
||||||
if (!obm) return;
|
return; // error
|
||||||
|
|
||||||
UAVDataObject *obj = dynamic_cast<UAVDataObject*>(obm->getObject(QString("HomeLocation")));
|
|
||||||
if (!obj) return;
|
|
||||||
|
|
||||||
UAVObjectField *ECEF_field = obj->getField(QString("ECEF"));
|
|
||||||
if (!ECEF_field) return;
|
|
||||||
|
|
||||||
UAVObjectField *RNE_field = obj->getField(QString("RNE"));
|
|
||||||
if (!RNE_field) return;
|
|
||||||
|
|
||||||
UAVObjectField *Be_field = obj->getField(QString("Be"));
|
|
||||||
if (!Be_field) return;
|
|
||||||
|
|
||||||
obj->getField("Set")->setValue("TRUE");
|
|
||||||
|
|
||||||
obj->getField("Latitude")->setValue(LLA[0] * 10e6);
|
|
||||||
obj->getField("Longitude")->setValue(LLA[1] * 10e6);
|
|
||||||
obj->getField("Altitude")->setValue(LLA[2]);
|
|
||||||
|
|
||||||
for (int i = 0; i < 3; i++)
|
|
||||||
ECEF_field->setValue(ECEF[i] * 100, i);
|
|
||||||
|
|
||||||
for (int i = 0; i < 9; i++)
|
|
||||||
RNE_field->setDouble(RNE[i], i);
|
|
||||||
|
|
||||||
for (int i = 0; i < 3; i++)
|
|
||||||
Be_field->setDouble(Be[i], i);
|
|
||||||
|
|
||||||
obj->updated();
|
|
||||||
|
|
||||||
// ******************
|
|
||||||
// save the new location to SD card
|
|
||||||
|
|
||||||
// saveObjectToSD(obj);
|
|
||||||
|
|
||||||
// ******************
|
|
||||||
// debug
|
|
||||||
|
|
||||||
qDebug() << "opmap setting HomeLocation UAV Object .. " << endl;
|
|
||||||
QString s;
|
|
||||||
s = " LAT:" + QString::number(LLA[0], 'f', 7) + " LON:" + QString::number(LLA[1], 'f', 7) + " ALT:" + QString::number(LLA[2], 'f', 1);
|
|
||||||
qDebug() << s << endl;
|
|
||||||
s = " ECEF "; for (int i = 0; i < 3; i++) s += " " + QString::number((int)(ECEF[i] * 100));
|
|
||||||
qDebug() << s << endl;
|
|
||||||
s = " RNE "; for (int i = 0; i < 9; i++) s += " " + QString::number(RNE[i], 'f', 7);
|
|
||||||
qDebug() << s << endl;
|
|
||||||
s = " Be "; for (int i = 0; i < 3; i++) s += " " + QString::number(Be[i], 'f', 2);
|
|
||||||
qDebug() << s << endl;
|
|
||||||
|
|
||||||
// ******************
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// *************************************************************************************
|
// *************************************************************************************
|
||||||
|
@ -114,7 +114,6 @@ public slots:
|
|||||||
void homePositionUpdated(UAVObject *);
|
void homePositionUpdated(UAVObject *);
|
||||||
void onTelemetryConnect();
|
void onTelemetryConnect();
|
||||||
void onTelemetryDisconnect();
|
void onTelemetryDisconnect();
|
||||||
void uavObjectTransactionCompleted(UAVObject *obj, bool success);
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void resizeEvent(QResizeEvent *event);
|
void resizeEvent(QResizeEvent *event);
|
||||||
@ -325,8 +324,6 @@ private:
|
|||||||
bool getGPS_LLA(double &latitude, double &longitude, double &altitude);
|
bool getGPS_LLA(double &latitude, double &longitude, double &altitude);
|
||||||
double getUAV_Yaw();
|
double getUAV_Yaw();
|
||||||
|
|
||||||
void saveObjectToSD(UAVObject *obj);
|
|
||||||
|
|
||||||
void setMapFollowingMode();
|
void setMapFollowingMode();
|
||||||
|
|
||||||
void setHomeLocationObject();
|
void setHomeLocationObject();
|
||||||
|
Loading…
Reference in New Issue
Block a user