1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2024-11-29 07:24:13 +01:00

OP-119 Flight: Converted HomeLocation object to use cm for the home base instead of floating point.

git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@1382 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
peabody124 2010-08-23 02:49:53 +00:00 committed by peabody124
parent 2596f43511
commit b32184d1ec
7 changed files with 15 additions and 13 deletions

View File

@ -380,8 +380,10 @@ static void load_gps_position(struct opahrs_msg_v1_req_update * update)
update->gps.groundspeed = data.Groundspeed;
update->gps.heading = data.Heading;
update->gps.quality = 0;
double LLA[3] = {(double) data.Latitude, (double) data.Longitude, (double) data.Altitude};
double ECEF[3] = {(double) home.ECEF[0], (double) home.ECEF[1], (double) home.ECEF[2]};
// TODO: replace with conversion from degrees * 10e6 to degrees when the GPS format updated
double LLA[3] = {(double) data.Latitude, (double) data.Longitude, (double) data.Altitude};
// convert from cm back to meters
double ECEF[3] = {(double) (home.ECEF[0] / 100), (double) (home.ECEF[1] / 100), (double) (home.ECEF[2] / 100)};
LLA2Base(LLA, ECEF, (float (*)[3]) home.RNE, update->gps.NED);
}

View File

@ -189,9 +189,9 @@ static void setHomeLocation(PositionActualData * gpsData)
LLA2ECEF(LLA, ECEF);
// TODO: Currently UAVTalk only supports float but these conversions use double
// need to find out if they require that precision and if so extend UAVTAlk
home.ECEF[0] = ECEF[0];
home.ECEF[1] = ECEF[1];
home.ECEF[2] = ECEF[2];
home.ECEF[0] = (int32_t) (ECEF[0] * 100);
home.ECEF[1] = (int32_t) (ECEF[1] * 100);
home.ECEF[2] = (int32_t) (ECEF[2] * 100);
// Compute magnetic flux direction at home location
WMM_GetMagVector(LLA[0], LLA[1], LLA[2], 8, 17, 2010, &home.Be[0]);

View File

@ -33,7 +33,7 @@
#define HOMELOCATION_H
// Object constants
#define HOMELOCATION_OBJID 4244719376U
#define HOMELOCATION_OBJID 3590360786U
#define HOMELOCATION_NAME "HomeLocation"
#define HOMELOCATION_METANAME "HomeLocationMeta"
#define HOMELOCATION_ISSINGLEINST 1
@ -61,7 +61,7 @@ typedef struct {
int32_t Latitude;
int32_t Longitude;
float Altitude;
float ECEF[3];
int32_t ECEF[3];
float RNE[9];
float Be[3];

View File

@ -61,7 +61,7 @@ HomeLocation::HomeLocation(): UAVDataObject(OBJID, ISSINGLEINST, ISSETTINGS, NAM
ECEFElemNames.append("0");
ECEFElemNames.append("1");
ECEFElemNames.append("2");
fields.append( new UAVObjectField(QString("ECEF"), QString("m"), UAVObjectField::FLOAT32, ECEFElemNames, QStringList()) );
fields.append( new UAVObjectField(QString("ECEF"), QString("cm"), UAVObjectField::INT32, ECEFElemNames, QStringList()) );
QStringList RNEElemNames;
RNEElemNames.append("0");
RNEElemNames.append("1");

View File

@ -47,7 +47,7 @@ public:
qint32 Latitude;
qint32 Longitude;
float Altitude;
float ECEF[3];
qint32 ECEF[3];
float RNE[9];
float Be[3];
@ -72,7 +72,7 @@ public:
// Constants
static const quint32 OBJID = 4244719376U;
static const quint32 OBJID = 3590360786U;
static const QString NAME;
static const bool ISSINGLEINST = 1;
static const bool ISSETTINGS = 1;

View File

@ -81,7 +81,7 @@ _fields = [ \
),
uavobject.UAVObjectField(
'ECEF',
'f',
'i',
3,
[
'0',
@ -126,7 +126,7 @@ _fields = [ \
class HomeLocation(uavobject.UAVObject):
## Object constants
OBJID = 4244719376
OBJID = 3590360786
NAME = "HomeLocation"
METANAME = "HomeLocationMeta"
ISSINGLEINST = 1

View File

@ -4,7 +4,7 @@
<field name="Latitude" units="deg * 10e6" type="int32" elements="1" defaultvalue="0"/>
<field name="Longitude" units="deg * 10e6" type="int32" elements="1" defaultvalue="0"/>
<field name="Altitude" units="m over geoid" type="float" elements="1" defaultvalue="0"/>
<field name="ECEF" units="m" type="float" elements="3" defaultvalue="0,0,0"/>
<field name="ECEF" units="cm" type="int32" elements="3" defaultvalue="0,0,0"/>
<field name="RNE" units="" type="float" elements="9" defaultvalue="0,0,0,0,0,0,0,0,0"/>
<field name="Be" units="" type="float" elements="3" defaultvalue="0,0,0"/>
<access gcs="readwrite" flight="readwrite"/>