1
0
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:
pip 2011-02-21 13:33:10 +00:00 committed by pip
parent a5f17b148b
commit 9b10842f5d
4 changed files with 36 additions and 157 deletions

View File

@ -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>

View File

@ -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

View File

@ -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;
// ******************
} }
// ************************************************************************************* // *************************************************************************************

View File

@ -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();