mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-03-15 07:29:15 +01:00
Refaktored sensor and state UAVObjects consistently into XXYSensor and XXYState
This commit is contained in:
parent
80caceb984
commit
5284195c29
@ -33,7 +33,7 @@
|
||||
#include "openpilot.h"
|
||||
#include "gps_airspeed.h"
|
||||
#include "gpsvelocity.h"
|
||||
#include "attitudeactual.h"
|
||||
#include "attitudestate.h"
|
||||
#include "CoordinateConversions.h"
|
||||
#include <pios_math.h>
|
||||
|
||||
@ -73,8 +73,8 @@ void gps_airspeedInitialize()
|
||||
gps->gpsVelOld_E = gpsVelData.East;
|
||||
gps->gpsVelOld_D = gpsVelData.Down;
|
||||
|
||||
AttitudeActualData attData;
|
||||
AttitudeActualGet(&attData);
|
||||
AttitudeStateData attData;
|
||||
AttitudeStateGet(&attData);
|
||||
|
||||
float Rbe[3][3];
|
||||
float q[4] = { attData.q1, attData.q2, attData.q3, attData.q4 };
|
||||
@ -101,8 +101,8 @@ void gps_airspeedGet(float *v_air_GPS)
|
||||
float Rbe[3][3];
|
||||
|
||||
{ // Scoping to save memory. We really just need Rbe.
|
||||
AttitudeActualData attData;
|
||||
AttitudeActualGet(&attData);
|
||||
AttitudeStateData attData;
|
||||
AttitudeStateGet(&attData);
|
||||
|
||||
float q[4] = { attData.q1, attData.q2, attData.q3, attData.q4 };
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
* @addtogroup OpenPilotModules OpenPilot Modules
|
||||
* @{
|
||||
* @addtogroup AltitudeModule Altitude Module
|
||||
* @brief Communicate with BMP085 and update @ref BaroAltitude "BaroAltitude UAV Object"
|
||||
* @brief Communicate with BMP085 and update @ref BaroSensor "BaroSensor UAV Object"
|
||||
* @{
|
||||
*
|
||||
* @file altitude.c
|
||||
@ -30,9 +30,9 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* Output object: BaroAltitude
|
||||
* Output object: BaroSensor
|
||||
*
|
||||
* This module will periodically update the value of the BaroAltitude object.
|
||||
* This module will periodically update the value of the BaroSensor object.
|
||||
*
|
||||
*/
|
||||
|
||||
@ -41,7 +41,7 @@
|
||||
#include "hwsettings.h"
|
||||
#include "altitude.h"
|
||||
#if defined(PIOS_INCLUDE_BMP085)
|
||||
#include "baroaltitude.h" // object that will be updated by the module
|
||||
#include "barosensor.h" // object that will be updated by the module
|
||||
#endif
|
||||
#if defined(PIOS_INCLUDE_HCSR04)
|
||||
#include "sonaraltitude.h" // object that will be updated by the module
|
||||
@ -80,7 +80,7 @@ int32_t AltitudeStart()
|
||||
{
|
||||
if (altitudeEnabled) {
|
||||
#if defined(PIOS_INCLUDE_BMP085)
|
||||
BaroAltitudeInitialize();
|
||||
BaroSensorInitialize();
|
||||
#endif
|
||||
#if defined(PIOS_INCLUDE_HCSR04)
|
||||
SonarAltitudeInitialize();
|
||||
@ -139,7 +139,7 @@ static void altitudeTask(__attribute__((unused)) void *parameters)
|
||||
}
|
||||
#endif
|
||||
#if defined(PIOS_INCLUDE_BMP085)
|
||||
BaroAltitudeData data;
|
||||
BaroSensorData data;
|
||||
PIOS_BMP085_Init();
|
||||
#endif
|
||||
|
||||
@ -206,7 +206,7 @@ static void altitudeTask(__attribute__((unused)) void *parameters)
|
||||
data.Altitude = 44330.0 * (1.0 - powf((data.Pressure / (BMP085_P0 / 1000.0)), (1.0 / 5.255)));
|
||||
|
||||
// Update the AltitudeActual UAVObject
|
||||
BaroAltitudeSet(&data);
|
||||
BaroSensorSet(&data);
|
||||
}
|
||||
#endif /* if defined(PIOS_INCLUDE_BMP085) */
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
* @addtogroup OpenPilotModules OpenPilot Modules
|
||||
* @{
|
||||
* @addtogroup AltitudeModule Altitude Module
|
||||
* @brief Communicate with BMP085 and update @ref BaroAltitude "BaroAltitude UAV Object"
|
||||
* @brief Communicate with BMP085 and update @ref BaroSensor "BaroSensor UAV Object"
|
||||
* @{
|
||||
*
|
||||
* @file altitude.c
|
||||
@ -30,16 +30,16 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* Output object: BaroAltitude
|
||||
* Output object: BaroSensor
|
||||
*
|
||||
* This module will periodically update the value of the BaroAltitude object.
|
||||
* This module will periodically update the value of the BaroSensor object.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <openpilot.h>
|
||||
|
||||
#include "altitude.h"
|
||||
#include "baroaltitude.h" // object that will be updated by the module
|
||||
#include "barosensor.h" // object that will be updated by the module
|
||||
#if defined(PIOS_INCLUDE_HCSR04)
|
||||
#include "sonaraltitude.h" // object that will be updated by the module
|
||||
#endif
|
||||
@ -76,7 +76,7 @@ int32_t AltitudeStart()
|
||||
*/
|
||||
int32_t AltitudeInitialize()
|
||||
{
|
||||
BaroAltitudeInitialize();
|
||||
BaroSensorInitialize();
|
||||
#if defined(PIOS_INCLUDE_HCSR04)
|
||||
SonarAltitudeInitialize();
|
||||
#endif
|
||||
@ -88,7 +88,7 @@ MODULE_INITCALL(AltitudeInitialize, AltitudeStart)
|
||||
*/
|
||||
static void altitudeTask(__attribute__((unused)) void *parameters)
|
||||
{
|
||||
BaroAltitudeData data;
|
||||
BaroSensorData data;
|
||||
|
||||
#if defined(PIOS_INCLUDE_HCSR04)
|
||||
SonarAltitudeData sonardata;
|
||||
@ -163,7 +163,7 @@ static void altitudeTask(__attribute__((unused)) void *parameters)
|
||||
data.Altitude = 44330.0f * (1.0f - powf(data.Pressure / MS5611_P0, (1.0f / 5.255f)));
|
||||
|
||||
// Update the AltitudeActual UAVObject
|
||||
BaroAltitudeSet(&data);
|
||||
BaroSensorSet(&data);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -28,7 +28,7 @@
|
||||
|
||||
/**
|
||||
* Input object: ActiveWaypoint
|
||||
* Input object: PositionActual
|
||||
* Input object: PositionState
|
||||
* Input object: ManualControlCommand
|
||||
* Output object: AttitudeDesired
|
||||
*
|
||||
@ -48,14 +48,14 @@
|
||||
#include <math.h>
|
||||
#include <CoordinateConversions.h>
|
||||
#include <altholdsmoothed.h>
|
||||
#include <attitudeactual.h>
|
||||
#include <attitudestate.h>
|
||||
#include <altitudeholdsettings.h>
|
||||
#include <altitudeholddesired.h> // object that will be updated by the module
|
||||
#include <baroaltitude.h>
|
||||
#include <positionactual.h>
|
||||
#include <barosensor.h>
|
||||
#include <positionstate.h>
|
||||
#include <flightstatus.h>
|
||||
#include <stabilizationdesired.h>
|
||||
#include <accels.h>
|
||||
#include <accelstate.h>
|
||||
#include <taskinfo.h>
|
||||
#include <pios_constants.h>
|
||||
// Private constants
|
||||
@ -133,11 +133,11 @@ static void altitudeHoldTask(__attribute__((unused)) void *parameters)
|
||||
|
||||
// Listen for updates.
|
||||
AltitudeHoldDesiredConnectQueue(queue);
|
||||
BaroAltitudeConnectQueue(queue);
|
||||
BaroSensorConnectQueue(queue);
|
||||
FlightStatusConnectQueue(queue);
|
||||
AccelsConnectQueue(queue);
|
||||
AccelStateConnectQueue(queue);
|
||||
|
||||
BaroAltitudeAltitudeGet(&smoothed_altitude);
|
||||
BaroSensorAltitudeGet(&smoothed_altitude);
|
||||
running = false;
|
||||
enum init_state { WAITING_BARO, WAITIING_INIT, INITED } init = WAITING_BARO;
|
||||
|
||||
@ -152,7 +152,7 @@ static void altitudeHoldTask(__attribute__((unused)) void *parameters)
|
||||
|
||||
// Todo: Add alarm if it should be running
|
||||
continue;
|
||||
} else if (ev.obj == BaroAltitudeHandle()) {
|
||||
} else if (ev.obj == BaroSensorHandle()) {
|
||||
baro_updated = true;
|
||||
|
||||
init = (init == WAITING_BARO) ? WAITIING_INIT : init;
|
||||
@ -174,7 +174,7 @@ static void altitudeHoldTask(__attribute__((unused)) void *parameters)
|
||||
} else if (flightStatus.FlightMode != FLIGHTSTATUS_FLIGHTMODE_ALTITUDEHOLD) {
|
||||
running = false;
|
||||
}
|
||||
} else if (ev.obj == AccelsHandle()) {
|
||||
} else if (ev.obj == AccelStateHandle()) {
|
||||
static uint32_t timeval;
|
||||
|
||||
static float z[4] = { 0, 0, 0, 0 };
|
||||
@ -197,17 +197,17 @@ static void altitudeHoldTask(__attribute__((unused)) void *parameters)
|
||||
S[1] = altitudeHoldSettings.AccelNoise;
|
||||
G[2] = altitudeHoldSettings.AccelDrift;
|
||||
|
||||
AccelsData accels;
|
||||
AccelsGet(&accels);
|
||||
AttitudeActualData attitudeActual;
|
||||
AttitudeActualGet(&attitudeActual);
|
||||
BaroAltitudeData baro;
|
||||
BaroAltitudeGet(&baro);
|
||||
AccelStateData accelState;
|
||||
AccelStateGet(&accelState);
|
||||
AttitudeStateData attitudeState;
|
||||
AttitudeStateGet(&attitudeState);
|
||||
BaroSensorData baro;
|
||||
BaroSensorGet(&baro);
|
||||
|
||||
/* Downsample accels to stop this calculation consuming too much CPU */
|
||||
accels_accum[0] += accels.x;
|
||||
accels_accum[1] += accels.y;
|
||||
accels_accum[2] += accels.z;
|
||||
accels_accum[0] += accelState.x;
|
||||
accels_accum[1] += accelState.y;
|
||||
accels_accum[2] += accelState.z;
|
||||
accel_downsample_count++;
|
||||
|
||||
if (accel_downsample_count < ACCEL_DOWNSAMPLE) {
|
||||
@ -215,9 +215,9 @@ static void altitudeHoldTask(__attribute__((unused)) void *parameters)
|
||||
}
|
||||
|
||||
accel_downsample_count = 0;
|
||||
accels.x = accels_accum[0] / ACCEL_DOWNSAMPLE;
|
||||
accels.y = accels_accum[1] / ACCEL_DOWNSAMPLE;
|
||||
accels.z = accels_accum[2] / ACCEL_DOWNSAMPLE;
|
||||
accelState.x = accels_accum[0] / ACCEL_DOWNSAMPLE;
|
||||
accelState.y = accels_accum[1] / ACCEL_DOWNSAMPLE;
|
||||
accelState.z = accels_accum[2] / ACCEL_DOWNSAMPLE;
|
||||
accels_accum[0] = accels_accum[1] = accels_accum[2] = 0;
|
||||
|
||||
thisTime = xTaskGetTickCount();
|
||||
@ -225,7 +225,7 @@ static void altitudeHoldTask(__attribute__((unused)) void *parameters)
|
||||
if (init == WAITIING_INIT) {
|
||||
z[0] = baro.Altitude;
|
||||
z[1] = 0;
|
||||
z[2] = accels.z;
|
||||
z[2] = accelState.z;
|
||||
z[3] = 0;
|
||||
init = INITED;
|
||||
} else if (init == WAITING_BARO) {
|
||||
@ -236,14 +236,14 @@ static void altitudeHoldTask(__attribute__((unused)) void *parameters)
|
||||
// rotate avg accels into earth frame and store it
|
||||
if (1) {
|
||||
float q[4], Rbe[3][3];
|
||||
q[0] = attitudeActual.q1;
|
||||
q[1] = attitudeActual.q2;
|
||||
q[2] = attitudeActual.q3;
|
||||
q[3] = attitudeActual.q4;
|
||||
q[0] = attitudeState.q1;
|
||||
q[1] = attitudeState.q2;
|
||||
q[2] = attitudeState.q3;
|
||||
q[3] = attitudeState.q4;
|
||||
Quaternion2R(q, Rbe);
|
||||
x[1] = -(Rbe[0][2] * accels.x + Rbe[1][2] * accels.y + Rbe[2][2] * accels.z + 9.81f);
|
||||
x[1] = -(Rbe[0][2] * accelState.x + Rbe[1][2] * accelState.y + Rbe[2][2] * accelState.z + 9.81f);
|
||||
} else {
|
||||
x[1] = -accels.z + 9.81f;
|
||||
x[1] = -accelState.z + 9.81f;
|
||||
}
|
||||
|
||||
dT = PIOS_DELAY_DiffuS(timeval) / 1.0e6f;
|
||||
|
@ -4,7 +4,7 @@
|
||||
* @{
|
||||
* @addtogroup Attitude Copter Control Attitude Estimation
|
||||
* @brief Acquires sensor data and computes attitude estimate
|
||||
* Specifically updates the the @ref AttitudeActual "AttitudeActual" and @ref AttitudeRaw "AttitudeRaw" settings objects
|
||||
* Specifically updates the the @ref AttitudeState "AttitudeState" and @ref AttitudeRaw "AttitudeRaw" settings objects
|
||||
* @{
|
||||
*
|
||||
* @file attitude.c
|
||||
@ -32,7 +32,7 @@
|
||||
|
||||
/**
|
||||
* Input objects: None, takes sensor data via pios
|
||||
* Output objects: @ref AttitudeRaw @ref AttitudeActual
|
||||
* Output objects: @ref AttitudeRaw @ref AttitudeState
|
||||
*
|
||||
* This module computes an attitude estimate from the sensor data
|
||||
*
|
||||
@ -53,9 +53,9 @@
|
||||
#include <pios_board_info.h>
|
||||
|
||||
#include "attitude.h"
|
||||
#include "gyros.h"
|
||||
#include "accels.h"
|
||||
#include "attitudeactual.h"
|
||||
#include "gyrostate.h"
|
||||
#include "accelstate.h"
|
||||
#include "attitudestate.h"
|
||||
#include "attitudesettings.h"
|
||||
#include "flightstatus.h"
|
||||
#include "manualcontrolcommand.h"
|
||||
@ -83,9 +83,9 @@ static void AttitudeTask(void *parameters);
|
||||
static float gyro_correct_int[3] = { 0, 0, 0 };
|
||||
static xQueueHandle gyro_queue;
|
||||
|
||||
static int32_t updateSensors(AccelsData *, GyrosData *);
|
||||
static int32_t updateSensorsCC3D(AccelsData *accelsData, GyrosData *gyrosData);
|
||||
static void updateAttitude(AccelsData *, GyrosData *);
|
||||
static int32_t updateSensors(AccelStateData *, GyroStateData *);
|
||||
static int32_t updateSensorsCC3D(AccelStateData *accelStateData, GyroStateData *gyrosData);
|
||||
static void updateAttitude(AccelStateData *, GyroStateData *);
|
||||
static void settingsUpdatedCb(UAVObjEvent *objEv);
|
||||
|
||||
static float accelKi = 0;
|
||||
@ -134,19 +134,19 @@ int32_t AttitudeStart(void)
|
||||
*/
|
||||
int32_t AttitudeInitialize(void)
|
||||
{
|
||||
AttitudeActualInitialize();
|
||||
AttitudeStateInitialize();
|
||||
AttitudeSettingsInitialize();
|
||||
AccelsInitialize();
|
||||
GyrosInitialize();
|
||||
AccelStateInitialize();
|
||||
GyroStateInitialize();
|
||||
|
||||
// Initialize quaternion
|
||||
AttitudeActualData attitude;
|
||||
AttitudeActualGet(&attitude);
|
||||
AttitudeStateData attitude;
|
||||
AttitudeStateGet(&attitude);
|
||||
attitude.q1 = 1;
|
||||
attitude.q2 = 0;
|
||||
attitude.q3 = 0;
|
||||
attitude.q4 = 0;
|
||||
AttitudeActualSet(&attitude);
|
||||
AttitudeStateSet(&attitude);
|
||||
|
||||
// Cannot trust the values to init right above if BL runs
|
||||
gyro_correct_int[0] = 0;
|
||||
@ -248,14 +248,14 @@ static void AttitudeTask(__attribute__((unused)) void *parameters)
|
||||
|
||||
PIOS_WDG_UpdateFlag(PIOS_WDG_ATTITUDE);
|
||||
|
||||
AccelsData accels;
|
||||
GyrosData gyros;
|
||||
AccelStateData accelState;
|
||||
GyroStateData gyros;
|
||||
int32_t retval = 0;
|
||||
|
||||
if (cc3d) {
|
||||
retval = updateSensorsCC3D(&accels, &gyros);
|
||||
retval = updateSensorsCC3D(&accelState, &gyros);
|
||||
} else {
|
||||
retval = updateSensors(&accels, &gyros);
|
||||
retval = updateSensors(&accelState, &gyros);
|
||||
}
|
||||
|
||||
// Only update attitude when sensor data is good
|
||||
@ -263,8 +263,8 @@ static void AttitudeTask(__attribute__((unused)) void *parameters)
|
||||
AlarmsSet(SYSTEMALARMS_ALARM_ATTITUDE, SYSTEMALARMS_ALARM_ERROR);
|
||||
} else {
|
||||
// Do not update attitude data in simulation mode
|
||||
if (!AttitudeActualReadOnly()) {
|
||||
updateAttitude(&accels, &gyros);
|
||||
if (!AttitudeStateReadOnly()) {
|
||||
updateAttitude(&accelState, &gyros);
|
||||
}
|
||||
|
||||
AlarmsClear(SYSTEMALARMS_ALARM_ATTITUDE);
|
||||
@ -279,7 +279,7 @@ float gyros_passed[3];
|
||||
* @param[in] attitudeRaw Populate the UAVO instead of saving right here
|
||||
* @return 0 if successfull, -1 if not
|
||||
*/
|
||||
static int32_t updateSensors(AccelsData *accels, GyrosData *gyros)
|
||||
static int32_t updateSensors(AccelStateData *accelState, GyroStateData *gyros)
|
||||
{
|
||||
struct pios_adxl345_data accel_data;
|
||||
float gyro[4];
|
||||
@ -291,7 +291,7 @@ static int32_t updateSensors(AccelsData *accels, GyrosData *gyros)
|
||||
}
|
||||
|
||||
// Do not read raw sensor data in simulation mode
|
||||
if (GyrosReadOnly() || AccelsReadOnly()) {
|
||||
if (GyroStateReadOnly() || AccelStateReadOnly()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -317,7 +317,7 @@ static int32_t updateSensors(AccelsData *accels, GyrosData *gyros)
|
||||
y += -accel_data.y;
|
||||
z += -accel_data.z;
|
||||
} while ((i < 32) && (samples_remaining > 0));
|
||||
gyros->temperature = samples_remaining;
|
||||
// gyros->temperature = samples_remaining;
|
||||
|
||||
float accel[3] = { (float)x / i, (float)y / i, (float)z / i };
|
||||
|
||||
@ -325,17 +325,17 @@ static int32_t updateSensors(AccelsData *accels, GyrosData *gyros)
|
||||
// TODO: rotate sensors too so stabilization is well behaved
|
||||
float vec_out[3];
|
||||
rot_mult(R, accel, vec_out);
|
||||
accels->x = vec_out[0];
|
||||
accels->y = vec_out[1];
|
||||
accels->z = vec_out[2];
|
||||
accelState->x = vec_out[0];
|
||||
accelState->y = vec_out[1];
|
||||
accelState->z = vec_out[2];
|
||||
rot_mult(R, &gyros->x, vec_out);
|
||||
gyros->x = vec_out[0];
|
||||
gyros->y = vec_out[1];
|
||||
gyros->z = vec_out[2];
|
||||
gyros->x = vec_out[0];
|
||||
gyros->y = vec_out[1];
|
||||
gyros->z = vec_out[2];
|
||||
} else {
|
||||
accels->x = accel[0];
|
||||
accels->y = accel[1];
|
||||
accels->z = accel[2];
|
||||
accelState->x = accel[0];
|
||||
accelState->y = accel[1];
|
||||
accelState->z = accel[2];
|
||||
}
|
||||
|
||||
if (trim_requested) {
|
||||
@ -349,17 +349,17 @@ static int32_t updateSensors(AccelsData *accels, GyrosData *gyros)
|
||||
if ((armed == FLIGHTSTATUS_ARMED_ARMED) && (throttle > 0.0f)) {
|
||||
trim_samples++;
|
||||
// Store the digitally scaled version since that is what we use for bias
|
||||
trim_accels[0] += accels->x;
|
||||
trim_accels[1] += accels->y;
|
||||
trim_accels[2] += accels->z;
|
||||
trim_accels[0] += accelState->x;
|
||||
trim_accels[1] += accelState->y;
|
||||
trim_accels[2] += accelState->z;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Scale accels and correct bias
|
||||
accels->x = (accels->x - accelbias[0]) * ACCEL_SCALE;
|
||||
accels->y = (accels->y - accelbias[1]) * ACCEL_SCALE;
|
||||
accels->z = (accels->z - accelbias[2]) * ACCEL_SCALE;
|
||||
accelState->x = (accelState->x - accelbias[0]) * ACCEL_SCALE;
|
||||
accelState->y = (accelState->y - accelbias[1]) * ACCEL_SCALE;
|
||||
accelState->z = (accelState->z - accelbias[2]) * ACCEL_SCALE;
|
||||
|
||||
if (bias_correct_gyro) {
|
||||
// Applying integral component here so it can be seen on the gyros and correct bias
|
||||
@ -376,8 +376,8 @@ static int32_t updateSensors(AccelsData *accels, GyrosData *gyros)
|
||||
// and make it average zero (weakly)
|
||||
gyro_correct_int[2] += -gyros->z * yawBiasRate;
|
||||
|
||||
GyrosSet(gyros);
|
||||
AccelsSet(accels);
|
||||
GyroStateSet(gyros);
|
||||
AccelStateSet(accelState);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -388,7 +388,7 @@ static int32_t updateSensors(AccelsData *accels, GyrosData *gyros)
|
||||
* @return 0 if successfull, -1 if not
|
||||
*/
|
||||
struct pios_mpu6000_data mpu6000_data;
|
||||
static int32_t updateSensorsCC3D(AccelsData *accelsData, GyrosData *gyrosData)
|
||||
static int32_t updateSensorsCC3D(AccelStateData *accelStateData, GyroStateData *gyrosData)
|
||||
{
|
||||
float accels[3], gyros[3];
|
||||
|
||||
@ -400,7 +400,7 @@ static int32_t updateSensorsCC3D(AccelsData *accelsData, GyrosData *gyrosData)
|
||||
return -1; // Error, no data
|
||||
}
|
||||
// Do not read raw sensor data in simulation mode
|
||||
if (GyrosReadOnly() || AccelsReadOnly()) {
|
||||
if (GyroStateReadOnly() || AccelStateReadOnly()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -412,8 +412,8 @@ static int32_t updateSensorsCC3D(AccelsData *accelsData, GyrosData *gyrosData)
|
||||
accels[1] = mpu6000_data.accel_y * PIOS_MPU6000_GetAccelScale();
|
||||
accels[2] = mpu6000_data.accel_z * PIOS_MPU6000_GetAccelScale();
|
||||
|
||||
gyrosData->temperature = 35.0f + ((float)mpu6000_data.temperature + 512.0f) / 340.0f;
|
||||
accelsData->temperature = 35.0f + ((float)mpu6000_data.temperature + 512.0f) / 340.0f;
|
||||
// gyrosData->temperature = 35.0f + ((float)mpu6000_data.temperature + 512.0f) / 340.0f;
|
||||
// accelsData->temperature = 35.0f + ((float)mpu6000_data.temperature + 512.0f) / 340.0f;
|
||||
#endif /* if defined(PIOS_INCLUDE_MPU6000) */
|
||||
|
||||
if (rotate) {
|
||||
@ -429,13 +429,13 @@ static int32_t updateSensorsCC3D(AccelsData *accelsData, GyrosData *gyrosData)
|
||||
gyros[2] = vec_out[2];
|
||||
}
|
||||
|
||||
accelsData->x = accels[0] - accelbias[0] * ACCEL_SCALE; // Applying arbitrary scale here to match CC v1
|
||||
accelsData->y = accels[1] - accelbias[1] * ACCEL_SCALE;
|
||||
accelsData->z = accels[2] - accelbias[2] * ACCEL_SCALE;
|
||||
accelStateData->x = accels[0] - accelbias[0] * ACCEL_SCALE; // Applying arbitrary scale here to match CC v1
|
||||
accelStateData->y = accels[1] - accelbias[1] * ACCEL_SCALE;
|
||||
accelStateData->z = accels[2] - accelbias[2] * ACCEL_SCALE;
|
||||
|
||||
gyrosData->x = gyros[0];
|
||||
gyrosData->y = gyros[1];
|
||||
gyrosData->z = gyros[2];
|
||||
gyrosData->x = gyros[0];
|
||||
gyrosData->y = gyros[1];
|
||||
gyrosData->z = gyros[2];
|
||||
|
||||
if (bias_correct_gyro) {
|
||||
// Applying integral component here so it can be seen on the gyros and correct bias
|
||||
@ -452,8 +452,8 @@ static int32_t updateSensorsCC3D(AccelsData *accelsData, GyrosData *gyrosData)
|
||||
// and make it average zero (weakly)
|
||||
gyro_correct_int[2] += -gyrosData->z * yawBiasRate;
|
||||
|
||||
GyrosSet(gyrosData);
|
||||
AccelsSet(accelsData);
|
||||
GyroStateSet(gyrosData);
|
||||
AccelStateSet(accelStateData);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -471,7 +471,7 @@ static inline void apply_accel_filter(const float *raw, float *filtered)
|
||||
}
|
||||
}
|
||||
|
||||
static void updateAttitude(AccelsData *accelsData, GyrosData *gyrosData)
|
||||
static void updateAttitude(AccelStateData *accelStateData, GyroStateData *gyrosData)
|
||||
{
|
||||
float dT;
|
||||
portTickType thisSysTime = xTaskGetTickCount();
|
||||
@ -482,7 +482,7 @@ static void updateAttitude(AccelsData *accelsData, GyrosData *gyrosData)
|
||||
|
||||
// Bad practice to assume structure order, but saves memory
|
||||
float *gyros = &gyrosData->x;
|
||||
float *accels = &accelsData->x;
|
||||
float *accels = &accelStateData->x;
|
||||
|
||||
float grot[3];
|
||||
float accel_err[3];
|
||||
@ -573,15 +573,15 @@ static void updateAttitude(AccelsData *accelsData, GyrosData *gyrosData)
|
||||
q[3] = q[3] / qmag;
|
||||
}
|
||||
|
||||
AttitudeActualData attitudeActual;
|
||||
AttitudeActualGet(&attitudeActual);
|
||||
AttitudeStateData attitudeState;
|
||||
AttitudeStateGet(&attitudeState);
|
||||
|
||||
quat_copy(q, &attitudeActual.q1);
|
||||
quat_copy(q, &attitudeState.q1);
|
||||
|
||||
// Convert into eueler degrees (makes assumptions about RPY order)
|
||||
Quaternion2RPY(&attitudeActual.q1, &attitudeActual.Roll);
|
||||
Quaternion2RPY(&attitudeState.q1, &attitudeState.Roll);
|
||||
|
||||
AttitudeActualSet(&attitudeActual);
|
||||
AttitudeStateSet(&attitudeState);
|
||||
}
|
||||
|
||||
static void settingsUpdatedCb(__attribute__((unused)) UAVObjEvent *objEv)
|
||||
|
@ -4,7 +4,7 @@
|
||||
* @{
|
||||
* @addtogroup Attitude Copter Control Attitude Estimation
|
||||
* @brief Acquires sensor data and computes attitude estimate
|
||||
* Specifically updates the the @ref AttitudeActual "AttitudeActual" and @ref AttitudeRaw "AttitudeRaw" settings objects
|
||||
* Specifically updates the the @ref AttitudeState "AttitudeState" and @ref AttitudeRaw "AttitudeRaw" settings objects
|
||||
* @{
|
||||
*
|
||||
* @file attitude.c
|
||||
@ -32,7 +32,7 @@
|
||||
|
||||
/**
|
||||
* Input objects: None, takes sensor data via pios
|
||||
* Output objects: @ref AttitudeRaw @ref AttitudeActual
|
||||
* Output objects: @ref AttitudeRaw @ref AttitudeState
|
||||
*
|
||||
* This module computes an attitude estimate from the sensor data
|
||||
*
|
||||
@ -51,25 +51,27 @@
|
||||
#include <openpilot.h>
|
||||
|
||||
#include "attitude.h"
|
||||
#include "accels.h"
|
||||
#include "accelsensor.h"
|
||||
#include "accelstate.h"
|
||||
#include "airspeedsensor.h"
|
||||
#include "airspeedactual.h"
|
||||
#include "attitudeactual.h"
|
||||
#include "airspeedstate.h"
|
||||
#include "attitudestate.h"
|
||||
#include "attitudesettings.h"
|
||||
#include "baroaltitude.h"
|
||||
#include "barosensor.h"
|
||||
#include "flightstatus.h"
|
||||
#include "gpsposition.h"
|
||||
#include "gpsvelocity.h"
|
||||
#include "gyros.h"
|
||||
#include "gyrosbias.h"
|
||||
#include "gyrostate.h"
|
||||
#include "gyrosensor.h"
|
||||
#include "homelocation.h"
|
||||
#include "magnetometer.h"
|
||||
#include "positionactual.h"
|
||||
#include "magnetosensor.h"
|
||||
#include "magnetostate.h"
|
||||
#include "positionstate.h"
|
||||
#include "ekfconfiguration.h"
|
||||
#include "ekfstatevariance.h"
|
||||
#include "revocalibration.h"
|
||||
#include "revosettings.h"
|
||||
#include "velocityactual.h"
|
||||
#include "velocitystate.h"
|
||||
#include "taskinfo.h"
|
||||
|
||||
#include "CoordinateConversions.h"
|
||||
@ -159,12 +161,12 @@ static inline bool invalid_var(float data)
|
||||
*/
|
||||
int32_t AttitudeInitialize(void)
|
||||
{
|
||||
AttitudeActualInitialize();
|
||||
AirspeedActualInitialize();
|
||||
AttitudeStateInitialize();
|
||||
AirspeedStateInitialize();
|
||||
AirspeedSensorInitialize();
|
||||
AttitudeSettingsInitialize();
|
||||
PositionActualInitialize();
|
||||
VelocityActualInitialize();
|
||||
PositionStateInitialize();
|
||||
VelocityStateInitialize();
|
||||
RevoSettingsInitialize();
|
||||
RevoCalibrationInitialize();
|
||||
EKFConfigurationInitialize();
|
||||
@ -175,21 +177,13 @@ int32_t AttitudeInitialize(void)
|
||||
HomeLocationInitialize();
|
||||
|
||||
// Initialize quaternion
|
||||
AttitudeActualData attitude;
|
||||
AttitudeActualGet(&attitude);
|
||||
AttitudeStateData attitude;
|
||||
AttitudeStateGet(&attitude);
|
||||
attitude.q1 = 1.0f;
|
||||
attitude.q2 = 0.0f;
|
||||
attitude.q3 = 0.0f;
|
||||
attitude.q4 = 0.0f;
|
||||
AttitudeActualSet(&attitude);
|
||||
|
||||
// Cannot trust the values to init right above if BL runs
|
||||
GyrosBiasData gyrosBias;
|
||||
GyrosBiasGet(&gyrosBias);
|
||||
gyrosBias.x = 0.0f;
|
||||
gyrosBias.y = 0.0f;
|
||||
gyrosBias.z = 0.0f;
|
||||
GyrosBiasSet(&gyrosBias);
|
||||
AttitudeStateSet(&attitude);
|
||||
|
||||
AttitudeSettingsConnectCallback(&settingsUpdatedCb);
|
||||
RevoSettingsConnectCallback(&settingsUpdatedCb);
|
||||
@ -221,11 +215,11 @@ int32_t AttitudeStart(void)
|
||||
PIOS_TASK_MONITOR_RegisterTask(TASKINFO_RUNNING_ATTITUDE, attitudeTaskHandle);
|
||||
PIOS_WDG_RegisterFlag(PIOS_WDG_ATTITUDE);
|
||||
|
||||
GyrosConnectQueue(gyroQueue);
|
||||
AccelsConnectQueue(accelQueue);
|
||||
MagnetometerConnectQueue(magQueue);
|
||||
GyroSensorConnectQueue(gyroQueue);
|
||||
AccelSensorConnectQueue(accelQueue);
|
||||
MagnetoSensorConnectQueue(magQueue);
|
||||
AirspeedSensorConnectQueue(airspeedQueue);
|
||||
BaroAltitudeConnectQueue(baroQueue);
|
||||
BaroSensorConnectQueue(baroQueue);
|
||||
GPSPositionConnectQueue(gpsQueue);
|
||||
GPSVelocityConnectQueue(gpsVelQueue);
|
||||
|
||||
@ -291,8 +285,8 @@ float magKp = 0.01f;
|
||||
static int32_t updateAttitudeComplementary(bool first_run)
|
||||
{
|
||||
UAVObjEvent ev;
|
||||
GyrosData gyrosData;
|
||||
AccelsData accelsData;
|
||||
GyroSensorData gyroSensorData;
|
||||
AccelSensorData accelSensorData;
|
||||
static int32_t timeval;
|
||||
float dT;
|
||||
static uint8_t init = 0;
|
||||
@ -302,13 +296,13 @@ static int32_t updateAttitudeComplementary(bool first_run)
|
||||
xQueueReceive(accelQueue, &ev, 1 / portTICK_RATE_MS) != pdTRUE) {
|
||||
// When one of these is updated so should the other
|
||||
// Do not set attitude timeout warnings in simulation mode
|
||||
if (!AttitudeActualReadOnly()) {
|
||||
if (!AttitudeStateReadOnly()) {
|
||||
AlarmsSet(SYSTEMALARMS_ALARM_ATTITUDE, SYSTEMALARMS_ALARM_WARNING);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
AccelsGet(&accelsData);
|
||||
AccelSensorGet(&accelSensorData);
|
||||
|
||||
// During initialization and
|
||||
if (first_run) {
|
||||
@ -317,43 +311,43 @@ static int32_t updateAttitudeComplementary(bool first_run)
|
||||
if (xQueueReceive(magQueue, &ev, 0 / portTICK_RATE_MS) != pdTRUE) {
|
||||
return -1;
|
||||
}
|
||||
MagnetometerData magData;
|
||||
MagnetometerGet(&magData);
|
||||
MagnetoSensorData magData;
|
||||
MagnetoSensorGet(&magData);
|
||||
#else
|
||||
MagnetometerData magData;
|
||||
MagnetoSensorData magData;
|
||||
magData.x = 100.0f;
|
||||
magData.y = 0.0f;
|
||||
magData.z = 0.0f;
|
||||
#endif
|
||||
AttitudeActualData attitudeActual;
|
||||
AttitudeActualGet(&attitudeActual);
|
||||
AttitudeStateData attitudeState;
|
||||
AttitudeStateGet(&attitudeState);
|
||||
init = 0;
|
||||
|
||||
// Set initial attitude. Use accels to determine roll and pitch, rotate magnetic measurement accordingly,
|
||||
// so pseudo "north" vector can be estimated even if the board is not level
|
||||
attitudeActual.Roll = atan2f(-accelsData.y, -accelsData.z);
|
||||
float zn = cosf(attitudeActual.Roll) * magData.z + sinf(attitudeActual.Roll) * magData.y;
|
||||
float yn = cosf(attitudeActual.Roll) * magData.y - sinf(attitudeActual.Roll) * magData.z;
|
||||
attitudeState.Roll = atan2f(-accelSensorData.y, -accelSensorData.z);
|
||||
float zn = cosf(attitudeState.Roll) * magData.z + sinf(attitudeState.Roll) * magData.y;
|
||||
float yn = cosf(attitudeState.Roll) * magData.y - sinf(attitudeState.Roll) * magData.z;
|
||||
|
||||
// rotate accels z vector according to roll
|
||||
float azn = cosf(attitudeActual.Roll) * accelsData.z + sinf(attitudeActual.Roll) * accelsData.y;
|
||||
attitudeActual.Pitch = atan2f(accelsData.x, -azn);
|
||||
float azn = cosf(attitudeState.Roll) * accelSensorData.z + sinf(attitudeState.Roll) * accelSensorData.y;
|
||||
attitudeState.Pitch = atan2f(accelSensorData.x, -azn);
|
||||
|
||||
float xn = cosf(attitudeActual.Pitch) * magData.x + sinf(attitudeActual.Pitch) * zn;
|
||||
float xn = cosf(attitudeState.Pitch) * magData.x + sinf(attitudeState.Pitch) * zn;
|
||||
|
||||
attitudeActual.Yaw = atan2f(-yn, xn);
|
||||
attitudeState.Yaw = atan2f(-yn, xn);
|
||||
// TODO: This is still a hack
|
||||
// Put this in a proper generic function in CoordinateConversion.c
|
||||
// should take 4 vectors: g (0,0,-9.81), accels, Be (or 1,0,0 if no home loc) and magnetometers (or 1,0,0 if no mags)
|
||||
// should calculate the rotation in 3d space using proper cross product math
|
||||
// SUBTODO: formulate the math required
|
||||
|
||||
attitudeActual.Roll = RAD2DEG(attitudeActual.Roll);
|
||||
attitudeActual.Pitch = RAD2DEG(attitudeActual.Pitch);
|
||||
attitudeActual.Yaw = RAD2DEG(attitudeActual.Yaw);
|
||||
attitudeState.Roll = RAD2DEG(attitudeState.Roll);
|
||||
attitudeState.Pitch = RAD2DEG(attitudeState.Pitch);
|
||||
attitudeState.Yaw = RAD2DEG(attitudeState.Yaw);
|
||||
|
||||
RPY2Quaternion(&attitudeActual.Roll, &attitudeActual.q1);
|
||||
AttitudeActualSet(&attitudeActual);
|
||||
RPY2Quaternion(&attitudeState.Roll, &attitudeState.q1);
|
||||
AttitudeStateSet(&attitudeState);
|
||||
|
||||
timeval = PIOS_DELAY_GetRaw();
|
||||
|
||||
@ -379,7 +373,7 @@ static int32_t updateAttitudeComplementary(bool first_run)
|
||||
init = 1;
|
||||
}
|
||||
|
||||
GyrosGet(&gyrosData);
|
||||
GyroSensorGet(&gyroSensorData);
|
||||
|
||||
// Compute the dT using the cpu clock
|
||||
dT = PIOS_DELAY_DiffuS(timeval) / 1000000.0f;
|
||||
@ -387,23 +381,23 @@ static int32_t updateAttitudeComplementary(bool first_run)
|
||||
|
||||
float q[4];
|
||||
|
||||
AttitudeActualData attitudeActual;
|
||||
AttitudeActualGet(&attitudeActual);
|
||||
AttitudeStateData attitudeState;
|
||||
AttitudeStateGet(&attitudeState);
|
||||
|
||||
float grot[3];
|
||||
float accel_err[3];
|
||||
|
||||
// Get the current attitude estimate
|
||||
quat_copy(&attitudeActual.q1, q);
|
||||
quat_copy(&attitudeState.q1, q);
|
||||
|
||||
// Rotate gravity to body frame and cross with accels
|
||||
grot[0] = -(2.0f * (q[1] * q[3] - q[0] * q[2]));
|
||||
grot[1] = -(2.0f * (q[2] * q[3] + q[0] * q[1]));
|
||||
grot[2] = -(q[0] * q[0] - q[1] * q[1] - q[2] * q[2] + q[3] * q[3]);
|
||||
CrossProduct((const float *)&accelsData.x, (const float *)grot, accel_err);
|
||||
CrossProduct((const float *)&accelSensorData.x, (const float *)grot, accel_err);
|
||||
|
||||
// Account for accel magnitude
|
||||
accel_mag = accelsData.x * accelsData.x + accelsData.y * accelsData.y + accelsData.z * accelsData.z;
|
||||
accel_mag = accelSensorData.x * accelSensorData.x + accelSensorData.y * accelSensorData.y + accelSensorData.z * accelSensorData.z;
|
||||
accel_mag = sqrtf(accel_mag);
|
||||
accel_err[0] /= accel_mag;
|
||||
accel_err[1] /= accel_mag;
|
||||
@ -413,10 +407,10 @@ static int32_t updateAttitudeComplementary(bool first_run)
|
||||
// Rotate gravity to body frame and cross with accels
|
||||
float brot[3];
|
||||
float Rbe[3][3];
|
||||
MagnetometerData mag;
|
||||
MagnetoSensorData mag;
|
||||
|
||||
Quaternion2R(q, Rbe);
|
||||
MagnetometerGet(&mag);
|
||||
MagnetoSensorGet(&mag);
|
||||
|
||||
// If the mag is producing bad data don't use it (normally bad calibration)
|
||||
if (!isnan(mag.x) && !isinf(mag.x) && !isnan(mag.y) && !isinf(mag.y) && !isnan(mag.z) && !isinf(mag.z)) {
|
||||
@ -444,7 +438,9 @@ static int32_t updateAttitudeComplementary(bool first_run)
|
||||
}
|
||||
|
||||
// Accumulate integral of error. Scale here so that units are (deg/s) but Ki has units of s
|
||||
GyrosBiasData gyrosBias;
|
||||
// TODO
|
||||
/*
|
||||
GyrosBiasData gyrosBias;
|
||||
GyrosBiasGet(&gyrosBias);
|
||||
gyrosBias.x -= accel_err[0] * attitudeSettings.AccelKi;
|
||||
gyrosBias.y -= accel_err[1] * attitudeSettings.AccelKi;
|
||||
@ -453,23 +449,24 @@ static int32_t updateAttitudeComplementary(bool first_run)
|
||||
|
||||
if (revoCalibration.BiasCorrectedRaw != REVOCALIBRATION_BIASCORRECTEDRAW_TRUE) {
|
||||
// if the raw values are not adjusted, we need to adjust here.
|
||||
gyrosData.x -= gyrosBias.x;
|
||||
gyrosData.y -= gyrosBias.y;
|
||||
gyrosData.z -= gyrosBias.z;
|
||||
gyroSensorData.x -= gyrosBias.x;
|
||||
gyroSensorData.y -= gyrosBias.y;
|
||||
gyroSensorData.z -= gyrosBias.z;
|
||||
}
|
||||
*/
|
||||
|
||||
// Correct rates based on error, integral component dealt with in updateSensors
|
||||
gyrosData.x += accel_err[0] * attitudeSettings.AccelKp / dT;
|
||||
gyrosData.y += accel_err[1] * attitudeSettings.AccelKp / dT;
|
||||
gyrosData.z += accel_err[2] * attitudeSettings.AccelKp / dT + mag_err[2] * magKp / dT;
|
||||
gyroSensorData.x += accel_err[0] * attitudeSettings.AccelKp / dT;
|
||||
gyroSensorData.y += accel_err[1] * attitudeSettings.AccelKp / dT;
|
||||
gyroSensorData.z += accel_err[2] * attitudeSettings.AccelKp / dT + mag_err[2] * magKp / dT;
|
||||
|
||||
// Work out time derivative from INSAlgo writeup
|
||||
// Also accounts for the fact that gyros are in deg/s
|
||||
float qdot[4];
|
||||
qdot[0] = DEG2RAD(-q[1] * gyrosData.x - q[2] * gyrosData.y - q[3] * gyrosData.z) * dT / 2;
|
||||
qdot[1] = DEG2RAD(q[0] * gyrosData.x - q[3] * gyrosData.y + q[2] * gyrosData.z) * dT / 2;
|
||||
qdot[2] = DEG2RAD(q[3] * gyrosData.x + q[0] * gyrosData.y - q[1] * gyrosData.z) * dT / 2;
|
||||
qdot[3] = DEG2RAD(-q[2] * gyrosData.x + q[1] * gyrosData.y + q[0] * gyrosData.z) * dT / 2;
|
||||
qdot[0] = DEG2RAD(-q[1] * gyroSensorData.x - q[2] * gyroSensorData.y - q[3] * gyroSensorData.z) * dT / 2;
|
||||
qdot[1] = DEG2RAD(q[0] * gyroSensorData.x - q[3] * gyroSensorData.y + q[2] * gyroSensorData.z) * dT / 2;
|
||||
qdot[2] = DEG2RAD(q[3] * gyroSensorData.x + q[0] * gyroSensorData.y - q[1] * gyroSensorData.z) * dT / 2;
|
||||
qdot[3] = DEG2RAD(-q[2] * gyroSensorData.x + q[1] * gyroSensorData.y + q[0] * gyroSensorData.z) * dT / 2;
|
||||
|
||||
// Take a time step
|
||||
q[0] = q[0] + qdot[0];
|
||||
@ -500,12 +497,12 @@ static int32_t updateAttitudeComplementary(bool first_run)
|
||||
q[3] = 0.0f;
|
||||
}
|
||||
|
||||
quat_copy(q, &attitudeActual.q1);
|
||||
quat_copy(q, &attitudeState.q1);
|
||||
|
||||
// Convert into eueler degrees (makes assumptions about RPY order)
|
||||
Quaternion2RPY(&attitudeActual.q1, &attitudeActual.Roll);
|
||||
Quaternion2RPY(&attitudeState.q1, &attitudeState.Roll);
|
||||
|
||||
AttitudeActualSet(&attitudeActual);
|
||||
AttitudeStateSet(&attitudeState);
|
||||
|
||||
// Flush these queues for avoid errors
|
||||
xQueueReceive(baroQueue, &ev, 0);
|
||||
@ -516,12 +513,12 @@ static int32_t updateAttitudeComplementary(bool first_run)
|
||||
GPSPositionGet(&gpsPosition);
|
||||
getNED(&gpsPosition, NED);
|
||||
|
||||
PositionActualData positionActual;
|
||||
PositionActualGet(&positionActual);
|
||||
positionActual.North = NED[0];
|
||||
positionActual.East = NED[1];
|
||||
positionActual.Down = NED[2];
|
||||
PositionActualSet(&positionActual);
|
||||
PositionStateData positionState;
|
||||
PositionStateGet(&positionState);
|
||||
positionState.North = NED[0];
|
||||
positionState.East = NED[1];
|
||||
positionState.Down = NED[2];
|
||||
PositionStateSet(&positionState);
|
||||
}
|
||||
|
||||
if (xQueueReceive(gpsVelQueue, &ev, 0) == pdTRUE) {
|
||||
@ -529,12 +526,12 @@ static int32_t updateAttitudeComplementary(bool first_run)
|
||||
GPSVelocityData gpsVelocity;
|
||||
GPSVelocityGet(&gpsVelocity);
|
||||
|
||||
VelocityActualData velocityActual;
|
||||
VelocityActualGet(&velocityActual);
|
||||
velocityActual.North = gpsVelocity.North;
|
||||
velocityActual.East = gpsVelocity.East;
|
||||
velocityActual.Down = gpsVelocity.Down;
|
||||
VelocityActualSet(&velocityActual);
|
||||
VelocityStateData velocityState;
|
||||
VelocityStateGet(&velocityState);
|
||||
velocityState.North = gpsVelocity.North;
|
||||
velocityState.East = gpsVelocity.East;
|
||||
velocityState.Down = gpsVelocity.Down;
|
||||
VelocityStateSet(&velocityState);
|
||||
}
|
||||
|
||||
if (xQueueReceive(airspeedQueue, &ev, 0) == pdTRUE) {
|
||||
@ -542,17 +539,17 @@ static int32_t updateAttitudeComplementary(bool first_run)
|
||||
AirspeedSensorData airspeedSensor;
|
||||
AirspeedSensorGet(&airspeedSensor);
|
||||
|
||||
AirspeedActualData airspeed;
|
||||
AirspeedActualGet(&airspeed);
|
||||
AirspeedStateData airspeed;
|
||||
AirspeedStateGet(&airspeed);
|
||||
|
||||
PositionActualData positionActual;
|
||||
PositionActualGet(&positionActual);
|
||||
PositionStateData positionState;
|
||||
PositionStateGet(&positionState);
|
||||
|
||||
if (airspeedSensor.SensorConnected == AIRSPEEDSENSOR_SENSORCONNECTED_TRUE) {
|
||||
// we have airspeed available
|
||||
airspeed.CalibratedAirspeed = airspeedSensor.CalibratedAirspeed;
|
||||
airspeed.TrueAirspeed = airspeed.CalibratedAirspeed * IAS2TAS(homeLocation.Altitude - positionActual.Down);
|
||||
AirspeedActualSet(&airspeed);
|
||||
airspeed.TrueAirspeed = airspeed.CalibratedAirspeed * IAS2TAS(homeLocation.Altitude - positionState.Down);
|
||||
AirspeedStateSet(&airspeed);
|
||||
}
|
||||
}
|
||||
|
||||
@ -581,14 +578,13 @@ int32_t init_stage = 0;
|
||||
static int32_t updateAttitudeINSGPS(bool first_run, bool outdoor_mode)
|
||||
{
|
||||
UAVObjEvent ev;
|
||||
GyrosData gyrosData;
|
||||
AccelsData accelsData;
|
||||
MagnetometerData magData;
|
||||
GyroSensorData gyroSensorData;
|
||||
AccelSensorData accelSensorData;
|
||||
MagnetoSensorData magData;
|
||||
AirspeedSensorData airspeedData;
|
||||
BaroAltitudeData baroData;
|
||||
BaroSensorData baroData;
|
||||
GPSPositionData gpsData;
|
||||
GPSVelocityData gpsVelData;
|
||||
GyrosBiasData gyrosBias;
|
||||
|
||||
static bool mag_updated = false;
|
||||
static bool baro_updated;
|
||||
@ -615,7 +611,7 @@ static int32_t updateAttitudeINSGPS(bool first_run, bool outdoor_mode)
|
||||
if ((xQueueReceive(gyroQueue, &ev, FAILSAFE_TIMEOUT_MS / portTICK_RATE_MS) != pdTRUE) ||
|
||||
(xQueueReceive(accelQueue, &ev, 1 / portTICK_RATE_MS) != pdTRUE)) {
|
||||
// Do not set attitude timeout warnings in simulation mode
|
||||
if (!AttitudeActualReadOnly()) {
|
||||
if (!AttitudeStateReadOnly()) {
|
||||
AlarmsSet(SYSTEMALARMS_ALARM_ATTITUDE, SYSTEMALARMS_ALARM_WARNING);
|
||||
return -1;
|
||||
}
|
||||
@ -662,34 +658,26 @@ static int32_t updateAttitudeINSGPS(bool first_run, bool outdoor_mode)
|
||||
}
|
||||
|
||||
// Get most recent data
|
||||
GyrosGet(&gyrosData);
|
||||
AccelsGet(&accelsData);
|
||||
MagnetometerGet(&magData);
|
||||
BaroAltitudeGet(&baroData);
|
||||
GyroSensorGet(&gyroSensorData);
|
||||
AccelSensorGet(&accelSensorData);
|
||||
MagnetoSensorGet(&magData);
|
||||
BaroSensorGet(&baroData);
|
||||
AirspeedSensorGet(&airspeedData);
|
||||
GPSPositionGet(&gpsData);
|
||||
GPSVelocityGet(&gpsVelData);
|
||||
GyrosBiasGet(&gyrosBias);
|
||||
|
||||
value_error = false;
|
||||
// safety checks
|
||||
if (invalid(gyrosData.x) ||
|
||||
invalid(gyrosData.y) ||
|
||||
invalid(gyrosData.z) ||
|
||||
invalid(accelsData.x) ||
|
||||
invalid(accelsData.y) ||
|
||||
invalid(accelsData.z)) {
|
||||
if (invalid(gyroSensorData.x) ||
|
||||
invalid(gyroSensorData.y) ||
|
||||
invalid(gyroSensorData.z) ||
|
||||
invalid(accelSensorData.x) ||
|
||||
invalid(accelSensorData.y) ||
|
||||
invalid(accelSensorData.z)) {
|
||||
// cannot run process update, raise error!
|
||||
AlarmsSet(SYSTEMALARMS_ALARM_ATTITUDE, SYSTEMALARMS_ALARM_ERROR);
|
||||
return 0;
|
||||
}
|
||||
if (invalid(gyrosBias.x) ||
|
||||
invalid(gyrosBias.y) ||
|
||||
invalid(gyrosBias.z)) {
|
||||
gyrosBias.x = 0.0f;
|
||||
gyrosBias.y = 0.0f;
|
||||
gyrosBias.z = 0.0f;
|
||||
}
|
||||
|
||||
if (invalid(magData.x) ||
|
||||
invalid(magData.y) ||
|
||||
@ -819,38 +807,38 @@ static int32_t updateAttitudeINSGPS(bool first_run, bool outdoor_mode)
|
||||
}
|
||||
|
||||
xQueueReceive(magQueue, &ev, 100 / portTICK_RATE_MS);
|
||||
MagnetometerGet(&magData);
|
||||
MagnetoSensorGet(&magData);
|
||||
|
||||
AttitudeActualData attitudeActual;
|
||||
AttitudeActualGet(&attitudeActual);
|
||||
AttitudeStateData attitudeState;
|
||||
AttitudeStateGet(&attitudeState);
|
||||
|
||||
// Set initial attitude. Use accels to determine roll and pitch, rotate magnetic measurement accordingly,
|
||||
// so pseudo "north" vector can be estimated even if the board is not level
|
||||
attitudeActual.Roll = atan2f(-accelsData.y, -accelsData.z);
|
||||
float zn = cosf(attitudeActual.Roll) * magData.z + sinf(attitudeActual.Roll) * magData.y;
|
||||
float yn = cosf(attitudeActual.Roll) * magData.y - sinf(attitudeActual.Roll) * magData.z;
|
||||
attitudeState.Roll = atan2f(-accelSensorData.y, -accelSensorData.z);
|
||||
float zn = cosf(attitudeState.Roll) * magData.z + sinf(attitudeState.Roll) * magData.y;
|
||||
float yn = cosf(attitudeState.Roll) * magData.y - sinf(attitudeState.Roll) * magData.z;
|
||||
|
||||
// rotate accels z vector according to roll
|
||||
float azn = cosf(attitudeActual.Roll) * accelsData.z + sinf(attitudeActual.Roll) * accelsData.y;
|
||||
attitudeActual.Pitch = atan2f(accelsData.x, -azn);
|
||||
float azn = cosf(attitudeState.Roll) * accelSensorData.z + sinf(attitudeState.Roll) * accelSensorData.y;
|
||||
attitudeState.Pitch = atan2f(accelSensorData.x, -azn);
|
||||
|
||||
float xn = cosf(attitudeActual.Pitch) * magData.x + sinf(attitudeActual.Pitch) * zn;
|
||||
float xn = cosf(attitudeState.Pitch) * magData.x + sinf(attitudeState.Pitch) * zn;
|
||||
|
||||
attitudeActual.Yaw = atan2f(-yn, xn);
|
||||
attitudeState.Yaw = atan2f(-yn, xn);
|
||||
// TODO: This is still a hack
|
||||
// Put this in a proper generic function in CoordinateConversion.c
|
||||
// should take 4 vectors: g (0,0,-9.81), accels, Be (or 1,0,0 if no home loc) and magnetometers (or 1,0,0 if no mags)
|
||||
// should calculate the rotation in 3d space using proper cross product math
|
||||
// SUBTODO: formulate the math required
|
||||
|
||||
attitudeActual.Roll = RAD2DEG(attitudeActual.Roll);
|
||||
attitudeActual.Pitch = RAD2DEG(attitudeActual.Pitch);
|
||||
attitudeActual.Yaw = RAD2DEG(attitudeActual.Yaw);
|
||||
attitudeState.Roll = RAD2DEG(attitudeState.Roll);
|
||||
attitudeState.Pitch = RAD2DEG(attitudeState.Pitch);
|
||||
attitudeState.Yaw = RAD2DEG(attitudeState.Yaw);
|
||||
|
||||
RPY2Quaternion(&attitudeActual.Roll, &attitudeActual.q1);
|
||||
AttitudeActualSet(&attitudeActual);
|
||||
RPY2Quaternion(&attitudeState.Roll, &attitudeState.q1);
|
||||
AttitudeStateSet(&attitudeState);
|
||||
|
||||
float q[4] = { attitudeActual.q1, attitudeActual.q2, attitudeActual.q3, attitudeActual.q4 };
|
||||
float q[4] = { attitudeState.q1, attitudeState.q2, attitudeState.q3, attitudeState.q4 };
|
||||
INSSetState(pos, zeros, q, zeros, zeros);
|
||||
|
||||
INSResetP(ekfConfiguration.P);
|
||||
@ -859,22 +847,24 @@ static int32_t updateAttitudeINSGPS(bool first_run, bool outdoor_mode)
|
||||
|
||||
// Because the sensor module remove the bias we need to add it
|
||||
// back in here so that the INS algorithm can track it correctly
|
||||
float gyros[3] = { DEG2RAD(gyrosData.x), DEG2RAD(gyrosData.y), DEG2RAD(gyrosData.z) };
|
||||
if (revoCalibration.BiasCorrectedRaw == REVOCALIBRATION_BIASCORRECTEDRAW_TRUE) {
|
||||
gyros[0] += DEG2RAD(gyrosBias.x);
|
||||
gyros[1] += DEG2RAD(gyrosBias.y);
|
||||
gyros[2] += DEG2RAD(gyrosBias.z);
|
||||
}
|
||||
INSStatePrediction(gyros, &accelsData.x, dT);
|
||||
float gyros[3] = { DEG2RAD(gyroSensorData.x), DEG2RAD(gyroSensorData.y), DEG2RAD(gyroSensorData.z) };
|
||||
/* TODO
|
||||
if (revoCalibration.BiasCorrectedRaw == REVOCALIBRATION_BIASCORRECTEDRAW_TRUE) {
|
||||
gyros[0] += DEG2RAD(gyrosBias.x);
|
||||
gyros[1] += DEG2RAD(gyrosBias.y);
|
||||
gyros[2] += DEG2RAD(gyrosBias.z);
|
||||
}
|
||||
*/
|
||||
INSStatePrediction(gyros, &accelSensorData.x, dT);
|
||||
|
||||
AttitudeActualData attitude;
|
||||
AttitudeActualGet(&attitude);
|
||||
AttitudeStateData attitude;
|
||||
AttitudeStateGet(&attitude);
|
||||
attitude.q1 = Nav.q[0];
|
||||
attitude.q2 = Nav.q[1];
|
||||
attitude.q3 = Nav.q[2];
|
||||
attitude.q4 = Nav.q[3];
|
||||
Quaternion2RPY(&attitude.q1, &attitude.Roll);
|
||||
AttitudeActualSet(&attitude);
|
||||
AttitudeStateSet(&attitude);
|
||||
}
|
||||
|
||||
init_stage++;
|
||||
@ -891,25 +881,27 @@ static int32_t updateAttitudeINSGPS(bool first_run, bool outdoor_mode)
|
||||
|
||||
// Because the sensor module remove the bias we need to add it
|
||||
// back in here so that the INS algorithm can track it correctly
|
||||
float gyros[3] = { DEG2RAD(gyrosData.x), DEG2RAD(gyrosData.y), DEG2RAD(gyrosData.z) };
|
||||
if (revoCalibration.BiasCorrectedRaw == REVOCALIBRATION_BIASCORRECTEDRAW_TRUE) {
|
||||
gyros[0] += DEG2RAD(gyrosBias.x);
|
||||
gyros[1] += DEG2RAD(gyrosBias.y);
|
||||
gyros[2] += DEG2RAD(gyrosBias.z);
|
||||
}
|
||||
float gyros[3] = { DEG2RAD(gyroSensorData.x), DEG2RAD(gyroSensorData.y), DEG2RAD(gyroSensorData.z) };
|
||||
/* TODO
|
||||
if (revoCalibration.BiasCorrectedRaw == REVOCALIBRATION_BIASCORRECTEDRAW_TRUE) {
|
||||
gyros[0] += DEG2RAD(gyrosBias.x);
|
||||
gyros[1] += DEG2RAD(gyrosBias.y);
|
||||
gyros[2] += DEG2RAD(gyrosBias.z);
|
||||
}
|
||||
*/
|
||||
|
||||
// Advance the state estimate
|
||||
INSStatePrediction(gyros, &accelsData.x, dT);
|
||||
INSStatePrediction(gyros, &accelSensorData.x, dT);
|
||||
|
||||
// Copy the attitude into the UAVO
|
||||
AttitudeActualData attitude;
|
||||
AttitudeActualGet(&attitude);
|
||||
AttitudeStateData attitude;
|
||||
AttitudeStateGet(&attitude);
|
||||
attitude.q1 = Nav.q[0];
|
||||
attitude.q2 = Nav.q[1];
|
||||
attitude.q3 = Nav.q[2];
|
||||
attitude.q4 = Nav.q[3];
|
||||
Quaternion2RPY(&attitude.q1, &attitude.Roll);
|
||||
AttitudeActualSet(&attitude);
|
||||
AttitudeStateSet(&attitude);
|
||||
|
||||
// Advance the covariance estimate
|
||||
INSCovariancePrediction(dT);
|
||||
@ -971,12 +963,12 @@ static int32_t updateAttitudeINSGPS(bool first_run, bool outdoor_mode)
|
||||
|
||||
if (airspeed_updated) {
|
||||
// we have airspeed available
|
||||
AirspeedActualData airspeed;
|
||||
AirspeedActualGet(&airspeed);
|
||||
AirspeedStateData airspeed;
|
||||
AirspeedStateGet(&airspeed);
|
||||
|
||||
airspeed.CalibratedAirspeed = airspeedData.CalibratedAirspeed;
|
||||
airspeed.TrueAirspeed = airspeed.CalibratedAirspeed * IAS2TAS(homeLocation.Altitude - Nav.Pos[2]);
|
||||
AirspeedActualSet(&airspeed);
|
||||
AirspeedStateSet(&airspeed);
|
||||
|
||||
if (!gps_vel_updated && !gps_updated) {
|
||||
// feed airspeed into EKF, treat wind as 1e2 variance
|
||||
@ -1005,24 +997,26 @@ static int32_t updateAttitudeINSGPS(bool first_run, bool outdoor_mode)
|
||||
}
|
||||
|
||||
// Copy the position and velocity into the UAVO
|
||||
PositionActualData positionActual;
|
||||
PositionActualGet(&positionActual);
|
||||
positionActual.North = Nav.Pos[0];
|
||||
positionActual.East = Nav.Pos[1];
|
||||
positionActual.Down = Nav.Pos[2];
|
||||
PositionActualSet(&positionActual);
|
||||
PositionStateData positionState;
|
||||
PositionStateGet(&positionState);
|
||||
positionState.North = Nav.Pos[0];
|
||||
positionState.East = Nav.Pos[1];
|
||||
positionState.Down = Nav.Pos[2];
|
||||
PositionStateSet(&positionState);
|
||||
|
||||
VelocityActualData velocityActual;
|
||||
VelocityActualGet(&velocityActual);
|
||||
velocityActual.North = Nav.Vel[0];
|
||||
velocityActual.East = Nav.Vel[1];
|
||||
velocityActual.Down = Nav.Vel[2];
|
||||
VelocityActualSet(&velocityActual);
|
||||
VelocityStateData velocityState;
|
||||
VelocityStateGet(&velocityState);
|
||||
velocityState.North = Nav.Vel[0];
|
||||
velocityState.East = Nav.Vel[1];
|
||||
velocityState.Down = Nav.Vel[2];
|
||||
VelocityStateSet(&velocityState);
|
||||
|
||||
/* TODO
|
||||
gyrosBias.x = RAD2DEG(Nav.gyro_bias[0]);
|
||||
gyrosBias.y = RAD2DEG(Nav.gyro_bias[1]);
|
||||
gyrosBias.z = RAD2DEG(Nav.gyro_bias[2]);
|
||||
GyrosBiasSet(&gyrosBias);
|
||||
*/
|
||||
|
||||
EKFStateVarianceData vardata;
|
||||
EKFStateVarianceGet(&vardata);
|
||||
@ -1120,7 +1114,7 @@ static void settingsUpdatedCb(UAVObjEvent *ev)
|
||||
T[1] = cosf(lat) * (alt + 6.378137E6f);
|
||||
T[2] = -1.0f;
|
||||
|
||||
// TODO: convert positionActual to new reference frame and gracefully update EKF state!
|
||||
// TODO: convert positionState to new reference frame and gracefully update EKF state!
|
||||
// needed for long range flights where the reference coordinate is adjusted in flight
|
||||
}
|
||||
if (ev == NULL || ev->obj == AttitudeSettingsHandle()) {
|
||||
|
@ -48,7 +48,7 @@
|
||||
#include "openpilot.h"
|
||||
|
||||
#include "accessorydesired.h"
|
||||
#include "attitudeactual.h"
|
||||
#include "attitudestate.h"
|
||||
#include "camerastabsettings.h"
|
||||
#include "cameradesired.h"
|
||||
#include "hwsettings.h"
|
||||
@ -119,12 +119,12 @@ int32_t CameraStabInitialize(void)
|
||||
memset(csd, 0, sizeof(struct CameraStab_data));
|
||||
csd->lastSysTime = xTaskGetTickCount();
|
||||
|
||||
AttitudeActualInitialize();
|
||||
AttitudeStateInitialize();
|
||||
CameraStabSettingsInitialize();
|
||||
CameraDesiredInitialize();
|
||||
|
||||
UAVObjEvent ev = {
|
||||
.obj = AttitudeActualHandle(),
|
||||
.obj = AttitudeStateHandle(),
|
||||
.instId = 0,
|
||||
.event = 0,
|
||||
};
|
||||
@ -146,7 +146,7 @@ MODULE_INITCALL(CameraStabInitialize, CameraStabStart)
|
||||
|
||||
static void attitudeUpdated(UAVObjEvent *ev)
|
||||
{
|
||||
if (ev->obj != AttitudeActualHandle()) {
|
||||
if (ev->obj != AttitudeStateHandle()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -195,13 +195,13 @@ static void attitudeUpdated(UAVObjEvent *ev)
|
||||
|
||||
switch (i) {
|
||||
case CAMERASTABSETTINGS_INPUT_ROLL:
|
||||
AttitudeActualRollGet(&attitude);
|
||||
AttitudeStateRollGet(&attitude);
|
||||
break;
|
||||
case CAMERASTABSETTINGS_INPUT_PITCH:
|
||||
AttitudeActualPitchGet(&attitude);
|
||||
AttitudeStatePitchGet(&attitude);
|
||||
break;
|
||||
case CAMERASTABSETTINGS_INPUT_YAW:
|
||||
AttitudeActualYawGet(&attitude);
|
||||
AttitudeStateYawGet(&attitude);
|
||||
break;
|
||||
default:
|
||||
PIOS_Assert(0);
|
||||
@ -297,7 +297,7 @@ void applyFeedForward(uint8_t index, float dT_millis, float *attitude, CameraSta
|
||||
case CAMERASTABSETTINGS_GIMBALTYPE_YAWROLLPITCH:
|
||||
if (index == CAMERASTABSETTINGS_INPUT_ROLL) {
|
||||
float pitch;
|
||||
AttitudeActualPitchGet(&pitch);
|
||||
AttitudeStatePitchGet(&pitch);
|
||||
gimbalTypeCorrection = (cameraStab->OutputRange[CAMERASTABSETTINGS_OUTPUTRANGE_PITCH] - fabsf(pitch))
|
||||
/ cameraStab->OutputRange[CAMERASTABSETTINGS_OUTPUTRANGE_PITCH];
|
||||
}
|
||||
@ -305,7 +305,7 @@ void applyFeedForward(uint8_t index, float dT_millis, float *attitude, CameraSta
|
||||
case CAMERASTABSETTINGS_GIMBALTYPE_YAWPITCHROLL:
|
||||
if (index == CAMERASTABSETTINGS_INPUT_PITCH) {
|
||||
float roll;
|
||||
AttitudeActualRollGet(&roll);
|
||||
AttitudeStateRollGet(&roll);
|
||||
gimbalTypeCorrection = (cameraStab->OutputRange[CAMERASTABSETTINGS_OUTPUTRANGE_ROLL] - fabsf(roll))
|
||||
/ cameraStab->OutputRange[CAMERASTABSETTINGS_OUTPUTRANGE_ROLL];
|
||||
}
|
||||
|
@ -3,7 +3,7 @@
|
||||
* @addtogroup OpenPilotModules OpenPilot Modules
|
||||
* @{
|
||||
* @addtogroup AltitudeModule Altitude Module
|
||||
* @brief Communicate with BMP085 and update @ref AltitudeActual "AltitudeActual UAV Object"
|
||||
* @brief Communicate with BMP085 and update @ref BaroSensor "BaroSensor UAV Object"
|
||||
* @{
|
||||
*
|
||||
* @file altitude.h
|
||||
|
@ -3,7 +3,7 @@
|
||||
* @addtogroup OpenPilotModules OpenPilot Modules
|
||||
* @{
|
||||
* @addtogroup AltitudeModule Altitude Module
|
||||
* @brief Communicate with BMP085 and update @ref BaroAltitude "BaroAltitude UAV Object"
|
||||
* @brief Communicate with BMP085 and update @ref BaroSensor "BaroSensor UAV Object"
|
||||
* @{
|
||||
*
|
||||
* @file altitude.c
|
||||
@ -30,9 +30,9 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* Output object: BaroAltitude
|
||||
* Output object: BaroSensor
|
||||
*
|
||||
* This module will periodically update the value of the BaroAltitude object.
|
||||
* This module will periodically update the value of the BaroSensor object.
|
||||
*
|
||||
*/
|
||||
|
||||
@ -40,8 +40,8 @@
|
||||
|
||||
#include "hwsettings.h"
|
||||
#include "magbaro.h"
|
||||
#include "baroaltitude.h" // object that will be updated by the module
|
||||
#include "magnetometer.h"
|
||||
#include "barosensor.h" // object that will be updated by the module
|
||||
#include "magnetosensor.h"
|
||||
#include "taskinfo.h"
|
||||
|
||||
// Private constants
|
||||
@ -109,11 +109,11 @@ int32_t MagBaroInitialize()
|
||||
|
||||
if (magbaroEnabled) {
|
||||
#if defined(PIOS_INCLUDE_HMC5883)
|
||||
MagnetometerInitialize();
|
||||
MagnetoSensorInitialize();
|
||||
#endif
|
||||
|
||||
#if defined(PIOS_INCLUDE_BMP085)
|
||||
BaroAltitudeInitialize();
|
||||
BaroSensorInitialize();
|
||||
|
||||
// init down-sampling data
|
||||
alt_ds_temp = 0;
|
||||
@ -144,12 +144,12 @@ static void magbaroTask(__attribute__((unused)) void *parameters)
|
||||
portTickType lastSysTime;
|
||||
|
||||
#if defined(PIOS_INCLUDE_BMP085)
|
||||
BaroAltitudeData data;
|
||||
BaroSensorData data;
|
||||
PIOS_BMP085_Init();
|
||||
#endif
|
||||
|
||||
#if defined(PIOS_INCLUDE_HMC5883)
|
||||
MagnetometerData mag;
|
||||
MagnetoSensorData mag;
|
||||
PIOS_HMC5883_Init(&pios_hmc5883_cfg);
|
||||
uint32_t mag_update_time = PIOS_DELAY_GetRaw();
|
||||
#endif
|
||||
@ -192,8 +192,8 @@ static void magbaroTask(__attribute__((unused)) void *parameters)
|
||||
// Compute the current altitude (all pressures in kPa)
|
||||
data.Altitude = 44330.0f * (1.0f - powf((data.Pressure / (BMP085_P0 / 1000.0f)), (1.0f / 5.255f)));
|
||||
|
||||
// Update the AltitudeActual UAVObject
|
||||
BaroAltitudeSet(&data);
|
||||
// Update the BaroSensor UAVObject
|
||||
BaroSensorSet(&data);
|
||||
}
|
||||
#endif /* if defined(PIOS_INCLUDE_BMP085) */
|
||||
|
||||
@ -207,7 +207,7 @@ static void magbaroTask(__attribute__((unused)) void *parameters)
|
||||
mag.x = mags[0];
|
||||
mag.y = mags[1];
|
||||
mag.z = mags[2];
|
||||
MagnetometerSet(&mag);
|
||||
MagnetoSensorSet(&mag);
|
||||
mag_update_time = PIOS_DELAY_GetRaw();
|
||||
}
|
||||
#endif
|
||||
|
@ -28,7 +28,7 @@
|
||||
|
||||
/**
|
||||
* Input object: ActiveWaypoint
|
||||
* Input object: PositionActual
|
||||
* Input object: PositionState
|
||||
* Input object: ManualControlCommand
|
||||
* Output object: AttitudeDesired
|
||||
*
|
||||
@ -45,15 +45,14 @@
|
||||
|
||||
#include <openpilot.h>
|
||||
|
||||
#include "accels.h"
|
||||
#include "hwsettings.h"
|
||||
#include "attitudeactual.h"
|
||||
#include "attitudestate.h"
|
||||
#include "pathdesired.h" // object that will be updated by the module
|
||||
#include "positionactual.h"
|
||||
#include "positionstate.h"
|
||||
#include "manualcontrol.h"
|
||||
#include "flightstatus.h"
|
||||
#include "pathstatus.h"
|
||||
#include "airspeedactual.h"
|
||||
#include "airspeedstate.h"
|
||||
#include "gpsvelocity.h"
|
||||
#include "gpsposition.h"
|
||||
#include "fixedwingpathfollowersettings.h"
|
||||
@ -63,7 +62,7 @@
|
||||
#include "stabilizationsettings.h"
|
||||
#include "systemsettings.h"
|
||||
#include "velocitydesired.h"
|
||||
#include "velocityactual.h"
|
||||
#include "velocitystate.h"
|
||||
#include "taskinfo.h"
|
||||
|
||||
#include "paths.h"
|
||||
@ -87,7 +86,7 @@ static void SettingsUpdatedCb(UAVObjEvent *ev);
|
||||
static void updatePathVelocity();
|
||||
static uint8_t updateFixedDesiredAttitude();
|
||||
static void updateFixedAttitude();
|
||||
static void airspeedActualUpdatedCb(UAVObjEvent *ev);
|
||||
static void airspeedStateUpdatedCb(UAVObjEvent *ev);
|
||||
static float bound(float val, float min, float max);
|
||||
|
||||
/**
|
||||
@ -121,7 +120,7 @@ int32_t FixedWingPathFollowerInitialize()
|
||||
PathDesiredInitialize();
|
||||
PathStatusInitialize();
|
||||
VelocityDesiredInitialize();
|
||||
AirspeedActualInitialize();
|
||||
AirspeedStateInitialize();
|
||||
} else {
|
||||
followerEnabled = false;
|
||||
}
|
||||
@ -139,7 +138,7 @@ static float powerIntegral = 0;
|
||||
static float airspeedErrorInt = 0;
|
||||
|
||||
// correct speed by measured airspeed
|
||||
static float indicatedAirspeedActualBias = 0;
|
||||
static float indicatedAirspeedStateBias = 0;
|
||||
|
||||
/**
|
||||
* Module thread, should not return.
|
||||
@ -151,7 +150,7 @@ static void pathfollowerTask(__attribute__((unused)) void *parameters)
|
||||
|
||||
portTickType lastUpdateTime;
|
||||
|
||||
AirspeedActualConnectCallback(airspeedActualUpdatedCb);
|
||||
AirspeedStateConnectCallback(airspeedStateUpdatedCb);
|
||||
FixedWingPathFollowerSettingsConnectCallback(SettingsUpdatedCb);
|
||||
PathDesiredConnectCallback(SettingsUpdatedCb);
|
||||
|
||||
@ -247,21 +246,21 @@ static void pathfollowerTask(__attribute__((unused)) void *parameters)
|
||||
/**
|
||||
* Compute desired velocity from the current position and path
|
||||
*
|
||||
* Takes in @ref PositionActual and compares it to @ref PathDesired
|
||||
* Takes in @ref PositionState and compares it to @ref PathDesired
|
||||
* and computes @ref VelocityDesired
|
||||
*/
|
||||
static void updatePathVelocity()
|
||||
{
|
||||
PositionActualData positionActual;
|
||||
PositionStateData positionState;
|
||||
|
||||
PositionActualGet(&positionActual);
|
||||
VelocityActualData velocityActual;
|
||||
VelocityActualGet(&velocityActual);
|
||||
PositionStateGet(&positionState);
|
||||
VelocityStateData velocityState;
|
||||
VelocityStateGet(&velocityState);
|
||||
|
||||
// look ahead fixedwingpathfollowerSettings.HeadingFeedForward seconds
|
||||
float cur[3] = { positionActual.North + (velocityActual.North * fixedwingpathfollowerSettings.HeadingFeedForward),
|
||||
positionActual.East + (velocityActual.East * fixedwingpathfollowerSettings.HeadingFeedForward),
|
||||
positionActual.Down + (velocityActual.Down * fixedwingpathfollowerSettings.HeadingFeedForward) };
|
||||
float cur[3] = { positionState.North + (velocityState.North * fixedwingpathfollowerSettings.HeadingFeedForward),
|
||||
positionState.East + (velocityState.East * fixedwingpathfollowerSettings.HeadingFeedForward),
|
||||
positionState.Down + (velocityState.Down * fixedwingpathfollowerSettings.HeadingFeedForward) };
|
||||
struct path_status progress;
|
||||
|
||||
path_progress(pathDesired.Start, pathDesired.End, cur, &progress, pathDesired.Mode);
|
||||
@ -307,11 +306,11 @@ static void updatePathVelocity()
|
||||
// turn steep unless there is enough space complete the turn before crossing the flightpath
|
||||
// in this case the plane effectively needs to be turned around
|
||||
// indicators:
|
||||
// difference between correction_direction and velocityactual >90 degrees and
|
||||
// difference between path_direction and velocityactual >90 degrees ( 4th sector, facing away from eerything )
|
||||
// difference between correction_direction and velocitystate >90 degrees and
|
||||
// difference between path_direction and velocitystate >90 degrees ( 4th sector, facing away from eerything )
|
||||
// fix: ignore correction, steer in path direction until the situation has become better (condition doesn't apply anymore)
|
||||
float angle1 = RAD2DEG(atan2f(progress.path_direction[1], progress.path_direction[0]) - atan2f(velocityActual.East, velocityActual.North));
|
||||
float angle2 = RAD2DEG(atan2f(progress.correction_direction[1], progress.correction_direction[0]) - atan2f(velocityActual.East, velocityActual.North));
|
||||
float angle1 = RAD2DEG(atan2f(progress.path_direction[1], progress.path_direction[0]) - atan2f(velocityState.East, velocityState.North));
|
||||
float angle2 = RAD2DEG(atan2f(progress.correction_direction[1], progress.correction_direction[0]) - atan2f(velocityState.East, velocityState.North));
|
||||
if (angle1 < -180.0f) {
|
||||
angle1 += 360.0f;
|
||||
}
|
||||
@ -337,7 +336,7 @@ static void updatePathVelocity()
|
||||
velocityDesired.North *= groundspeed / l;
|
||||
velocityDesired.East *= groundspeed / l;
|
||||
|
||||
float downError = altitudeSetpoint - positionActual.Down;
|
||||
float downError = altitudeSetpoint - positionState.Down;
|
||||
velocityDesired.Down = downError * fixedwingpathfollowerSettings.VerticalPosP;
|
||||
|
||||
// update pathstatus
|
||||
@ -370,9 +369,9 @@ static void updateFixedAttitude(float *attitude)
|
||||
/**
|
||||
* Compute desired attitude from the desired velocity
|
||||
*
|
||||
* Takes in @ref NedActual which has the acceleration in the
|
||||
* Takes in @ref NedState which has the acceleration in the
|
||||
* NED frame as the feedback term and then compares the
|
||||
* @ref VelocityActual against the @ref VelocityDesired
|
||||
* @ref VelocityState against the @ref VelocityDesired
|
||||
*/
|
||||
static uint8_t updateFixedDesiredAttitude()
|
||||
{
|
||||
@ -381,17 +380,16 @@ static uint8_t updateFixedDesiredAttitude()
|
||||
float dT = fixedwingpathfollowerSettings.UpdatePeriod / 1000.0f; // Convert from [ms] to [s]
|
||||
|
||||
VelocityDesiredData velocityDesired;
|
||||
VelocityActualData velocityActual;
|
||||
VelocityStateData velocityState;
|
||||
StabilizationDesiredData stabDesired;
|
||||
AttitudeActualData attitudeActual;
|
||||
AccelsData accels;
|
||||
AttitudeStateData attitudeState;
|
||||
StabilizationSettingsData stabSettings;
|
||||
FixedWingPathFollowerStatusData fixedwingpathfollowerStatus;
|
||||
AirspeedActualData airspeedActual;
|
||||
AirspeedStateData airspeedState;
|
||||
|
||||
float groundspeedActual;
|
||||
float groundspeedState;
|
||||
float groundspeedDesired;
|
||||
float indicatedAirspeedActual;
|
||||
float indicatedAirspeedState;
|
||||
float indicatedAirspeedDesired;
|
||||
float airspeedError;
|
||||
|
||||
@ -406,13 +404,12 @@ static uint8_t updateFixedDesiredAttitude()
|
||||
|
||||
FixedWingPathFollowerStatusGet(&fixedwingpathfollowerStatus);
|
||||
|
||||
VelocityActualGet(&velocityActual);
|
||||
VelocityStateGet(&velocityState);
|
||||
StabilizationDesiredGet(&stabDesired);
|
||||
VelocityDesiredGet(&velocityDesired);
|
||||
AttitudeActualGet(&attitudeActual);
|
||||
AccelsGet(&accels);
|
||||
AttitudeStateGet(&attitudeState);
|
||||
StabilizationSettingsGet(&stabSettings);
|
||||
AirspeedActualGet(&airspeedActual);
|
||||
AirspeedStateGet(&airspeedState);
|
||||
|
||||
|
||||
/**
|
||||
@ -420,59 +417,59 @@ static uint8_t updateFixedDesiredAttitude()
|
||||
*/
|
||||
|
||||
// Current ground speed
|
||||
groundspeedActual = sqrtf(velocityActual.East * velocityActual.East + velocityActual.North * velocityActual.North);
|
||||
// note that airspeedActualBias is ( calibratedAirspeed - groundSpeed ) at the time of measurement,
|
||||
groundspeedState = sqrtf(velocityState.East * velocityState.East + velocityState.North * velocityState.North);
|
||||
// note that airspeedStateBias is ( calibratedAirspeed - groundSpeed ) at the time of measurement,
|
||||
// but thanks to accelerometers, groundspeed reacts faster to changes in direction
|
||||
// than airspeed and gps sensors alone
|
||||
indicatedAirspeedActual = groundspeedActual + indicatedAirspeedActualBias;
|
||||
indicatedAirspeedState = groundspeedState + indicatedAirspeedStateBias;
|
||||
|
||||
// Desired ground speed
|
||||
groundspeedDesired = sqrtf(velocityDesired.North * velocityDesired.North + velocityDesired.East * velocityDesired.East);
|
||||
indicatedAirspeedDesired = bound(groundspeedDesired + indicatedAirspeedActualBias,
|
||||
groundspeedDesired = sqrtf(velocityDesired.North * velocityDesired.North + velocityDesired.East * velocityDesired.East);
|
||||
indicatedAirspeedDesired = bound(groundspeedDesired + indicatedAirspeedStateBias,
|
||||
fixedwingpathfollowerSettings.BestClimbRateSpeed,
|
||||
fixedwingpathfollowerSettings.CruiseSpeed);
|
||||
|
||||
// Airspeed error
|
||||
airspeedError = indicatedAirspeedDesired - indicatedAirspeedActual;
|
||||
airspeedError = indicatedAirspeedDesired - indicatedAirspeedState;
|
||||
|
||||
// Vertical speed error
|
||||
descentspeedDesired = bound(
|
||||
velocityDesired.Down,
|
||||
-fixedwingpathfollowerSettings.VerticalVelMax,
|
||||
fixedwingpathfollowerSettings.VerticalVelMax);
|
||||
descentspeedError = descentspeedDesired - velocityActual.Down;
|
||||
descentspeedError = descentspeedDesired - velocityState.Down;
|
||||
|
||||
// Error condition: wind speed is higher than maximum allowed speed. We are forced backwards!
|
||||
fixedwingpathfollowerStatus.Errors[FIXEDWINGPATHFOLLOWERSTATUS_ERRORS_WIND] = 0;
|
||||
if (groundspeedDesired - indicatedAirspeedActualBias <= 0) {
|
||||
if (groundspeedDesired - indicatedAirspeedStateBias <= 0) {
|
||||
fixedwingpathfollowerStatus.Errors[FIXEDWINGPATHFOLLOWERSTATUS_ERRORS_WIND] = 1;
|
||||
result = 0;
|
||||
}
|
||||
// Error condition: plane too slow or too fast
|
||||
fixedwingpathfollowerStatus.Errors[FIXEDWINGPATHFOLLOWERSTATUS_ERRORS_HIGHSPEED] = 0;
|
||||
fixedwingpathfollowerStatus.Errors[FIXEDWINGPATHFOLLOWERSTATUS_ERRORS_LOWSPEED] = 0;
|
||||
if (indicatedAirspeedActual > fixedwingpathfollowerSettings.AirSpeedMax) {
|
||||
if (indicatedAirspeedState > fixedwingpathfollowerSettings.AirSpeedMax) {
|
||||
fixedwingpathfollowerStatus.Errors[FIXEDWINGPATHFOLLOWERSTATUS_ERRORS_OVERSPEED] = 1;
|
||||
result = 0;
|
||||
}
|
||||
if (indicatedAirspeedActual > fixedwingpathfollowerSettings.CruiseSpeed * 1.2f) {
|
||||
if (indicatedAirspeedState > fixedwingpathfollowerSettings.CruiseSpeed * 1.2f) {
|
||||
fixedwingpathfollowerStatus.Errors[FIXEDWINGPATHFOLLOWERSTATUS_ERRORS_HIGHSPEED] = 1;
|
||||
result = 0;
|
||||
}
|
||||
if (indicatedAirspeedActual < fixedwingpathfollowerSettings.BestClimbRateSpeed * 0.8f && 1) { // The next three && 1 are placeholders for UAVOs representing LANDING and TAKEOFF
|
||||
if (indicatedAirspeedState < fixedwingpathfollowerSettings.BestClimbRateSpeed * 0.8f && 1) { // The next three && 1 are placeholders for UAVOs representing LANDING and TAKEOFF
|
||||
fixedwingpathfollowerStatus.Errors[FIXEDWINGPATHFOLLOWERSTATUS_ERRORS_LOWSPEED] = 1;
|
||||
result = 0;
|
||||
}
|
||||
if (indicatedAirspeedActual < fixedwingpathfollowerSettings.StallSpeedClean && 1 && 1) { // Where the && 1 represents the UAVO that will control whether the airplane is prepped for landing or not
|
||||
if (indicatedAirspeedState < fixedwingpathfollowerSettings.StallSpeedClean && 1 && 1) { // Where the && 1 represents the UAVO that will control whether the airplane is prepped for landing or not
|
||||
fixedwingpathfollowerStatus.Errors[FIXEDWINGPATHFOLLOWERSTATUS_ERRORS_STALLSPEED] = 1;
|
||||
result = 0;
|
||||
}
|
||||
if (indicatedAirspeedActual < fixedwingpathfollowerSettings.StallSpeedDirty && 1) {
|
||||
if (indicatedAirspeedState < fixedwingpathfollowerSettings.StallSpeedDirty && 1) {
|
||||
fixedwingpathfollowerStatus.Errors[FIXEDWINGPATHFOLLOWERSTATUS_ERRORS_STALLSPEED] = 1;
|
||||
result = 0;
|
||||
}
|
||||
|
||||
if (indicatedAirspeedActual < 1e-6f) {
|
||||
if (indicatedAirspeedState < 1e-6f) {
|
||||
// prevent division by zero, abort without controlling anything. This guidance mode is not suited for takeoff or touchdown, or handling stationary planes
|
||||
// also we cannot handle planes flying backwards, lets just wait until the nose drops
|
||||
fixedwingpathfollowerStatus.Errors[FIXEDWINGPATHFOLLOWERSTATUS_ERRORS_LOWSPEED] = 1;
|
||||
@ -515,7 +512,7 @@ static uint8_t updateFixedDesiredAttitude()
|
||||
// Error condition: plane cannot hold altitude at current speed.
|
||||
fixedwingpathfollowerStatus.Errors[FIXEDWINGPATHFOLLOWERSTATUS_ERRORS_LOWPOWER] = 0;
|
||||
if (powerCommand >= fixedwingpathfollowerSettings.ThrottleLimit[FIXEDWINGPATHFOLLOWERSETTINGS_THROTTLELIMIT_MAX] && // throttle at maximum
|
||||
velocityActual.Down > 0 && // we ARE going down
|
||||
velocityState.Down > 0 && // we ARE going down
|
||||
descentspeedDesired < 0 && // we WANT to go up
|
||||
airspeedError > 0) { // we are too slow already
|
||||
fixedwingpathfollowerStatus.Errors[FIXEDWINGPATHFOLLOWERSTATUS_ERRORS_LOWPOWER] = 1;
|
||||
@ -524,7 +521,7 @@ static uint8_t updateFixedDesiredAttitude()
|
||||
// Error condition: plane keeps climbing despite minimum throttle (opposite of above)
|
||||
fixedwingpathfollowerStatus.Errors[FIXEDWINGPATHFOLLOWERSTATUS_ERRORS_HIGHPOWER] = 0;
|
||||
if (powerCommand >= fixedwingpathfollowerSettings.ThrottleLimit[FIXEDWINGPATHFOLLOWERSETTINGS_THROTTLELIMIT_MIN] && // throttle at minimum
|
||||
velocityActual.Down < 0 && // we ARE going up
|
||||
velocityState.Down < 0 && // we ARE going up
|
||||
descentspeedDesired > 0 && // we WANT to go down
|
||||
airspeedError < 0) { // we are too fast already
|
||||
fixedwingpathfollowerStatus.Errors[FIXEDWINGPATHFOLLOWERSTATUS_ERRORS_HIGHPOWER] = 1;
|
||||
@ -565,7 +562,7 @@ static uint8_t updateFixedDesiredAttitude()
|
||||
// Error condition: high speed dive
|
||||
fixedwingpathfollowerStatus.Errors[FIXEDWINGPATHFOLLOWERSTATUS_ERRORS_PITCHCONTROL] = 0;
|
||||
if (pitchCommand >= fixedwingpathfollowerSettings.PitchLimit[FIXEDWINGPATHFOLLOWERSETTINGS_PITCHLIMIT_MAX] && // pitch demand is full up
|
||||
velocityActual.Down > 0 && // we ARE going down
|
||||
velocityState.Down > 0 && // we ARE going down
|
||||
descentspeedDesired < 0 && // we WANT to go up
|
||||
airspeedError < 0) { // we are too fast already
|
||||
fixedwingpathfollowerStatus.Errors[FIXEDWINGPATHFOLLOWERSTATUS_ERRORS_PITCHCONTROL] = 1;
|
||||
@ -576,7 +573,7 @@ static uint8_t updateFixedDesiredAttitude()
|
||||
* Compute desired roll command
|
||||
*/
|
||||
if (groundspeedDesired > 1e-6f) {
|
||||
bearingError = RAD2DEG(atan2f(velocityDesired.East, velocityDesired.North) - atan2f(velocityActual.East, velocityActual.North));
|
||||
bearingError = RAD2DEG(atan2f(velocityDesired.East, velocityDesired.North) - atan2f(velocityState.East, velocityState.North));
|
||||
} else {
|
||||
// if we are not supposed to move, run in a circle
|
||||
bearingError = -90.0f;
|
||||
@ -645,17 +642,17 @@ static void SettingsUpdatedCb(__attribute__((unused)) UAVObjEvent *ev)
|
||||
PathDesiredGet(&pathDesired);
|
||||
}
|
||||
|
||||
static void airspeedActualUpdatedCb(__attribute__((unused)) UAVObjEvent *ev)
|
||||
static void airspeedStateUpdatedCb(__attribute__((unused)) UAVObjEvent *ev)
|
||||
{
|
||||
AirspeedActualData airspeedActual;
|
||||
VelocityActualData velocityActual;
|
||||
AirspeedStateData airspeedState;
|
||||
VelocityStateData velocityState;
|
||||
|
||||
AirspeedActualGet(&airspeedActual);
|
||||
VelocityActualGet(&velocityActual);
|
||||
float groundspeed = sqrtf(velocityActual.East * velocityActual.East + velocityActual.North * velocityActual.North);
|
||||
AirspeedStateGet(&airspeedState);
|
||||
VelocityStateGet(&velocityState);
|
||||
float groundspeed = sqrtf(velocityState.East * velocityState.East + velocityState.North * velocityState.North);
|
||||
|
||||
|
||||
indicatedAirspeedActualBias = airspeedActual.CalibratedAirspeed - groundspeed;
|
||||
indicatedAirspeedStateBias = airspeedState.CalibratedAirspeed - groundspeed;
|
||||
// note - we do fly by Indicated Airspeed (== calibrated airspeed)
|
||||
// however since airspeed is updated less often than groundspeed, we use sudden changes to groundspeed to offset the airspeed by the same measurement.
|
||||
}
|
||||
|
@ -31,8 +31,8 @@
|
||||
#include "openpilot.h"
|
||||
#include "MkSerial.h"
|
||||
|
||||
#include "attitudeactual.h" // object that will be updated by the module
|
||||
#include "positionactual.h"
|
||||
#include "attitudestate.h" // object that will be updated by the module
|
||||
#include "positionstate.h"
|
||||
#include "flightbatterystate.h"
|
||||
|
||||
//
|
||||
@ -411,7 +411,7 @@ static uint16_t VersionMsg_GetVersion(const MkMsg_t *msg)
|
||||
|
||||
static void DoConnectedToFC(void)
|
||||
{
|
||||
AttitudeActualData attitudeData;
|
||||
AttitudeStateData attitudeData;
|
||||
MkMsg_t msg;
|
||||
|
||||
DEBUG_MSG("FC\n\r");
|
||||
@ -434,7 +434,7 @@ static void DoConnectedToFC(void)
|
||||
|
||||
attitudeData.Pitch = -(float)nick / 10;
|
||||
attitudeData.Roll = -(float)roll / 10;
|
||||
AttitudeActualSet(&attitudeData);
|
||||
AttitudeStateSet(&attitudeData);
|
||||
} else {
|
||||
DEBUG_MSG("TO\n\r");
|
||||
break;
|
||||
@ -446,8 +446,8 @@ static void DoConnectedToNC(void)
|
||||
{
|
||||
MkMsg_t msg;
|
||||
GpsPosition_t pos;
|
||||
AttitudeActualData attitudeData;
|
||||
PositionActualData positionData;
|
||||
AttitudeStateData attitudeData;
|
||||
PositionStateData positionData;
|
||||
FlightBatteryStateData flightBatteryData;
|
||||
|
||||
#ifdef GENERATE_BATTERY_INFO
|
||||
@ -478,7 +478,7 @@ static void DoConnectedToNC(void)
|
||||
#endif
|
||||
attitudeData.Pitch = -Par2Int8(&msg, OSD_MSG_NICK_IDX);
|
||||
attitudeData.Roll = -Par2Int8(&msg, OSD_MSG_ROLL_IDX);
|
||||
AttitudeActualSet(&attitudeData);
|
||||
AttitudeStateSet(&attitudeData);
|
||||
|
||||
positionData.Longitude = pos.longitute;
|
||||
positionData.Latitude = pos.latitude;
|
||||
@ -491,7 +491,7 @@ static void DoConnectedToNC(void)
|
||||
} else {
|
||||
positionData.Status = POSITIONACTUAL_STATUS_FIX3D;
|
||||
}
|
||||
PositionActualSet(&positionData);
|
||||
PositionStateSet(&positionData);
|
||||
|
||||
#if GENERATE_BATTERY_INFO
|
||||
if (++battStateCnt > 2) {
|
||||
|
@ -38,14 +38,13 @@
|
||||
#include "accessorydesired.h"
|
||||
#include "actuatordesired.h"
|
||||
#include "altitudeholddesired.h"
|
||||
#include "baroaltitude.h"
|
||||
#include "flighttelemetrystats.h"
|
||||
#include "flightstatus.h"
|
||||
#include "sanitycheck.h"
|
||||
#include "manualcontrol.h"
|
||||
#include "manualcontrolsettings.h"
|
||||
#include "manualcontrolcommand.h"
|
||||
#include "positionactual.h"
|
||||
#include "positionstate.h"
|
||||
#include "pathdesired.h"
|
||||
#include "stabilizationsettings.h"
|
||||
#include "stabilizationdesired.h"
|
||||
@ -722,34 +721,34 @@ static void updatePathDesired(__attribute__((unused)) ManualControlCommandData *
|
||||
|
||||
if (home && changed) {
|
||||
// Simple Return To Base mode - keep altitude the same, fly to home position
|
||||
PositionActualData positionActual;
|
||||
PositionActualGet(&positionActual);
|
||||
PositionStateData positionState;
|
||||
PositionStateGet(&positionState);
|
||||
|
||||
PathDesiredData pathDesired;
|
||||
PathDesiredGet(&pathDesired);
|
||||
pathDesired.Start[PATHDESIRED_START_NORTH] = 0;
|
||||
pathDesired.Start[PATHDESIRED_START_EAST] = 0;
|
||||
pathDesired.Start[PATHDESIRED_START_DOWN] = positionActual.Down - 10;
|
||||
pathDesired.Start[PATHDESIRED_START_DOWN] = positionState.Down - 10;
|
||||
pathDesired.End[PATHDESIRED_END_NORTH] = 0;
|
||||
pathDesired.End[PATHDESIRED_END_EAST] = 0;
|
||||
pathDesired.End[PATHDESIRED_END_DOWN] = positionActual.Down - 10;
|
||||
pathDesired.End[PATHDESIRED_END_DOWN] = positionState.Down - 10;
|
||||
pathDesired.StartingVelocity = 1;
|
||||
pathDesired.EndingVelocity = 0;
|
||||
pathDesired.Mode = PATHDESIRED_MODE_FLYENDPOINT;
|
||||
PathDesiredSet(&pathDesired);
|
||||
} else if (changed) {
|
||||
// After not being in this mode for a while init at current height
|
||||
PositionActualData positionActual;
|
||||
PositionActualGet(&positionActual);
|
||||
PositionStateData positionState;
|
||||
PositionStateGet(&positionState);
|
||||
|
||||
PathDesiredData pathDesired;
|
||||
PathDesiredGet(&pathDesired);
|
||||
pathDesired.Start[PATHDESIRED_START_NORTH] = positionActual.North;
|
||||
pathDesired.Start[PATHDESIRED_START_EAST] = positionActual.East;
|
||||
pathDesired.Start[PATHDESIRED_START_DOWN] = positionActual.Down;
|
||||
pathDesired.End[PATHDESIRED_END_NORTH] = positionActual.North;
|
||||
pathDesired.End[PATHDESIRED_END_EAST] = positionActual.East;
|
||||
pathDesired.End[PATHDESIRED_END_DOWN] = positionActual.Down;
|
||||
pathDesired.Start[PATHDESIRED_START_NORTH] = positionState.North;
|
||||
pathDesired.Start[PATHDESIRED_START_EAST] = positionState.East;
|
||||
pathDesired.Start[PATHDESIRED_START_DOWN] = positionState.Down;
|
||||
pathDesired.End[PATHDESIRED_END_NORTH] = positionState.North;
|
||||
pathDesired.End[PATHDESIRED_END_EAST] = positionState.East;
|
||||
pathDesired.End[PATHDESIRED_END_DOWN] = positionState.Down;
|
||||
pathDesired.StartingVelocity = 1;
|
||||
pathDesired.EndingVelocity = 0;
|
||||
pathDesired.Mode = PATHDESIRED_MODE_FLYENDPOINT;
|
||||
@ -778,25 +777,25 @@ static void updateLandDesired(__attribute__((unused)) ManualControlCommandData *
|
||||
lastSysTime = thisSysTime;
|
||||
*/
|
||||
|
||||
PositionActualData positionActual;
|
||||
PositionStateData positionState;
|
||||
|
||||
PositionActualGet(&positionActual);
|
||||
PositionStateGet(&positionState);
|
||||
|
||||
PathDesiredData pathDesired;
|
||||
PathDesiredGet(&pathDesired);
|
||||
if (changed) {
|
||||
// After not being in this mode for a while init at current height
|
||||
pathDesired.Start[PATHDESIRED_START_NORTH] = positionActual.North;
|
||||
pathDesired.Start[PATHDESIRED_START_EAST] = positionActual.East;
|
||||
pathDesired.Start[PATHDESIRED_START_DOWN] = positionActual.Down;
|
||||
pathDesired.End[PATHDESIRED_END_NORTH] = positionActual.North;
|
||||
pathDesired.End[PATHDESIRED_END_EAST] = positionActual.East;
|
||||
pathDesired.End[PATHDESIRED_END_DOWN] = positionActual.Down;
|
||||
pathDesired.Start[PATHDESIRED_START_NORTH] = positionState.North;
|
||||
pathDesired.Start[PATHDESIRED_START_EAST] = positionState.East;
|
||||
pathDesired.Start[PATHDESIRED_START_DOWN] = positionState.Down;
|
||||
pathDesired.End[PATHDESIRED_END_NORTH] = positionState.North;
|
||||
pathDesired.End[PATHDESIRED_END_EAST] = positionState.East;
|
||||
pathDesired.End[PATHDESIRED_END_DOWN] = positionState.Down;
|
||||
pathDesired.StartingVelocity = 1;
|
||||
pathDesired.EndingVelocity = 0;
|
||||
pathDesired.Mode = PATHDESIRED_MODE_FLYENDPOINT;
|
||||
}
|
||||
pathDesired.End[PATHDESIRED_END_DOWN] = positionActual.Down + 5;
|
||||
pathDesired.End[PATHDESIRED_END_DOWN] = positionState.Down + 5;
|
||||
PathDesiredSet(&pathDesired);
|
||||
}
|
||||
|
||||
@ -839,7 +838,7 @@ static void altitudeHoldDesired(ManualControlCommandData *cmd, bool changed)
|
||||
altitudeHoldDesiredData.Yaw = cmd->Yaw * stabSettings.ManualRate[STABILIZATIONSETTINGS_MANUALRATE_YAW];
|
||||
|
||||
float currentDown;
|
||||
PositionActualDownGet(¤tDown);
|
||||
PositionStateDownGet(¤tDown);
|
||||
if (changed) {
|
||||
// After not being in this mode for a while init at current height
|
||||
altitudeHoldDesiredData.Altitude = 0;
|
||||
|
@ -33,8 +33,8 @@
|
||||
|
||||
#include "flightbatterystate.h"
|
||||
#include "gpsposition.h"
|
||||
#include "attitudeactual.h"
|
||||
#include "baroaltitude.h"
|
||||
#include "attitudestate.h"
|
||||
#include "barosensor.h"
|
||||
|
||||
//
|
||||
// Configuration
|
||||
@ -168,7 +168,7 @@ static void SetCourse(uint16_t dir)
|
||||
WriteToMsg16(OSDMSG_HOME_IDX, dir);
|
||||
}
|
||||
|
||||
static void SetBaroAltitude(int16_t altitudeMeter)
|
||||
static void SetBaroSensor(int16_t altitudeMeter)
|
||||
{
|
||||
// calculated formula
|
||||
// ET OSD uses first update as zeropoint and then +- from that
|
||||
@ -214,7 +214,7 @@ static void GPSPositionUpdatedCb(__attribute__((unused)) UAVObjEvent *ev)
|
||||
newPosData = TRUE;
|
||||
}
|
||||
|
||||
static void BaroAltitudeUpdatedCb(__attribute__((unused)) UAVObjEvent *ev)
|
||||
static void BaroSensorUpdatedCb(__attribute__((unused)) UAVObjEvent *ev)
|
||||
{
|
||||
newBaroData = TRUE;
|
||||
}
|
||||
@ -441,10 +441,10 @@ static void Run(void)
|
||||
|
||||
if (newPosData) {
|
||||
GPSPositionData positionData;
|
||||
AttitudeActualData attitudeActualData;
|
||||
AttitudeStateData attitudeStateData;
|
||||
|
||||
GPSPositionGet(&positionData);
|
||||
AttitudeActualGet(&attitudeActualData);
|
||||
AttitudeStateGet(&attitudeStateData);
|
||||
|
||||
// DEBUG_MSG("%5d Pos: #stat=%d #sats=%d alt=%d\n\r", cnt,
|
||||
// positionData.Status, positionData.Satellites, (uint32_t)positionData.Altitude);
|
||||
@ -462,17 +462,17 @@ static void Run(void)
|
||||
SetCoord(OSDMSG_LON_IDX, positionData.Longitude);
|
||||
SetAltitude(positionData.Altitude);
|
||||
SetNbSats(positionData.Satellites);
|
||||
SetCourse(attitudeActualData.Yaw);
|
||||
SetCourse(attitudeStateData.Yaw);
|
||||
|
||||
newPosData = FALSE;
|
||||
} else {
|
||||
msg[OSDMSG_GPS_STAT] &= ~OSDMSG_GPS_STAT_HB_FLAG;
|
||||
}
|
||||
if (newBaroData) {
|
||||
BaroAltitudeData baroData;
|
||||
BaroSensorData baroData;
|
||||
|
||||
BaroAltitudeGet(&baroData);
|
||||
SetBaroAltitude(baroData.Altitude);
|
||||
BaroSensorGet(&baroData);
|
||||
SetBaroSensor(baroData.Altitude);
|
||||
|
||||
newBaroData = FALSE;
|
||||
}
|
||||
@ -545,7 +545,7 @@ int32_t OsdEtStdInitialize(void)
|
||||
{
|
||||
GPSPositionConnectCallback(GPSPositionUpdatedCb);
|
||||
FlightBatteryStateConnectCallback(FlightBatteryStateUpdatedCb);
|
||||
BaroAltitudeConnectCallback(BaroAltitudeUpdatedCb);
|
||||
BaroSensorConnectCallback(BaroSensorUpdatedCb);
|
||||
|
||||
memset(&ev, 0, sizeof(UAVObjEvent));
|
||||
EventPeriodicCallbackCreate(&ev, onTimer, 100 / portTICK_RATE_MS);
|
||||
|
@ -34,13 +34,13 @@
|
||||
|
||||
#include "osdgen.h"
|
||||
|
||||
#include "attitudeactual.h"
|
||||
#include "attitudestate.h"
|
||||
#include "gpsposition.h"
|
||||
#include "homelocation.h"
|
||||
#include "gpstime.h"
|
||||
#include "gpssatellites.h"
|
||||
#include "osdsettings.h"
|
||||
#include "baroaltitude.h"
|
||||
#include "barosensor.h"
|
||||
#include "taskinfo.h"
|
||||
#include "flightstatus.h"
|
||||
|
||||
@ -2137,14 +2137,14 @@ void updateGraphics()
|
||||
OsdSettingsData OsdSettings;
|
||||
|
||||
OsdSettingsGet(&OsdSettings);
|
||||
AttitudeActualData attitude;
|
||||
AttitudeActualGet(&attitude);
|
||||
AttitudeStateData attitude;
|
||||
AttitudeStateGet(&attitude);
|
||||
GPSPositionData gpsData;
|
||||
GPSPositionGet(&gpsData);
|
||||
HomeLocationData home;
|
||||
HomeLocationGet(&home);
|
||||
BaroAltitudeData baro;
|
||||
BaroAltitudeGet(&baro);
|
||||
BaroSensorData baro;
|
||||
BaroSensorGet(&baro);
|
||||
FlightStatusData status;
|
||||
FlightStatusGet(&status);
|
||||
|
||||
@ -2419,7 +2419,7 @@ int32_t osdgenStart(void)
|
||||
*/
|
||||
int32_t osdgenInitialize(void)
|
||||
{
|
||||
AttitudeActualInitialize();
|
||||
AttitudeStateInitialize();
|
||||
#ifdef PIOS_INCLUDE_GPS
|
||||
GPSPositionInitialize();
|
||||
#if !defined(PIOS_GPS_MINIMAL)
|
||||
@ -2431,7 +2431,7 @@ int32_t osdgenInitialize(void)
|
||||
#endif
|
||||
#endif
|
||||
OsdSettingsInitialize();
|
||||
BaroAltitudeInitialize();
|
||||
BaroSensorInitialize();
|
||||
FlightStatusInitialize();
|
||||
|
||||
return 0;
|
||||
|
@ -34,7 +34,7 @@
|
||||
|
||||
#include "osdinput.h"
|
||||
|
||||
#include "attitudeactual.h"
|
||||
#include "attitudestate.h"
|
||||
#include "taskinfo.h"
|
||||
#include "flightstatus.h"
|
||||
|
||||
@ -86,11 +86,11 @@ int32_t osdinputStart(void)
|
||||
*/
|
||||
int32_t osdinputInitialize(void)
|
||||
{
|
||||
AttitudeActualInitialize();
|
||||
AttitudeStateInitialize();
|
||||
FlightStatusInitialize();
|
||||
// Initialize quaternion
|
||||
AttitudeActualData attitude;
|
||||
AttitudeActualGet(&attitude);
|
||||
AttitudeStateData attitude;
|
||||
AttitudeStateGet(&attitude);
|
||||
attitude.q1 = 1;
|
||||
attitude.q2 = 0;
|
||||
attitude.q3 = 0;
|
||||
@ -98,7 +98,7 @@ int32_t osdinputInitialize(void)
|
||||
attitude.Roll = 0;
|
||||
attitude.Pitch = 0;
|
||||
attitude.Yaw = 0;
|
||||
AttitudeActualSet(&attitude);
|
||||
AttitudeStateSet(&attitude);
|
||||
|
||||
oposdPort = PIOS_COM_OSD;
|
||||
|
||||
@ -148,8 +148,8 @@ static void osdinputTask(__attribute__((unused)) void *parameters)
|
||||
}
|
||||
if (rx_count == 11) {
|
||||
if (oposd_rx_buffer[1] == OSD_PKT_TYPE_ATT) {
|
||||
AttitudeActualData attitude;
|
||||
AttitudeActualGet(&attitude);
|
||||
AttitudeStateData attitude;
|
||||
AttitudeStateGet(&attitude);
|
||||
attitude.q1 = 1;
|
||||
attitude.q2 = 0;
|
||||
attitude.q3 = 0;
|
||||
@ -157,7 +157,7 @@ static void osdinputTask(__attribute__((unused)) void *parameters)
|
||||
attitude.Roll = (float)((int16_t)(oposd_rx_buffer[3] | oposd_rx_buffer[4] << 8)) / 10.0f;
|
||||
attitude.Pitch = (float)((int16_t)(oposd_rx_buffer[5] | oposd_rx_buffer[6] << 8)) / 10.0f;
|
||||
attitude.Yaw = (float)((int16_t)(oposd_rx_buffer[7] | oposd_rx_buffer[8] << 8)) / 10.0f;
|
||||
AttitudeActualSet(&attitude);
|
||||
AttitudeStateSet(&attitude);
|
||||
} else if (oposd_rx_buffer[1] == OSD_PKT_TYPE_MODE) {
|
||||
FlightStatusData status;
|
||||
FlightStatusGet(&status);
|
||||
|
@ -35,11 +35,11 @@
|
||||
#endif
|
||||
|
||||
#if POSITIONACTUAL_SUPPORTED
|
||||
#include "positionactual.h"
|
||||
#include "positionstate.h"
|
||||
#endif
|
||||
|
||||
#include "systemalarms.h"
|
||||
#include "attitudeactual.h"
|
||||
#include "attitudestate.h"
|
||||
#include "hwsettings.h"
|
||||
#include "flightstatus.h"
|
||||
|
||||
@ -117,7 +117,7 @@ struct osd_hk_msg {
|
||||
|
||||
static struct osd_hk_msg osd_hk_msg_buf;
|
||||
|
||||
static volatile bool newPositionActualData = false;
|
||||
static volatile bool newPositionStateData = false;
|
||||
static volatile bool newBattData = false;
|
||||
static volatile bool newAttitudeData = false;
|
||||
static volatile bool newAlarmData = false;
|
||||
@ -155,15 +155,15 @@ static void send_update(__attribute__((unused)) UAVObjEvent *ev)
|
||||
case OSD_HK_PKT_TYPE_ATT:
|
||||
msg->t = OSD_HK_PKT_TYPE_ATT;
|
||||
float roll;
|
||||
AttitudeActualRollGet(&roll);
|
||||
AttitudeStateRollGet(&roll);
|
||||
blob->att.roll = (int16_t)(roll * 10);
|
||||
|
||||
float pitch;
|
||||
AttitudeActualPitchGet(&pitch);
|
||||
AttitudeStatePitchGet(&pitch);
|
||||
blob->att.pitch = (int16_t)(pitch * 10);
|
||||
|
||||
float yaw;
|
||||
AttitudeActualYawGet(&yaw);
|
||||
AttitudeStateYawGet(&yaw);
|
||||
blob->att.yaw = (int16_t)(yaw * 10);
|
||||
break;
|
||||
case OSD_HK_PKT_TYPE_MODE:
|
||||
@ -217,9 +217,9 @@ static void send_update(__attribute__((unused)) UAVObjEvent *ev)
|
||||
#endif
|
||||
|
||||
#if POSITIONACTUAL_SUPPORTED
|
||||
if (newPositionActualData) {
|
||||
PositionActualData position;
|
||||
PositionActualGet(&position);
|
||||
if (newPositionStateData) {
|
||||
PositionStateData position;
|
||||
PositionStateGet(&position);
|
||||
|
||||
/* compute 3D distance */
|
||||
float d = sqrt(
|
||||
@ -234,7 +234,7 @@ static void send_update(__attribute__((unused)) UAVObjEvent *ev)
|
||||
(home & 0xFF00 >> 8) |
|
||||
(home & 0x00FF << 8));
|
||||
|
||||
newPositionActualData = false;
|
||||
newPositionStateData = false;
|
||||
}
|
||||
#else
|
||||
// blob->misc.home = 0;
|
||||
|
@ -32,12 +32,12 @@
|
||||
#include "openpilot.h"
|
||||
|
||||
#include "flightstatus.h"
|
||||
#include "airspeedactual.h"
|
||||
#include "airspeedstate.h"
|
||||
#include "pathaction.h"
|
||||
#include "pathdesired.h"
|
||||
#include "pathstatus.h"
|
||||
#include "positionactual.h"
|
||||
#include "velocityactual.h"
|
||||
#include "positionstate.h"
|
||||
#include "velocitystate.h"
|
||||
#include "waypoint.h"
|
||||
#include "waypointactive.h"
|
||||
#include "taskinfo.h"
|
||||
@ -102,9 +102,9 @@ int32_t PathPlannerInitialize()
|
||||
PathActionInitialize();
|
||||
PathStatusInitialize();
|
||||
PathDesiredInitialize();
|
||||
PositionActualInitialize();
|
||||
AirspeedActualInitialize();
|
||||
VelocityActualInitialize();
|
||||
PositionStateInitialize();
|
||||
AirspeedStateInitialize();
|
||||
VelocityStateInitialize();
|
||||
WaypointInitialize();
|
||||
WaypointActiveInitialize();
|
||||
|
||||
@ -239,16 +239,16 @@ void updatePathDesired(__attribute__((unused)) UAVObjEvent *ev)
|
||||
pathDesired.UID = waypointActiveData.Index;
|
||||
|
||||
if (waypointActiveData.Index == 0) {
|
||||
PositionActualData positionActual;
|
||||
PositionActualGet(&positionActual);
|
||||
PositionStateData positionState;
|
||||
PositionStateGet(&positionState);
|
||||
// First waypoint has itself as start point (used to be home position but that proved dangerous when looping)
|
||||
|
||||
/*pathDesired.Start[PATHDESIRED_START_NORTH] = waypoint.Position[WAYPOINT_POSITION_NORTH];
|
||||
pathDesired.Start[PATHDESIRED_START_EAST] = waypoint.Position[WAYPOINT_POSITION_EAST];
|
||||
pathDesired.Start[PATHDESIRED_START_DOWN] = waypoint.Position[WAYPOINT_POSITION_DOWN];*/
|
||||
pathDesired.Start[PATHDESIRED_START_NORTH] = positionActual.North;
|
||||
pathDesired.Start[PATHDESIRED_START_EAST] = positionActual.East;
|
||||
pathDesired.Start[PATHDESIRED_START_DOWN] = positionActual.Down;
|
||||
pathDesired.Start[PATHDESIRED_START_NORTH] = positionState.North;
|
||||
pathDesired.Start[PATHDESIRED_START_EAST] = positionState.East;
|
||||
pathDesired.Start[PATHDESIRED_START_DOWN] = positionState.Down;
|
||||
pathDesired.StartingVelocity = pathDesired.EndingVelocity;
|
||||
} else {
|
||||
// Get previous waypoint as start point
|
||||
@ -365,16 +365,16 @@ static uint8_t conditionTimeOut()
|
||||
static uint8_t conditionDistanceToTarget()
|
||||
{
|
||||
float distance;
|
||||
PositionActualData positionActual;
|
||||
PositionStateData positionState;
|
||||
|
||||
PositionActualGet(&positionActual);
|
||||
PositionStateGet(&positionState);
|
||||
if (pathAction.ConditionParameters[1] > 0.5f) {
|
||||
distance = sqrtf(powf(waypoint.Position[0] - positionActual.North, 2)
|
||||
+ powf(waypoint.Position[1] - positionActual.East, 2)
|
||||
+ powf(waypoint.Position[1] - positionActual.Down, 2));
|
||||
distance = sqrtf(powf(waypoint.Position[0] - positionState.North, 2)
|
||||
+ powf(waypoint.Position[1] - positionState.East, 2)
|
||||
+ powf(waypoint.Position[1] - positionState.Down, 2));
|
||||
} else {
|
||||
distance = sqrtf(powf(waypoint.Position[0] - positionActual.North, 2)
|
||||
+ powf(waypoint.Position[1] - positionActual.East, 2));
|
||||
distance = sqrtf(powf(waypoint.Position[0] - positionState.North, 2)
|
||||
+ powf(waypoint.Position[1] - positionState.East, 2));
|
||||
}
|
||||
|
||||
if (distance <= pathAction.ConditionParameters[0]) {
|
||||
@ -392,12 +392,12 @@ static uint8_t conditionDistanceToTarget()
|
||||
static uint8_t conditionLegRemaining()
|
||||
{
|
||||
PathDesiredData pathDesired;
|
||||
PositionActualData positionActual;
|
||||
PositionStateData positionState;
|
||||
|
||||
PathDesiredGet(&pathDesired);
|
||||
PositionActualGet(&positionActual);
|
||||
PositionStateGet(&positionState);
|
||||
|
||||
float cur[3] = { positionActual.North, positionActual.East, positionActual.Down };
|
||||
float cur[3] = { positionState.North, positionState.East, positionState.Down };
|
||||
struct path_status progress;
|
||||
|
||||
path_progress(pathDesired.Start, pathDesired.End, cur, &progress, pathDesired.Mode);
|
||||
@ -415,12 +415,12 @@ static uint8_t conditionLegRemaining()
|
||||
static uint8_t conditionBelowError()
|
||||
{
|
||||
PathDesiredData pathDesired;
|
||||
PositionActualData positionActual;
|
||||
PositionStateData positionState;
|
||||
|
||||
PathDesiredGet(&pathDesired);
|
||||
PositionActualGet(&positionActual);
|
||||
PositionStateGet(&positionState);
|
||||
|
||||
float cur[3] = { positionActual.North, positionActual.East, positionActual.Down };
|
||||
float cur[3] = { positionState.North, positionState.East, positionState.Down };
|
||||
struct path_status progress;
|
||||
|
||||
path_progress(pathDesired.Start, pathDesired.End, cur, &progress, pathDesired.Mode);
|
||||
@ -438,11 +438,11 @@ static uint8_t conditionBelowError()
|
||||
*/
|
||||
static uint8_t conditionAboveAltitude()
|
||||
{
|
||||
PositionActualData positionActual;
|
||||
PositionStateData positionState;
|
||||
|
||||
PositionActualGet(&positionActual);
|
||||
PositionStateGet(&positionState);
|
||||
|
||||
if (positionActual.Down <= pathAction.ConditionParameters[0]) {
|
||||
if (positionState.Down <= pathAction.ConditionParameters[0]) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@ -456,15 +456,15 @@ static uint8_t conditionAboveAltitude()
|
||||
*/
|
||||
static uint8_t conditionAboveSpeed()
|
||||
{
|
||||
VelocityActualData velocityActual;
|
||||
VelocityStateData velocityState;
|
||||
|
||||
VelocityActualGet(&velocityActual);
|
||||
float velocity = sqrtf(velocityActual.North * velocityActual.North + velocityActual.East * velocityActual.East + velocityActual.Down * velocityActual.Down);
|
||||
VelocityStateGet(&velocityState);
|
||||
float velocity = sqrtf(velocityState.North * velocityState.North + velocityState.East * velocityState.East + velocityState.Down * velocityState.Down);
|
||||
|
||||
// use airspeed if requested and available
|
||||
if (pathAction.ConditionParameters[1] > 0.5f) {
|
||||
AirspeedActualData airspeed;
|
||||
AirspeedActualGet(&airspeed);
|
||||
AirspeedStateData airspeed;
|
||||
AirspeedStateGet(&airspeed);
|
||||
velocity = airspeed.CalibratedAirspeed;
|
||||
}
|
||||
|
||||
@ -494,8 +494,8 @@ static uint8_t conditionPointingTowardsNext()
|
||||
|
||||
float angle1 = atan2f((nextWaypoint.Position[0] - waypoint.Position[0]), (nextWaypoint.Position[1] - waypoint.Position[1]));
|
||||
|
||||
VelocityActualData velocity;
|
||||
VelocityActualGet(&velocity);
|
||||
VelocityStateData velocity;
|
||||
VelocityStateGet(&velocity);
|
||||
float angle2 = atan2f(velocity.North, velocity.East);
|
||||
|
||||
// calculate the absolute angular difference
|
||||
|
@ -4,7 +4,7 @@
|
||||
* @{
|
||||
* @addtogroup Sensors
|
||||
* @brief Acquires sensor data
|
||||
* Specifically updates the the @ref Gyros, @ref Accels, and @ref Magnetometer objects
|
||||
* Specifically updates the the @ref GyroSensor, @ref AccelSensor, and @ref MagnetoSensor objects
|
||||
* @{
|
||||
*
|
||||
* @file sensors.c
|
||||
@ -32,7 +32,7 @@
|
||||
|
||||
/**
|
||||
* Input objects: None, takes sensor data via pios
|
||||
* Output objects: @ref Gyros @ref Accels @ref Magnetometer
|
||||
* Output objects: @ref GyroSensor @ref AccelSensor @ref MagnetoSensor
|
||||
*
|
||||
* The module executes in its own thread.
|
||||
*
|
||||
@ -49,12 +49,10 @@
|
||||
#include <openpilot.h>
|
||||
|
||||
#include <homelocation.h>
|
||||
#include <magnetometer.h>
|
||||
#include <magbias.h>
|
||||
#include <accels.h>
|
||||
#include <gyros.h>
|
||||
#include <gyrosbias.h>
|
||||
#include <attitudeactual.h>
|
||||
#include <magnetosensor.h>
|
||||
#include <accelsensor.h>
|
||||
#include <gyrosensor.h>
|
||||
#include <attitudestate.h>
|
||||
#include <attitudesettings.h>
|
||||
#include <revocalibration.h>
|
||||
#include <flightstatus.h>
|
||||
@ -75,14 +73,13 @@
|
||||
// Private functions
|
||||
static void SensorsTask(void *parameters);
|
||||
static void settingsUpdatedCb(UAVObjEvent *objEv);
|
||||
static void magOffsetEstimation(MagnetometerData *mag);
|
||||
// static void magOffsetEstimation(MagnetoSensorData *mag);
|
||||
|
||||
// Private variables
|
||||
static xTaskHandle sensorsTaskHandle;
|
||||
RevoCalibrationData cal;
|
||||
|
||||
// These values are initialized by settings but can be updated by the attitude algorithm
|
||||
static bool bias_correct_gyro = true;
|
||||
|
||||
static float mag_bias[3] = { 0, 0, 0 };
|
||||
static float mag_scale[3] = { 0, 0, 0 };
|
||||
@ -111,11 +108,9 @@ static int8_t rotate = 0;
|
||||
*/
|
||||
int32_t SensorsInitialize(void)
|
||||
{
|
||||
GyrosInitialize();
|
||||
GyrosBiasInitialize();
|
||||
AccelsInitialize();
|
||||
MagnetometerInitialize();
|
||||
MagBiasInitialize();
|
||||
GyroSensorInitialize();
|
||||
AccelSensorInitialize();
|
||||
MagnetoSensorInitialize();
|
||||
RevoCalibrationInitialize();
|
||||
AttitudeSettingsInitialize();
|
||||
|
||||
@ -238,8 +233,8 @@ static void SensorsTask(__attribute__((unused)) void *parameters)
|
||||
accel_samples = 0;
|
||||
gyro_samples = 0;
|
||||
|
||||
AccelsData accelsData;
|
||||
GyrosData gyrosData;
|
||||
AccelSensorData accelSensorData;
|
||||
GyroSensorData gyroSensorData;
|
||||
|
||||
switch (bdinfo->board_rev) {
|
||||
case 0x01: // L3GD20 + BMA180 board
|
||||
@ -275,7 +270,7 @@ static void SensorsTask(__attribute__((unused)) void *parameters)
|
||||
accel_scaling = PIOS_BMA180_GetScale();
|
||||
|
||||
// Get temp from last reading
|
||||
accelsData.temperature = 25.0f + ((float)accel.temperature - 2.0f) / 2.0f;
|
||||
accelSensorData.temperature = 25.0f + ((float)accel.temperature - 2.0f) / 2.0f;
|
||||
}
|
||||
#endif /* if defined(PIOS_INCLUDE_BMA180) */
|
||||
#if defined(PIOS_INCLUDE_L3GD20)
|
||||
@ -297,7 +292,7 @@ static void SensorsTask(__attribute__((unused)) void *parameters)
|
||||
gyro_scaling = PIOS_L3GD20_GetScale();
|
||||
|
||||
// Get temp from last reading
|
||||
gyrosData.temperature = gyro.temperature;
|
||||
gyroSensorData.temperature = gyro.temperature;
|
||||
}
|
||||
#endif /* if defined(PIOS_INCLUDE_L3GD20) */
|
||||
break;
|
||||
@ -330,8 +325,8 @@ static void SensorsTask(__attribute__((unused)) void *parameters)
|
||||
gyro_scaling = PIOS_MPU6000_GetScale();
|
||||
accel_scaling = PIOS_MPU6000_GetAccelScale();
|
||||
|
||||
gyrosData.temperature = 35.0f + ((float)mpu6000_data.temperature + 512.0f) / 340.0f;
|
||||
accelsData.temperature = 35.0f + ((float)mpu6000_data.temperature + 512.0f) / 340.0f;
|
||||
gyroSensorData.temperature = 35.0f + ((float)mpu6000_data.temperature + 512.0f) / 340.0f;
|
||||
accelSensorData.temperature = 35.0f + ((float)mpu6000_data.temperature + 512.0f) / 340.0f;
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_MPU6000 */
|
||||
break;
|
||||
@ -348,15 +343,15 @@ static void SensorsTask(__attribute__((unused)) void *parameters)
|
||||
accels[2] * accel_scaling * accel_scale[2] - accel_bias[2] };
|
||||
if (rotate) {
|
||||
rot_mult(R, accels_out, accels);
|
||||
accelsData.x = accels[0];
|
||||
accelsData.y = accels[1];
|
||||
accelsData.z = accels[2];
|
||||
accelSensorData.x = accels[0];
|
||||
accelSensorData.y = accels[1];
|
||||
accelSensorData.z = accels[2];
|
||||
} else {
|
||||
accelsData.x = accels_out[0];
|
||||
accelsData.y = accels_out[1];
|
||||
accelsData.z = accels_out[2];
|
||||
accelSensorData.x = accels_out[0];
|
||||
accelSensorData.y = accels_out[1];
|
||||
accelSensorData.z = accels_out[2];
|
||||
}
|
||||
AccelsSet(&accelsData);
|
||||
AccelSensorSet(&accelSensorData);
|
||||
|
||||
// Scale the gyros
|
||||
float gyros[3] = { (float)gyro_accum[0] / gyro_samples,
|
||||
@ -367,30 +362,30 @@ static void SensorsTask(__attribute__((unused)) void *parameters)
|
||||
gyros[2] * gyro_scaling * gyro_scale[2] - gyro_staticbias[2] };
|
||||
if (rotate) {
|
||||
rot_mult(R, gyros_out, gyros);
|
||||
gyrosData.x = gyros[0];
|
||||
gyrosData.y = gyros[1];
|
||||
gyrosData.z = gyros[2];
|
||||
gyroSensorData.x = gyros[0];
|
||||
gyroSensorData.y = gyros[1];
|
||||
gyroSensorData.z = gyros[2];
|
||||
} else {
|
||||
gyrosData.x = gyros_out[0];
|
||||
gyrosData.y = gyros_out[1];
|
||||
gyrosData.z = gyros_out[2];
|
||||
gyroSensorData.x = gyros_out[0];
|
||||
gyroSensorData.y = gyros_out[1];
|
||||
gyroSensorData.z = gyros_out[2];
|
||||
}
|
||||
|
||||
if (bias_correct_gyro) {
|
||||
/* TODO if (bias_correct_gyro) {
|
||||
// Apply bias correction to the gyros from the state estimator
|
||||
GyrosBiasData gyrosBias;
|
||||
GyrosBiasGet(&gyrosBias);
|
||||
gyrosData.x -= gyrosBias.x;
|
||||
gyrosData.y -= gyrosBias.y;
|
||||
gyrosData.z -= gyrosBias.z;
|
||||
}
|
||||
GyrosSet(&gyrosData);
|
||||
}*/
|
||||
GyroSensorSet(&gyroSensorData);
|
||||
|
||||
// Because most crafts wont get enough information from gravity to zero yaw gyro, we try
|
||||
// and make it average zero (weakly)
|
||||
|
||||
#if defined(PIOS_INCLUDE_HMC5883)
|
||||
MagnetometerData mag;
|
||||
MagnetoSensorData mag;
|
||||
if (PIOS_HMC5883_NewDataAvailable() || PIOS_DELAY_DiffuS(mag_update_time) > 150000) {
|
||||
int16_t values[3];
|
||||
PIOS_HMC5883_ReadMag(values);
|
||||
@ -410,11 +405,14 @@ static void SensorsTask(__attribute__((unused)) void *parameters)
|
||||
}
|
||||
|
||||
// Correct for mag bias and update if the rate is non zero
|
||||
// TODO
|
||||
/*
|
||||
if (cal.MagBiasNullingRate > 0) {
|
||||
magOffsetEstimation(&mag);
|
||||
}
|
||||
*/
|
||||
|
||||
MagnetometerSet(&mag);
|
||||
MagnetoSensorSet(&mag);
|
||||
mag_update_time = PIOS_DELAY_GetRaw();
|
||||
}
|
||||
#endif /* if defined(PIOS_INCLUDE_HMC5883) */
|
||||
@ -430,9 +428,11 @@ static void SensorsTask(__attribute__((unused)) void *parameters)
|
||||
* Magnetometer Offset Cancellation: Theory and Implementation,
|
||||
* revisited William Premerlani, October 14, 2011
|
||||
*/
|
||||
static void magOffsetEstimation(MagnetometerData *mag)
|
||||
{
|
||||
#if 0
|
||||
// TODO
|
||||
/*
|
||||
static void magOffsetEstimation(MagnetoSensorData *mag)
|
||||
{
|
||||
#if 0
|
||||
// Constants, to possibly go into a UAVO
|
||||
static const float MIN_NORM_DIFFERENCE = 50;
|
||||
|
||||
@ -471,7 +471,7 @@ static void magOffsetEstimation(MagnetometerData *mag)
|
||||
// Store this value to compare against next update
|
||||
B2[0] = B1[0]; B2[1] = B1[1]; B2[2] = B1[2];
|
||||
}
|
||||
#else /* if 0 */
|
||||
#else // if 0
|
||||
MagBiasData magBias;
|
||||
MagBiasGet(&magBias);
|
||||
|
||||
@ -483,8 +483,8 @@ static void magOffsetEstimation(MagnetometerData *mag)
|
||||
HomeLocationData homeLocation;
|
||||
HomeLocationGet(&homeLocation);
|
||||
|
||||
AttitudeActualData attitude;
|
||||
AttitudeActualGet(&attitude);
|
||||
AttitudeStateData attitude;
|
||||
AttitudeStateGet(&attitude);
|
||||
|
||||
const float Rxy = sqrtf(homeLocation.Be[0] * homeLocation.Be[0] + homeLocation.Be[1] * homeLocation.Be[1]);
|
||||
const float Rz = homeLocation.Be[2];
|
||||
@ -523,8 +523,9 @@ static void magOffsetEstimation(MagnetometerData *mag)
|
||||
magBias.z += delta[2];
|
||||
MagBiasSet(&magBias);
|
||||
}
|
||||
#endif /* if 0 */
|
||||
}
|
||||
#endif // if 0
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* Locally cache some variables from the AtttitudeSettings object
|
||||
@ -552,18 +553,9 @@ static void settingsUpdatedCb(__attribute__((unused)) UAVObjEvent *objEv)
|
||||
gyro_scale[1] = cal.gyro_scale[REVOCALIBRATION_GYRO_SCALE_Y];
|
||||
gyro_scale[2] = cal.gyro_scale[REVOCALIBRATION_GYRO_SCALE_Z];
|
||||
|
||||
// Zero out any adaptive tracking
|
||||
MagBiasData magBias;
|
||||
MagBiasGet(&magBias);
|
||||
magBias.x = 0;
|
||||
magBias.y = 0;
|
||||
magBias.z = 0;
|
||||
MagBiasSet(&magBias);
|
||||
|
||||
|
||||
AttitudeSettingsData attitudeSettings;
|
||||
AttitudeSettingsGet(&attitudeSettings);
|
||||
bias_correct_gyro = (cal.BiasCorrectedRaw == REVOCALIBRATION_BIASCORRECTEDRAW_TRUE);
|
||||
|
||||
// Indicates not to expend cycles on rotation
|
||||
if (attitudeSettings.BoardRotation[0] == 0 && attitudeSettings.BoardRotation[1] == 0 &&
|
||||
|
@ -4,7 +4,7 @@
|
||||
* @{
|
||||
* @addtogroup Sensors
|
||||
* @brief Acquires sensor data
|
||||
* Specifically updates the the @ref Gyros, @ref Accels, and @ref Magnetometer objects
|
||||
* Specifically updates the the @ref GyroSensor, @ref AccelSensor, and @ref MagnetoSensor objects
|
||||
* @{
|
||||
*
|
||||
* @file sensors.c
|
||||
@ -32,7 +32,7 @@
|
||||
|
||||
/**
|
||||
* Input objects: None, takes sensor data via pios
|
||||
* Output objects: @ref Gyros @ref Accels @ref Magnetometer
|
||||
* Output objects: @ref GyroSensor @ref AccelSensor @ref MagnetoSensor
|
||||
*
|
||||
* The module executes in its own thread.
|
||||
*
|
||||
@ -49,21 +49,19 @@
|
||||
#include <openpilot.h>
|
||||
|
||||
#include "attitude.h"
|
||||
#include "accels.h"
|
||||
#include "accelsensor.h"
|
||||
#include "actuatordesired.h"
|
||||
#include "attitudeactual.h"
|
||||
#include "attitudestate.h"
|
||||
#include "attitudesimulated.h"
|
||||
#include "attitudesettings.h"
|
||||
#include "rawairspeed.h"
|
||||
#include "baroaltitude.h"
|
||||
#include "gyros.h"
|
||||
#include "gyrosbias.h"
|
||||
#include "barosensor.h"
|
||||
#include "gyrosensor.h"
|
||||
#include "flightstatus.h"
|
||||
#include "gpsposition.h"
|
||||
#include "gpsvelocity.h"
|
||||
#include "homelocation.h"
|
||||
#include "magnetometer.h"
|
||||
#include "magbias.h"
|
||||
#include "sensor.h"
|
||||
#include "ratedesired.h"
|
||||
#include "revocalibration.h"
|
||||
#include "systemsettings.h"
|
||||
@ -90,8 +88,6 @@ static void simulateModelAgnostic();
|
||||
static void simulateModelQuadcopter();
|
||||
static void simulateModelAirplane();
|
||||
|
||||
static void magOffsetEstimation(MagnetometerData *mag);
|
||||
|
||||
static float accel_bias[3];
|
||||
|
||||
static float rand_gauss();
|
||||
@ -109,15 +105,15 @@ int32_t SensorsInitialize(void)
|
||||
accel_bias[1] = rand_gauss() / 10;
|
||||
accel_bias[2] = rand_gauss() / 10;
|
||||
|
||||
AccelsInitialize();
|
||||
AccelSensorInitialize();
|
||||
AttitudeSimulatedInitialize();
|
||||
BaroAltitudeInitialize();
|
||||
BaroSensorInitialize();
|
||||
AirspeedSensorInitialize();
|
||||
GyrosInitialize();
|
||||
GyrosBiasInitialize();
|
||||
GyroSensorInitialize();
|
||||
// GyrosBiasInitialize();
|
||||
GPSPositionInitialize();
|
||||
GPSVelocityInitialize();
|
||||
MagnetometerInitialize();
|
||||
MagnetoSensorInitialize();
|
||||
MagBiasInitialize();
|
||||
RevoCalibrationInitialize();
|
||||
|
||||
@ -218,32 +214,34 @@ static void SensorsTask(__attribute__((unused)) void *parameters)
|
||||
|
||||
static void simulateConstant()
|
||||
{
|
||||
AccelsData accelsData; // Skip get as we set all the fields
|
||||
AccelSensorData accelSensorData; // Skip get as we set all the fields
|
||||
|
||||
accelsData.x = 0;
|
||||
accelsData.y = 0;
|
||||
accelsData.z = -GRAV;
|
||||
accelsData.temperature = 0;
|
||||
AccelsSet(&accelsData);
|
||||
accelSensorData.x = 0;
|
||||
accelSensorData.y = 0;
|
||||
accelSensorData.z = -GRAV;
|
||||
accelSensorData.temperature = 0;
|
||||
AccelSensorSet(&accelSensorData);
|
||||
|
||||
GyrosData gyrosData; // Skip get as we set all the fields
|
||||
gyrosData.x = 0;
|
||||
gyrosData.y = 0;
|
||||
gyrosData.z = 0;
|
||||
GyroSensorData gyroSensorData; // Skip get as we set all the fields
|
||||
gyroSensorData.x = 0;
|
||||
gyroSensorData.y = 0;
|
||||
gyroSensorData.z = 0;
|
||||
|
||||
/* TODO
|
||||
// Apply bias correction to the gyros
|
||||
GyrosBiasData gyrosBias;
|
||||
GyrosBiasGet(&gyrosBias);
|
||||
gyrosData.x += gyrosBias.x;
|
||||
gyrosData.y += gyrosBias.y;
|
||||
gyrosData.z += gyrosBias.z;
|
||||
gyroSensorData.x += gyrosBias.x;
|
||||
gyroSensorData.y += gyrosBias.y;
|
||||
gyroSensorData.z += gyrosBias.z;
|
||||
*/
|
||||
|
||||
GyrosSet(&gyrosData);
|
||||
GyroSensorSet(&gyroSensorData);
|
||||
|
||||
BaroAltitudeData baroAltitude;
|
||||
BaroAltitudeGet(&baroAltitude);
|
||||
baroAltitude.Altitude = 1;
|
||||
BaroAltitudeSet(&baroAltitude);
|
||||
BaroSensorData baroSensor;
|
||||
BaroSensorGet(&baroSensor);
|
||||
baroSensor.Altitude = 1;
|
||||
BaroSensorSet(&baroSensor);
|
||||
|
||||
GPSPositionData gpsPosition;
|
||||
GPSPositionGet(&gpsPosition);
|
||||
@ -254,11 +252,11 @@ static void simulateConstant()
|
||||
|
||||
// Because most crafts wont get enough information from gravity to zero yaw gyro, we try
|
||||
// and make it average zero (weakly)
|
||||
MagnetometerData mag;
|
||||
MagnetoSensorData mag;
|
||||
mag.x = 400;
|
||||
mag.y = 0;
|
||||
mag.z = 800;
|
||||
MagnetometerSet(&mag);
|
||||
MagnetoSensorSet(&mag);
|
||||
}
|
||||
|
||||
static void simulateModelAgnostic()
|
||||
@ -267,43 +265,45 @@ static void simulateModelAgnostic()
|
||||
float q[4];
|
||||
|
||||
// Simulate accels based on current attitude
|
||||
AttitudeActualData attitudeActual;
|
||||
AttitudeStateData attitudeState;
|
||||
|
||||
AttitudeActualGet(&attitudeActual);
|
||||
q[0] = attitudeActual.q1;
|
||||
q[1] = attitudeActual.q2;
|
||||
q[2] = attitudeActual.q3;
|
||||
q[3] = attitudeActual.q4;
|
||||
AttitudeStateGet(&attitudeState);
|
||||
q[0] = attitudeState.q1;
|
||||
q[1] = attitudeState.q2;
|
||||
q[2] = attitudeState.q3;
|
||||
q[3] = attitudeState.q4;
|
||||
Quaternion2R(q, Rbe);
|
||||
|
||||
AccelsData accelsData; // Skip get as we set all the fields
|
||||
accelsData.x = -GRAV * Rbe[0][2];
|
||||
accelsData.y = -GRAV * Rbe[1][2];
|
||||
accelsData.z = -GRAV * Rbe[2][2];
|
||||
accelsData.temperature = 30;
|
||||
AccelsSet(&accelsData);
|
||||
AccelSensorData accelSensorData; // Skip get as we set all the fields
|
||||
accelSensorData.x = -GRAV * Rbe[0][2];
|
||||
accelSensorData.y = -GRAV * Rbe[1][2];
|
||||
accelSensorData.z = -GRAV * Rbe[2][2];
|
||||
accelSensorData.temperature = 30;
|
||||
AccelSensorSet(&accelSensorData);
|
||||
|
||||
RateDesiredData rateDesired;
|
||||
RateDesiredGet(&rateDesired);
|
||||
|
||||
GyrosData gyrosData; // Skip get as we set all the fields
|
||||
gyrosData.x = rateDesired.Roll + rand_gauss();
|
||||
gyrosData.y = rateDesired.Pitch + rand_gauss();
|
||||
gyrosData.z = rateDesired.Yaw + rand_gauss();
|
||||
GyroSensorData gyroSensorData; // Skip get as we set all the fields
|
||||
gyroSensorData.x = rateDesired.Roll + rand_gauss();
|
||||
gyroSensorData.y = rateDesired.Pitch + rand_gauss();
|
||||
gyroSensorData.z = rateDesired.Yaw + rand_gauss();
|
||||
|
||||
/* TODO
|
||||
// Apply bias correction to the gyros
|
||||
GyrosBiasData gyrosBias;
|
||||
GyrosBiasGet(&gyrosBias);
|
||||
gyrosData.x += gyrosBias.x;
|
||||
gyrosData.y += gyrosBias.y;
|
||||
gyrosData.z += gyrosBias.z;
|
||||
gyroSensorData.x += gyrosBias.x;
|
||||
gyroSensorData.y += gyrosBias.y;
|
||||
gyroSensorData.z += gyrosBias.z;
|
||||
*/
|
||||
|
||||
GyrosSet(&gyrosData);
|
||||
GyroSensorSet(&gyroSensorData);
|
||||
|
||||
BaroAltitudeData baroAltitude;
|
||||
BaroAltitudeGet(&baroAltitude);
|
||||
baroAltitude.Altitude = 1;
|
||||
BaroAltitudeSet(&baroAltitude);
|
||||
BaroSensorData baroSensor;
|
||||
BaroSensorGet(&baroSensor);
|
||||
baroSensor.Altitude = 1;
|
||||
BaroSensorSet(&baroSensor);
|
||||
|
||||
GPSPositionData gpsPosition;
|
||||
GPSPositionGet(&gpsPosition);
|
||||
@ -314,11 +314,11 @@ static void simulateModelAgnostic()
|
||||
|
||||
// Because most crafts wont get enough information from gravity to zero yaw gyro, we try
|
||||
// and make it average zero (weakly)
|
||||
MagnetometerData mag;
|
||||
MagnetoSensorData mag;
|
||||
mag.x = 400;
|
||||
mag.y = 0;
|
||||
mag.z = 800;
|
||||
MagnetometerSet(&mag);
|
||||
MagnetoSensorSet(&mag);
|
||||
}
|
||||
|
||||
float thrustToDegs = 50;
|
||||
@ -369,10 +369,10 @@ static void simulateModelQuadcopter()
|
||||
// rpy[1] = control_scaling * actuatorDesired.Pitch * (1 - ACTUATOR_ALPHA) + rpy[1] * ACTUATOR_ALPHA;
|
||||
// rpy[2] = control_scaling * actuatorDesired.Yaw * (1 - ACTUATOR_ALPHA) + rpy[2] * ACTUATOR_ALPHA;
|
||||
//
|
||||
// GyrosData gyrosData; // Skip get as we set all the fields
|
||||
// gyrosData.x = rpy[0] * 180 / M_PI + rand_gauss();
|
||||
// gyrosData.y = rpy[1] * 180 / M_PI + rand_gauss();
|
||||
// gyrosData.z = rpy[2] * 180 / M_PI + rand_gauss();
|
||||
// GyrosData gyroSensorData; // Skip get as we set all the fields
|
||||
// gyroSensorData.x = rpy[0] * 180 / M_PI + rand_gauss();
|
||||
// gyroSensorData.y = rpy[1] * 180 / M_PI + rand_gauss();
|
||||
// gyroSensorData.z = rpy[2] * 180 / M_PI + rand_gauss();
|
||||
|
||||
RateDesiredData rateDesired;
|
||||
RateDesiredGet(&rateDesired);
|
||||
@ -381,11 +381,11 @@ static void simulateModelQuadcopter()
|
||||
rpy[1] = (flightStatus.Armed == FLIGHTSTATUS_ARMED_ARMED) * rateDesired.Pitch * (1 - ACTUATOR_ALPHA) + rpy[1] * ACTUATOR_ALPHA;
|
||||
rpy[2] = (flightStatus.Armed == FLIGHTSTATUS_ARMED_ARMED) * rateDesired.Yaw * (1 - ACTUATOR_ALPHA) + rpy[2] * ACTUATOR_ALPHA;
|
||||
|
||||
GyrosData gyrosData; // Skip get as we set all the fields
|
||||
gyrosData.x = rpy[0] + rand_gauss();
|
||||
gyrosData.y = rpy[1] + rand_gauss();
|
||||
gyrosData.z = rpy[2] + rand_gauss();
|
||||
GyrosSet(&gyrosData);
|
||||
GyroSensorData gyroSensorData; // Skip get as we set all the fields
|
||||
gyroSensorData.x = rpy[0] + rand_gauss();
|
||||
gyroSensorData.y = rpy[1] + rand_gauss();
|
||||
gyroSensorData.z = rpy[2] + rand_gauss();
|
||||
GyroSensorSet(&gyroSensorData);
|
||||
|
||||
// Predict the attitude forward in time
|
||||
float qdot[4];
|
||||
@ -407,13 +407,13 @@ static void simulateModelQuadcopter()
|
||||
q[3] = q[3] / qmag;
|
||||
|
||||
if (overideAttitude) {
|
||||
AttitudeActualData attitudeActual;
|
||||
AttitudeActualGet(&attitudeActual);
|
||||
attitudeActual.q1 = q[0];
|
||||
attitudeActual.q2 = q[1];
|
||||
attitudeActual.q3 = q[2];
|
||||
attitudeActual.q4 = q[3];
|
||||
AttitudeActualSet(&attitudeActual);
|
||||
AttitudeStateData attitudeState;
|
||||
AttitudeStateGet(&attitudeState);
|
||||
attitudeState.q1 = q[0];
|
||||
attitudeState.q2 = q[1];
|
||||
attitudeState.q3 = q[2];
|
||||
attitudeState.q4 = q[3];
|
||||
AttitudeStateSet(&attitudeState);
|
||||
}
|
||||
|
||||
static float wind[3] = { 0, 0, 0 };
|
||||
@ -454,12 +454,12 @@ static void simulateModelQuadcopter()
|
||||
ned_accel[2] -= 9.81;
|
||||
|
||||
// Transform the accels back in to body frame
|
||||
AccelsData accelsData; // Skip get as we set all the fields
|
||||
accelsData.x = ned_accel[0] * Rbe[0][0] + ned_accel[1] * Rbe[0][1] + ned_accel[2] * Rbe[0][2] + accel_bias[0];
|
||||
accelsData.y = ned_accel[0] * Rbe[1][0] + ned_accel[1] * Rbe[1][1] + ned_accel[2] * Rbe[1][2] + accel_bias[1];
|
||||
accelsData.z = ned_accel[0] * Rbe[2][0] + ned_accel[1] * Rbe[2][1] + ned_accel[2] * Rbe[2][2] + accel_bias[2];
|
||||
accelsData.temperature = 30;
|
||||
AccelsSet(&accelsData);
|
||||
AccelSensorData accelSensorData; // Skip get as we set all the fields
|
||||
accelSensorData.x = ned_accel[0] * Rbe[0][0] + ned_accel[1] * Rbe[0][1] + ned_accel[2] * Rbe[0][2] + accel_bias[0];
|
||||
accelSensorData.y = ned_accel[0] * Rbe[1][0] + ned_accel[1] * Rbe[1][1] + ned_accel[2] * Rbe[1][2] + accel_bias[1];
|
||||
accelSensorData.z = ned_accel[0] * Rbe[2][0] + ned_accel[1] * Rbe[2][1] + ned_accel[2] * Rbe[2][2] + accel_bias[2];
|
||||
accelSensorData.temperature = 30;
|
||||
AccelSensorSet(&accelSensorData);
|
||||
|
||||
if (baro_offset == 0) {
|
||||
// Hacky initialization
|
||||
@ -471,10 +471,10 @@ static void simulateModelQuadcopter()
|
||||
// Update baro periodically
|
||||
static uint32_t last_baro_time = 0;
|
||||
if (PIOS_DELAY_DiffuS(last_baro_time) / 1.0e6 > BARO_PERIOD) {
|
||||
BaroAltitudeData baroAltitude;
|
||||
BaroAltitudeGet(&baroAltitude);
|
||||
baroAltitude.Altitude = -pos[2] + baro_offset;
|
||||
BaroAltitudeSet(&baroAltitude);
|
||||
BaroSensorData baroSensor;
|
||||
BaroSensorGet(&baroSensor);
|
||||
baroSensor.Altitude = -pos[2] + baro_offset;
|
||||
BaroSensorSet(&baroSensor);
|
||||
last_baro_time = PIOS_DELAY_GetRaw();
|
||||
}
|
||||
|
||||
@ -528,15 +528,12 @@ static void simulateModelQuadcopter()
|
||||
// Update mag periodically
|
||||
static uint32_t last_mag_time = 0;
|
||||
if (PIOS_DELAY_DiffuS(last_mag_time) / 1.0e6 > MAG_PERIOD) {
|
||||
MagnetometerData mag;
|
||||
MagnetoSensorData mag;
|
||||
mag.x = homeLocation.Be[0] * Rbe[0][0] + homeLocation.Be[1] * Rbe[0][1] + homeLocation.Be[2] * Rbe[0][2];
|
||||
mag.y = homeLocation.Be[0] * Rbe[1][0] + homeLocation.Be[1] * Rbe[1][1] + homeLocation.Be[2] * Rbe[1][2];
|
||||
mag.z = homeLocation.Be[0] * Rbe[2][0] + homeLocation.Be[1] * Rbe[2][1] + homeLocation.Be[2] * Rbe[2][2];
|
||||
|
||||
// Run the offset compensation algorithm from the firmware
|
||||
magOffsetEstimation(&mag);
|
||||
|
||||
MagnetometerSet(&mag);
|
||||
MagnetoSensorSet(&mag);
|
||||
last_mag_time = PIOS_DELAY_GetRaw();
|
||||
}
|
||||
|
||||
@ -615,20 +612,20 @@ static void simulateModelAirplane()
|
||||
// rpy[1] = control_scaling * actuatorDesired.Pitch * (1 - ACTUATOR_ALPHA) + rpy[1] * ACTUATOR_ALPHA;
|
||||
// rpy[2] = control_scaling * actuatorDesired.Yaw * (1 - ACTUATOR_ALPHA) + rpy[2] * ACTUATOR_ALPHA;
|
||||
//
|
||||
// GyrosData gyrosData; // Skip get as we set all the fields
|
||||
// gyrosData.x = rpy[0] * 180 / M_PI + rand_gauss();
|
||||
// gyrosData.y = rpy[1] * 180 / M_PI + rand_gauss();
|
||||
// gyrosData.z = rpy[2] * 180 / M_PI + rand_gauss();
|
||||
// GyrosData gyroSensorData; // Skip get as we set all the fields
|
||||
// gyroSensorData.x = rpy[0] * 180 / M_PI + rand_gauss();
|
||||
// gyroSensorData.y = rpy[1] * 180 / M_PI + rand_gauss();
|
||||
// gyroSensorData.z = rpy[2] * 180 / M_PI + rand_gauss();
|
||||
|
||||
/**** 1. Update attitude ****/
|
||||
RateDesiredData rateDesired;
|
||||
RateDesiredGet(&rateDesired);
|
||||
|
||||
// Need to get roll angle for easy cross coupling
|
||||
AttitudeActualData attitudeActual;
|
||||
AttitudeActualGet(&attitudeActual);
|
||||
double roll = attitudeActual.Roll;
|
||||
double pitch = attitudeActual.Pitch;
|
||||
AttitudeStateData attitudeState;
|
||||
AttitudeStateGet(&attitudeState);
|
||||
double roll = attitudeState.Roll;
|
||||
double pitch = attitudeState.Pitch;
|
||||
|
||||
rpy[0] = (flightStatus.Armed == FLIGHTSTATUS_ARMED_ARMED) * rateDesired.Roll * (1 - ACTUATOR_ALPHA) + rpy[0] * ACTUATOR_ALPHA;
|
||||
rpy[1] = (flightStatus.Armed == FLIGHTSTATUS_ARMED_ARMED) * rateDesired.Pitch * (1 - ACTUATOR_ALPHA) + rpy[1] * ACTUATOR_ALPHA;
|
||||
@ -636,11 +633,11 @@ static void simulateModelAirplane()
|
||||
rpy[2] += roll * ROLL_HEADING_COUPLING;
|
||||
|
||||
|
||||
GyrosData gyrosData; // Skip get as we set all the fields
|
||||
gyrosData.x = rpy[0] + rand_gauss();
|
||||
gyrosData.y = rpy[1] + rand_gauss();
|
||||
gyrosData.z = rpy[2] + rand_gauss();
|
||||
GyrosSet(&gyrosData);
|
||||
GyroSensorData gyroSensorData; // Skip get as we set all the fields
|
||||
gyroSensorData.x = rpy[0] + rand_gauss();
|
||||
gyroSensorData.y = rpy[1] + rand_gauss();
|
||||
gyroSensorData.z = rpy[2] + rand_gauss();
|
||||
GyroSensorSet(&gyroSensorData);
|
||||
|
||||
// Predict the attitude forward in time
|
||||
float qdot[4];
|
||||
@ -662,13 +659,13 @@ static void simulateModelAirplane()
|
||||
q[3] = q[3] / qmag;
|
||||
|
||||
if (overideAttitude) {
|
||||
AttitudeActualData attitudeActual;
|
||||
AttitudeActualGet(&attitudeActual);
|
||||
attitudeActual.q1 = q[0];
|
||||
attitudeActual.q2 = q[1];
|
||||
attitudeActual.q3 = q[2];
|
||||
attitudeActual.q4 = q[3];
|
||||
AttitudeActualSet(&attitudeActual);
|
||||
AttitudeStateData attitudeState;
|
||||
AttitudeStateGet(&attitudeState);
|
||||
attitudeState.q1 = q[0];
|
||||
attitudeState.q2 = q[1];
|
||||
attitudeState.q3 = q[2];
|
||||
attitudeState.q4 = q[3];
|
||||
AttitudeStateSet(&attitudeState);
|
||||
}
|
||||
|
||||
/**** 2. Update position based on velocity ****/
|
||||
@ -730,12 +727,12 @@ static void simulateModelAirplane()
|
||||
ned_accel[2] -= GRAV;
|
||||
|
||||
// Transform the accels back in to body frame
|
||||
AccelsData accelsData; // Skip get as we set all the fields
|
||||
accelsData.x = ned_accel[0] * Rbe[0][0] + ned_accel[1] * Rbe[0][1] + ned_accel[2] * Rbe[0][2] + accel_bias[0];
|
||||
accelsData.y = ned_accel[0] * Rbe[1][0] + ned_accel[1] * Rbe[1][1] + ned_accel[2] * Rbe[1][2] + accel_bias[1];
|
||||
accelsData.z = ned_accel[0] * Rbe[2][0] + ned_accel[1] * Rbe[2][1] + ned_accel[2] * Rbe[2][2] + accel_bias[2];
|
||||
accelsData.temperature = 30;
|
||||
AccelsSet(&accelsData);
|
||||
AccelSensorData accelSensorData; // Skip get as we set all the fields
|
||||
accelSensorData.x = ned_accel[0] * Rbe[0][0] + ned_accel[1] * Rbe[0][1] + ned_accel[2] * Rbe[0][2] + accel_bias[0];
|
||||
accelSensorData.y = ned_accel[0] * Rbe[1][0] + ned_accel[1] * Rbe[1][1] + ned_accel[2] * Rbe[1][2] + accel_bias[1];
|
||||
accelSensorData.z = ned_accel[0] * Rbe[2][0] + ned_accel[1] * Rbe[2][1] + ned_accel[2] * Rbe[2][2] + accel_bias[2];
|
||||
accelSensorData.temperature = 30;
|
||||
AccelSensorSet(&accelSensorData);
|
||||
|
||||
if (baro_offset == 0) {
|
||||
// Hacky initialization
|
||||
@ -747,10 +744,10 @@ static void simulateModelAirplane()
|
||||
// Update baro periodically
|
||||
static uint32_t last_baro_time = 0;
|
||||
if (PIOS_DELAY_DiffuS(last_baro_time) / 1.0e6 > BARO_PERIOD) {
|
||||
BaroAltitudeData baroAltitude;
|
||||
BaroAltitudeGet(&baroAltitude);
|
||||
baroAltitude.Altitude = -pos[2] + baro_offset;
|
||||
BaroAltitudeSet(&baroAltitude);
|
||||
BaroSensorData baroSensor;
|
||||
BaroSensorGet(&baroSensor);
|
||||
baroSensor.Altitude = -pos[2] + baro_offset;
|
||||
BaroSensorSet(&baroSensor);
|
||||
last_baro_time = PIOS_DELAY_GetRaw();
|
||||
}
|
||||
|
||||
@ -814,12 +811,11 @@ static void simulateModelAirplane()
|
||||
// Update mag periodically
|
||||
static uint32_t last_mag_time = 0;
|
||||
if (PIOS_DELAY_DiffuS(last_mag_time) / 1.0e6 > MAG_PERIOD) {
|
||||
MagnetometerData mag;
|
||||
MagnetoSensorData mag;
|
||||
mag.x = 100 + homeLocation.Be[0] * Rbe[0][0] + homeLocation.Be[1] * Rbe[0][1] + homeLocation.Be[2] * Rbe[0][2];
|
||||
mag.y = 100 + homeLocation.Be[0] * Rbe[1][0] + homeLocation.Be[1] * Rbe[1][1] + homeLocation.Be[2] * Rbe[1][2];
|
||||
mag.z = 100 + homeLocation.Be[0] * Rbe[2][0] + homeLocation.Be[1] * Rbe[2][1] + homeLocation.Be[2] * Rbe[2][2];
|
||||
magOffsetEstimation(&mag);
|
||||
MagnetometerSet(&mag);
|
||||
MagnetoSensorSet(&mag);
|
||||
last_mag_time = PIOS_DELAY_GetRaw();
|
||||
}
|
||||
|
||||
@ -857,12 +853,15 @@ static float rand_gauss(void)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// TODO
|
||||
#if 0
|
||||
/**
|
||||
* Perform an update of the @ref MagBias based on
|
||||
* Magnetometer Offset Cancellation: Theory and Implementation,
|
||||
* MagnetoSensor Offset Cancellation: Theory and Implementation,
|
||||
* revisited William Premerlani, October 14, 2011
|
||||
*/
|
||||
static void magOffsetEstimation(MagnetometerData *mag)
|
||||
static void magOffsetEstimation(MagnetoSensorData *mag)
|
||||
{
|
||||
#if 0
|
||||
RevoCalibrationData cal;
|
||||
@ -910,8 +909,8 @@ static void magOffsetEstimation(MagnetometerData *mag)
|
||||
HomeLocationData homeLocation;
|
||||
HomeLocationGet(&homeLocation);
|
||||
|
||||
AttitudeActualData attitude;
|
||||
AttitudeActualGet(&attitude);
|
||||
AttitudeStateData attitude;
|
||||
AttitudeStateGet(&attitude);
|
||||
|
||||
MagBiasData magBias;
|
||||
MagBiasGet(&magBias);
|
||||
@ -957,6 +956,7 @@ static void magOffsetEstimation(MagnetometerData *mag)
|
||||
#endif /* if 0 */
|
||||
}
|
||||
|
||||
#endif /* if 0 */
|
||||
/**
|
||||
* @}
|
||||
* @}
|
||||
|
@ -5,7 +5,7 @@
|
||||
* @addtogroup StabilizationModule Stabilization Module
|
||||
* @brief Relay tuning controller
|
||||
* @note This object updates the @ref ActuatorDesired "Actuator Desired" based on the
|
||||
* PID loops on the @ref AttitudeDesired "Attitude Desired" and @ref AttitudeActual "Attitude Actual"
|
||||
* PID loops on the @ref AttitudeDesired "Attitude Desired" and @ref AttitudeState "Attitude State"
|
||||
* @{
|
||||
*
|
||||
* @file relay_tuning.h
|
||||
|
@ -5,7 +5,7 @@
|
||||
* @addtogroup StabilizationModule Stabilization Module
|
||||
* @brief Stabilization PID loops in an airframe type independent manner
|
||||
* @note This object updates the @ref ActuatorDesired "Actuator Desired" based on the
|
||||
* PID loops on the @ref AttitudeDesired "Attitude Desired" and @ref AttitudeActual "Attitude Actual"
|
||||
* PID loops on the @ref AttitudeDesired "Attitude Desired" and @ref AttitudeState "Attitude State"
|
||||
* @{
|
||||
*
|
||||
* @file stabilization.h
|
||||
|
@ -5,7 +5,7 @@
|
||||
* @addtogroup StabilizationModule Stabilization Module
|
||||
* @brief Relay tuning controller
|
||||
* @note This object updates the @ref ActuatorDesired "Actuator Desired" based on the
|
||||
* PID loops on the @ref AttitudeDesired "Attitude Desired" and @ref AttitudeActual "Attitude Actual"
|
||||
* PID loops on the @ref AttitudeDesired "Attitude Desired" and @ref AttitudeState "Attitude State"
|
||||
* @{
|
||||
*
|
||||
* @file stabilization.c
|
||||
|
@ -5,7 +5,7 @@
|
||||
* @addtogroup StabilizationModule Stabilization Module
|
||||
* @brief Stabilization PID loops in an airframe type independent manner
|
||||
* @note This object updates the @ref ActuatorDesired "Actuator Desired" based on the
|
||||
* PID loops on the @ref AttitudeDesired "Attitude Desired" and @ref AttitudeActual "Attitude Actual"
|
||||
* PID loops on the @ref AttitudeDesired "Attitude Desired" and @ref AttitudeState "Attitude State"
|
||||
* @{
|
||||
*
|
||||
* @file stabilization.c
|
||||
@ -40,8 +40,8 @@
|
||||
#include "relaytuning.h"
|
||||
#include "relaytuningsettings.h"
|
||||
#include "stabilizationdesired.h"
|
||||
#include "attitudeactual.h"
|
||||
#include "gyros.h"
|
||||
#include "attitudestate.h"
|
||||
#include "gyrostate.h"
|
||||
#include "flightstatus.h"
|
||||
#include "manualcontrol.h" // Just to get a macro
|
||||
#include "taskinfo.h"
|
||||
@ -104,8 +104,8 @@ int32_t StabilizationStart()
|
||||
queue = xQueueCreate(MAX_QUEUE_SIZE, sizeof(UAVObjEvent));
|
||||
|
||||
// Listen for updates.
|
||||
// AttitudeActualConnectQueue(queue);
|
||||
GyrosConnectQueue(queue);
|
||||
// AttitudeStateConnectQueue(queue);
|
||||
GyroStateConnectQueue(queue);
|
||||
|
||||
StabilizationSettingsConnectCallback(SettingsUpdatedCb);
|
||||
SettingsUpdatedCb(StabilizationSettingsHandle());
|
||||
@ -152,8 +152,8 @@ static void stabilizationTask(__attribute__((unused)) void *parameters)
|
||||
ActuatorDesiredData actuatorDesired;
|
||||
StabilizationDesiredData stabDesired;
|
||||
RateDesiredData rateDesired;
|
||||
AttitudeActualData attitudeActual;
|
||||
GyrosData gyrosData;
|
||||
AttitudeStateData attitudeState;
|
||||
GyroStateData gyroStateData;
|
||||
FlightStatusData flightStatus;
|
||||
|
||||
SettingsUpdatedCb((UAVObjEvent *)NULL);
|
||||
@ -178,8 +178,8 @@ static void stabilizationTask(__attribute__((unused)) void *parameters)
|
||||
|
||||
FlightStatusGet(&flightStatus);
|
||||
StabilizationDesiredGet(&stabDesired);
|
||||
AttitudeActualGet(&attitudeActual);
|
||||
GyrosGet(&gyrosData);
|
||||
AttitudeStateGet(&attitudeState);
|
||||
GyroStateGet(&gyroStateData);
|
||||
#ifdef DIAG_RATEDESIRED
|
||||
RateDesiredGet(&rateDesired);
|
||||
#endif
|
||||
@ -195,32 +195,32 @@ static void stabilizationTask(__attribute__((unused)) void *parameters)
|
||||
if (stabDesired.StabilizationMode[STABILIZATIONDESIRED_STABILIZATIONMODE_ROLL] == STABILIZATIONDESIRED_STABILIZATIONMODE_ATTITUDE) {
|
||||
rpy_desired[0] = stabDesired.Roll;
|
||||
} else {
|
||||
rpy_desired[0] = attitudeActual.Roll;
|
||||
rpy_desired[0] = attitudeState.Roll;
|
||||
}
|
||||
|
||||
if (stabDesired.StabilizationMode[STABILIZATIONDESIRED_STABILIZATIONMODE_PITCH] == STABILIZATIONDESIRED_STABILIZATIONMODE_ATTITUDE) {
|
||||
rpy_desired[1] = stabDesired.Pitch;
|
||||
} else {
|
||||
rpy_desired[1] = attitudeActual.Pitch;
|
||||
rpy_desired[1] = attitudeState.Pitch;
|
||||
}
|
||||
|
||||
if (stabDesired.StabilizationMode[STABILIZATIONDESIRED_STABILIZATIONMODE_YAW] == STABILIZATIONDESIRED_STABILIZATIONMODE_ATTITUDE) {
|
||||
rpy_desired[2] = stabDesired.Yaw;
|
||||
} else {
|
||||
rpy_desired[2] = attitudeActual.Yaw;
|
||||
rpy_desired[2] = attitudeState.Yaw;
|
||||
}
|
||||
|
||||
RPY2Quaternion(rpy_desired, q_desired);
|
||||
quat_inverse(q_desired);
|
||||
quat_mult(q_desired, &attitudeActual.q1, q_error);
|
||||
quat_mult(q_desired, &attitudeState.q1, q_error);
|
||||
quat_inverse(q_error);
|
||||
Quaternion2RPY(q_error, local_error);
|
||||
|
||||
#else /* if defined(PIOS_QUATERNION_STABILIZATION) */
|
||||
// Simpler algorithm for CC, less memory
|
||||
float local_error[3] = { stabDesired.Roll - attitudeActual.Roll,
|
||||
stabDesired.Pitch - attitudeActual.Pitch,
|
||||
stabDesired.Yaw - attitudeActual.Yaw };
|
||||
float local_error[3] = { stabDesired.Roll - attitudeState.Roll,
|
||||
stabDesired.Pitch - attitudeState.Pitch,
|
||||
stabDesired.Yaw - attitudeState.Yaw };
|
||||
// find shortest way
|
||||
float modulo = fmodf(local_error[2] + 180.0f, 360.0f);
|
||||
if (modulo < 0) {
|
||||
@ -231,9 +231,9 @@ static void stabilizationTask(__attribute__((unused)) void *parameters)
|
||||
#endif /* if defined(PIOS_QUATERNION_STABILIZATION) */
|
||||
|
||||
float gyro_filtered[3];
|
||||
gyro_filtered[0] = gyro_filtered[0] * gyro_alpha + gyrosData.x * (1 - gyro_alpha);
|
||||
gyro_filtered[1] = gyro_filtered[1] * gyro_alpha + gyrosData.y * (1 - gyro_alpha);
|
||||
gyro_filtered[2] = gyro_filtered[2] * gyro_alpha + gyrosData.z * (1 - gyro_alpha);
|
||||
gyro_filtered[0] = gyro_filtered[0] * gyro_alpha + gyroStateData.x * (1 - gyro_alpha);
|
||||
gyro_filtered[1] = gyro_filtered[1] * gyro_alpha + gyroStateData.y * (1 - gyro_alpha);
|
||||
gyro_filtered[2] = gyro_filtered[2] * gyro_alpha + gyroStateData.z * (1 - gyro_alpha);
|
||||
|
||||
float *attitudeDesiredAxis = &stabDesired.Roll;
|
||||
float *actuatorDesiredAxis = &actuatorDesired.Roll;
|
||||
|
@ -3,7 +3,7 @@
|
||||
*
|
||||
* @file vtolpathfollower.c
|
||||
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2012.
|
||||
* @brief This module compared @ref PositionActual to @ref PathDesired
|
||||
* @brief This module compared @ref PositionState to @ref PathDesired
|
||||
* and sets @ref Stabilization. It only does this when the FlightMode field
|
||||
* of @ref FlightStatus is PathPlanner or RTH.
|
||||
*
|
||||
@ -29,11 +29,11 @@
|
||||
/**
|
||||
* Input object: FlightStatus
|
||||
* Input object: PathDesired
|
||||
* Input object: PositionActual
|
||||
* Input object: PositionState
|
||||
* Output object: StabilizationDesired
|
||||
*
|
||||
* This module will periodically update the value of the @ref StabilizationDesired object based on
|
||||
* @ref PathDesired and @PositionActual when the Flight Mode selected in @FlightStatus is supported
|
||||
* @ref PathDesired and @PositionState when the Flight Mode selected in @FlightStatus is supported
|
||||
* by this module. Otherwise another module (e.g. @ref ManualControlCommand) is expected to be
|
||||
* writing to @ref StabilizationDesired.
|
||||
*
|
||||
@ -50,11 +50,11 @@
|
||||
|
||||
#include "vtolpathfollower.h"
|
||||
|
||||
#include "accels.h"
|
||||
#include "attitudeactual.h"
|
||||
#include "accelstate.h"
|
||||
#include "attitudestate.h"
|
||||
#include "hwsettings.h"
|
||||
#include "pathdesired.h" // object that will be updated by the module
|
||||
#include "positionactual.h"
|
||||
#include "positionstate.h"
|
||||
#include "manualcontrol.h"
|
||||
#include "flightstatus.h"
|
||||
#include "pathstatus.h"
|
||||
@ -67,7 +67,7 @@
|
||||
#include "stabilizationsettings.h"
|
||||
#include "systemsettings.h"
|
||||
#include "velocitydesired.h"
|
||||
#include "velocityactual.h"
|
||||
#include "velocitystate.h"
|
||||
#include "taskinfo.h"
|
||||
|
||||
#include "paths.h"
|
||||
@ -286,8 +286,8 @@ static void updatePOIBearing()
|
||||
PathDesiredData pathDesired;
|
||||
|
||||
PathDesiredGet(&pathDesired);
|
||||
PositionActualData positionActual;
|
||||
PositionActualGet(&positionActual);
|
||||
PositionStateData positionState;
|
||||
PositionStateGet(&positionState);
|
||||
CameraDesiredData cameraDesired;
|
||||
CameraDesiredGet(&cameraDesired);
|
||||
StabilizationDesiredData stabDesired;
|
||||
@ -299,9 +299,9 @@ static void updatePOIBearing()
|
||||
float yaw = 0;
|
||||
/*float elevation = 0;*/
|
||||
|
||||
dLoc[0] = positionActual.North - poi.North;
|
||||
dLoc[1] = positionActual.East - poi.East;
|
||||
dLoc[2] = positionActual.Down - poi.Down;
|
||||
dLoc[0] = positionState.North - poi.North;
|
||||
dLoc[1] = positionState.East - poi.East;
|
||||
dLoc[2] = positionState.Down - poi.Down;
|
||||
|
||||
if (dLoc[1] < 0) {
|
||||
yaw = RAD2DEG(atan2f(dLoc[1], dLoc[0])) + 180.0f;
|
||||
@ -364,7 +364,7 @@ static void updatePOIBearing()
|
||||
/**
|
||||
* Compute desired velocity from the current position and path
|
||||
*
|
||||
* Takes in @ref PositionActual and compares it to @ref PathDesired
|
||||
* Takes in @ref PositionState and compares it to @ref PathDesired
|
||||
* and computes @ref VelocityDesired
|
||||
*/
|
||||
static void updatePathVelocity()
|
||||
@ -375,11 +375,11 @@ static void updatePathVelocity()
|
||||
PathDesiredData pathDesired;
|
||||
|
||||
PathDesiredGet(&pathDesired);
|
||||
PositionActualData positionActual;
|
||||
PositionActualGet(&positionActual);
|
||||
PositionStateData positionState;
|
||||
PositionStateGet(&positionState);
|
||||
|
||||
float cur[3] =
|
||||
{ positionActual.North, positionActual.East, positionActual.Down };
|
||||
{ positionState.North, positionState.East, positionState.Down };
|
||||
struct path_status progress;
|
||||
|
||||
path_progress(pathDesired.Start, pathDesired.End, cur, &progress, pathDesired.Mode);
|
||||
@ -429,7 +429,7 @@ static void updatePathVelocity()
|
||||
|
||||
float altitudeSetpoint = pathDesired.Start[2] + (pathDesired.End[2] - pathDesired.Start[2]) * bound(progress.fractional_progress, 0, 1);
|
||||
|
||||
float downError = altitudeSetpoint - positionActual.Down;
|
||||
float downError = altitudeSetpoint - positionState.Down;
|
||||
downPosIntegral = bound(downPosIntegral + downError * dT * vtolpathfollowerSettings.VerticalPosPI[VTOLPATHFOLLOWERSETTINGS_VERTICALPOSPI_KI],
|
||||
-vtolpathfollowerSettings.VerticalPosPI[VTOLPATHFOLLOWERSETTINGS_VERTICALPOSPI_ILIMIT],
|
||||
vtolpathfollowerSettings.VerticalPosPI[VTOLPATHFOLLOWERSETTINGS_VERTICALPOSPI_ILIMIT]);
|
||||
@ -446,7 +446,7 @@ static void updatePathVelocity()
|
||||
/**
|
||||
* Compute desired velocity from the current position
|
||||
*
|
||||
* Takes in @ref PositionActual and compares it to @ref PositionDesired
|
||||
* Takes in @ref PositionState and compares it to @ref PositionDesired
|
||||
* and computes @ref VelocityDesired
|
||||
*/
|
||||
void updateEndpointVelocity()
|
||||
@ -457,10 +457,10 @@ void updateEndpointVelocity()
|
||||
|
||||
PathDesiredGet(&pathDesired);
|
||||
|
||||
PositionActualData positionActual;
|
||||
PositionStateData positionState;
|
||||
VelocityDesiredData velocityDesired;
|
||||
|
||||
PositionActualGet(&positionActual);
|
||||
PositionStateGet(&positionState);
|
||||
VelocityDesiredGet(&velocityDesired);
|
||||
|
||||
float northError;
|
||||
@ -473,9 +473,9 @@ void updateEndpointVelocity()
|
||||
float northPos = 0, eastPos = 0, downPos = 0;
|
||||
switch (vtolpathfollowerSettings.PositionSource) {
|
||||
case VTOLPATHFOLLOWERSETTINGS_POSITIONSOURCE_EKF:
|
||||
northPos = positionActual.North;
|
||||
eastPos = positionActual.East;
|
||||
downPos = positionActual.Down;
|
||||
northPos = positionState.North;
|
||||
eastPos = positionState.East;
|
||||
downPos = positionState.Down;
|
||||
break;
|
||||
case VTOLPATHFOLLOWERSETTINGS_POSITIONSOURCE_GPSPOS:
|
||||
{
|
||||
@ -559,18 +559,18 @@ static void updateFixedAttitude(float *attitude)
|
||||
/**
|
||||
* Compute desired attitude from the desired velocity
|
||||
*
|
||||
* Takes in @ref NedActual which has the acceleration in the
|
||||
* Takes in @ref NedState which has the acceleration in the
|
||||
* NED frame as the feedback term and then compares the
|
||||
* @ref VelocityActual against the @ref VelocityDesired
|
||||
* @ref VelocityState against the @ref VelocityDesired
|
||||
*/
|
||||
static void updateVtolDesiredAttitude(bool yaw_attitude)
|
||||
{
|
||||
float dT = vtolpathfollowerSettings.UpdatePeriod / 1000.0f;
|
||||
|
||||
VelocityDesiredData velocityDesired;
|
||||
VelocityActualData velocityActual;
|
||||
VelocityStateData velocityState;
|
||||
StabilizationDesiredData stabDesired;
|
||||
AttitudeActualData attitudeActual;
|
||||
AttitudeStateData attitudeState;
|
||||
NedAccelData nedAccel;
|
||||
StabilizationSettingsData stabSettings;
|
||||
SystemSettingsData systemSettings;
|
||||
@ -585,20 +585,20 @@ static void updateVtolDesiredAttitude(bool yaw_attitude)
|
||||
float downCommand;
|
||||
|
||||
SystemSettingsGet(&systemSettings);
|
||||
VelocityActualGet(&velocityActual);
|
||||
VelocityStateGet(&velocityState);
|
||||
VelocityDesiredGet(&velocityDesired);
|
||||
StabilizationDesiredGet(&stabDesired);
|
||||
VelocityDesiredGet(&velocityDesired);
|
||||
AttitudeActualGet(&attitudeActual);
|
||||
AttitudeStateGet(&attitudeState);
|
||||
StabilizationSettingsGet(&stabSettings);
|
||||
NedAccelGet(&nedAccel);
|
||||
|
||||
float northVel = 0, eastVel = 0, downVel = 0;
|
||||
switch (vtolpathfollowerSettings.VelocitySource) {
|
||||
case VTOLPATHFOLLOWERSETTINGS_VELOCITYSOURCE_EKF:
|
||||
northVel = velocityActual.North;
|
||||
eastVel = velocityActual.East;
|
||||
downVel = velocityActual.Down;
|
||||
northVel = velocityState.North;
|
||||
eastVel = velocityState.East;
|
||||
downVel = velocityState.Down;
|
||||
break;
|
||||
case VTOLPATHFOLLOWERSETTINGS_VELOCITYSOURCE_NEDVEL:
|
||||
{
|
||||
@ -615,7 +615,7 @@ static void updateVtolDesiredAttitude(bool yaw_attitude)
|
||||
GPSPositionGet(&gpsPosition);
|
||||
northVel = gpsPosition.Groundspeed * cosf(DEG2RAD(gpsPosition.Heading));
|
||||
eastVel = gpsPosition.Groundspeed * sinf(DEG2RAD(gpsPosition.Heading));
|
||||
downVel = velocityActual.Down;
|
||||
downVel = velocityState.Down;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@ -659,11 +659,11 @@ static void updateVtolDesiredAttitude(bool yaw_attitude)
|
||||
|
||||
// Project the north and east command signals into the pitch and roll based on yaw. For this to behave well the
|
||||
// craft should move similarly for 5 deg roll versus 5 deg pitch
|
||||
stabDesired.Pitch = bound(-northCommand * cosf(DEG2RAD(attitudeActual.Yaw)) +
|
||||
-eastCommand * sinf(DEG2RAD(attitudeActual.Yaw)),
|
||||
stabDesired.Pitch = bound(-northCommand * cosf(DEG2RAD(attitudeState.Yaw)) +
|
||||
-eastCommand * sinf(DEG2RAD(attitudeState.Yaw)),
|
||||
-vtolpathfollowerSettings.MaxRollPitch, vtolpathfollowerSettings.MaxRollPitch);
|
||||
stabDesired.Roll = bound(-northCommand * sinf(DEG2RAD(attitudeActual.Yaw)) +
|
||||
eastCommand * cosf(DEG2RAD(attitudeActual.Yaw)),
|
||||
stabDesired.Roll = bound(-northCommand * sinf(DEG2RAD(attitudeState.Yaw)) +
|
||||
eastCommand * cosf(DEG2RAD(attitudeState.Yaw)),
|
||||
-vtolpathfollowerSettings.MaxRollPitch, vtolpathfollowerSettings.MaxRollPitch);
|
||||
|
||||
if (vtolpathfollowerSettings.ThrottleControl == VTOLPATHFOLLOWERSETTINGS_THROTTLECONTROL_FALSE) {
|
||||
@ -695,20 +695,20 @@ static void updateNedAccel()
|
||||
float accel_ned[3];
|
||||
|
||||
// Collect downsampled attitude data
|
||||
AccelsData accels;
|
||||
AccelStateData accelState;
|
||||
|
||||
AccelsGet(&accels);
|
||||
accel[0] = accels.x;
|
||||
accel[1] = accels.y;
|
||||
accel[2] = accels.z;
|
||||
AccelStateGet(&accelState);
|
||||
accel[0] = accelState.x;
|
||||
accel[1] = accelState.y;
|
||||
accel[2] = accelState.z;
|
||||
|
||||
// rotate avg accels into earth frame and store it
|
||||
AttitudeActualData attitudeActual;
|
||||
AttitudeActualGet(&attitudeActual);
|
||||
q[0] = attitudeActual.q1;
|
||||
q[1] = attitudeActual.q2;
|
||||
q[2] = attitudeActual.q3;
|
||||
q[3] = attitudeActual.q4;
|
||||
AttitudeStateData attitudeState;
|
||||
AttitudeStateGet(&attitudeState);
|
||||
q[0] = attitudeState.q1;
|
||||
q[1] = attitudeState.q2;
|
||||
q[2] = attitudeState.q3;
|
||||
q[3] = attitudeState.q4;
|
||||
Quaternion2R(q, Rbe);
|
||||
for (uint8_t i = 0; i < 3; i++) {
|
||||
accel_ned[i] = 0;
|
||||
@ -757,13 +757,13 @@ static void accessoryUpdated(UAVObjEvent *ev)
|
||||
if (poiLearn.Input != POILEARNSETTINGS_INPUT_NONE) {
|
||||
if (AccessoryDesiredInstGet(poiLearn.Input - POILEARNSETTINGS_INPUT_ACCESSORY0, &accessory) == 0) {
|
||||
if (accessory.AccessoryVal < -0.5f) {
|
||||
PositionActualData positionActual;
|
||||
PositionActualGet(&positionActual);
|
||||
PositionStateData positionState;
|
||||
PositionStateGet(&positionState);
|
||||
PoiLocationData poi;
|
||||
PoiLocationGet(&poi);
|
||||
poi.North = positionActual.North;
|
||||
poi.East = positionActual.East;
|
||||
poi.Down = positionActual.Down;
|
||||
poi.North = positionState.North;
|
||||
poi.East = positionState.East;
|
||||
poi.Down = positionState.Down;
|
||||
PoiLocationSet(&poi);
|
||||
}
|
||||
}
|
||||
|
@ -87,9 +87,9 @@ ifndef TESTAPP
|
||||
SRC += $(OPUAVSYNTHDIR)/actuatorcommand.c
|
||||
SRC += $(OPUAVSYNTHDIR)/actuatordesired.c
|
||||
SRC += $(OPUAVSYNTHDIR)/actuatorsettings.c
|
||||
SRC += $(OPUAVSYNTHDIR)/accels.c
|
||||
SRC += $(OPUAVSYNTHDIR)/gyros.c
|
||||
SRC += $(OPUAVSYNTHDIR)/attitudeactual.c
|
||||
SRC += $(OPUAVSYNTHDIR)/accelstate.c
|
||||
SRC += $(OPUAVSYNTHDIR)/gyrostate.c
|
||||
SRC += $(OPUAVSYNTHDIR)/attitudestate.c
|
||||
SRC += $(OPUAVSYNTHDIR)/manualcontrolcommand.c
|
||||
SRC += $(OPUAVSYNTHDIR)/i2cstats.c
|
||||
SRC += $(OPUAVSYNTHDIR)/watchdogstatus.c
|
||||
@ -109,9 +109,9 @@ ifndef TESTAPP
|
||||
SRC += $(OPUAVSYNTHDIR)/taskinfo.c
|
||||
SRC += $(OPUAVSYNTHDIR)/mixerstatus.c
|
||||
SRC += $(OPUAVSYNTHDIR)/ratedesired.c
|
||||
SRC += $(OPUAVSYNTHDIR)/baroaltitude.c
|
||||
SRC += $(OPUAVSYNTHDIR)/barosensor.c
|
||||
SRC += $(OPUAVSYNTHDIR)/txpidsettings.c
|
||||
SRC += $(OPUAVSYNTHDIR)/airspeedactual.c
|
||||
SRC += $(OPUAVSYNTHDIR)/airspeedstate.c
|
||||
SRC += $(OPUAVSYNTHDIR)/mpu6000settings.c
|
||||
else
|
||||
## Test Code
|
||||
|
@ -79,7 +79,7 @@ ifndef TESTAPP
|
||||
SRC += $(OPUAVSYNTHDIR)/systemstats.c
|
||||
SRC += $(OPUAVSYNTHDIR)/systemalarms.c
|
||||
SRC += $(OPUAVSYNTHDIR)/systemsettings.c
|
||||
SRC += $(OPUAVSYNTHDIR)/attitudeactual.c
|
||||
SRC += $(OPUAVSYNTHDIR)/attitudestate.c
|
||||
SRC += $(OPUAVSYNTHDIR)/i2cstats.c
|
||||
SRC += $(OPUAVSYNTHDIR)/watchdogstatus.c
|
||||
SRC += $(OPUAVSYNTHDIR)/firmwareiapobj.c
|
||||
@ -92,8 +92,8 @@ ifndef TESTAPP
|
||||
SRC += $(OPUAVSYNTHDIR)/gpsvelocity.c
|
||||
SRC += $(OPUAVSYNTHDIR)/gpstime.c
|
||||
SRC += $(OPUAVSYNTHDIR)/osdsettings.c
|
||||
SRC += $(OPUAVSYNTHDIR)/baroaltitude.c
|
||||
SRC += $(OPUAVSYNTHDIR)/magnetometer.c
|
||||
SRC += $(OPUAVSYNTHDIR)/barosensor.c
|
||||
SRC += $(OPUAVSYNTHDIR)/magnetosensor.c
|
||||
else
|
||||
## Test Code
|
||||
SRC += $(OPTESTS)/test_common.c
|
||||
|
@ -25,16 +25,17 @@ UAVOBJSRCFILENAMES += actuatordesired
|
||||
UAVOBJSRCFILENAMES += actuatorsettings
|
||||
UAVOBJSRCFILENAMES += altholdsmoothed
|
||||
UAVOBJSRCFILENAMES += attitudesettings
|
||||
UAVOBJSRCFILENAMES += attitudeactual
|
||||
UAVOBJSRCFILENAMES += gyros
|
||||
UAVOBJSRCFILENAMES += gyrosbias
|
||||
UAVOBJSRCFILENAMES += accels
|
||||
UAVOBJSRCFILENAMES += magnetometer
|
||||
UAVOBJSRCFILENAMES += magbias
|
||||
UAVOBJSRCFILENAMES += baroaltitude
|
||||
UAVOBJSRCFILENAMES += attitudestate
|
||||
UAVOBJSRCFILENAMES += gyrostate
|
||||
UAVOBJSRCFILENAMES += gyrosensor
|
||||
UAVOBJSRCFILENAMES += accelstate
|
||||
UAVOBJSRCFILENAMES += accelsensor
|
||||
UAVOBJSRCFILENAMES += magnetosensor
|
||||
UAVOBJSRCFILENAMES += magnetostate
|
||||
UAVOBJSRCFILENAMES += barosensor
|
||||
UAVOBJSRCFILENAMES += airspeedsensor
|
||||
UAVOBJSRCFILENAMES += airspeedsettings
|
||||
UAVOBJSRCFILENAMES += airspeedactual
|
||||
UAVOBJSRCFILENAMES += airspeedstate
|
||||
UAVOBJSRCFILENAMES += flightbatterysettings
|
||||
UAVOBJSRCFILENAMES += firmwareiapobj
|
||||
UAVOBJSRCFILENAMES += flightbatterystate
|
||||
@ -64,7 +65,7 @@ UAVOBJSRCFILENAMES += overosyncsettings
|
||||
UAVOBJSRCFILENAMES += pathaction
|
||||
UAVOBJSRCFILENAMES += pathdesired
|
||||
UAVOBJSRCFILENAMES += pathstatus
|
||||
UAVOBJSRCFILENAMES += positionactual
|
||||
UAVOBJSRCFILENAMES += positionstate
|
||||
UAVOBJSRCFILENAMES += ratedesired
|
||||
UAVOBJSRCFILENAMES += relaytuning
|
||||
UAVOBJSRCFILENAMES += relaytuningsettings
|
||||
@ -79,7 +80,7 @@ UAVOBJSRCFILENAMES += systemalarms
|
||||
UAVOBJSRCFILENAMES += systemsettings
|
||||
UAVOBJSRCFILENAMES += systemstats
|
||||
UAVOBJSRCFILENAMES += taskinfo
|
||||
UAVOBJSRCFILENAMES += velocityactual
|
||||
UAVOBJSRCFILENAMES += velocitystate
|
||||
UAVOBJSRCFILENAMES += velocitydesired
|
||||
UAVOBJSRCFILENAMES += watchdogstatus
|
||||
UAVOBJSRCFILENAMES += flightstatus
|
||||
|
@ -31,12 +31,11 @@
|
||||
#include <pios_gcsrcvr_priv.h>
|
||||
#include <uavobjectsinit.h>
|
||||
|
||||
#include <accels.h>
|
||||
#include <baroaltitude.h>
|
||||
#include <accelssensor.h>
|
||||
#include <barosensor.h>
|
||||
#include <gpsposition.h>
|
||||
#include <gyros.h>
|
||||
#include <gyrosbias.h>
|
||||
#include <magnetometer.h>
|
||||
#include <gyrosensor.h>
|
||||
#include <magnetosensor.h>
|
||||
#include <manualcontrolsettings.h>
|
||||
|
||||
void Stack_Change() {}
|
||||
@ -137,12 +136,11 @@ void PIOS_Board_Init(void)
|
||||
UAVObjInitialize();
|
||||
UAVObjectsInitializeAll();
|
||||
|
||||
AccelsInitialize();
|
||||
BaroAltitudeInitialize();
|
||||
MagnetometerInitialize();
|
||||
AccelSensorInitialize();
|
||||
BaroSensorInitialize();
|
||||
MagnetoSensorInitialize();
|
||||
GPSPositionInitialize();
|
||||
GyrosInitialize();
|
||||
GyrosBiasInitialize();
|
||||
GyroSensorInitialize();
|
||||
|
||||
/* Initialize the alarms library */
|
||||
AlarmsInitialize();
|
||||
|
@ -30,16 +30,17 @@ UAVOBJSRCFILENAMES += actuatordesired
|
||||
UAVOBJSRCFILENAMES += actuatorsettings
|
||||
UAVOBJSRCFILENAMES += altholdsmoothed
|
||||
UAVOBJSRCFILENAMES += attitudesettings
|
||||
UAVOBJSRCFILENAMES += attitudeactual
|
||||
UAVOBJSRCFILENAMES += gyros
|
||||
UAVOBJSRCFILENAMES += gyrosbias
|
||||
UAVOBJSRCFILENAMES += accels
|
||||
UAVOBJSRCFILENAMES += magnetometer
|
||||
UAVOBJSRCFILENAMES += magbias
|
||||
UAVOBJSRCFILENAMES += baroaltitude
|
||||
UAVOBJSRCFILENAMES += attitudestate
|
||||
UAVOBJSRCFILENAMES += gyrostate
|
||||
UAVOBJSRCFILENAMES += gyrosensor
|
||||
UAVOBJSRCFILENAMES += accelstate
|
||||
UAVOBJSRCFILENAMES += accelsensor
|
||||
UAVOBJSRCFILENAMES += magnetostate
|
||||
UAVOBJSRCFILENAMES += magnetosensor
|
||||
UAVOBJSRCFILENAMES += barosensor
|
||||
UAVOBJSRCFILENAMES += airspeedsensor
|
||||
UAVOBJSRCFILENAMES += airspeedsettings
|
||||
UAVOBJSRCFILENAMES += airspeedactual
|
||||
UAVOBJSRCFILENAMES += airspeedstate
|
||||
UAVOBJSRCFILENAMES += flightbatterysettings
|
||||
UAVOBJSRCFILENAMES += firmwareiapobj
|
||||
UAVOBJSRCFILENAMES += flightbatterystate
|
||||
@ -69,7 +70,7 @@ UAVOBJSRCFILENAMES += overosyncsettings
|
||||
UAVOBJSRCFILENAMES += pathaction
|
||||
UAVOBJSRCFILENAMES += pathdesired
|
||||
UAVOBJSRCFILENAMES += pathstatus
|
||||
UAVOBJSRCFILENAMES += positionactual
|
||||
UAVOBJSRCFILENAMES += positionstate
|
||||
UAVOBJSRCFILENAMES += ratedesired
|
||||
UAVOBJSRCFILENAMES += relaytuning
|
||||
UAVOBJSRCFILENAMES += relaytuningsettings
|
||||
@ -84,7 +85,7 @@ UAVOBJSRCFILENAMES += systemalarms
|
||||
UAVOBJSRCFILENAMES += systemsettings
|
||||
UAVOBJSRCFILENAMES += systemstats
|
||||
UAVOBJSRCFILENAMES += taskinfo
|
||||
UAVOBJSRCFILENAMES += velocityactual
|
||||
UAVOBJSRCFILENAMES += velocitystate
|
||||
UAVOBJSRCFILENAMES += velocitydesired
|
||||
UAVOBJSRCFILENAMES += watchdogstatus
|
||||
UAVOBJSRCFILENAMES += flightstatus
|
||||
|
@ -31,12 +31,11 @@
|
||||
#include <pios_gcsrcvr_priv.h>
|
||||
#include <uavobjectsinit.h>
|
||||
|
||||
#include <accels.h>
|
||||
#include <baroaltitude.h>
|
||||
#include <accelsensor.h>
|
||||
#include <barosensor.h>
|
||||
#include <gpsposition.h>
|
||||
#include <gyros.h>
|
||||
#include <gyrosbias.h>
|
||||
#include <magnetometer.h>
|
||||
#include <gyrosensor.h>
|
||||
#include <magnetosensor.h>
|
||||
#include <manualcontrolsettings.h>
|
||||
|
||||
void Stack_Change() {}
|
||||
@ -137,12 +136,12 @@ void PIOS_Board_Init(void)
|
||||
UAVObjInitialize();
|
||||
UAVObjectsInitializeAll();
|
||||
|
||||
AccelsInitialize();
|
||||
BaroAltitudeInitialize();
|
||||
MagnetometerInitialize();
|
||||
AccelSensorInitialize();
|
||||
BaroSensorInitialize();
|
||||
MagnetoSensorInitialize();
|
||||
GPSPositionInitialize();
|
||||
GyrosInitialize();
|
||||
GyrosBiasInitialize();
|
||||
GyroStatInitialize();
|
||||
GyroSensorInitialize();
|
||||
|
||||
/* Initialize the alarms library */
|
||||
AlarmsInitialize();
|
||||
|
@ -30,15 +30,17 @@ UAVOBJSRCFILENAMES += actuatordesired
|
||||
UAVOBJSRCFILENAMES += actuatorsettings
|
||||
UAVOBJSRCFILENAMES += altholdsmoothed
|
||||
UAVOBJSRCFILENAMES += attitudesettings
|
||||
UAVOBJSRCFILENAMES += attitudeactual
|
||||
UAVOBJSRCFILENAMES += gyros
|
||||
UAVOBJSRCFILENAMES += gyrosbias
|
||||
UAVOBJSRCFILENAMES += accels
|
||||
UAVOBJSRCFILENAMES += magnetometer
|
||||
UAVOBJSRCFILENAMES += baroaltitude
|
||||
UAVOBJSRCFILENAMES += attitudestate
|
||||
UAVOBJSRCFILENAMES += gyrostate
|
||||
UAVOBJSRCFILENAMES += gyrosensor
|
||||
UAVOBJSRCFILENAMES += accelstate
|
||||
UAVOBJSRCFILENAMES += accelsensor
|
||||
UAVOBJSRCFILENAMES += magnetosensor
|
||||
UAVOBJSRCFILENAMES += magnetostate
|
||||
UAVOBJSRCFILENAMES += barosensor
|
||||
UAVOBJSRCFILENAMES += airspeedsensor
|
||||
UAVOBJSRCFILENAMES += airspeedsettings
|
||||
UAVOBJSRCFILENAMES += airspeedactual
|
||||
UAVOBJSRCFILENAMES += airspeedstate
|
||||
UAVOBJSRCFILENAMES += flightbatterysettings
|
||||
UAVOBJSRCFILENAMES += firmwareiapobj
|
||||
UAVOBJSRCFILENAMES += flightbatterystate
|
||||
@ -66,7 +68,7 @@ UAVOBJSRCFILENAMES += overosyncstats
|
||||
UAVOBJSRCFILENAMES += pathaction
|
||||
UAVOBJSRCFILENAMES += pathdesired
|
||||
UAVOBJSRCFILENAMES += pathstatus
|
||||
UAVOBJSRCFILENAMES += positionactual
|
||||
UAVOBJSRCFILENAMES += positionstate
|
||||
UAVOBJSRCFILENAMES += ratedesired
|
||||
UAVOBJSRCFILENAMES += revocalibration
|
||||
UAVOBJSRCFILENAMES += relaytuning
|
||||
@ -78,7 +80,7 @@ UAVOBJSRCFILENAMES += systemalarms
|
||||
UAVOBJSRCFILENAMES += systemsettings
|
||||
UAVOBJSRCFILENAMES += systemstats
|
||||
UAVOBJSRCFILENAMES += taskinfo
|
||||
UAVOBJSRCFILENAMES += velocityactual
|
||||
UAVOBJSRCFILENAMES += velocitystate
|
||||
UAVOBJSRCFILENAMES += velocitydesired
|
||||
UAVOBJSRCFILENAMES += watchdogstatus
|
||||
UAVOBJSRCFILENAMES += waypoint
|
||||
|
@ -49,7 +49,7 @@
|
||||
<Current>
|
||||
<arr_1>
|
||||
<CurrentLanguage>default</CurrentLanguage>
|
||||
<DataObject>Accels</DataObject>
|
||||
<DataObject>AccelState</DataObject>
|
||||
<ExpireTimeout>0</ExpireTimeout>
|
||||
<Mute>false</Mute>
|
||||
<ObjectField></ObjectField>
|
||||
@ -99,19 +99,19 @@
|
||||
<dialNeedleID2>needle</dialNeedleID2>
|
||||
<dialNeedleID3>needle3</dialNeedleID3>
|
||||
<font>Lucida Grande,13,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>AttitudeActual</needle1DataObject>
|
||||
<needle1DataObject>AttitudeState</needle1DataObject>
|
||||
<needle1Factor>-1</needle1Factor>
|
||||
<needle1MaxValue>360</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Roll</needle1ObjectField>
|
||||
<needle2DataObject>AttitudeActual</needle2DataObject>
|
||||
<needle2DataObject>AttitudeState</needle2DataObject>
|
||||
<needle2Factor>75</needle2Factor>
|
||||
<needle2MaxValue>20</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Vertical</needle2Move>
|
||||
<needle2ObjectField>Pitch</needle2ObjectField>
|
||||
<needle3DataObject>AttitudeActual</needle3DataObject>
|
||||
<needle3DataObject>AttitudeState</needle3DataObject>
|
||||
<needle3Factor>-1</needle3Factor>
|
||||
<needle3MaxValue>360</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -134,19 +134,19 @@
|
||||
<dialNeedleID2>needle2</dialNeedleID2>
|
||||
<dialNeedleID3>needle3</dialNeedleID3>
|
||||
<font>Lucida Grande,13,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>BaroAltitude</needle1DataObject>
|
||||
<needle1DataObject>BaroSensor</needle1DataObject>
|
||||
<needle1Factor>1</needle1Factor>
|
||||
<needle1MaxValue>10</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Altitude</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -169,19 +169,19 @@
|
||||
<dialNeedleID2></dialNeedleID2>
|
||||
<dialNeedleID3></dialNeedleID3>
|
||||
<font>Lucida Grande,13,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>BaroAltitude</needle1DataObject>
|
||||
<needle1DataObject>BaroSensor</needle1DataObject>
|
||||
<needle1Factor>10</needle1Factor>
|
||||
<needle1MaxValue>1120</needle1MaxValue>
|
||||
<needle1MinValue>1000</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Pressure</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -204,19 +204,19 @@
|
||||
<dialNeedleID2></dialNeedleID2>
|
||||
<dialNeedleID3></dialNeedleID3>
|
||||
<font>Lucida Grande,13,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>VelocityActual</needle1DataObject>
|
||||
<needle1DataObject>VelocityState</needle1DataObject>
|
||||
<needle1Factor>0.01</needle1Factor>
|
||||
<needle1MaxValue>12</needle1MaxValue>
|
||||
<needle1MinValue>-12</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Down</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -239,19 +239,19 @@
|
||||
<dialNeedleID2></dialNeedleID2>
|
||||
<dialNeedleID3></dialNeedleID3>
|
||||
<font>Lucida Grande,13,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>AttitudeActual</needle1DataObject>
|
||||
<needle1DataObject>AttitudeState</needle1DataObject>
|
||||
<needle1Factor>-1</needle1Factor>
|
||||
<needle1MaxValue>360</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Yaw</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -274,19 +274,19 @@
|
||||
<dialNeedleID2>needle</dialNeedleID2>
|
||||
<dialNeedleID3>needle3</dialNeedleID3>
|
||||
<font>Lucida Grande,13,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>AttitudeActual</needle1DataObject>
|
||||
<needle1DataObject>AttitudeState</needle1DataObject>
|
||||
<needle1Factor>-1</needle1Factor>
|
||||
<needle1MaxValue>360</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Roll</needle1ObjectField>
|
||||
<needle2DataObject>AttitudeActual</needle2DataObject>
|
||||
<needle2DataObject>AttitudeState</needle2DataObject>
|
||||
<needle2Factor>75</needle2Factor>
|
||||
<needle2MaxValue>20</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Vertical</needle2Move>
|
||||
<needle2ObjectField>Pitch</needle2ObjectField>
|
||||
<needle3DataObject>AttitudeActual</needle3DataObject>
|
||||
<needle3DataObject>AttitudeState</needle3DataObject>
|
||||
<needle3Factor>-1</needle3Factor>
|
||||
<needle3MaxValue>360</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -309,19 +309,19 @@
|
||||
<dialNeedleID2>needle2</dialNeedleID2>
|
||||
<dialNeedleID3>needle3</dialNeedleID3>
|
||||
<font>Lucida Grande,13,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>BaroAltitude</needle1DataObject>
|
||||
<needle1DataObject>BaroSensor</needle1DataObject>
|
||||
<needle1Factor>1</needle1Factor>
|
||||
<needle1MaxValue>10</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Altitude</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -344,19 +344,19 @@
|
||||
<dialNeedleID2></dialNeedleID2>
|
||||
<dialNeedleID3></dialNeedleID3>
|
||||
<font>Lucida Grande,13,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>BaroAltitude</needle1DataObject>
|
||||
<needle1DataObject>BaroSensor</needle1DataObject>
|
||||
<needle1Factor>10</needle1Factor>
|
||||
<needle1MaxValue>1120</needle1MaxValue>
|
||||
<needle1MinValue>1000</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Pressure</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -379,19 +379,19 @@
|
||||
<dialNeedleID2></dialNeedleID2>
|
||||
<dialNeedleID3></dialNeedleID3>
|
||||
<font>Lucida Grande,13,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>VelocityActual</needle1DataObject>
|
||||
<needle1DataObject>VelocityState</needle1DataObject>
|
||||
<needle1Factor>0.01</needle1Factor>
|
||||
<needle1MaxValue>11.2</needle1MaxValue>
|
||||
<needle1MinValue>-11.2</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Down</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -414,19 +414,19 @@
|
||||
<dialNeedleID2></dialNeedleID2>
|
||||
<dialNeedleID3></dialNeedleID3>
|
||||
<font>Lucida Grande,13,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>AttitudeActual</needle1DataObject>
|
||||
<needle1DataObject>AttitudeState</needle1DataObject>
|
||||
<needle1Factor>-1</needle1Factor>
|
||||
<needle1MaxValue>360</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Yaw</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -455,13 +455,13 @@
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Groundspeed</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -484,19 +484,19 @@
|
||||
<dialNeedleID2>needle2</dialNeedleID2>
|
||||
<dialNeedleID3>needle3</dialNeedleID3>
|
||||
<font>Lucida Grande,13,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>BaroAltitude</needle1DataObject>
|
||||
<needle1DataObject>BaroSensor</needle1DataObject>
|
||||
<needle1Factor>1</needle1Factor>
|
||||
<needle1MaxValue>120</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Temperature</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -519,19 +519,19 @@
|
||||
<dialNeedleID2>needle2</dialNeedleID2>
|
||||
<dialNeedleID3>needle2</dialNeedleID3>
|
||||
<font>Lucida Grande,13,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>AttitudeActual</needle1DataObject>
|
||||
<needle1DataObject>AttitudeState</needle1DataObject>
|
||||
<needle1Factor>-1</needle1Factor>
|
||||
<needle1MaxValue>360</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Roll</needle1ObjectField>
|
||||
<needle2DataObject>Accels</needle2DataObject>
|
||||
<needle2DataObject>AccelState</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>20</needle2MaxValue>
|
||||
<needle2MinValue>-20</needle2MinValue>
|
||||
<needle2Move>Horizontal</needle2Move>
|
||||
<needle2ObjectField>x</needle2ObjectField>
|
||||
<needle3DataObject>Accels</needle3DataObject>
|
||||
<needle3DataObject>AccelState</needle3DataObject>
|
||||
<needle3Factor>-1</needle3Factor>
|
||||
<needle3MaxValue>360</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -560,13 +560,13 @@
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Groundspeed</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -589,19 +589,19 @@
|
||||
<dialNeedleID2>needle</dialNeedleID2>
|
||||
<dialNeedleID3>needle3</dialNeedleID3>
|
||||
<font>Lucida Grande,13,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>AttitudeActual</needle1DataObject>
|
||||
<needle1DataObject>AttitudeState</needle1DataObject>
|
||||
<needle1Factor>-1</needle1Factor>
|
||||
<needle1MaxValue>360</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Roll</needle1ObjectField>
|
||||
<needle2DataObject>AttitudeActual</needle2DataObject>
|
||||
<needle2DataObject>AttitudeState</needle2DataObject>
|
||||
<needle2Factor>75</needle2Factor>
|
||||
<needle2MaxValue>20</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Vertical</needle2Move>
|
||||
<needle2ObjectField>Pitch</needle2ObjectField>
|
||||
<needle3DataObject>AttitudeActual</needle3DataObject>
|
||||
<needle3DataObject>AttitudeState</needle3DataObject>
|
||||
<needle3Factor>-1</needle3Factor>
|
||||
<needle3MaxValue>360</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -624,19 +624,19 @@
|
||||
<dialNeedleID2>needle2</dialNeedleID2>
|
||||
<dialNeedleID3>needle3</dialNeedleID3>
|
||||
<font>Lucida Grande,13,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>BaroAltitude</needle1DataObject>
|
||||
<needle1DataObject>BaroSensor</needle1DataObject>
|
||||
<needle1Factor>1</needle1Factor>
|
||||
<needle1MaxValue>10</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Altitude</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -659,19 +659,19 @@
|
||||
<dialNeedleID2></dialNeedleID2>
|
||||
<dialNeedleID3></dialNeedleID3>
|
||||
<font>Lucida Grande,13,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>BaroAltitude</needle1DataObject>
|
||||
<needle1DataObject>BaroSensor</needle1DataObject>
|
||||
<needle1Factor>10</needle1Factor>
|
||||
<needle1MaxValue>1120</needle1MaxValue>
|
||||
<needle1MinValue>1000</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Pressure</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -694,19 +694,19 @@
|
||||
<dialNeedleID2></dialNeedleID2>
|
||||
<dialNeedleID3></dialNeedleID3>
|
||||
<font>Lucida Grande,13,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>VelocityActual</needle1DataObject>
|
||||
<needle1DataObject>VelocityState</needle1DataObject>
|
||||
<needle1Factor>0.01</needle1Factor>
|
||||
<needle1MaxValue>12</needle1MaxValue>
|
||||
<needle1MinValue>-12</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Down</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -729,19 +729,19 @@
|
||||
<dialNeedleID2></dialNeedleID2>
|
||||
<dialNeedleID3></dialNeedleID3>
|
||||
<font>Lucida Grande,13,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>AttitudeActual</needle1DataObject>
|
||||
<needle1DataObject>AttitudeState</needle1DataObject>
|
||||
<needle1Factor>-1</needle1Factor>
|
||||
<needle1MaxValue>360</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Yaw</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -770,13 +770,13 @@
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Groundspeed</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -799,19 +799,19 @@
|
||||
<dialNeedleID2>needle2</dialNeedleID2>
|
||||
<dialNeedleID3>needle3</dialNeedleID3>
|
||||
<font>Lucida Grande,13,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>BaroAltitude</needle1DataObject>
|
||||
<needle1DataObject>BaroSensor</needle1DataObject>
|
||||
<needle1Factor>1</needle1Factor>
|
||||
<needle1MaxValue>120</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Temperature</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -840,13 +840,13 @@
|
||||
<needle1MinValue>1000</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Channel-3</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -869,19 +869,19 @@
|
||||
<dialNeedleID2>needle2</dialNeedleID2>
|
||||
<dialNeedleID3>needle3</dialNeedleID3>
|
||||
<font>Lucida Grande,13,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>BaroAltitude</needle1DataObject>
|
||||
<needle1DataObject>BaroSensor</needle1DataObject>
|
||||
<needle1Factor>1</needle1Factor>
|
||||
<needle1MaxValue>120</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Temperature</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -1022,7 +1022,7 @@
|
||||
<attActCalc>false</attActCalc>
|
||||
<attActHW>false</attActHW>
|
||||
<attActSim>true</attActSim>
|
||||
<attActual>true</attActual>
|
||||
<attState>true</attState>
|
||||
<attRaw>true</attRaw>
|
||||
<attRawRate>20</attRawRate>
|
||||
<binPath></binPath>
|
||||
@ -1064,7 +1064,7 @@
|
||||
<minValue>-11</minValue>
|
||||
<redMax>11</redMax>
|
||||
<redMin>-11</redMin>
|
||||
<sourceDataObject>Accels</sourceDataObject>
|
||||
<sourceDataObject>AccelState</sourceDataObject>
|
||||
<sourceObjectField>x</sourceObjectField>
|
||||
<useOpenGLFlag>false</useOpenGLFlag>
|
||||
<yellowMax>-5</yellowMax>
|
||||
@ -1087,7 +1087,7 @@
|
||||
<minValue>-11</minValue>
|
||||
<redMax>11</redMax>
|
||||
<redMin>-11</redMin>
|
||||
<sourceDataObject>Accels</sourceDataObject>
|
||||
<sourceDataObject>AccelState</sourceDataObject>
|
||||
<sourceObjectField>y</sourceObjectField>
|
||||
<useOpenGLFlag>false</useOpenGLFlag>
|
||||
<yellowMax>-5</yellowMax>
|
||||
@ -1110,7 +1110,7 @@
|
||||
<minValue>-11</minValue>
|
||||
<redMax>11</redMax>
|
||||
<redMin>-11</redMin>
|
||||
<sourceDataObject>Accels</sourceDataObject>
|
||||
<sourceDataObject>AccelState</sourceDataObject>
|
||||
<sourceObjectField>z</sourceObjectField>
|
||||
<useOpenGLFlag>false</useOpenGLFlag>
|
||||
<yellowMax>-5</yellowMax>
|
||||
@ -1301,7 +1301,7 @@
|
||||
<yellowMin>-0.8</yellowMin>
|
||||
</data>
|
||||
</Pitch>
|
||||
<PitchActual>
|
||||
<PitchState>
|
||||
<configInfo>
|
||||
<locked>false</locked>
|
||||
<version>0.0.0</version>
|
||||
@ -1317,13 +1317,13 @@
|
||||
<minValue>-90</minValue>
|
||||
<redMax>1</redMax>
|
||||
<redMin>0</redMin>
|
||||
<sourceDataObject>AttitudeActual</sourceDataObject>
|
||||
<sourceDataObject>AttitudeState</sourceDataObject>
|
||||
<sourceObjectField>Pitch</sourceObjectField>
|
||||
<useOpenGLFlag>false</useOpenGLFlag>
|
||||
<yellowMax>0.9</yellowMax>
|
||||
<yellowMin>0.1</yellowMin>
|
||||
</data>
|
||||
</PitchActual>
|
||||
</PitchState>
|
||||
<Roll__PCT__20Desired>
|
||||
<configInfo>
|
||||
<locked>false</locked>
|
||||
@ -1871,7 +1871,7 @@
|
||||
<color>4294901760</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>x</uavField>
|
||||
<uavObject>Accels</uavObject>
|
||||
<uavObject>AccelState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>6.92920863607354e-310</yMinimum>
|
||||
@ -1881,7 +1881,7 @@
|
||||
<color>4283782655</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>y</uavField>
|
||||
<uavObject>Accels</uavObject>
|
||||
<uavObject>AccelState</uavObject>
|
||||
<yMaximum>1.78017180972965e-306</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>9.34609790258712e-307</yMinimum>
|
||||
@ -1891,7 +1891,7 @@
|
||||
<color>4283804160</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>z</uavField>
|
||||
<uavObject>Accels</uavObject>
|
||||
<uavObject>AccelState</uavObject>
|
||||
<yMaximum>2.6501977682312e-318</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>6.92920723246466e-310</yMinimum>
|
||||
@ -1973,7 +1973,7 @@
|
||||
<color>4283760895</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>Roll</uavField>
|
||||
<uavObject>AttitudeActual</uavObject>
|
||||
<uavObject>AttitudeState</uavObject>
|
||||
<yMaximum>6.92921152826347e-310</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>6.92921152826031e-310</yMinimum>
|
||||
@ -1983,7 +1983,7 @@
|
||||
<color>4278233600</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>Yaw</uavField>
|
||||
<uavObject>AttitudeActual</uavObject>
|
||||
<uavObject>AttitudeState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -1993,7 +1993,7 @@
|
||||
<color>4294901760</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>Pitch</uavField>
|
||||
<uavObject>AttitudeActual</uavObject>
|
||||
<uavObject>AttitudeState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2019,7 +2019,7 @@
|
||||
<color>4278190080</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>Pressure</uavField>
|
||||
<uavObject>BaroAltitude</uavObject>
|
||||
<uavObject>BaroSensor</uavObject>
|
||||
<yMaximum>1.72723371102043e-77</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>3.86203233966055e-312</yMinimum>
|
||||
@ -2126,7 +2126,7 @@
|
||||
<refreshInterval>200</refreshInterval>
|
||||
</data>
|
||||
</Inputs>
|
||||
<Raw__PCT__20Accels>
|
||||
<Raw__PCT__20AccelState>
|
||||
<configInfo>
|
||||
<locked>false</locked>
|
||||
<version>0.0.0</version>
|
||||
@ -2141,7 +2141,7 @@
|
||||
<color>4294901760</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>x</uavField>
|
||||
<uavObject>Accels</uavObject>
|
||||
<uavObject>AccelState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2151,7 +2151,7 @@
|
||||
<color>4283782655</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>y</uavField>
|
||||
<uavObject>Accels</uavObject>
|
||||
<uavObject>AccelState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2161,7 +2161,7 @@
|
||||
<color>4283804160</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>z</uavField>
|
||||
<uavObject>Accels</uavObject>
|
||||
<uavObject>AccelState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2171,8 +2171,8 @@
|
||||
<plotType>1</plotType>
|
||||
<refreshInterval>500</refreshInterval>
|
||||
</data>
|
||||
</Raw__PCT__20Accels>
|
||||
<Raw__PCT__20Gyros>
|
||||
</Raw__PCT__20AccelState>
|
||||
<Raw__PCT__20gyroState>
|
||||
<configInfo>
|
||||
<locked>false</locked>
|
||||
<version>0.0.0</version>
|
||||
@ -2187,7 +2187,7 @@
|
||||
<color>4283804160</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>z</uavField>
|
||||
<uavObject>Gyros</uavObject>
|
||||
<uavObject>gyroState</uavObject>
|
||||
<yMaximum>1.02360527502876e-306</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>6.92921152846347e-310</yMinimum>
|
||||
@ -2197,7 +2197,7 @@
|
||||
<color>4283782655</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>y</uavField>
|
||||
<uavObject>Gyros</uavObject>
|
||||
<uavObject>gyroState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2207,7 +2207,7 @@
|
||||
<color>4294901760</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>x</uavField>
|
||||
<uavObject>Gyros</uavObject>
|
||||
<uavObject>gyroState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2217,7 +2217,7 @@
|
||||
<plotType>1</plotType>
|
||||
<refreshInterval>500</refreshInterval>
|
||||
</data>
|
||||
</Raw__PCT__20Gyros>
|
||||
</Raw__PCT__20gyroState>
|
||||
<Raw__PCT__20magnetometers>
|
||||
<configInfo>
|
||||
<locked>false</locked>
|
||||
@ -2233,7 +2233,7 @@
|
||||
<color>4294901760</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>x</uavField>
|
||||
<uavObject>Magnetometer</uavObject>
|
||||
<uavObject>MagnetoState</uavObject>
|
||||
<yMaximum>6.92916505601691e-310</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>3.86203233966055e-312</yMinimum>
|
||||
@ -2243,7 +2243,7 @@
|
||||
<color>4283782655</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>y</uavField>
|
||||
<uavObject>Magnetometer</uavObject>
|
||||
<uavObject>MagnetoState</uavObject>
|
||||
<yMaximum>1.72723371101889e-77</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>-1</yMinimum>
|
||||
@ -2253,7 +2253,7 @@
|
||||
<color>4283804160</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>z</uavField>
|
||||
<uavObject>Magnetometer</uavObject>
|
||||
<uavObject>MagnetoState</uavObject>
|
||||
<yMaximum>1.72723371102028e-77</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>7.21478569792807e-313</yMinimum>
|
||||
@ -2694,7 +2694,7 @@
|
||||
<side1>
|
||||
<classId>ScopeGadget</classId>
|
||||
<gadget>
|
||||
<activeConfiguration>Raw Gyros</activeConfiguration>
|
||||
<activeConfiguration>Raw gyroState</activeConfiguration>
|
||||
</gadget>
|
||||
<type>uavGadget</type>
|
||||
</side1>
|
||||
|
@ -115,19 +115,19 @@
|
||||
<dialNeedleID2>needle</dialNeedleID2>
|
||||
<dialNeedleID3>needle3</dialNeedleID3>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>AttitudeActual</needle1DataObject>
|
||||
<needle1DataObject>AttitudeState</needle1DataObject>
|
||||
<needle1Factor>-1</needle1Factor>
|
||||
<needle1MaxValue>360</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Roll</needle1ObjectField>
|
||||
<needle2DataObject>AttitudeActual</needle2DataObject>
|
||||
<needle2DataObject>AttitudeState</needle2DataObject>
|
||||
<needle2Factor>75</needle2Factor>
|
||||
<needle2MaxValue>20</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Vertical</needle2Move>
|
||||
<needle2ObjectField>Pitch</needle2ObjectField>
|
||||
<needle3DataObject>AttitudeActual</needle3DataObject>
|
||||
<needle3DataObject>AttitudeState</needle3DataObject>
|
||||
<needle3Factor>-1</needle3Factor>
|
||||
<needle3MaxValue>360</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -150,19 +150,19 @@
|
||||
<dialNeedleID2>needle2</dialNeedleID2>
|
||||
<dialNeedleID3>needle3</dialNeedleID3>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>BaroAltitude</needle1DataObject>
|
||||
<needle1DataObject>BaroSensor</needle1DataObject>
|
||||
<needle1Factor>1</needle1Factor>
|
||||
<needle1MaxValue>10</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Altitude</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -182,19 +182,19 @@
|
||||
<dialFile>%%DATAPATH%%dials/default/barometer.svg</dialFile>
|
||||
<dialNeedleID1>needle</dialNeedleID1>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>BaroAltitude</needle1DataObject>
|
||||
<needle1DataObject>BaroSensor</needle1DataObject>
|
||||
<needle1Factor>10</needle1Factor>
|
||||
<needle1MaxValue>1120</needle1MaxValue>
|
||||
<needle1MinValue>1000</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Pressure</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -214,19 +214,19 @@
|
||||
<dialFile>%%DATAPATH%%dials/default/vsi.svg</dialFile>
|
||||
<dialNeedleID1>needle</dialNeedleID1>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>VelocityActual</needle1DataObject>
|
||||
<needle1DataObject>VelocityState</needle1DataObject>
|
||||
<needle1Factor>0.01</needle1Factor>
|
||||
<needle1MaxValue>12</needle1MaxValue>
|
||||
<needle1MinValue>-12</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Down</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -247,19 +247,19 @@
|
||||
<dialForegroundID>foreground</dialForegroundID>
|
||||
<dialNeedleID1>needle</dialNeedleID1>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>AttitudeActual</needle1DataObject>
|
||||
<needle1DataObject>AttitudeState</needle1DataObject>
|
||||
<needle1Factor>-1</needle1Factor>
|
||||
<needle1MaxValue>360</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Yaw</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -282,19 +282,19 @@
|
||||
<dialNeedleID2>needle</dialNeedleID2>
|
||||
<dialNeedleID3>needle3</dialNeedleID3>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>AttitudeActual</needle1DataObject>
|
||||
<needle1DataObject>AttitudeState</needle1DataObject>
|
||||
<needle1Factor>-1</needle1Factor>
|
||||
<needle1MaxValue>360</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Roll</needle1ObjectField>
|
||||
<needle2DataObject>AttitudeActual</needle2DataObject>
|
||||
<needle2DataObject>AttitudeState</needle2DataObject>
|
||||
<needle2Factor>75</needle2Factor>
|
||||
<needle2MaxValue>20</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Vertical</needle2Move>
|
||||
<needle2ObjectField>Pitch</needle2ObjectField>
|
||||
<needle3DataObject>AttitudeActual</needle3DataObject>
|
||||
<needle3DataObject>AttitudeState</needle3DataObject>
|
||||
<needle3Factor>-1</needle3Factor>
|
||||
<needle3MaxValue>360</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -317,19 +317,19 @@
|
||||
<dialNeedleID2>needle2</dialNeedleID2>
|
||||
<dialNeedleID3>needle3</dialNeedleID3>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>BaroAltitude</needle1DataObject>
|
||||
<needle1DataObject>BaroSensor</needle1DataObject>
|
||||
<needle1Factor>1</needle1Factor>
|
||||
<needle1MaxValue>10</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Altitude</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -350,19 +350,19 @@
|
||||
<dialForegroundID>foreground</dialForegroundID>
|
||||
<dialNeedleID1>needle</dialNeedleID1>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>BaroAltitude</needle1DataObject>
|
||||
<needle1DataObject>BaroSensor</needle1DataObject>
|
||||
<needle1Factor>10</needle1Factor>
|
||||
<needle1MaxValue>1120</needle1MaxValue>
|
||||
<needle1MinValue>1000</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Pressure</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -383,19 +383,19 @@
|
||||
<dialForegroundID>foreground</dialForegroundID>
|
||||
<dialNeedleID1>needle</dialNeedleID1>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>VelocityActual</needle1DataObject>
|
||||
<needle1DataObject>VelocityState</needle1DataObject>
|
||||
<needle1Factor>0.01</needle1Factor>
|
||||
<needle1MaxValue>11.2</needle1MaxValue>
|
||||
<needle1MinValue>-11.2</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Down</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -416,19 +416,19 @@
|
||||
<dialForegroundID>foreground</dialForegroundID>
|
||||
<dialNeedleID1>needle</dialNeedleID1>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>AttitudeActual</needle1DataObject>
|
||||
<needle1DataObject>AttitudeState</needle1DataObject>
|
||||
<needle1Factor>-1</needle1Factor>
|
||||
<needle1MaxValue>360</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Yaw</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -455,13 +455,13 @@
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Groundspeed</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -484,19 +484,19 @@
|
||||
<dialNeedleID2>needle2</dialNeedleID2>
|
||||
<dialNeedleID3>needle3</dialNeedleID3>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>BaroAltitude</needle1DataObject>
|
||||
<needle1DataObject>BaroSensor</needle1DataObject>
|
||||
<needle1Factor>1</needle1Factor>
|
||||
<needle1MaxValue>120</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Temperature</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -519,19 +519,19 @@
|
||||
<dialNeedleID2>needle2</dialNeedleID2>
|
||||
<dialNeedleID3>needle2</dialNeedleID3>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>AttitudeActual</needle1DataObject>
|
||||
<needle1DataObject>AttitudeState</needle1DataObject>
|
||||
<needle1Factor>-1</needle1Factor>
|
||||
<needle1MaxValue>360</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Roll</needle1ObjectField>
|
||||
<needle2DataObject>Accels</needle2DataObject>
|
||||
<needle2DataObject>AccelState</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>20</needle2MaxValue>
|
||||
<needle2MinValue>-20</needle2MinValue>
|
||||
<needle2Move>Horizontal</needle2Move>
|
||||
<needle2ObjectField>x</needle2ObjectField>
|
||||
<needle3DataObject>Accels</needle3DataObject>
|
||||
<needle3DataObject>AccelState</needle3DataObject>
|
||||
<needle3Factor>-1</needle3Factor>
|
||||
<needle3MaxValue>360</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -557,13 +557,13 @@
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Groundspeed</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -586,19 +586,19 @@
|
||||
<dialNeedleID2>needle</dialNeedleID2>
|
||||
<dialNeedleID3>needle3</dialNeedleID3>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>AttitudeActual</needle1DataObject>
|
||||
<needle1DataObject>AttitudeState</needle1DataObject>
|
||||
<needle1Factor>-1</needle1Factor>
|
||||
<needle1MaxValue>360</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Roll</needle1ObjectField>
|
||||
<needle2DataObject>AttitudeActual</needle2DataObject>
|
||||
<needle2DataObject>AttitudeState</needle2DataObject>
|
||||
<needle2Factor>75</needle2Factor>
|
||||
<needle2MaxValue>20</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Vertical</needle2Move>
|
||||
<needle2ObjectField>Pitch</needle2ObjectField>
|
||||
<needle3DataObject>AttitudeActual</needle3DataObject>
|
||||
<needle3DataObject>AttitudeState</needle3DataObject>
|
||||
<needle3Factor>-1</needle3Factor>
|
||||
<needle3MaxValue>360</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -621,19 +621,19 @@
|
||||
<dialNeedleID2>needle2</dialNeedleID2>
|
||||
<dialNeedleID3>needle3</dialNeedleID3>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>BaroAltitude</needle1DataObject>
|
||||
<needle1DataObject>BaroSensor</needle1DataObject>
|
||||
<needle1Factor>1</needle1Factor>
|
||||
<needle1MaxValue>10</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Altitude</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -653,19 +653,19 @@
|
||||
<dialFile>%%DATAPATH%%dials/hi-contrast/barometer.svg</dialFile>
|
||||
<dialNeedleID1>needle</dialNeedleID1>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>BaroAltitude</needle1DataObject>
|
||||
<needle1DataObject>BaroSensor</needle1DataObject>
|
||||
<needle1Factor>10</needle1Factor>
|
||||
<needle1MaxValue>1120</needle1MaxValue>
|
||||
<needle1MinValue>1000</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Pressure</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -685,19 +685,19 @@
|
||||
<dialFile>%%DATAPATH%%dials/hi-contrast/vsi.svg</dialFile>
|
||||
<dialNeedleID1>needle</dialNeedleID1>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>VelocityActual</needle1DataObject>
|
||||
<needle1DataObject>VelocityState</needle1DataObject>
|
||||
<needle1Factor>0.01</needle1Factor>
|
||||
<needle1MaxValue>12</needle1MaxValue>
|
||||
<needle1MinValue>-12</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Down</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -718,19 +718,19 @@
|
||||
<dialForegroundID>foreground</dialForegroundID>
|
||||
<dialNeedleID1>needle</dialNeedleID1>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>AttitudeActual</needle1DataObject>
|
||||
<needle1DataObject>AttitudeState</needle1DataObject>
|
||||
<needle1Factor>-1</needle1Factor>
|
||||
<needle1MaxValue>360</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Yaw</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -756,13 +756,13 @@
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Groundspeed</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -784,19 +784,19 @@
|
||||
<dialNeedleID2>needle2</dialNeedleID2>
|
||||
<dialNeedleID3>needle3</dialNeedleID3>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>BaroAltitude</needle1DataObject>
|
||||
<needle1DataObject>BaroSensor</needle1DataObject>
|
||||
<needle1Factor>1</needle1Factor>
|
||||
<needle1MaxValue>120</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Temperature</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -824,13 +824,13 @@
|
||||
<needle1MinValue>1000</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Channel-3</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -852,19 +852,19 @@
|
||||
<dialNeedleID2>needle2</dialNeedleID2>
|
||||
<dialNeedleID3>needle3</dialNeedleID3>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>BaroAltitude</needle1DataObject>
|
||||
<needle1DataObject>BaroSensor</needle1DataObject>
|
||||
<needle1Factor>1</needle1Factor>
|
||||
<needle1MaxValue>120</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Temperature</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -965,7 +965,7 @@
|
||||
<attActCalc>false</attActCalc>
|
||||
<attActHW>false</attActHW>
|
||||
<attActSim>true</attActSim>
|
||||
<attActualEnabled>true</attActualEnabled>
|
||||
<attStateEnabled>true</attStateEnabled>
|
||||
<attRawEnabled>true</attRawEnabled>
|
||||
<attRawRate>20</attRawRate>
|
||||
<baroAltRate>50</baroAltRate>
|
||||
@ -1001,7 +1001,7 @@
|
||||
<attActCalc>false</attActCalc>
|
||||
<attActHW>false</attActHW>
|
||||
<attActSim>true</attActSim>
|
||||
<attActualEnabled>true</attActualEnabled>
|
||||
<attStateEnabled>true</attStateEnabled>
|
||||
<attRawEnabled>true</attRawEnabled>
|
||||
<attRawRate>20</attRawRate>
|
||||
<baroAltRate>50</baroAltRate>
|
||||
@ -1037,7 +1037,7 @@
|
||||
<attActCalc>false</attActCalc>
|
||||
<attActHW>false</attActHW>
|
||||
<attActSim>true</attActSim>
|
||||
<attActualEnabled>true</attActualEnabled>
|
||||
<attStateEnabled>true</attStateEnabled>
|
||||
<attRawEnabled>true</attRawEnabled>
|
||||
<attRawRate>20</attRawRate>
|
||||
<baroAltRate>50</baroAltRate>
|
||||
@ -1081,7 +1081,7 @@
|
||||
<minValue>-11</minValue>
|
||||
<redMax>11</redMax>
|
||||
<redMin>-11</redMin>
|
||||
<sourceDataObject>Accels</sourceDataObject>
|
||||
<sourceDataObject>AccelState</sourceDataObject>
|
||||
<sourceObjectField>x</sourceObjectField>
|
||||
<useOpenGLFlag>false</useOpenGLFlag>
|
||||
<yellowMax>-5</yellowMax>
|
||||
@ -1104,7 +1104,7 @@
|
||||
<minValue>-11</minValue>
|
||||
<redMax>11</redMax>
|
||||
<redMin>-11</redMin>
|
||||
<sourceDataObject>Accels</sourceDataObject>
|
||||
<sourceDataObject>AccelState</sourceDataObject>
|
||||
<sourceObjectField>y</sourceObjectField>
|
||||
<useOpenGLFlag>false</useOpenGLFlag>
|
||||
<yellowMax>-5</yellowMax>
|
||||
@ -1127,7 +1127,7 @@
|
||||
<minValue>-11</minValue>
|
||||
<redMax>11</redMax>
|
||||
<redMin>-11</redMin>
|
||||
<sourceDataObject>Accels</sourceDataObject>
|
||||
<sourceDataObject>AccelState</sourceDataObject>
|
||||
<sourceObjectField>z</sourceObjectField>
|
||||
<useOpenGLFlag>false</useOpenGLFlag>
|
||||
<yellowMax>-5</yellowMax>
|
||||
@ -1318,7 +1318,7 @@
|
||||
<yellowMin>-0.8</yellowMin>
|
||||
</data>
|
||||
</Pitch>
|
||||
<PitchActual>
|
||||
<PitchState>
|
||||
<configInfo>
|
||||
<locked>false</locked>
|
||||
<version>0.0.0</version>
|
||||
@ -1334,13 +1334,13 @@
|
||||
<minValue>-90</minValue>
|
||||
<redMax>1</redMax>
|
||||
<redMin>0</redMin>
|
||||
<sourceDataObject>AttitudeActual</sourceDataObject>
|
||||
<sourceDataObject>AttitudeState</sourceDataObject>
|
||||
<sourceObjectField>Pitch</sourceObjectField>
|
||||
<useOpenGLFlag>false</useOpenGLFlag>
|
||||
<yellowMax>0.9</yellowMax>
|
||||
<yellowMin>0.1</yellowMin>
|
||||
</data>
|
||||
</PitchActual>
|
||||
</PitchState>
|
||||
<Roll__PCT__20Desired>
|
||||
<configInfo>
|
||||
<locked>false</locked>
|
||||
@ -1909,7 +1909,7 @@
|
||||
<color>4294901760</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>x</uavField>
|
||||
<uavObject>Accels</uavObject>
|
||||
<uavObject>AccelState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -1919,7 +1919,7 @@
|
||||
<color>4283782655</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>y</uavField>
|
||||
<uavObject>Accels</uavObject>
|
||||
<uavObject>AccelState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -1929,7 +1929,7 @@
|
||||
<color>4283804160</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>z</uavField>
|
||||
<uavObject>Accels</uavObject>
|
||||
<uavObject>AccelState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2009,7 +2009,7 @@
|
||||
<color>4283760895</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>Roll</uavField>
|
||||
<uavObject>AttitudeActual</uavObject>
|
||||
<uavObject>AttitudeState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2019,7 +2019,7 @@
|
||||
<color>4278233600</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>Yaw</uavField>
|
||||
<uavObject>AttitudeActual</uavObject>
|
||||
<uavObject>AttitudeState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2029,7 +2029,7 @@
|
||||
<color>4294901760</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>Pitch</uavField>
|
||||
<uavObject>AttitudeActual</uavObject>
|
||||
<uavObject>AttitudeState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2054,7 +2054,7 @@
|
||||
<color>4278190080</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>Pressure</uavField>
|
||||
<uavObject>BaroAltitude</uavObject>
|
||||
<uavObject>BaroSensor</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2160,7 +2160,7 @@
|
||||
<refreshInterval>200</refreshInterval>
|
||||
</data>
|
||||
</Inputs>
|
||||
<Raw__PCT__20Accels>
|
||||
<Raw__PCT__20AccelState>
|
||||
<configInfo>
|
||||
<locked>false</locked>
|
||||
<version>0.0.0</version>
|
||||
@ -2174,7 +2174,7 @@
|
||||
<color>4294901760</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>x</uavField>
|
||||
<uavObject>Accels</uavObject>
|
||||
<uavObject>AccelState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2184,7 +2184,7 @@
|
||||
<color>4283782655</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>y</uavField>
|
||||
<uavObject>Accels</uavObject>
|
||||
<uavObject>AccelState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2194,7 +2194,7 @@
|
||||
<color>4283804160</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>z</uavField>
|
||||
<uavObject>Accels</uavObject>
|
||||
<uavObject>AccelState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2204,8 +2204,8 @@
|
||||
<plotType>1</plotType>
|
||||
<refreshInterval>500</refreshInterval>
|
||||
</data>
|
||||
</Raw__PCT__20Accels>
|
||||
<Raw__PCT__20Gyros>
|
||||
</Raw__PCT__20AccelState>
|
||||
<Raw__PCT__20GyroState>
|
||||
<configInfo>
|
||||
<locked>false</locked>
|
||||
<version>0.0.0</version>
|
||||
@ -2219,7 +2219,7 @@
|
||||
<color>4283804160</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>z</uavField>
|
||||
<uavObject>Gyros</uavObject>
|
||||
<uavObject>GyroState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2229,7 +2229,7 @@
|
||||
<color>4283782655</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>y</uavField>
|
||||
<uavObject>Gyros</uavObject>
|
||||
<uavObject>GyroState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2239,7 +2239,7 @@
|
||||
<color>4294901760</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>x</uavField>
|
||||
<uavObject>Gyros</uavObject>
|
||||
<uavObject>GyroState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2249,7 +2249,7 @@
|
||||
<plotType>1</plotType>
|
||||
<refreshInterval>500</refreshInterval>
|
||||
</data>
|
||||
</Raw__PCT__20Gyros>
|
||||
</Raw__PCT__20GyroState>
|
||||
<Raw__PCT__20magnetometers>
|
||||
<configInfo>
|
||||
<locked>false</locked>
|
||||
@ -2264,7 +2264,7 @@
|
||||
<color>4294901760</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>x</uavField>
|
||||
<uavObject>Magnetometer</uavObject>
|
||||
<uavObject>MagnetoState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2274,7 +2274,7 @@
|
||||
<color>4283782655</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>y</uavField>
|
||||
<uavObject>Magnetometer</uavObject>
|
||||
<uavObject>MagnetoState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2284,7 +2284,7 @@
|
||||
<color>4283804160</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>z</uavField>
|
||||
<uavObject>Magnetometer</uavObject>
|
||||
<uavObject>MagnetoState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2675,7 +2675,7 @@
|
||||
<side1>
|
||||
<classId>ScopeGadget</classId>
|
||||
<gadget>
|
||||
<activeConfiguration>Raw Gyros</activeConfiguration>
|
||||
<activeConfiguration>Raw GyroState</activeConfiguration>
|
||||
</gadget>
|
||||
<type>uavGadget</type>
|
||||
</side1>
|
||||
|
@ -115,19 +115,19 @@
|
||||
<dialNeedleID2>needle</dialNeedleID2>
|
||||
<dialNeedleID3>needle3</dialNeedleID3>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>AttitudeActual</needle1DataObject>
|
||||
<needle1DataObject>AttitudeState</needle1DataObject>
|
||||
<needle1Factor>-1</needle1Factor>
|
||||
<needle1MaxValue>360</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Roll</needle1ObjectField>
|
||||
<needle2DataObject>AttitudeActual</needle2DataObject>
|
||||
<needle2DataObject>AttitudeState</needle2DataObject>
|
||||
<needle2Factor>75</needle2Factor>
|
||||
<needle2MaxValue>20</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Vertical</needle2Move>
|
||||
<needle2ObjectField>Pitch</needle2ObjectField>
|
||||
<needle3DataObject>AttitudeActual</needle3DataObject>
|
||||
<needle3DataObject>AttitudeState</needle3DataObject>
|
||||
<needle3Factor>-1</needle3Factor>
|
||||
<needle3MaxValue>360</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -150,19 +150,19 @@
|
||||
<dialNeedleID2>needle2</dialNeedleID2>
|
||||
<dialNeedleID3>needle3</dialNeedleID3>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>BaroAltitude</needle1DataObject>
|
||||
<needle1DataObject>BaroSensor</needle1DataObject>
|
||||
<needle1Factor>1</needle1Factor>
|
||||
<needle1MaxValue>10</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Altitude</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -182,19 +182,19 @@
|
||||
<dialFile>%%DATAPATH%%dials/default/barometer.svg</dialFile>
|
||||
<dialNeedleID1>needle</dialNeedleID1>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>BaroAltitude</needle1DataObject>
|
||||
<needle1DataObject>BaroSensor</needle1DataObject>
|
||||
<needle1Factor>10</needle1Factor>
|
||||
<needle1MaxValue>1120</needle1MaxValue>
|
||||
<needle1MinValue>1000</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Pressure</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -214,19 +214,19 @@
|
||||
<dialFile>%%DATAPATH%%dials/default/vsi.svg</dialFile>
|
||||
<dialNeedleID1>needle</dialNeedleID1>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>VelocityActual</needle1DataObject>
|
||||
<needle1DataObject>VelocityState</needle1DataObject>
|
||||
<needle1Factor>0.01</needle1Factor>
|
||||
<needle1MaxValue>12</needle1MaxValue>
|
||||
<needle1MinValue>-12</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Down</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -247,19 +247,19 @@
|
||||
<dialForegroundID>foreground</dialForegroundID>
|
||||
<dialNeedleID1>needle</dialNeedleID1>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>AttitudeActual</needle1DataObject>
|
||||
<needle1DataObject>AttitudeState</needle1DataObject>
|
||||
<needle1Factor>-1</needle1Factor>
|
||||
<needle1MaxValue>360</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Yaw</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -282,19 +282,19 @@
|
||||
<dialNeedleID2>needle</dialNeedleID2>
|
||||
<dialNeedleID3>needle3</dialNeedleID3>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>AttitudeActual</needle1DataObject>
|
||||
<needle1DataObject>AttitudeState</needle1DataObject>
|
||||
<needle1Factor>-1</needle1Factor>
|
||||
<needle1MaxValue>360</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Roll</needle1ObjectField>
|
||||
<needle2DataObject>AttitudeActual</needle2DataObject>
|
||||
<needle2DataObject>AttitudeState</needle2DataObject>
|
||||
<needle2Factor>75</needle2Factor>
|
||||
<needle2MaxValue>20</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Vertical</needle2Move>
|
||||
<needle2ObjectField>Pitch</needle2ObjectField>
|
||||
<needle3DataObject>AttitudeActual</needle3DataObject>
|
||||
<needle3DataObject>AttitudeState</needle3DataObject>
|
||||
<needle3Factor>-1</needle3Factor>
|
||||
<needle3MaxValue>360</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -317,19 +317,19 @@
|
||||
<dialNeedleID2>needle2</dialNeedleID2>
|
||||
<dialNeedleID3>needle3</dialNeedleID3>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>BaroAltitude</needle1DataObject>
|
||||
<needle1DataObject>BaroSensor</needle1DataObject>
|
||||
<needle1Factor>1</needle1Factor>
|
||||
<needle1MaxValue>10</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Altitude</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -350,19 +350,19 @@
|
||||
<dialForegroundID>foreground</dialForegroundID>
|
||||
<dialNeedleID1>needle</dialNeedleID1>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>BaroAltitude</needle1DataObject>
|
||||
<needle1DataObject>BaroSensor</needle1DataObject>
|
||||
<needle1Factor>10</needle1Factor>
|
||||
<needle1MaxValue>1120</needle1MaxValue>
|
||||
<needle1MinValue>1000</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Pressure</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -383,19 +383,19 @@
|
||||
<dialForegroundID>foreground</dialForegroundID>
|
||||
<dialNeedleID1>needle</dialNeedleID1>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>VelocityActual</needle1DataObject>
|
||||
<needle1DataObject>VelocityState</needle1DataObject>
|
||||
<needle1Factor>0.01</needle1Factor>
|
||||
<needle1MaxValue>11.2</needle1MaxValue>
|
||||
<needle1MinValue>-11.2</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Down</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -416,19 +416,19 @@
|
||||
<dialForegroundID>foreground</dialForegroundID>
|
||||
<dialNeedleID1>needle</dialNeedleID1>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>AttitudeActual</needle1DataObject>
|
||||
<needle1DataObject>AttitudeState</needle1DataObject>
|
||||
<needle1Factor>-1</needle1Factor>
|
||||
<needle1MaxValue>360</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Yaw</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -455,13 +455,13 @@
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Groundspeed</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -484,19 +484,19 @@
|
||||
<dialNeedleID2>needle2</dialNeedleID2>
|
||||
<dialNeedleID3>needle3</dialNeedleID3>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>BaroAltitude</needle1DataObject>
|
||||
<needle1DataObject>BaroSensor</needle1DataObject>
|
||||
<needle1Factor>1</needle1Factor>
|
||||
<needle1MaxValue>120</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Temperature</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -519,19 +519,19 @@
|
||||
<dialNeedleID2>needle2</dialNeedleID2>
|
||||
<dialNeedleID3>needle2</dialNeedleID3>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>AttitudeActual</needle1DataObject>
|
||||
<needle1DataObject>AttitudeState</needle1DataObject>
|
||||
<needle1Factor>-1</needle1Factor>
|
||||
<needle1MaxValue>360</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Roll</needle1ObjectField>
|
||||
<needle2DataObject>Accels</needle2DataObject>
|
||||
<needle2DataObject>AccelState</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>20</needle2MaxValue>
|
||||
<needle2MinValue>-20</needle2MinValue>
|
||||
<needle2Move>Horizontal</needle2Move>
|
||||
<needle2ObjectField>x</needle2ObjectField>
|
||||
<needle3DataObject>Accels</needle3DataObject>
|
||||
<needle3DataObject>AccelState</needle3DataObject>
|
||||
<needle3Factor>-1</needle3Factor>
|
||||
<needle3MaxValue>360</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -557,13 +557,13 @@
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Groundspeed</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -586,19 +586,19 @@
|
||||
<dialNeedleID2>needle</dialNeedleID2>
|
||||
<dialNeedleID3>needle3</dialNeedleID3>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>AttitudeActual</needle1DataObject>
|
||||
<needle1DataObject>AttitudeState</needle1DataObject>
|
||||
<needle1Factor>-1</needle1Factor>
|
||||
<needle1MaxValue>360</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Roll</needle1ObjectField>
|
||||
<needle2DataObject>AttitudeActual</needle2DataObject>
|
||||
<needle2DataObject>AttitudeState</needle2DataObject>
|
||||
<needle2Factor>75</needle2Factor>
|
||||
<needle2MaxValue>20</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Vertical</needle2Move>
|
||||
<needle2ObjectField>Pitch</needle2ObjectField>
|
||||
<needle3DataObject>AttitudeActual</needle3DataObject>
|
||||
<needle3DataObject>AttitudeState</needle3DataObject>
|
||||
<needle3Factor>-1</needle3Factor>
|
||||
<needle3MaxValue>360</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -621,19 +621,19 @@
|
||||
<dialNeedleID2>needle2</dialNeedleID2>
|
||||
<dialNeedleID3>needle3</dialNeedleID3>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>BaroAltitude</needle1DataObject>
|
||||
<needle1DataObject>BaroSensor</needle1DataObject>
|
||||
<needle1Factor>1</needle1Factor>
|
||||
<needle1MaxValue>10</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Altitude</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -653,19 +653,19 @@
|
||||
<dialFile>%%DATAPATH%%dials/hi-contrast/barometer.svg</dialFile>
|
||||
<dialNeedleID1>needle</dialNeedleID1>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>BaroAltitude</needle1DataObject>
|
||||
<needle1DataObject>BaroSensor</needle1DataObject>
|
||||
<needle1Factor>10</needle1Factor>
|
||||
<needle1MaxValue>1120</needle1MaxValue>
|
||||
<needle1MinValue>1000</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Pressure</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -685,19 +685,19 @@
|
||||
<dialFile>%%DATAPATH%%dials/hi-contrast/vsi.svg</dialFile>
|
||||
<dialNeedleID1>needle</dialNeedleID1>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>VelocityActual</needle1DataObject>
|
||||
<needle1DataObject>VelocityState</needle1DataObject>
|
||||
<needle1Factor>0.01</needle1Factor>
|
||||
<needle1MaxValue>12</needle1MaxValue>
|
||||
<needle1MinValue>-12</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Down</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -718,19 +718,19 @@
|
||||
<dialForegroundID>foreground</dialForegroundID>
|
||||
<dialNeedleID1>needle</dialNeedleID1>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>AttitudeActual</needle1DataObject>
|
||||
<needle1DataObject>AttitudeState</needle1DataObject>
|
||||
<needle1Factor>-1</needle1Factor>
|
||||
<needle1MaxValue>360</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Yaw</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -756,13 +756,13 @@
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Groundspeed</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -784,19 +784,19 @@
|
||||
<dialNeedleID2>needle2</dialNeedleID2>
|
||||
<dialNeedleID3>needle3</dialNeedleID3>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>BaroAltitude</needle1DataObject>
|
||||
<needle1DataObject>BaroSensor</needle1DataObject>
|
||||
<needle1Factor>1</needle1Factor>
|
||||
<needle1MaxValue>120</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Temperature</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -824,13 +824,13 @@
|
||||
<needle1MinValue>1000</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Channel-3</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -852,19 +852,19 @@
|
||||
<dialNeedleID2>needle2</dialNeedleID2>
|
||||
<dialNeedleID3>needle3</dialNeedleID3>
|
||||
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
|
||||
<needle1DataObject>BaroAltitude</needle1DataObject>
|
||||
<needle1DataObject>BaroSensor</needle1DataObject>
|
||||
<needle1Factor>1</needle1Factor>
|
||||
<needle1MaxValue>120</needle1MaxValue>
|
||||
<needle1MinValue>0</needle1MinValue>
|
||||
<needle1Move>Rotate</needle1Move>
|
||||
<needle1ObjectField>Temperature</needle1ObjectField>
|
||||
<needle2DataObject>BaroAltitude</needle2DataObject>
|
||||
<needle2DataObject>BaroSensor</needle2DataObject>
|
||||
<needle2Factor>1</needle2Factor>
|
||||
<needle2MaxValue>100</needle2MaxValue>
|
||||
<needle2MinValue>0</needle2MinValue>
|
||||
<needle2Move>Rotate</needle2Move>
|
||||
<needle2ObjectField>Altitude</needle2ObjectField>
|
||||
<needle3DataObject>BaroAltitude</needle3DataObject>
|
||||
<needle3DataObject>BaroSensor</needle3DataObject>
|
||||
<needle3Factor>1</needle3Factor>
|
||||
<needle3MaxValue>1000</needle3MaxValue>
|
||||
<needle3MinValue>0</needle3MinValue>
|
||||
@ -965,7 +965,7 @@
|
||||
<attActCalc>false</attActCalc>
|
||||
<attActHW>false</attActHW>
|
||||
<attActSim>true</attActSim>
|
||||
<attActualEnabled>true</attActualEnabled>
|
||||
<attStateEnabled>true</attStateEnabled>
|
||||
<attRawEnabled>true</attRawEnabled>
|
||||
<attRawRate>20</attRawRate>
|
||||
<baroAltRate>50</baroAltRate>
|
||||
@ -1001,7 +1001,7 @@
|
||||
<attActCalc>false</attActCalc>
|
||||
<attActHW>false</attActHW>
|
||||
<attActSim>true</attActSim>
|
||||
<attActualEnabled>true</attActualEnabled>
|
||||
<attStateEnabled>true</attStateEnabled>
|
||||
<attRawEnabled>true</attRawEnabled>
|
||||
<attRawRate>20</attRawRate>
|
||||
<baroAltRate>50</baroAltRate>
|
||||
@ -1037,7 +1037,7 @@
|
||||
<attActCalc>false</attActCalc>
|
||||
<attActHW>false</attActHW>
|
||||
<attActSim>true</attActSim>
|
||||
<attActualEnabled>true</attActualEnabled>
|
||||
<attStateEnabled>true</attStateEnabled>
|
||||
<attRawEnabled>true</attRawEnabled>
|
||||
<attRawRate>20</attRawRate>
|
||||
<baroAltRate>50</baroAltRate>
|
||||
@ -1081,7 +1081,7 @@
|
||||
<minValue>-11</minValue>
|
||||
<redMax>11</redMax>
|
||||
<redMin>-11</redMin>
|
||||
<sourceDataObject>Accels</sourceDataObject>
|
||||
<sourceDataObject>AccelState</sourceDataObject>
|
||||
<sourceObjectField>x</sourceObjectField>
|
||||
<useOpenGLFlag>false</useOpenGLFlag>
|
||||
<yellowMax>-5</yellowMax>
|
||||
@ -1104,7 +1104,7 @@
|
||||
<minValue>-11</minValue>
|
||||
<redMax>11</redMax>
|
||||
<redMin>-11</redMin>
|
||||
<sourceDataObject>Accels</sourceDataObject>
|
||||
<sourceDataObject>AccelState</sourceDataObject>
|
||||
<sourceObjectField>y</sourceObjectField>
|
||||
<useOpenGLFlag>false</useOpenGLFlag>
|
||||
<yellowMax>-5</yellowMax>
|
||||
@ -1127,7 +1127,7 @@
|
||||
<minValue>-11</minValue>
|
||||
<redMax>11</redMax>
|
||||
<redMin>-11</redMin>
|
||||
<sourceDataObject>Accels</sourceDataObject>
|
||||
<sourceDataObject>AccelState</sourceDataObject>
|
||||
<sourceObjectField>z</sourceObjectField>
|
||||
<useOpenGLFlag>false</useOpenGLFlag>
|
||||
<yellowMax>-5</yellowMax>
|
||||
@ -1318,7 +1318,7 @@
|
||||
<yellowMin>-0.8</yellowMin>
|
||||
</data>
|
||||
</Pitch>
|
||||
<PitchActual>
|
||||
<PitchState>
|
||||
<configInfo>
|
||||
<locked>false</locked>
|
||||
<version>0.0.0</version>
|
||||
@ -1334,13 +1334,13 @@
|
||||
<minValue>-90</minValue>
|
||||
<redMax>1</redMax>
|
||||
<redMin>0</redMin>
|
||||
<sourceDataObject>AttitudeActual</sourceDataObject>
|
||||
<sourceDataObject>AttitudeState</sourceDataObject>
|
||||
<sourceObjectField>Pitch</sourceObjectField>
|
||||
<useOpenGLFlag>false</useOpenGLFlag>
|
||||
<yellowMax>0.9</yellowMax>
|
||||
<yellowMin>0.1</yellowMin>
|
||||
</data>
|
||||
</PitchActual>
|
||||
</PitchState>
|
||||
<Roll__PCT__20Desired>
|
||||
<configInfo>
|
||||
<locked>false</locked>
|
||||
@ -1887,7 +1887,7 @@
|
||||
<color>4294901760</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>x</uavField>
|
||||
<uavObject>Accels</uavObject>
|
||||
<uavObject>AccelState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -1897,7 +1897,7 @@
|
||||
<color>4283782655</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>y</uavField>
|
||||
<uavObject>Accels</uavObject>
|
||||
<uavObject>AccelState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -1907,7 +1907,7 @@
|
||||
<color>4283804160</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>z</uavField>
|
||||
<uavObject>Accels</uavObject>
|
||||
<uavObject>AccelState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -1987,7 +1987,7 @@
|
||||
<color>4283760895</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>Roll</uavField>
|
||||
<uavObject>AttitudeActual</uavObject>
|
||||
<uavObject>AttitudeState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -1997,7 +1997,7 @@
|
||||
<color>4278233600</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>Yaw</uavField>
|
||||
<uavObject>AttitudeActual</uavObject>
|
||||
<uavObject>AttitudeState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2007,7 +2007,7 @@
|
||||
<color>4294901760</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>Pitch</uavField>
|
||||
<uavObject>AttitudeActual</uavObject>
|
||||
<uavObject>AttitudeState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2032,7 +2032,7 @@
|
||||
<color>4278190080</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>Pressure</uavField>
|
||||
<uavObject>BaroAltitude</uavObject>
|
||||
<uavObject>BaroSensor</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2138,7 +2138,7 @@
|
||||
<refreshInterval>200</refreshInterval>
|
||||
</data>
|
||||
</Inputs>
|
||||
<Raw__PCT__20Accels>
|
||||
<Raw__PCT__20AccelState>
|
||||
<configInfo>
|
||||
<locked>false</locked>
|
||||
<version>0.0.0</version>
|
||||
@ -2152,7 +2152,7 @@
|
||||
<color>4294901760</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>x</uavField>
|
||||
<uavObject>Accels</uavObject>
|
||||
<uavObject>AccelState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2162,7 +2162,7 @@
|
||||
<color>4283782655</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>y</uavField>
|
||||
<uavObject>Accels</uavObject>
|
||||
<uavObject>AccelState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2172,7 +2172,7 @@
|
||||
<color>4283804160</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>z</uavField>
|
||||
<uavObject>Accels</uavObject>
|
||||
<uavObject>AccelState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2182,8 +2182,8 @@
|
||||
<plotType>1</plotType>
|
||||
<refreshInterval>500</refreshInterval>
|
||||
</data>
|
||||
</Raw__PCT__20Accels>
|
||||
<Raw__PCT__20Gyros>
|
||||
</Raw__PCT__20AccelState>
|
||||
<Raw__PCT__20GyroState>
|
||||
<configInfo>
|
||||
<locked>false</locked>
|
||||
<version>0.0.0</version>
|
||||
@ -2197,7 +2197,7 @@
|
||||
<color>4283804160</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>z</uavField>
|
||||
<uavObject>Gyros</uavObject>
|
||||
<uavObject>GyroState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2207,7 +2207,7 @@
|
||||
<color>4283782655</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>y</uavField>
|
||||
<uavObject>Gyros</uavObject>
|
||||
<uavObject>GyroState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2217,7 +2217,7 @@
|
||||
<color>4294901760</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>x</uavField>
|
||||
<uavObject>Gyros</uavObject>
|
||||
<uavObject>GyroState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2227,7 +2227,7 @@
|
||||
<plotType>1</plotType>
|
||||
<refreshInterval>500</refreshInterval>
|
||||
</data>
|
||||
</Raw__PCT__20Gyros>
|
||||
</Raw__PCT__20GyroState>
|
||||
<Raw__PCT__20magnetometers>
|
||||
<configInfo>
|
||||
<locked>false</locked>
|
||||
@ -2242,7 +2242,7 @@
|
||||
<color>4294901760</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>x</uavField>
|
||||
<uavObject>Magnetometer</uavObject>
|
||||
<uavObject>MagnetoState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2252,7 +2252,7 @@
|
||||
<color>4283782655</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>y</uavField>
|
||||
<uavObject>Magnetometer</uavObject>
|
||||
<uavObject>MagnetoState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2262,7 +2262,7 @@
|
||||
<color>4283804160</color>
|
||||
<mathFunction>None</mathFunction>
|
||||
<uavField>z</uavField>
|
||||
<uavObject>Magnetometer</uavObject>
|
||||
<uavObject>MagnetoState</uavObject>
|
||||
<yMaximum>0</yMaximum>
|
||||
<yMeanSamples>1</yMeanSamples>
|
||||
<yMinimum>0</yMinimum>
|
||||
@ -2665,7 +2665,7 @@
|
||||
<side1>
|
||||
<classId>ScopeGadget</classId>
|
||||
<gadget>
|
||||
<activeConfiguration>Raw Gyros</activeConfiguration>
|
||||
<activeConfiguration>Raw GyroState</activeConfiguration>
|
||||
</gadget>
|
||||
<type>uavGadget</type>
|
||||
</side1>
|
||||
|
@ -24,10 +24,10 @@ Item {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
// The altitude scale represents 30 meters,
|
||||
// move it in 0..5m range
|
||||
anchors.verticalCenterOffset: -height/30 * (PositionActual.Down-Math.floor(PositionActual.Down/5)*5)
|
||||
anchors.verticalCenterOffset: -height/30 * (PositionState.Down-Math.floor(PositionState.Down/5)*5)
|
||||
anchors.left: parent.left
|
||||
|
||||
property int topNumber: 15-Math.floor(PositionActual.Down/5)*5
|
||||
property int topNumber: 15-Math.floor(PositionState.Down/5)*5
|
||||
|
||||
// Altitude numbers
|
||||
Column {
|
||||
@ -69,7 +69,7 @@ Item {
|
||||
|
||||
Text {
|
||||
id: altitude_text
|
||||
text: Math.floor(-PositionActual.Down).toFixed()
|
||||
text: Math.floor(-PositionState.Down).toFixed()
|
||||
color: "white"
|
||||
font {
|
||||
family: "Arial"
|
||||
|
@ -19,8 +19,8 @@ Item {
|
||||
//split compass band to 8 parts to ensure it doesn't exceed the max texture size
|
||||
Row {
|
||||
anchors.centerIn: parent
|
||||
//the band is 540 degrees wide, AttitudeActual.Yaw is converted to -180..180 range
|
||||
anchors.horizontalCenterOffset: -1*((AttitudeActual.Yaw+180+720) % 360 - 180)/540*width
|
||||
//the band is 540 degrees wide, AttitudeState.Yaw is converted to -180..180 range
|
||||
anchors.horizontalCenterOffset: -1*((AttitudeState.Yaw+180+720) % 360 - 180)/540*width
|
||||
|
||||
Repeater {
|
||||
model: 5
|
||||
|
@ -34,7 +34,7 @@ Rectangle {
|
||||
anchors.centerIn: parent
|
||||
//rotate it around the center of scene
|
||||
transform: Rotation {
|
||||
angle: -AttitudeActual.Roll
|
||||
angle: -AttitudeState.Roll
|
||||
origin.x : sceneItem.width/2 - x
|
||||
origin.y : sceneItem.height/2 - y
|
||||
}
|
||||
|
@ -7,9 +7,9 @@ OsgEarth {
|
||||
sceneFile: qmlWidget.earthFile
|
||||
fieldOfView: 90
|
||||
|
||||
yaw: AttitudeActual.Yaw
|
||||
pitch: AttitudeActual.Pitch
|
||||
roll: AttitudeActual.Roll
|
||||
yaw: AttitudeState.Yaw
|
||||
pitch: AttitudeState.Pitch
|
||||
roll: AttitudeState.Roll
|
||||
|
||||
latitude: qmlWidget.actualPositionUsed ?
|
||||
GPSPosition.Latitude/10000000.0 : qmlWidget.latitude
|
||||
|
@ -23,10 +23,10 @@ Item {
|
||||
id: pitchTranslate
|
||||
x: Math.round((world.parent.width - world.width)/2)
|
||||
y: Math.round((world.parent.height - world.height)/2 +
|
||||
AttitudeActual.Pitch*world.parent.height/94)
|
||||
AttitudeState.Pitch*world.parent.height/94)
|
||||
},
|
||||
Rotation {
|
||||
angle: -AttitudeActual.Roll
|
||||
angle: -AttitudeState.Roll
|
||||
origin.x : world.parent.width/2
|
||||
origin.y : world.parent.height/2
|
||||
}
|
||||
|
@ -3,8 +3,8 @@ import Qt 4.7
|
||||
Item {
|
||||
id: sceneItem
|
||||
property variant sceneSize
|
||||
property real groundSpeed : 3.6 * Math.sqrt(Math.pow(VelocityActual.North,2)+
|
||||
Math.pow(VelocityActual.East,2))
|
||||
property real groundSpeed : 3.6 * Math.sqrt(Math.pow(VelocityState.North,2)+
|
||||
Math.pow(VelocityState.East,2))
|
||||
|
||||
SvgElementImage {
|
||||
id: speed_bg
|
||||
|
@ -20,7 +20,7 @@ Item {
|
||||
sceneSize: sceneItem.sceneSize
|
||||
|
||||
//the scale in 1000 ft/min with height == 5200 ft/min
|
||||
height: (-VelocityActual.Down*3.28*60/1000)*(vsi_scale.height/5.2)
|
||||
height: (-VelocityState.Down*3.28*60/1000)*(vsi_scale.height/5.2)
|
||||
|
||||
|
||||
anchors.bottom: parent.verticalCenter
|
||||
|
@ -1767,7 +1767,7 @@ p, li { white-space: pre-wrap; }
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>AttitudeActual</source>
|
||||
<source>AttitudeState</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
|
@ -1768,7 +1768,7 @@ p, li { white-space: pre-wrap; }
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>AttitudeActual</source>
|
||||
<source>AttitudeState</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
|
@ -1789,7 +1789,7 @@ p, li { white-space: pre-wrap; }
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>AttitudeActual</source>
|
||||
<source>AttitudeState</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
|
@ -1721,7 +1721,7 @@ Sat SNR is displayed above (in dBHz)</source>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>AttitudeActual</source>
|
||||
<source>AttitudeState</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
|
@ -2607,7 +2607,7 @@ Sat SNR is displayed above (in dBHz)</source>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>AttitudeActual</source>
|
||||
<source>AttitudeState</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
|
@ -33,8 +33,8 @@
|
||||
#include <QDebug>
|
||||
#include <QDesktopServices>
|
||||
#include <QUrl>
|
||||
#include "accels.h"
|
||||
#include "gyros.h"
|
||||
#include "accelstate.h"
|
||||
#include "gyrostate.h"
|
||||
#include <extensionsystem/pluginmanager.h>
|
||||
#include <coreplugin/generalsettings.h>
|
||||
|
||||
@ -80,26 +80,26 @@ void ConfigCCAttitudeWidget::sensorsUpdated(UAVObject *obj)
|
||||
return;
|
||||
}
|
||||
|
||||
Accels *accels = Accels::GetInstance(getObjectManager());
|
||||
Gyros *gyros = Gyros::GetInstance(getObjectManager());
|
||||
AccelState *accelState = AccelState::GetInstance(getObjectManager());
|
||||
GyroState *gyroState = GyroState::GetInstance(getObjectManager());
|
||||
|
||||
// Accumulate samples until we have _at least_ NUM_SENSOR_UPDATES samples
|
||||
// for both gyros and accels.
|
||||
// Note that, at present, we stash the samples and then compute the bias
|
||||
// at the end, even though the mean could be accumulated as we go.
|
||||
// In future, a better algorithm could be used.
|
||||
if (obj->getObjID() == Accels::OBJID) {
|
||||
if (obj->getObjID() == AccelState::OBJID) {
|
||||
accelUpdates++;
|
||||
Accels::DataFields accelsData = accels->getData();
|
||||
x_accum.append(accelsData.x);
|
||||
y_accum.append(accelsData.y);
|
||||
z_accum.append(accelsData.z);
|
||||
} else if (obj->getObjID() == Gyros::OBJID) {
|
||||
AccelState::DataFields accelStateData = accelState->getData();
|
||||
x_accum.append(accelStateData.x);
|
||||
y_accum.append(accelStateData.y);
|
||||
z_accum.append(accelStateData.z);
|
||||
} else if (obj->getObjID() == GyroState::OBJID) {
|
||||
gyroUpdates++;
|
||||
Gyros::DataFields gyrosData = gyros->getData();
|
||||
x_gyro_accum.append(gyrosData.x);
|
||||
y_gyro_accum.append(gyrosData.y);
|
||||
z_gyro_accum.append(gyrosData.z);
|
||||
GyroState::DataFields gyroStateData = gyroState->getData();
|
||||
x_gyro_accum.append(gyroStateData.x);
|
||||
y_gyro_accum.append(gyroStateData.y);
|
||||
z_gyro_accum.append(gyroStateData.z);
|
||||
}
|
||||
|
||||
// update the progress indicator
|
||||
@ -118,8 +118,8 @@ void ConfigCCAttitudeWidget::sensorsUpdated(UAVObject *obj)
|
||||
float x_gyro_bias = listMean(x_gyro_accum) * 100.0f;
|
||||
float y_gyro_bias = listMean(y_gyro_accum) * 100.0f;
|
||||
float z_gyro_bias = listMean(z_gyro_accum) * 100.0f;
|
||||
accels->setMetadata(initialAccelsMdata);
|
||||
gyros->setMetadata(initialGyrosMdata);
|
||||
accelState->setMetadata(initialAccelStateMdata);
|
||||
gyroState->setMetadata(initialGyroStateMdata);
|
||||
|
||||
AttitudeSettings::DataFields attitudeSettingsData = AttitudeSettings::GetInstance(getObjectManager())->getData();
|
||||
// We offset the gyro bias by current bias to help precision
|
||||
@ -140,15 +140,15 @@ void ConfigCCAttitudeWidget::sensorsUpdated(UAVObject *obj)
|
||||
|
||||
void ConfigCCAttitudeWidget::timeout()
|
||||
{
|
||||
UAVDataObject *obj = Accels::GetInstance(getObjectManager());
|
||||
UAVDataObject *obj = AccelState::GetInstance(getObjectManager());
|
||||
|
||||
disconnect(obj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(sensorsUpdated(UAVObject *)));
|
||||
disconnect(&timer, SIGNAL(timeout()), this, SLOT(timeout()));
|
||||
|
||||
Accels *accels = Accels::GetInstance(getObjectManager());
|
||||
Gyros *gyros = Gyros::GetInstance(getObjectManager());
|
||||
accels->setMetadata(initialAccelsMdata);
|
||||
gyros->setMetadata(initialGyrosMdata);
|
||||
AccelState *accelState = AccelState::GetInstance(getObjectManager());
|
||||
GyroState *gyroState = GyroState::GetInstance(getObjectManager());
|
||||
accelState->setMetadata(initialAccelStateMdata);
|
||||
gyroState->setMetadata(initialGyroStateMdata);
|
||||
|
||||
QMessageBox msgBox;
|
||||
msgBox.setText(tr("Calibration timed out before receiving required updates."));
|
||||
@ -182,28 +182,28 @@ void ConfigCCAttitudeWidget::startAccelCalibration()
|
||||
AttitudeSettings::GetInstance(getObjectManager())->setData(attitudeSettingsData);
|
||||
|
||||
// Set up to receive updates
|
||||
UAVDataObject *accels = Accels::GetInstance(getObjectManager());
|
||||
UAVDataObject *gyros = Gyros::GetInstance(getObjectManager());
|
||||
connect(accels, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(sensorsUpdated(UAVObject *)));
|
||||
connect(gyros, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(sensorsUpdated(UAVObject *)));
|
||||
UAVDataObject *accelState = AccelState::GetInstance(getObjectManager());
|
||||
UAVDataObject *gyroState = GyroState::GetInstance(getObjectManager());
|
||||
connect(accelState, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(sensorsUpdated(UAVObject *)));
|
||||
connect(gyroState, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(sensorsUpdated(UAVObject *)));
|
||||
|
||||
// Speed up updates
|
||||
initialAccelsMdata = accels->getMetadata();
|
||||
UAVObject::Metadata accelsMdata = initialAccelsMdata;
|
||||
UAVObject::SetFlightTelemetryUpdateMode(accelsMdata, UAVObject::UPDATEMODE_PERIODIC);
|
||||
accelsMdata.flightTelemetryUpdatePeriod = 30; // ms
|
||||
accels->setMetadata(accelsMdata);
|
||||
initialAccelStateMdata = accelState->getMetadata();
|
||||
UAVObject::Metadata accelStateMdata = initialAccelStateMdata;
|
||||
UAVObject::SetFlightTelemetryUpdateMode(accelStateMdata, UAVObject::UPDATEMODE_PERIODIC);
|
||||
accelStateMdata.flightTelemetryUpdatePeriod = 30; // ms
|
||||
accelState->setMetadata(accelStateMdata);
|
||||
|
||||
initialGyrosMdata = gyros->getMetadata();
|
||||
UAVObject::Metadata gyrosMdata = initialGyrosMdata;
|
||||
UAVObject::SetFlightTelemetryUpdateMode(gyrosMdata, UAVObject::UPDATEMODE_PERIODIC);
|
||||
gyrosMdata.flightTelemetryUpdatePeriod = 30; // ms
|
||||
gyros->setMetadata(gyrosMdata);
|
||||
initialGyroStateMdata = gyroState->getMetadata();
|
||||
UAVObject::Metadata gyroStateMdata = initialGyroStateMdata;
|
||||
UAVObject::SetFlightTelemetryUpdateMode(gyroStateMdata, UAVObject::UPDATEMODE_PERIODIC);
|
||||
gyroStateMdata.flightTelemetryUpdatePeriod = 30; // ms
|
||||
gyroState->setMetadata(gyroStateMdata);
|
||||
|
||||
// Set up timeout timer
|
||||
timer.setSingleShot(true);
|
||||
timer.start(5000 + (NUM_SENSOR_UPDATES * qMax(accelsMdata.flightTelemetryUpdatePeriod,
|
||||
gyrosMdata.flightTelemetryUpdatePeriod)));
|
||||
timer.start(5000 + (NUM_SENSOR_UPDATES * qMax(accelStateMdata.flightTelemetryUpdatePeriod,
|
||||
gyroStateMdata.flightTelemetryUpdatePeriod)));
|
||||
connect(&timer, SIGNAL(timeout()), this, SLOT(timeout()));
|
||||
}
|
||||
|
||||
|
@ -56,8 +56,8 @@ private slots:
|
||||
private:
|
||||
Ui_ccattitude *ui;
|
||||
QTimer timer;
|
||||
UAVObject::Metadata initialAccelsMdata;
|
||||
UAVObject::Metadata initialGyrosMdata;
|
||||
UAVObject::Metadata initialAccelStateMdata;
|
||||
UAVObject::Metadata initialGyroStateMdata;
|
||||
|
||||
int accelUpdates;
|
||||
int gyroUpdates;
|
||||
|
@ -44,9 +44,9 @@
|
||||
#include <ekfconfiguration.h>
|
||||
#include <revocalibration.h>
|
||||
#include <homelocation.h>
|
||||
#include <accels.h>
|
||||
#include <gyros.h>
|
||||
#include <magnetometer.h>
|
||||
#include <accelstate.h>
|
||||
#include <gyrostate.h>
|
||||
#include <magnetostate.h>
|
||||
|
||||
#define GRAVITY 9.81f
|
||||
#include "assertions.h"
|
||||
@ -297,26 +297,26 @@ void ConfigRevoWidget::doStartAccelGyroBiasCalibration()
|
||||
UAVObject::Metadata mdata;
|
||||
|
||||
/* Need to get as many accel updates as possible */
|
||||
Accels *accels = Accels::GetInstance(getObjectManager());
|
||||
Q_ASSERT(accels);
|
||||
initialAccelsMdata = accels->getMetadata();
|
||||
mdata = initialAccelsMdata;
|
||||
AccelState *accelState = AccelState::GetInstance(getObjectManager());
|
||||
Q_ASSERT(accelState);
|
||||
initialAccelStateMdata = accelState->getMetadata();
|
||||
mdata = initialAccelStateMdata;
|
||||
UAVObject::SetFlightTelemetryUpdateMode(mdata, UAVObject::UPDATEMODE_PERIODIC);
|
||||
mdata.flightTelemetryUpdatePeriod = 100;
|
||||
accels->setMetadata(mdata);
|
||||
accelState->setMetadata(mdata);
|
||||
|
||||
Gyros *gyros = Gyros::GetInstance(getObjectManager());
|
||||
Q_ASSERT(gyros);
|
||||
initialGyrosMdata = gyros->getMetadata();
|
||||
mdata = initialGyrosMdata;
|
||||
GyroState *gyroState = GyroState::GetInstance(getObjectManager());
|
||||
Q_ASSERT(gyroState);
|
||||
initialGyroStateMdata = gyroState->getMetadata();
|
||||
mdata = initialGyroStateMdata;
|
||||
UAVObject::SetFlightTelemetryUpdateMode(mdata, UAVObject::UPDATEMODE_PERIODIC);
|
||||
mdata.flightTelemetryUpdatePeriod = 100;
|
||||
gyros->setMetadata(mdata);
|
||||
gyroState->setMetadata(mdata);
|
||||
|
||||
// Now connect to the accels and mag updates, gather for 100 samples
|
||||
collectingData = true;
|
||||
connect(accels, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(doGetAccelGyroBiasData(UAVObject *)));
|
||||
connect(gyros, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(doGetAccelGyroBiasData(UAVObject *)));
|
||||
connect(accelState, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(doGetAccelGyroBiasData(UAVObject *)));
|
||||
connect(gyroState, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(doGetAccelGyroBiasData(UAVObject *)));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -329,26 +329,26 @@ void ConfigRevoWidget::doGetAccelGyroBiasData(UAVObject *obj)
|
||||
Q_UNUSED(lock);
|
||||
|
||||
switch (obj->getObjID()) {
|
||||
case Accels::OBJID:
|
||||
case AccelState::OBJID:
|
||||
{
|
||||
Accels *accels = Accels::GetInstance(getObjectManager());
|
||||
Q_ASSERT(accels);
|
||||
Accels::DataFields accelsData = accels->getData();
|
||||
AccelState *accelState = AccelState::GetInstance(getObjectManager());
|
||||
Q_ASSERT(accelState);
|
||||
AccelState::DataFields accelStateData = accelState->getData();
|
||||
|
||||
accel_accum_x.append(accelsData.x);
|
||||
accel_accum_y.append(accelsData.y);
|
||||
accel_accum_z.append(accelsData.z);
|
||||
accel_accum_x.append(accelStateData.x);
|
||||
accel_accum_y.append(accelStateData.y);
|
||||
accel_accum_z.append(accelStateData.z);
|
||||
break;
|
||||
}
|
||||
case Gyros::OBJID:
|
||||
case GyroState::OBJID:
|
||||
{
|
||||
Gyros *gyros = Gyros::GetInstance(getObjectManager());
|
||||
Q_ASSERT(gyros);
|
||||
Gyros::DataFields gyrosData = gyros->getData();
|
||||
GyroState *gyroState = GyroState::GetInstance(getObjectManager());
|
||||
Q_ASSERT(gyroState);
|
||||
GyroState::DataFields gyroStateData = gyroState->getData();
|
||||
|
||||
gyro_accum_x.append(gyrosData.x);
|
||||
gyro_accum_y.append(gyrosData.y);
|
||||
gyro_accum_z.append(gyrosData.z);
|
||||
gyro_accum_x.append(gyroStateData.x);
|
||||
gyro_accum_y.append(gyroStateData.y);
|
||||
gyro_accum_z.append(gyroStateData.z);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@ -365,11 +365,11 @@ void ConfigRevoWidget::doGetAccelGyroBiasData(UAVObject *obj)
|
||||
collectingData == true) {
|
||||
collectingData = false;
|
||||
|
||||
Accels *accels = Accels::GetInstance(getObjectManager());
|
||||
Gyros *gyros = Gyros::GetInstance(getObjectManager());
|
||||
AccelState *accelState = AccelState::GetInstance(getObjectManager());
|
||||
GyroState *gyroState = GyroState::GetInstance(getObjectManager());
|
||||
|
||||
disconnect(accels, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(doGetAccelGyroBiasData(UAVObject *)));
|
||||
disconnect(gyros, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(doGetAccelGyroBiasData(UAVObject *)));
|
||||
disconnect(accelState, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(doGetAccelGyroBiasData(UAVObject *)));
|
||||
disconnect(gyroState, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(doGetAccelGyroBiasData(UAVObject *)));
|
||||
|
||||
m_ui->accelBiasStart->setEnabled(true);
|
||||
|
||||
@ -396,8 +396,8 @@ void ConfigRevoWidget::doGetAccelGyroBiasData(UAVObject *obj)
|
||||
attitudeSettings->setData(attitudeSettingsData);
|
||||
attitudeSettings->updated();
|
||||
|
||||
accels->setMetadata(initialAccelsMdata);
|
||||
gyros->setMetadata(initialGyrosMdata);
|
||||
accelState->setMetadata(initialAccelStateMdata);
|
||||
gyroState->setMetadata(initialGyroStateMdata);
|
||||
|
||||
// Recall saved board rotation
|
||||
recallBoardRotation();
|
||||
@ -574,21 +574,21 @@ void ConfigRevoWidget::doStartSixPointCalibration()
|
||||
|
||||
#ifdef SIX_POINT_CAL_ACCEL
|
||||
/* Need to get as many accel updates as possible */
|
||||
Accels *accels = Accels::GetInstance(getObjectManager());
|
||||
Q_ASSERT(accels);
|
||||
AccelState *accelState = AccelState::GetInstance(getObjectManager());
|
||||
Q_ASSERT(accelState);
|
||||
|
||||
initialAccelsMdata = accels->getMetadata();
|
||||
mdata = initialAccelsMdata;
|
||||
initialAccelStateMdata = accelState->getMetadata();
|
||||
mdata = initialAccelStateMdata;
|
||||
UAVObject::SetFlightTelemetryUpdateMode(mdata, UAVObject::UPDATEMODE_PERIODIC);
|
||||
mdata.flightTelemetryUpdatePeriod = 100;
|
||||
accels->setMetadata(mdata);
|
||||
accelState->setMetadata(mdata);
|
||||
#endif
|
||||
|
||||
/* Need to get as many mag updates as possible */
|
||||
Magnetometer *mag = Magnetometer::GetInstance(getObjectManager());
|
||||
MagnetoState *mag = MagnetoState::GetInstance(getObjectManager());
|
||||
Q_ASSERT(mag);
|
||||
initialMagMdata = mag->getMetadata();
|
||||
mdata = initialMagMdata;
|
||||
initialMagnetoStateMdata = mag->getMetadata();
|
||||
mdata = initialMagnetoStateMdata;
|
||||
UAVObject::SetFlightTelemetryUpdateMode(mdata, UAVObject::UPDATEMODE_PERIODIC);
|
||||
mdata.flightTelemetryUpdatePeriod = 100;
|
||||
mag->setMetadata(mdata);
|
||||
@ -622,12 +622,12 @@ void ConfigRevoWidget::savePositionData()
|
||||
|
||||
collectingData = true;
|
||||
|
||||
Accels *accels = Accels::GetInstance(getObjectManager());
|
||||
Q_ASSERT(accels);
|
||||
Magnetometer *mag = Magnetometer::GetInstance(getObjectManager());
|
||||
AccelState *accelState = AccelState::GetInstance(getObjectManager());
|
||||
Q_ASSERT(accelState);
|
||||
MagnetoState *mag = MagnetoState::GetInstance(getObjectManager());
|
||||
Q_ASSERT(mag);
|
||||
|
||||
connect(accels, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(doGetSixPointCalibrationMeasurement(UAVObject *)));
|
||||
connect(accelState, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(doGetSixPointCalibrationMeasurement(UAVObject *)));
|
||||
connect(mag, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(doGetSixPointCalibrationMeasurement(UAVObject *)));
|
||||
|
||||
m_ui->sixPointCalibInstructions->append("Hold...");
|
||||
@ -644,19 +644,19 @@ void ConfigRevoWidget::doGetSixPointCalibrationMeasurement(UAVObject *obj)
|
||||
|
||||
// This is necessary to prevent a race condition on disconnect signal and another update
|
||||
if (collectingData == true) {
|
||||
if (obj->getObjID() == Accels::OBJID) {
|
||||
if (obj->getObjID() == AccelState::OBJID) {
|
||||
#ifdef SIX_POINT_CAL_ACCEL
|
||||
Accels *accels = Accels::GetInstance(getObjectManager());
|
||||
Q_ASSERT(accels);
|
||||
Accels::DataFields accelsData = accels->getData();
|
||||
accel_accum_x.append(accelsData.x);
|
||||
accel_accum_y.append(accelsData.y);
|
||||
accel_accum_z.append(accelsData.z);
|
||||
AccelState *accelState = AccelState::GetInstance(getObjectManager());
|
||||
Q_ASSERT(accelState);
|
||||
AccelState::DataFields accelStateData = accelState->getData();
|
||||
accel_accum_x.append(accelStateData.x);
|
||||
accel_accum_y.append(accelStateData.y);
|
||||
accel_accum_z.append(accelStateData.z);
|
||||
#endif
|
||||
} else if (obj->getObjID() == Magnetometer::OBJID) {
|
||||
Magnetometer *mag = Magnetometer::GetInstance(getObjectManager());
|
||||
} else if (obj->getObjID() == MagnetoState::OBJID) {
|
||||
MagnetoState *mag = MagnetoState::GetInstance(getObjectManager());
|
||||
Q_ASSERT(mag);
|
||||
Magnetometer::DataFields magData = mag->getData();
|
||||
MagnetoState::DataFields magData = mag->getData();
|
||||
mag_accum_x.append(magData.x);
|
||||
mag_accum_y.append(magData.y);
|
||||
mag_accum_z.append(magData.z);
|
||||
@ -676,16 +676,16 @@ void ConfigRevoWidget::doGetSixPointCalibrationMeasurement(UAVObject *obj)
|
||||
|
||||
#ifdef SIX_POINT_CAL_ACCEL
|
||||
// Store the mean for this position for the accel
|
||||
Accels *accels = Accels::GetInstance(getObjectManager());
|
||||
Q_ASSERT(accels);
|
||||
disconnect(accels, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(doGetSixPointCalibrationMeasurement(UAVObject *)));
|
||||
AccelState *accelState = AccelState::GetInstance(getObjectManager());
|
||||
Q_ASSERT(accelState);
|
||||
disconnect(accelState, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(doGetSixPointCalibrationMeasurement(UAVObject *)));
|
||||
accel_data_x[position] = listMean(accel_accum_x);
|
||||
accel_data_y[position] = listMean(accel_accum_y);
|
||||
accel_data_z[position] = listMean(accel_accum_z);
|
||||
#endif
|
||||
|
||||
// Store the mean for this position for the mag
|
||||
Magnetometer *mag = Magnetometer::GetInstance(getObjectManager());
|
||||
MagnetoState *mag = MagnetoState::GetInstance(getObjectManager());
|
||||
Q_ASSERT(mag);
|
||||
disconnect(mag, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(doGetSixPointCalibrationMeasurement(UAVObject *)));
|
||||
mag_data_x[position] = listMean(mag_accum_x);
|
||||
@ -720,9 +720,9 @@ void ConfigRevoWidget::doGetSixPointCalibrationMeasurement(UAVObject *obj)
|
||||
|
||||
/* Cleanup original settings */
|
||||
#ifdef SIX_POINT_CAL_ACCEL
|
||||
accels->setMetadata(initialAccelsMdata);
|
||||
accelState->setMetadata(initialAccelStateMdata);
|
||||
#endif
|
||||
mag->setMetadata(initialMagMdata);
|
||||
mag->setMetadata(initialMagnetoStateMdata);
|
||||
|
||||
// Recall saved board rotation
|
||||
recallBoardRotation();
|
||||
@ -924,36 +924,36 @@ void ConfigRevoWidget::doStartNoiseMeasurement()
|
||||
mag_accum_z.clear();
|
||||
|
||||
/* Need to get as many accel, mag and gyro updates as possible */
|
||||
Accels *accels = Accels::GetInstance(getObjectManager());
|
||||
Q_ASSERT(accels);
|
||||
Gyros *gyros = Gyros::GetInstance(getObjectManager());
|
||||
Q_ASSERT(gyros);
|
||||
Magnetometer *mag = Magnetometer::GetInstance(getObjectManager());
|
||||
AccelState *accelState = AccelState::GetInstance(getObjectManager());
|
||||
Q_ASSERT(accelState);
|
||||
GyroState *gyroState = GyroState::GetInstance(getObjectManager());
|
||||
Q_ASSERT(gyroState);
|
||||
MagnetoState *mag = MagnetoState::GetInstance(getObjectManager());
|
||||
Q_ASSERT(mag);
|
||||
|
||||
UAVObject::Metadata mdata;
|
||||
|
||||
initialAccelsMdata = accels->getMetadata();
|
||||
mdata = initialAccelsMdata;
|
||||
initialAccelStateMdata = accelState->getMetadata();
|
||||
mdata = initialAccelStateMdata;
|
||||
UAVObject::SetFlightTelemetryUpdateMode(mdata, UAVObject::UPDATEMODE_PERIODIC);
|
||||
mdata.flightTelemetryUpdatePeriod = 100;
|
||||
accels->setMetadata(mdata);
|
||||
accelState->setMetadata(mdata);
|
||||
|
||||
initialGyrosMdata = gyros->getMetadata();
|
||||
mdata = initialGyrosMdata;
|
||||
initialGyroStateMdata = gyroState->getMetadata();
|
||||
mdata = initialGyroStateMdata;
|
||||
UAVObject::SetFlightTelemetryUpdateMode(mdata, UAVObject::UPDATEMODE_PERIODIC);
|
||||
mdata.flightTelemetryUpdatePeriod = 100;
|
||||
gyros->setMetadata(mdata);
|
||||
gyroState->setMetadata(mdata);
|
||||
|
||||
initialMagMdata = mag->getMetadata();
|
||||
mdata = initialMagMdata;
|
||||
initialMagnetoStateMdata = mag->getMetadata();
|
||||
mdata = initialMagnetoStateMdata;
|
||||
UAVObject::SetFlightTelemetryUpdateMode(mdata, UAVObject::UPDATEMODE_PERIODIC);
|
||||
mdata.flightTelemetryUpdatePeriod = 100;
|
||||
mag->setMetadata(mdata);
|
||||
|
||||
/* Connect for updates */
|
||||
connect(accels, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(doGetNoiseSample(UAVObject *)));
|
||||
connect(gyros, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(doGetNoiseSample(UAVObject *)));
|
||||
connect(accelState, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(doGetNoiseSample(UAVObject *)));
|
||||
connect(gyroState, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(doGetNoiseSample(UAVObject *)));
|
||||
connect(mag, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(doGetNoiseSample(UAVObject *)));
|
||||
}
|
||||
|
||||
@ -970,31 +970,31 @@ void ConfigRevoWidget::doGetNoiseSample(UAVObject *obj)
|
||||
Q_ASSERT(obj);
|
||||
|
||||
switch (obj->getObjID()) {
|
||||
case Gyros::OBJID:
|
||||
case GyroState::OBJID:
|
||||
{
|
||||
Gyros *gyros = Gyros::GetInstance(getObjectManager());
|
||||
Q_ASSERT(gyros);
|
||||
Gyros::DataFields gyroData = gyros->getData();
|
||||
GyroState *gyroState = GyroState::GetInstance(getObjectManager());
|
||||
Q_ASSERT(gyroState);
|
||||
GyroState::DataFields gyroData = gyroState->getData();
|
||||
gyro_accum_x.append(gyroData.x);
|
||||
gyro_accum_y.append(gyroData.y);
|
||||
gyro_accum_z.append(gyroData.z);
|
||||
break;
|
||||
}
|
||||
case Accels::OBJID:
|
||||
case AccelState::OBJID:
|
||||
{
|
||||
Accels *accels = Accels::GetInstance(getObjectManager());
|
||||
Q_ASSERT(accels);
|
||||
Accels::DataFields accelsData = accels->getData();
|
||||
accel_accum_x.append(accelsData.x);
|
||||
accel_accum_y.append(accelsData.y);
|
||||
accel_accum_z.append(accelsData.z);
|
||||
AccelState *accelState = AccelState::GetInstance(getObjectManager());
|
||||
Q_ASSERT(accelState);
|
||||
AccelState::DataFields accelStateData = accelState->getData();
|
||||
accel_accum_x.append(accelStateData.x);
|
||||
accel_accum_y.append(accelStateData.y);
|
||||
accel_accum_z.append(accelStateData.z);
|
||||
break;
|
||||
}
|
||||
case Magnetometer::OBJID:
|
||||
case MagnetoState::OBJID:
|
||||
{
|
||||
Magnetometer *mags = Magnetometer::GetInstance(getObjectManager());
|
||||
MagnetoState *mags = MagnetoState::GetInstance(getObjectManager());
|
||||
Q_ASSERT(mags);
|
||||
Magnetometer::DataFields magData = mags->getData();
|
||||
MagnetoState::DataFields magData = mags->getData();
|
||||
mag_accum_x.append(magData.x);
|
||||
mag_accum_y.append(magData.y);
|
||||
mag_accum_z.append(magData.z);
|
||||
@ -1017,11 +1017,11 @@ void ConfigRevoWidget::doGetNoiseSample(UAVObject *obj)
|
||||
gyro_accum_x.length() >= NOISE_SAMPLES &&
|
||||
accel_accum_x.length() >= NOISE_SAMPLES) {
|
||||
// No need to for more updates
|
||||
Magnetometer *mags = Magnetometer::GetInstance(getObjectManager());
|
||||
Accels *accels = Accels::GetInstance(getObjectManager());
|
||||
Gyros *gyros = Gyros::GetInstance(getObjectManager());
|
||||
disconnect(accels, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(doGetNoiseSample(UAVObject *)));
|
||||
disconnect(gyros, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(doGetNoiseSample(UAVObject *)));
|
||||
MagnetoState *mags = MagnetoState::GetInstance(getObjectManager());
|
||||
AccelState *accelState = AccelState::GetInstance(getObjectManager());
|
||||
GyroState *gyroState = GyroState::GetInstance(getObjectManager());
|
||||
disconnect(accelState, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(doGetNoiseSample(UAVObject *)));
|
||||
disconnect(gyroState, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(doGetNoiseSample(UAVObject *)));
|
||||
disconnect(mags, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(doGetNoiseSample(UAVObject *)));
|
||||
|
||||
EKFConfiguration *ekfConfiguration = EKFConfiguration::GetInstance(getObjectManager());
|
||||
|
@ -90,10 +90,10 @@ private:
|
||||
double accel_data_x[6], accel_data_y[6], accel_data_z[6];
|
||||
double mag_data_x[6], mag_data_y[6], mag_data_z[6];
|
||||
|
||||
UAVObject::Metadata initialAccelsMdata;
|
||||
UAVObject::Metadata initialGyrosMdata;
|
||||
UAVObject::Metadata initialMagMdata;
|
||||
UAVObject::Metadata initialBaroMdata;
|
||||
UAVObject::Metadata initialAccelStateMdata;
|
||||
UAVObject::Metadata initialGyroStateMdata;
|
||||
UAVObject::Metadata initialMagnetoStateMdata;
|
||||
UAVObject::Metadata initialBaroSensorMdata;
|
||||
float initialMagCorrectionRate;
|
||||
|
||||
int position;
|
||||
|
@ -268,12 +268,12 @@ void FGSimulator::processUpdate(const QByteArray & inp)
|
||||
float temperature = fields[19].toFloat();
|
||||
// Get pressure (kpa)
|
||||
float pressure = fields[20].toFloat() * INHG2KPA;
|
||||
// Get VelocityActual Down (cm/s)
|
||||
float velocityActualDown = -fields[21].toFloat() * FPS2CMPS;
|
||||
// Get VelocityActual East (cm/s)
|
||||
float velocityActualEast = fields[22].toFloat() * FPS2CMPS;
|
||||
// Get VelocityActual Down (cm/s)
|
||||
float velocityActualNorth = fields[23].toFloat() * FPS2CMPS;
|
||||
// Get VelocityState Down (cm/s)
|
||||
float velocityStateDown = -fields[21].toFloat() * FPS2CMPS;
|
||||
// Get VelocityState East (cm/s)
|
||||
float velocityStateEast = fields[22].toFloat() * FPS2CMPS;
|
||||
// Get VelocityState Down (cm/s)
|
||||
float velocityStateNorth = fields[23].toFloat() * FPS2CMPS;
|
||||
|
||||
// Get UDP packets received by FG
|
||||
int n = fields[24].toInt();
|
||||
@ -307,11 +307,11 @@ void FGSimulator::processUpdate(const QByteArray & inp)
|
||||
out.calibratedAirspeed = airspeed;
|
||||
|
||||
|
||||
// Update BaroAltitude object
|
||||
// Update BaroSensor object
|
||||
out.temperature = temperature;
|
||||
out.pressure = pressure;
|
||||
|
||||
// Update attActual object
|
||||
// Update attState object
|
||||
out.roll = roll; // roll;
|
||||
out.pitch = pitch; // pitch
|
||||
out.heading = yaw; // yaw
|
||||
@ -320,10 +320,10 @@ void FGSimulator::processUpdate(const QByteArray & inp)
|
||||
out.dstE = NED[1];
|
||||
out.dstD = NED[2];
|
||||
|
||||
// Update VelocityActual.{North,East,Down}
|
||||
out.velNorth = velocityActualNorth;
|
||||
out.velEast = velocityActualEast;
|
||||
out.velDown = velocityActualDown;
|
||||
// Update VelocityState.{North,East,Down}
|
||||
out.velNorth = velocityStateNorth;
|
||||
out.velEast = velocityStateEast;
|
||||
out.velDown = velocityStateDown;
|
||||
|
||||
// Update gyroscope sensor data
|
||||
out.rollRate = rollRate;
|
||||
|
@ -31,40 +31,40 @@ HITLConfiguration::HITLConfiguration(QString classId, QSettings *qSettings, QObj
|
||||
IUAVGadgetConfiguration(classId, parent)
|
||||
{
|
||||
// Default settings values
|
||||
settings.simulatorId = "";
|
||||
settings.binPath = "";
|
||||
settings.dataPath = "";
|
||||
settings.manualControlEnabled = true;
|
||||
settings.startSim = false;
|
||||
settings.addNoise = false;
|
||||
settings.hostAddress = "127.0.0.1";
|
||||
settings.remoteAddress = "127.0.0.1";
|
||||
settings.outPort = 0;
|
||||
settings.simulatorId = "";
|
||||
settings.binPath = "";
|
||||
settings.dataPath = "";
|
||||
settings.manualControlEnabled = true;
|
||||
settings.startSim = false;
|
||||
settings.addNoise = false;
|
||||
settings.hostAddress = "127.0.0.1";
|
||||
settings.remoteAddress = "127.0.0.1";
|
||||
settings.outPort = 0;
|
||||
settings.inPort = 0;
|
||||
settings.latitude = "";
|
||||
settings.longitude = "";
|
||||
settings.latitude = "";
|
||||
settings.longitude = "";
|
||||
|
||||
settings.attRawEnabled = false;
|
||||
settings.attRawRate = 20;
|
||||
settings.attRawEnabled = false;
|
||||
settings.attRawRate = 20;
|
||||
|
||||
settings.attActualEnabled = true;
|
||||
settings.attActHW = false;
|
||||
settings.attActSim = true;
|
||||
settings.attActCalc = false;
|
||||
settings.attStateEnabled = true;
|
||||
settings.attActHW = false;
|
||||
settings.attActSim = true;
|
||||
settings.attActCalc = false;
|
||||
|
||||
settings.gpsPositionEnabled = false;
|
||||
settings.gpsPosRate = 100;
|
||||
settings.gpsPositionEnabled = false;
|
||||
settings.gpsPosRate = 100;
|
||||
|
||||
settings.groundTruthEnabled = false;
|
||||
settings.groundTruthRate = 100;
|
||||
settings.groundTruthEnabled = false;
|
||||
settings.groundTruthRate = 100;
|
||||
|
||||
settings.inputCommand = false;
|
||||
settings.gcsReceiverEnabled = false;
|
||||
settings.manualControlEnabled = false;
|
||||
settings.minOutputPeriod = 100;
|
||||
settings.inputCommand = false;
|
||||
settings.gcsReceiverEnabled = false;
|
||||
settings.manualControlEnabled = false;
|
||||
settings.minOutputPeriod = 100;
|
||||
|
||||
settings.airspeedActualEnabled = false;
|
||||
settings.airspeedActualRate = 100;
|
||||
settings.airspeedStateEnabled = false;
|
||||
settings.airspeedStateRate = 100;
|
||||
|
||||
|
||||
// if a saved configuration exists load it, and overwrite defaults
|
||||
@ -86,28 +86,28 @@ HITLConfiguration::HITLConfiguration(QString classId, QSettings *qSettings, QObj
|
||||
settings.gcsReceiverEnabled = qSettings->value("gcsReceiverEnabled").toBool();
|
||||
settings.manualControlEnabled = qSettings->value("manualControlEnabled").toBool();
|
||||
|
||||
settings.attRawEnabled = qSettings->value("attRawEnabled").toBool();
|
||||
settings.attRawRate = qSettings->value("attRawRate").toInt();
|
||||
settings.attRawEnabled = qSettings->value("attRawEnabled").toBool();
|
||||
settings.attRawRate = qSettings->value("attRawRate").toInt();
|
||||
|
||||
settings.attActualEnabled = qSettings->value("attActualEnabled").toBool();
|
||||
settings.attStateEnabled = qSettings->value("attStateEnabled").toBool();
|
||||
settings.attActHW = qSettings->value("attActHW").toBool();
|
||||
settings.attActSim = qSettings->value("attActSim").toBool();
|
||||
settings.attActCalc = qSettings->value("attActCalc").toBool();
|
||||
settings.attActCalc = qSettings->value("attActCalc").toBool();
|
||||
|
||||
settings.baroAltitudeEnabled = qSettings->value("baroAltitudeEnabled").toBool();
|
||||
settings.baroAltRate = qSettings->value("baroAltRate").toInt();
|
||||
settings.baroSensorEnabled = qSettings->value("baroSensorEnabled").toBool();
|
||||
settings.baroAltRate = qSettings->value("baroAltRate").toInt();
|
||||
|
||||
settings.gpsPositionEnabled = qSettings->value("gpsPositionEnabled").toBool();
|
||||
settings.gpsPosRate = qSettings->value("gpsPosRate").toInt();
|
||||
settings.gpsPositionEnabled = qSettings->value("gpsPositionEnabled").toBool();
|
||||
settings.gpsPosRate = qSettings->value("gpsPosRate").toInt();
|
||||
|
||||
settings.groundTruthEnabled = qSettings->value("groundTruthEnabled").toBool();
|
||||
settings.groundTruthRate = qSettings->value("groundTruthRate").toInt();
|
||||
settings.groundTruthEnabled = qSettings->value("groundTruthEnabled").toBool();
|
||||
settings.groundTruthRate = qSettings->value("groundTruthRate").toInt();
|
||||
|
||||
settings.inputCommand = qSettings->value("inputCommand").toBool();
|
||||
settings.minOutputPeriod = qSettings->value("minOutputPeriod").toInt();
|
||||
settings.inputCommand = qSettings->value("inputCommand").toBool();
|
||||
settings.minOutputPeriod = qSettings->value("minOutputPeriod").toInt();
|
||||
|
||||
settings.airspeedActualEnabled = qSettings->value("airspeedActualEnabled").toBool();
|
||||
settings.airspeedActualRate = qSettings->value("airspeedActualRate").toInt();
|
||||
settings.airspeedStateEnabled = qSettings->value("airspeedStateEnabled").toBool();
|
||||
settings.airspeedStateRate = qSettings->value("airspeedStateRate").toInt();
|
||||
}
|
||||
}
|
||||
|
||||
@ -144,11 +144,11 @@ void HITLConfiguration::saveConfig(QSettings *qSettings) const
|
||||
|
||||
qSettings->setValue("attRawEnabled", settings.attRawEnabled);
|
||||
qSettings->setValue("attRawRate", settings.attRawRate);
|
||||
qSettings->setValue("attActualEnabled", settings.attActualEnabled);
|
||||
qSettings->setValue("attStateEnabled", settings.attStateEnabled);
|
||||
qSettings->setValue("attActHW", settings.attActHW);
|
||||
qSettings->setValue("attActSim", settings.attActSim);
|
||||
qSettings->setValue("attActCalc", settings.attActCalc);
|
||||
qSettings->setValue("baroAltitudeEnabled", settings.baroAltitudeEnabled);
|
||||
qSettings->setValue("baroSensorEnabled", settings.baroSensorEnabled);
|
||||
qSettings->setValue("baroAltRate", settings.baroAltRate);
|
||||
qSettings->setValue("gpsPositionEnabled", settings.gpsPositionEnabled);
|
||||
qSettings->setValue("gpsPosRate", settings.gpsPosRate);
|
||||
@ -157,6 +157,6 @@ void HITLConfiguration::saveConfig(QSettings *qSettings) const
|
||||
qSettings->setValue("inputCommand", settings.inputCommand);
|
||||
qSettings->setValue("minOutputPeriod", settings.minOutputPeriod);
|
||||
|
||||
qSettings->setValue("airspeedActualEnabled", settings.airspeedActualEnabled);
|
||||
qSettings->setValue("airspeedActualRate", settings.airspeedActualRate);
|
||||
qSettings->setValue("airspeedStateEnabled", settings.airspeedStateEnabled);
|
||||
qSettings->setValue("airspeedStateRate", settings.airspeedStateRate);
|
||||
}
|
||||
|
@ -44,9 +44,9 @@ Noise HitlNoiseGeneration::getNoise()
|
||||
|
||||
Noise HitlNoiseGeneration::generateNoise()
|
||||
{
|
||||
noise.accelData.x = 0;
|
||||
noise.accelData.y = 0;
|
||||
noise.accelData.z = 0;
|
||||
noise.accelStateData.x = 0;
|
||||
noise.accelStateData.y = 0;
|
||||
noise.accelStateData.z = 0;
|
||||
|
||||
noise.gpsPosData.Latitude = 0;
|
||||
noise.gpsPosData.Longitude = 0;
|
||||
@ -54,25 +54,25 @@ Noise HitlNoiseGeneration::generateNoise()
|
||||
noise.gpsPosData.Heading = 0;
|
||||
noise.gpsPosData.Altitude = 0;
|
||||
|
||||
noise.gpsVelData.North = 0;
|
||||
noise.gpsVelData.East = 0;
|
||||
noise.gpsVelData.Down = 0;
|
||||
noise.gpsVelData.North = 0;
|
||||
noise.gpsVelData.East = 0;
|
||||
noise.gpsVelData.Down = 0;
|
||||
|
||||
noise.baroAltData.Altitude = 0;
|
||||
|
||||
noise.attActualData.Roll = 0;
|
||||
noise.attActualData.Pitch = 0;
|
||||
noise.attActualData.Yaw = 0;
|
||||
noise.attStateData.Roll = 0;
|
||||
noise.attStateData.Pitch = 0;
|
||||
noise.attStateData.Yaw = 0;
|
||||
|
||||
noise.gyroData.x = 0;
|
||||
noise.gyroData.y = 0;
|
||||
noise.gyroData.z = 0;
|
||||
noise.gyroStateData.x = 0;
|
||||
noise.gyroStateData.y = 0;
|
||||
noise.gyroStateData.z = 0;
|
||||
|
||||
noise.accelData.x = 0;
|
||||
noise.accelData.y = 0;
|
||||
noise.accelData.z = 0;
|
||||
noise.accelStateData.x = 0;
|
||||
noise.accelStateData.y = 0;
|
||||
noise.accelStateData.z = 0;
|
||||
|
||||
noise.airspeedActual.CalibratedAirspeed = 0;
|
||||
noise.airspeedState.CalibratedAirspeed = 0;
|
||||
|
||||
return noise;
|
||||
}
|
||||
|
@ -37,16 +37,16 @@
|
||||
#include <coreplugin/threadmanager.h>
|
||||
|
||||
struct Noise {
|
||||
Accels::DataFields accelData;
|
||||
AttitudeActual::DataFields attActualData;
|
||||
BaroAltitude::DataFields baroAltData;
|
||||
AirspeedActual::DataFields airspeedActual;
|
||||
GPSPosition::DataFields gpsPosData;
|
||||
GPSVelocity::DataFields gpsVelData;
|
||||
Gyros::DataFields gyroData;
|
||||
HomeLocation::DataFields homeData;
|
||||
PositionActual::DataFields positionActualData;
|
||||
VelocityActual::DataFields velocityActualData;
|
||||
AccelState::DataFields accelStateData;
|
||||
AttitudeState::DataFields attStateData;
|
||||
BaroSensor::DataFields baroAltData;
|
||||
AirspeedState::DataFields airspeedState;
|
||||
GPSPosition::DataFields gpsPosData;
|
||||
GPSVelocity::DataFields gpsVelData;
|
||||
GyroState::DataFields gyroStateData;
|
||||
HomeLocation::DataFields homeData;
|
||||
PositionState::DataFields positionStateData;
|
||||
VelocityState::DataFields velocityStateData;
|
||||
};
|
||||
|
||||
class HitlNoiseGeneration {
|
||||
|
@ -92,16 +92,16 @@ QWidget *HITLOptionsPage::createPage(QWidget *parent)
|
||||
|
||||
m_optionsPage->groundTruthCheckbox->setChecked(config->Settings().groundTruthEnabled);
|
||||
m_optionsPage->gpsPositionCheckbox->setChecked(config->Settings().gpsPositionEnabled);
|
||||
m_optionsPage->attActualCheckbox->setChecked(config->Settings().attActualEnabled);
|
||||
m_optionsPage->attStateCheckbox->setChecked(config->Settings().attStateEnabled);
|
||||
m_optionsPage->attRawCheckbox->setChecked(config->Settings().attRawEnabled);
|
||||
|
||||
|
||||
m_optionsPage->attRawRateSpinbox->setValue(config->Settings().attRawRate);
|
||||
m_optionsPage->gpsPosRateSpinbox->setValue(config->Settings().gpsPosRate);
|
||||
m_optionsPage->groundTruthRateSpinbox->setValue(config->Settings().groundTruthRate);
|
||||
// m_optionsPage->attActualRate->setValue(config->Settings().attActualRate);
|
||||
// m_optionsPage->attStateRate->setValue(config->Settings().attStateRate);
|
||||
|
||||
m_optionsPage->baroAltitudeCheckbox->setChecked(config->Settings().baroAltitudeEnabled);
|
||||
m_optionsPage->baroAltitudeCheckbox->setChecked(config->Settings().baroSensorEnabled);
|
||||
m_optionsPage->baroAltRateSpinbox->setValue(config->Settings().baroAltRate);
|
||||
|
||||
m_optionsPage->minOutputPeriodSpinbox->setValue(config->Settings().minOutputPeriod);
|
||||
@ -110,8 +110,8 @@ QWidget *HITLOptionsPage::createPage(QWidget *parent)
|
||||
m_optionsPage->attActCalc->setChecked(config->Settings().attActCalc);
|
||||
m_optionsPage->attActSim->setChecked(config->Settings().attActSim);
|
||||
|
||||
m_optionsPage->airspeedActualCheckbox->setChecked(config->Settings().airspeedActualEnabled);
|
||||
m_optionsPage->airspeedRateSpinbox->setValue(config->Settings().airspeedActualRate);
|
||||
m_optionsPage->airspeedStateCheckbox->setChecked(config->Settings().airspeedStateEnabled);
|
||||
m_optionsPage->airspeedRateSpinbox->setValue(config->Settings().airspeedStateRate);
|
||||
|
||||
return optionsPageWidget;
|
||||
}
|
||||
@ -121,46 +121,46 @@ void HITLOptionsPage::apply()
|
||||
SimulatorSettings settings;
|
||||
int i = m_optionsPage->chooseFlightSimulator->currentIndex();
|
||||
|
||||
settings.simulatorId = m_optionsPage->chooseFlightSimulator->itemData(i).toString();
|
||||
settings.binPath = m_optionsPage->executablePath->path();
|
||||
settings.dataPath = m_optionsPage->dataPath->path();
|
||||
settings.startSim = m_optionsPage->startSim->isChecked();
|
||||
settings.addNoise = m_optionsPage->noiseCheckBox->isChecked();
|
||||
settings.hostAddress = m_optionsPage->hostAddress->text();
|
||||
settings.remoteAddress = m_optionsPage->remoteAddress->text();
|
||||
settings.simulatorId = m_optionsPage->chooseFlightSimulator->itemData(i).toString();
|
||||
settings.binPath = m_optionsPage->executablePath->path();
|
||||
settings.dataPath = m_optionsPage->dataPath->path();
|
||||
settings.startSim = m_optionsPage->startSim->isChecked();
|
||||
settings.addNoise = m_optionsPage->noiseCheckBox->isChecked();
|
||||
settings.hostAddress = m_optionsPage->hostAddress->text();
|
||||
settings.remoteAddress = m_optionsPage->remoteAddress->text();
|
||||
|
||||
settings.inPort = m_optionsPage->inputPort->text().toInt();
|
||||
settings.outPort = m_optionsPage->outputPort->text().toInt();
|
||||
settings.longitude = m_optionsPage->longitude->text();
|
||||
settings.latitude = m_optionsPage->latitude->text();
|
||||
settings.outPort = m_optionsPage->outputPort->text().toInt();
|
||||
settings.longitude = m_optionsPage->longitude->text();
|
||||
settings.latitude = m_optionsPage->latitude->text();
|
||||
|
||||
settings.addNoise = m_optionsPage->noiseCheckBox->isChecked();
|
||||
settings.addNoise = m_optionsPage->noiseCheckBox->isChecked();
|
||||
|
||||
settings.attRawEnabled = m_optionsPage->attRawCheckbox->isChecked();
|
||||
settings.attRawRate = m_optionsPage->attRawRateSpinbox->value();
|
||||
settings.attRawEnabled = m_optionsPage->attRawCheckbox->isChecked();
|
||||
settings.attRawRate = m_optionsPage->attRawRateSpinbox->value();
|
||||
|
||||
settings.attActualEnabled = m_optionsPage->attActualCheckbox->isChecked();
|
||||
settings.attStateEnabled = m_optionsPage->attStateCheckbox->isChecked();
|
||||
|
||||
settings.gpsPositionEnabled = m_optionsPage->gpsPositionCheckbox->isChecked();
|
||||
settings.gpsPosRate = m_optionsPage->gpsPosRateSpinbox->value();
|
||||
settings.gpsPositionEnabled = m_optionsPage->gpsPositionCheckbox->isChecked();
|
||||
settings.gpsPosRate = m_optionsPage->gpsPosRateSpinbox->value();
|
||||
|
||||
settings.groundTruthEnabled = m_optionsPage->groundTruthCheckbox->isChecked();
|
||||
settings.groundTruthRate = m_optionsPage->groundTruthRateSpinbox->value();
|
||||
settings.groundTruthEnabled = m_optionsPage->groundTruthCheckbox->isChecked();
|
||||
settings.groundTruthRate = m_optionsPage->groundTruthRateSpinbox->value();
|
||||
|
||||
settings.baroAltitudeEnabled = m_optionsPage->baroAltitudeCheckbox->isChecked();
|
||||
settings.baroAltRate = m_optionsPage->baroAltRateSpinbox->value();
|
||||
settings.baroSensorEnabled = m_optionsPage->baroAltitudeCheckbox->isChecked();
|
||||
settings.baroAltRate = m_optionsPage->baroAltRateSpinbox->value();
|
||||
|
||||
settings.minOutputPeriod = m_optionsPage->minOutputPeriodSpinbox->value();
|
||||
settings.minOutputPeriod = m_optionsPage->minOutputPeriodSpinbox->value();
|
||||
|
||||
settings.manualControlEnabled = m_optionsPage->manualControlRadioButton->isChecked();
|
||||
settings.gcsReceiverEnabled = m_optionsPage->gcsReceiverRadioButton->isChecked();
|
||||
settings.manualControlEnabled = m_optionsPage->manualControlRadioButton->isChecked();
|
||||
settings.gcsReceiverEnabled = m_optionsPage->gcsReceiverRadioButton->isChecked();
|
||||
|
||||
settings.attActHW = m_optionsPage->attActHW->isChecked();
|
||||
settings.attActSim = m_optionsPage->attActSim->isChecked();
|
||||
settings.attActCalc = m_optionsPage->attActCalc->isChecked();
|
||||
settings.attActHW = m_optionsPage->attActHW->isChecked();
|
||||
settings.attActSim = m_optionsPage->attActSim->isChecked();
|
||||
settings.attActCalc = m_optionsPage->attActCalc->isChecked();
|
||||
|
||||
settings.airspeedActualEnabled = m_optionsPage->airspeedActualCheckbox->isChecked();
|
||||
settings.airspeedActualRate = m_optionsPage->airspeedRateSpinbox->value();
|
||||
settings.airspeedStateEnabled = m_optionsPage->airspeedStateCheckbox->isChecked();
|
||||
settings.airspeedStateRate = m_optionsPage->airspeedRateSpinbox->value();
|
||||
|
||||
// Write settings to file
|
||||
config->setSimulatorSettings(settings);
|
||||
|
@ -510,12 +510,12 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="attActualCheckbox">
|
||||
<widget class="QGroupBox" name="attStateCheckbox">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>AttitudeActual</string>
|
||||
<string>AttitudeState</string>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>true</bool>
|
||||
@ -760,7 +760,7 @@
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="airspeedActualCheckbox">
|
||||
<widget class="QGroupBox" name="airspeedStateCheckbox">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
@ -768,7 +768,7 @@
|
||||
</size>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>AirspeedActual</string>
|
||||
<string>AirspeedState</string>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>true</bool>
|
||||
|
@ -262,20 +262,20 @@ void IL2Simulator::processUpdate(const QByteArray & inp)
|
||||
out.dstE = current.X;
|
||||
out.dstD = -current.Z;
|
||||
|
||||
// Update BaroAltitude object
|
||||
// Update BaroSensor object
|
||||
out.altitude = current.Z;
|
||||
out.agl = current.Z;
|
||||
out.temperature = airParameters.groundTemp + (current.Z * airParameters.tempLapseRate) - 273.0;
|
||||
out.pressure = airPressureFromAltitude(current.Z, airParameters, gravity); // kpa
|
||||
|
||||
|
||||
// Update attActual object
|
||||
// Update attState object
|
||||
out.roll = current.roll; // roll;
|
||||
out.pitch = current.pitch; // pitch
|
||||
out.heading = current.azimuth; // yaw
|
||||
|
||||
|
||||
// Update VelocityActual.{North,East,Down}
|
||||
// Update VelocityState.{North,East,Down}
|
||||
out.velNorth = current.dY;
|
||||
out.velEast = current.dX;
|
||||
out.velDown = -current.dZ;
|
||||
|
@ -9,10 +9,10 @@
|
||||
#include "uavtalk/telemetrymanager.h"
|
||||
#include "uavobjectmanager.h"
|
||||
#include "actuatordesired.h"
|
||||
#include "altitudeactual.h"
|
||||
#include "attitudeactual.h"
|
||||
#include "velocityactual.h"
|
||||
#include "positionactual.h"
|
||||
#include "altitudestate.h"
|
||||
#include "attitudestate.h"
|
||||
#include "velocitystate.h"
|
||||
#include "positionstate.h"
|
||||
#include "gcstelemetrystats.h"
|
||||
|
||||
class Simulator : public QObject {
|
||||
@ -48,10 +48,10 @@ private:
|
||||
QUdpSocket *inSocket;
|
||||
QUdpSocket *outSocket;
|
||||
ActuatorDesired *actDesired;
|
||||
AltitudeActual *altActual;
|
||||
VelocityActual *velActual;
|
||||
AttitudeActual *attActual;
|
||||
PositionActual *posActual;
|
||||
AltitudeState *altState;
|
||||
VelocityState *velState;
|
||||
AttitudeState *attState;
|
||||
PositionState *posState;
|
||||
GCSTelemetryStats *telStats;
|
||||
QHostAddress fgHost;
|
||||
int inPort;
|
||||
|
@ -64,13 +64,13 @@ Simulator::Simulator(const SimulatorSettings & params) :
|
||||
emit myStart();
|
||||
|
||||
QTime currentTime = QTime::currentTime();
|
||||
gpsPosTime = currentTime;
|
||||
groundTruthTime = currentTime;
|
||||
gcsRcvrTime = currentTime;
|
||||
attRawTime = currentTime;
|
||||
baroAltTime = currentTime;
|
||||
gpsPosTime = currentTime;
|
||||
groundTruthTime = currentTime;
|
||||
gcsRcvrTime = currentTime;
|
||||
attRawTime = currentTime;
|
||||
baroAltTime = currentTime;
|
||||
battTime = currentTime;
|
||||
airspeedActualTime = currentTime;
|
||||
airspeedStateTime = currentTime;
|
||||
|
||||
// Define standard atmospheric constants
|
||||
airParameters.univGasConstant = 8.31447; // [J/(mol·K)]
|
||||
@ -146,20 +146,20 @@ void Simulator::onStart()
|
||||
manCtrlCommand = ManualControlCommand::GetInstance(objManager);
|
||||
gcsReceiver = GCSReceiver::GetInstance(objManager);
|
||||
flightStatus = FlightStatus::GetInstance(objManager);
|
||||
posHome = HomeLocation::GetInstance(objManager);
|
||||
velActual = VelocityActual::GetInstance(objManager);
|
||||
posActual = PositionActual::GetInstance(objManager);
|
||||
baroAlt = BaroAltitude::GetInstance(objManager);
|
||||
flightBatt = FlightBatteryState::GetInstance(objManager);
|
||||
airspeedActual = AirspeedActual::GetInstance(objManager);
|
||||
attActual = AttitudeActual::GetInstance(objManager);
|
||||
attSettings = AttitudeSettings::GetInstance(objManager);
|
||||
accels = Accels::GetInstance(objManager);
|
||||
gyros = Gyros::GetInstance(objManager);
|
||||
gpsPos = GPSPosition::GetInstance(objManager);
|
||||
gpsVel = GPSVelocity::GetInstance(objManager);
|
||||
telStats = GCSTelemetryStats::GetInstance(objManager);
|
||||
groundTruth = GroundTruth::GetInstance(objManager);
|
||||
posHome = HomeLocation::GetInstance(objManager);
|
||||
velState = VelocityState::GetInstance(objManager);
|
||||
posState = PositionState::GetInstance(objManager);
|
||||
baroAlt = BaroSensor::GetInstance(objManager);
|
||||
flightBatt = FlightBatteryState::GetInstance(objManager);
|
||||
airspeedState = AirspeedState::GetInstance(objManager);
|
||||
attState = AttitudeState::GetInstance(objManager);
|
||||
attSettings = AttitudeSettings::GetInstance(objManager);
|
||||
accelState = AccelState::GetInstance(objManager);
|
||||
gyroState = GyroState::GetInstance(objManager);
|
||||
gpsPos = GPSPosition::GetInstance(objManager);
|
||||
gpsVel = GPSVelocity::GetInstance(objManager);
|
||||
telStats = GCSTelemetryStats::GetInstance(objManager);
|
||||
groundTruth = GroundTruth::GetInstance(objManager);
|
||||
|
||||
// Listen to autopilot connection events
|
||||
TelemetryManager *telMngr = pm->getObject<TelemetryManager>();
|
||||
@ -257,30 +257,30 @@ void Simulator::setupObjects()
|
||||
}
|
||||
|
||||
if (settings.groundTruthEnabled) {
|
||||
setupOutputObject(posActual, settings.groundTruthRate);
|
||||
setupOutputObject(velActual, settings.groundTruthRate);
|
||||
setupOutputObject(posState, settings.groundTruthRate);
|
||||
setupOutputObject(velState, settings.groundTruthRate);
|
||||
}
|
||||
|
||||
if (settings.attRawEnabled) {
|
||||
setupOutputObject(accels, settings.attRawRate);
|
||||
setupOutputObject(gyros, settings.attRawRate);
|
||||
setupOutputObject(accelState, settings.attRawRate);
|
||||
setupOutputObject(gyroState, settings.attRawRate);
|
||||
}
|
||||
|
||||
if (settings.attActualEnabled && settings.attActHW) {
|
||||
setupOutputObject(accels, settings.attRawRate);
|
||||
setupOutputObject(gyros, settings.attRawRate);
|
||||
if (settings.attStateEnabled && settings.attActHW) {
|
||||
setupOutputObject(accelState, settings.attRawRate);
|
||||
setupOutputObject(gyroState, settings.attRawRate);
|
||||
}
|
||||
|
||||
if (settings.attActualEnabled && !settings.attActHW) {
|
||||
setupOutputObject(attActual, 20); // Hardcoded? Bleh.
|
||||
if (settings.attStateEnabled && !settings.attActHW) {
|
||||
setupOutputObject(attState, 20); // Hardcoded? Bleh.
|
||||
} else {
|
||||
setupWatchedObject(attActual, 100); // Hardcoded? Bleh.
|
||||
setupWatchedObject(attState, 100); // Hardcoded? Bleh.
|
||||
}
|
||||
if (settings.airspeedActualEnabled) {
|
||||
setupOutputObject(airspeedActual, settings.airspeedActualRate);
|
||||
if (settings.airspeedStateEnabled) {
|
||||
setupOutputObject(airspeedState, settings.airspeedStateRate);
|
||||
}
|
||||
|
||||
if (settings.baroAltitudeEnabled) {
|
||||
if (settings.baroSensorEnabled) {
|
||||
setupOutputObject(baroAlt, settings.baroAltRate);
|
||||
setupOutputObject(flightBatt, settings.baroAltRate);
|
||||
}
|
||||
@ -462,31 +462,31 @@ void Simulator::updateUAVOs(Output2Hardware out)
|
||||
groundTruth->setData(groundTruthData);
|
||||
|
||||
/*******************************/
|
||||
// Update attActual object
|
||||
AttitudeActual::DataFields attActualData;
|
||||
attActualData = attActual->getData();
|
||||
// Update attState object
|
||||
AttitudeState::DataFields attStateData;
|
||||
attStateData = attState->getData();
|
||||
|
||||
if (settings.attActHW) {
|
||||
// do nothing
|
||||
/*****************************************/
|
||||
} else if (settings.attActSim) {
|
||||
// take all data from simulator
|
||||
attActualData.Roll = out.roll + noise.attActualData.Roll; // roll;
|
||||
attActualData.Pitch = out.pitch + noise.attActualData.Pitch; // pitch
|
||||
attActualData.Yaw = out.heading + noise.attActualData.Yaw; // Yaw
|
||||
attStateData.Roll = out.roll + noise.attStateData.Roll; // roll;
|
||||
attStateData.Pitch = out.pitch + noise.attStateData.Pitch; // pitch
|
||||
attStateData.Yaw = out.heading + noise.attStateData.Yaw; // Yaw
|
||||
float rpy[3];
|
||||
float quat[4];
|
||||
rpy[0] = attActualData.Roll;
|
||||
rpy[1] = attActualData.Pitch;
|
||||
rpy[2] = attActualData.Yaw;
|
||||
rpy[0] = attStateData.Roll;
|
||||
rpy[1] = attStateData.Pitch;
|
||||
rpy[2] = attStateData.Yaw;
|
||||
Utils::CoordinateConversions().RPY2Quaternion(rpy, quat);
|
||||
attActualData.q1 = quat[0];
|
||||
attActualData.q2 = quat[1];
|
||||
attActualData.q3 = quat[2];
|
||||
attActualData.q4 = quat[3];
|
||||
attStateData.q1 = quat[0];
|
||||
attStateData.q2 = quat[1];
|
||||
attStateData.q3 = quat[2];
|
||||
attStateData.q4 = quat[3];
|
||||
|
||||
// Set UAVO
|
||||
attActual->setData(attActualData);
|
||||
attState->setData(attStateData);
|
||||
/*****************************************/
|
||||
} else if (settings.attActCalc) {
|
||||
// calculate RPY with code from Attitude module
|
||||
@ -598,16 +598,16 @@ void Simulator::updateUAVOs(Output2Hardware out)
|
||||
rpy2[0] = RAD2DEG * atan2f(R23, R33);
|
||||
}
|
||||
|
||||
attActualData.Roll = rpy2[0];
|
||||
attActualData.Pitch = rpy2[1];
|
||||
attActualData.Yaw = rpy2[2];
|
||||
attActualData.q1 = q[0];
|
||||
attActualData.q2 = q[1];
|
||||
attActualData.q3 = q[2];
|
||||
attActualData.q4 = q[3];
|
||||
attStateData.Roll = rpy2[0];
|
||||
attStateData.Pitch = rpy2[1];
|
||||
attStateData.Yaw = rpy2[2];
|
||||
attStateData.q1 = q[0];
|
||||
attStateData.q2 = q[1];
|
||||
attStateData.q3 = q[2];
|
||||
attStateData.q4 = q[3];
|
||||
|
||||
// Set UAVO
|
||||
attActual->setData(attActualData);
|
||||
attState->setData(attStateData);
|
||||
/*****************************************/
|
||||
}
|
||||
|
||||
@ -662,23 +662,23 @@ void Simulator::updateUAVOs(Output2Hardware out)
|
||||
}
|
||||
|
||||
/*******************************/
|
||||
// Update VelocityActual.{North,East,Down}
|
||||
// Update VelocityState.{North,East,Down}
|
||||
if (settings.groundTruthEnabled) {
|
||||
if (groundTruthTime.msecsTo(currentTime) >= settings.groundTruthRate) {
|
||||
VelocityActual::DataFields velocityActualData;
|
||||
memset(&velocityActualData, 0, sizeof(VelocityActual::DataFields));
|
||||
velocityActualData.North = out.velNorth + noise.velocityActualData.North;
|
||||
velocityActualData.East = out.velEast + noise.velocityActualData.East;
|
||||
velocityActualData.Down = out.velDown + noise.velocityActualData.Down;
|
||||
velActual->setData(velocityActualData);
|
||||
VelocityState::DataFields velocityStateData;
|
||||
memset(&velocityStateData, 0, sizeof(VelocityState::DataFields));
|
||||
velocityStateData.North = out.velNorth + noise.velocityStateData.North;
|
||||
velocityStateData.East = out.velEast + noise.velocityStateData.East;
|
||||
velocityStateData.Down = out.velDown + noise.velocityStateData.Down;
|
||||
velState->setData(velocityStateData);
|
||||
|
||||
// Update PositionActual.{Nort,East,Down}
|
||||
PositionActual::DataFields positionActualData;
|
||||
memset(&positionActualData, 0, sizeof(PositionActual::DataFields));
|
||||
positionActualData.North = (out.dstN - initN) + noise.positionActualData.North;
|
||||
positionActualData.East = (out.dstE - initE) + noise.positionActualData.East;
|
||||
positionActualData.Down = (out.dstD /*-initD*/) + noise.positionActualData.Down;
|
||||
posActual->setData(positionActualData);
|
||||
// Update PositionState.{Nort,East,Down}
|
||||
PositionState::DataFields positionStateData;
|
||||
memset(&positionStateData, 0, sizeof(PositionState::DataFields));
|
||||
positionStateData.North = (out.dstN - initN) + noise.positionStateData.North;
|
||||
positionStateData.East = (out.dstE - initE) + noise.positionStateData.East;
|
||||
positionStateData.Down = (out.dstD /*-initD*/) + noise.positionStateData.Down;
|
||||
posState->setData(positionStateData);
|
||||
|
||||
groundTruthTime = groundTruthTime.addMSecs(settings.groundTruthRate);
|
||||
}
|
||||
@ -707,11 +707,11 @@ void Simulator::updateUAVOs(Output2Hardware out)
|
||||
// }
|
||||
|
||||
/*******************************/
|
||||
// Update BaroAltitude object
|
||||
if (settings.baroAltitudeEnabled) {
|
||||
// Update BaroSensor object
|
||||
if (settings.baroSensorEnabled) {
|
||||
if (baroAltTime.msecsTo(currentTime) >= settings.baroAltRate) {
|
||||
BaroAltitude::DataFields baroAltData;
|
||||
memset(&baroAltData, 0, sizeof(BaroAltitude::DataFields));
|
||||
BaroSensor::DataFields baroAltData;
|
||||
memset(&baroAltData, 0, sizeof(BaroSensor::DataFields));
|
||||
baroAltData.Altitude = out.altitude + noise.baroAltData.Altitude;
|
||||
baroAltData.Temperature = out.temperature + noise.baroAltData.Temperature;
|
||||
baroAltData.Pressure = out.pressure + noise.baroAltData.Pressure;
|
||||
@ -723,7 +723,7 @@ void Simulator::updateUAVOs(Output2Hardware out)
|
||||
|
||||
/*******************************/
|
||||
// Update FlightBatteryState object
|
||||
if (settings.baroAltitudeEnabled) {
|
||||
if (settings.baroSensorEnabled) {
|
||||
if (battTime.msecsTo(currentTime) >= settings.baroAltRate) {
|
||||
FlightBatteryState::DataFields batteryData;
|
||||
memset(&batteryData, 0, sizeof(FlightBatteryState::DataFields));
|
||||
@ -737,18 +737,18 @@ void Simulator::updateUAVOs(Output2Hardware out)
|
||||
}
|
||||
|
||||
/*******************************/
|
||||
// Update AirspeedActual object
|
||||
if (settings.airspeedActualEnabled) {
|
||||
if (airspeedActualTime.msecsTo(currentTime) >= settings.airspeedActualRate) {
|
||||
AirspeedActual::DataFields airspeedActualData;
|
||||
memset(&airspeedActualData, 0, sizeof(AirspeedActual::DataFields));
|
||||
airspeedActualData.CalibratedAirspeed = out.calibratedAirspeed + noise.airspeedActual.CalibratedAirspeed;
|
||||
airspeedActualData.TrueAirspeed = out.trueAirspeed + noise.airspeedActual.TrueAirspeed;
|
||||
// airspeedActualData.alpha=out.angleOfAttack; // to be implemented
|
||||
// airspeedActualData.beta=out.angleOfSlip;
|
||||
airspeedActual->setData(airspeedActualData);
|
||||
// Update AirspeedState object
|
||||
if (settings.airspeedStateEnabled) {
|
||||
if (airspeedStateTime.msecsTo(currentTime) >= settings.airspeedStateRate) {
|
||||
AirspeedState::DataFields airspeedStateData;
|
||||
memset(&airspeedStateData, 0, sizeof(AirspeedState::DataFields));
|
||||
airspeedStateData.CalibratedAirspeed = out.calibratedAirspeed + noise.airspeedState.CalibratedAirspeed;
|
||||
airspeedStateData.TrueAirspeed = out.trueAirspeed + noise.airspeedState.TrueAirspeed;
|
||||
// airspeedStateData.alpha=out.angleOfAttack; // to be implemented
|
||||
// airspeedStateData.beta=out.angleOfSlip;
|
||||
airspeedState->setData(airspeedStateData);
|
||||
|
||||
airspeedActualTime = airspeedActualTime.addMSecs(settings.airspeedActualRate);
|
||||
airspeedStateTime = airspeedStateTime.addMSecs(settings.airspeedStateRate);
|
||||
}
|
||||
}
|
||||
|
||||
@ -757,22 +757,22 @@ void Simulator::updateUAVOs(Output2Hardware out)
|
||||
if (settings.attRawEnabled) {
|
||||
if (attRawTime.msecsTo(currentTime) >= settings.attRawRate) {
|
||||
// Update gyroscope sensor data
|
||||
Gyros::DataFields gyroData;
|
||||
memset(&gyroData, 0, sizeof(Gyros::DataFields));
|
||||
gyroData.x = out.rollRate + noise.gyroData.x;
|
||||
gyroData.y = out.pitchRate + noise.gyroData.y;
|
||||
gyroData.z = out.yawRate + noise.gyroData.z;
|
||||
gyros->setData(gyroData);
|
||||
GyroState::DataFields gyroStateData;
|
||||
memset(&gyroStateData, 0, sizeof(GyroState::DataFields));
|
||||
gyroStateData.x = out.rollRate + noise.gyroStateData.x;
|
||||
gyroStateData.y = out.pitchRate + noise.gyroStateData.y;
|
||||
gyroStateData.z = out.yawRate + noise.gyroStateData.z;
|
||||
gyroState->setData(gyroStateData);
|
||||
|
||||
// Update accelerometer sensor data
|
||||
Accels::DataFields accelData;
|
||||
memset(&accelData, 0, sizeof(Accels::DataFields));
|
||||
accelData.x = out.accX + noise.accelData.x;
|
||||
accelData.y = out.accY + noise.accelData.y;
|
||||
accelData.z = out.accZ + noise.accelData.z;
|
||||
accels->setData(accelData);
|
||||
AccelState::DataFields accelStateData;
|
||||
memset(&accelStateData, 0, sizeof(AccelState::DataFields));
|
||||
accelStateData.x = out.accX + noise.accelStateData.x;
|
||||
accelStateData.y = out.accY + noise.accelStateData.y;
|
||||
accelStateData.z = out.accZ + noise.accelStateData.z;
|
||||
accelState->setData(accelStateData);
|
||||
|
||||
attRawTime = attRawTime.addMSecs(settings.attRawRate);
|
||||
attRawTime = attRawTime.addMSecs(settings.attRawRate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -38,13 +38,13 @@
|
||||
#include "uavtalk/telemetrymanager.h"
|
||||
#include "uavobjectmanager.h"
|
||||
|
||||
#include "accels.h"
|
||||
#include "accelstate.h"
|
||||
#include "actuatorcommand.h"
|
||||
#include "actuatordesired.h"
|
||||
#include "airspeedactual.h"
|
||||
#include "attitudeactual.h"
|
||||
#include "airspeedstate.h"
|
||||
#include "attitudestate.h"
|
||||
#include "attitudesettings.h"
|
||||
#include "baroaltitude.h"
|
||||
#include "barosensor.h"
|
||||
#include "flightbatterystate.h"
|
||||
#include "flightstatus.h"
|
||||
#include "gcsreceiver.h"
|
||||
@ -52,12 +52,12 @@
|
||||
#include "gpsposition.h"
|
||||
#include "gpsvelocity.h"
|
||||
#include "groundtruth.h"
|
||||
#include "gyros.h"
|
||||
#include "gyrostate.h"
|
||||
#include "homelocation.h"
|
||||
#include "manualcontrolcommand.h"
|
||||
#include "positionactual.h"
|
||||
#include "positionstate.h"
|
||||
#include "sonaraltitude.h"
|
||||
#include "velocityactual.h"
|
||||
#include "velocitystate.h"
|
||||
|
||||
#include "utils/coordinateconversions.h"
|
||||
|
||||
@ -130,12 +130,12 @@ typedef struct _CONNECTION {
|
||||
bool attRawEnabled;
|
||||
quint8 attRawRate;
|
||||
|
||||
bool attActualEnabled;
|
||||
bool attStateEnabled;
|
||||
bool attActHW;
|
||||
bool attActSim;
|
||||
bool attActCalc;
|
||||
|
||||
bool baroAltitudeEnabled;
|
||||
bool baroSensorEnabled;
|
||||
quint16 baroAltRate;
|
||||
|
||||
bool groundTruthEnabled;
|
||||
@ -149,8 +149,8 @@ typedef struct _CONNECTION {
|
||||
bool manualControlEnabled;
|
||||
quint16 minOutputPeriod;
|
||||
|
||||
bool airspeedActualEnabled;
|
||||
quint16 airspeedActualRate;
|
||||
bool airspeedStateEnabled;
|
||||
quint16 airspeedStateRate;
|
||||
} SimulatorSettings;
|
||||
|
||||
|
||||
@ -321,17 +321,17 @@ protected:
|
||||
ManualControlCommand *manCtrlCommand;
|
||||
FlightStatus *flightStatus;
|
||||
FlightBatteryState *flightBatt;
|
||||
BaroAltitude *baroAlt;
|
||||
AirspeedActual *airspeedActual;
|
||||
AttitudeActual *attActual;
|
||||
BaroSensor *baroAlt;
|
||||
AirspeedState *airspeedState;
|
||||
AttitudeState *attState;
|
||||
AttitudeSettings *attSettings;
|
||||
VelocityActual *velActual;
|
||||
VelocityState *velState;
|
||||
GPSPosition *gpsPos;
|
||||
GPSVelocity *gpsVel;
|
||||
PositionActual *posActual;
|
||||
PositionState *posState;
|
||||
HomeLocation *posHome;
|
||||
Accels *accels;
|
||||
Gyros *gyros;
|
||||
AccelState *accelState;
|
||||
GyroState *gyroState;
|
||||
GCSTelemetryStats *telStats;
|
||||
GCSReceiver *gcsReceiver;
|
||||
GroundTruth *groundTruth;
|
||||
@ -361,7 +361,7 @@ private:
|
||||
QTime baroAltTime;
|
||||
QTime battTime;
|
||||
QTime gcsRcvrTime;
|
||||
QTime airspeedActualTime;
|
||||
QTime airspeedStateTime;
|
||||
|
||||
QString name;
|
||||
QString simulatorId;
|
||||
|
@ -300,11 +300,11 @@ void XplaneSimulator::processUpdate(const QByteArray & dataBuf)
|
||||
|
||||
out.calibratedAirspeed = airspeed_keas * 1.15 * 1.6089 / 3.6; // Convert from [kts] to [m/s]
|
||||
|
||||
// Update BaroAltitude object
|
||||
// Update BaroSensor object
|
||||
out.temperature = temperature;
|
||||
out.pressure = pressure;
|
||||
|
||||
// Update attActual object
|
||||
// Update attState object
|
||||
out.roll = roll; // roll;
|
||||
out.pitch = pitch; // pitch
|
||||
out.heading = heading; // yaw
|
||||
@ -314,7 +314,7 @@ void XplaneSimulator::processUpdate(const QByteArray & dataBuf)
|
||||
out.dstE = dstX;
|
||||
out.dstD = -dstZ;
|
||||
|
||||
// Update VelocityActual.{North,East,Down}
|
||||
// Update VelocityState.{North,East,Down}
|
||||
out.velNorth = velY;
|
||||
out.velEast = velX;
|
||||
out.velDown = -velZ;
|
||||
@ -332,9 +332,9 @@ void XplaneSimulator::processUpdate(const QByteArray & dataBuf)
|
||||
updateUAVOs(out);
|
||||
}
|
||||
// issue manual update
|
||||
// attActual->updated();
|
||||
// altActual->updated();
|
||||
// posActual->updated();
|
||||
// attState->updated();
|
||||
// altState->updated();
|
||||
// posState->updated();
|
||||
}
|
||||
|
||||
|
||||
|
@ -48,11 +48,11 @@ MagicWaypointGadgetWidget::MagicWaypointGadgetWidget(QWidget *parent) : QLabel(p
|
||||
|
||||
// Connect object updated event from UAVObject to also update check boxes
|
||||
connect(getPathDesired(), SIGNAL(objectUpdated(UAVObject *)), this, SLOT(positionObjectChanged(UAVObject *)));
|
||||
connect(getPositionActual(), SIGNAL(objectUpdated(UAVObject *)), this, SLOT(positionObjectChanged(UAVObject *)));
|
||||
connect(getPositionState(), SIGNAL(objectUpdated(UAVObject *)), this, SLOT(positionObjectChanged(UAVObject *)));
|
||||
|
||||
// Connect updates from the position widget to this widget
|
||||
connect(m_magicwaypoint->widgetPosition, SIGNAL(positionClicked(double, double)), this, SLOT(positionSelected(double, double)));
|
||||
connect(this, SIGNAL(positionActualObjectChanged(double, double)), m_magicwaypoint->widgetPosition, SLOT(updateActualIndicator(double, double)));
|
||||
connect(this, SIGNAL(positionStateObjectChanged(double, double)), m_magicwaypoint->widgetPosition, SLOT(updateActualIndicator(double, double)));
|
||||
connect(this, SIGNAL(positionDesiredObjectChanged(double, double)), m_magicwaypoint->widgetPosition, SLOT(updateDesiredIndicator(double, double)));
|
||||
|
||||
// Catch changes in scale for visualization
|
||||
@ -81,13 +81,13 @@ PathDesired *MagicWaypointGadgetWidget::getPathDesired()
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Returns the @ref PositionActual UAVObject
|
||||
\brief Returns the @ref PositionState UAVObject
|
||||
*/
|
||||
PositionActual *MagicWaypointGadgetWidget::getPositionActual()
|
||||
PositionState *MagicWaypointGadgetWidget::getPositionState()
|
||||
{
|
||||
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
||||
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
|
||||
PositionActual *obj = PositionActual::GetInstance(objManager);
|
||||
PositionState *obj = PositionState::GetInstance(objManager);
|
||||
|
||||
Q_ASSERT(obj != NULL);
|
||||
return obj;
|
||||
@ -100,19 +100,19 @@ void MagicWaypointGadgetWidget::scaleChanged(int scale)
|
||||
{
|
||||
Q_UNUSED(scale);
|
||||
pathDesiredChanged(getPathDesired());
|
||||
positionActualChanged(getPositionActual());
|
||||
positionStateChanged(getPositionState());
|
||||
}
|
||||
|
||||
/**
|
||||
* Emit a position changed signal when @ref PositionActual object is changed
|
||||
* Emit a position changed signal when @ref PositionState object is changed
|
||||
*/
|
||||
void MagicWaypointGadgetWidget::positionActualChanged(UAVObject *)
|
||||
void MagicWaypointGadgetWidget::positionStateChanged(UAVObject *)
|
||||
{
|
||||
PositionActual::DataFields positionActual = getPositionActual()->getData();
|
||||
PositionState::DataFields positionState = getPositionState()->getData();
|
||||
double scale = m_magicwaypoint->horizontalSliderScale->value();
|
||||
|
||||
emit positionActualObjectChanged(positionActual.North / scale,
|
||||
positionActual.East / scale);
|
||||
emit positionStateObjectChanged(positionState.North / scale,
|
||||
positionState.East / scale);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -30,7 +30,7 @@
|
||||
|
||||
#include <QtGui/QLabel>
|
||||
#include "pathdesired.h"
|
||||
#include "positionactual.h"
|
||||
#include "positionstate.h"
|
||||
|
||||
class Ui_MagicWaypoint;
|
||||
|
||||
@ -42,18 +42,18 @@ public:
|
||||
~MagicWaypointGadgetWidget();
|
||||
|
||||
signals:
|
||||
void positionActualObjectChanged(double north, double east);
|
||||
void positionStateObjectChanged(double north, double east);
|
||||
void positionDesiredObjectChanged(double north, double east);
|
||||
|
||||
protected slots:
|
||||
void scaleChanged(int scale);
|
||||
void positionActualChanged(UAVObject *);
|
||||
void positionStateChanged(UAVObject *);
|
||||
void pathDesiredChanged(UAVObject *);
|
||||
void positionSelected(double north, double east);
|
||||
|
||||
private:
|
||||
PathDesired *getPathDesired();
|
||||
PositionActual *getPositionActual();
|
||||
PositionState *getPositionState();
|
||||
Ui_MagicWaypoint *m_magicwaypoint;
|
||||
};
|
||||
|
||||
|
@ -57,7 +57,7 @@ ModelViewGadgetWidget::ModelViewGadgetWidget(QWidget *parent)
|
||||
// Get required UAVObjects
|
||||
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
||||
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
|
||||
attActual = AttitudeActual::GetInstance(objManager);
|
||||
attState = AttitudeState::GetInstance(objManager);
|
||||
|
||||
connect(&m_MotionTimer, SIGNAL(timeout()), this, SLOT(updateAttitude()));
|
||||
}
|
||||
@ -311,7 +311,7 @@ void ModelViewGadgetWidget::keyPressEvent(QKeyEvent *e) // switch between camera
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
void ModelViewGadgetWidget::updateAttitude()
|
||||
{
|
||||
AttitudeActual::DataFields data = attActual->getData(); // get attitude data
|
||||
AttitudeState::DataFields data = attState->getData(); // get attitude data
|
||||
GLC_StructOccurence *rootObject = m_World.rootOccurence(); // get the full 3D model
|
||||
double x = data.q3;
|
||||
double y = data.q2;
|
||||
|
@ -39,7 +39,7 @@
|
||||
#include "glc_exception.h"
|
||||
|
||||
#include "uavobjectmanager.h"
|
||||
#include "attitudeactual.h"
|
||||
#include "attitudestate.h"
|
||||
|
||||
|
||||
class ModelViewGadgetWidget : public QGLWidget {
|
||||
@ -89,7 +89,7 @@ private:
|
||||
QString bgFilename;
|
||||
bool vboEnable;
|
||||
|
||||
AttitudeActual *attActual;
|
||||
AttitudeState *attState;
|
||||
};
|
||||
|
||||
#endif /* MODELVIEWGADGETWIDGET_H_ */
|
||||
|
@ -48,14 +48,14 @@
|
||||
#include "uavtalk/telemetrymanager.h"
|
||||
#include "uavobject.h"
|
||||
|
||||
#include "positionactual.h"
|
||||
#include "positionstate.h"
|
||||
#include "homelocation.h"
|
||||
#include "gpsposition.h"
|
||||
#include "gyros.h"
|
||||
#include "attitudeactual.h"
|
||||
#include "positionactual.h"
|
||||
#include "velocityactual.h"
|
||||
#include "airspeedactual.h"
|
||||
#include "gyrostate.h"
|
||||
#include "attitudestate.h"
|
||||
#include "positionstate.h"
|
||||
#include "velocitystate.h"
|
||||
#include "airspeedstate.h"
|
||||
|
||||
#define allow_manual_home_location_move
|
||||
|
||||
@ -593,36 +593,36 @@ void OPMapGadgetWidget::updatePosition()
|
||||
|
||||
// **********************
|
||||
// get the current position and heading estimates
|
||||
AttitudeActual *attitudeActualObj = AttitudeActual::GetInstance(obm);
|
||||
PositionActual *positionActualObj = PositionActual::GetInstance(obm);
|
||||
VelocityActual *velocityActualObj = VelocityActual::GetInstance(obm);
|
||||
AirspeedActual *airspeedActualObj = AirspeedActual::GetInstance(obm);
|
||||
AttitudeState *attitudeStateObj = AttitudeState::GetInstance(obm);
|
||||
PositionState *positionStateObj = PositionState::GetInstance(obm);
|
||||
VelocityState *velocityStateObj = VelocityState::GetInstance(obm);
|
||||
AirspeedState *airspeedStateObj = AirspeedState::GetInstance(obm);
|
||||
|
||||
Gyros *gyrosObj = Gyros::GetInstance(obm);
|
||||
GyroState *gyroStateObj = GyroState::GetInstance(obm);
|
||||
|
||||
Q_ASSERT(attitudeActualObj);
|
||||
Q_ASSERT(positionActualObj);
|
||||
Q_ASSERT(velocityActualObj);
|
||||
Q_ASSERT(airspeedActualObj);
|
||||
Q_ASSERT(gyrosObj);
|
||||
Q_ASSERT(attitudeStateObj);
|
||||
Q_ASSERT(positionStateObj);
|
||||
Q_ASSERT(velocityStateObj);
|
||||
Q_ASSERT(airspeedStateObj);
|
||||
Q_ASSERT(gyroStateObj);
|
||||
|
||||
AttitudeActual::DataFields attitudeActualData = attitudeActualObj->getData();
|
||||
PositionActual::DataFields positionActualData = positionActualObj->getData();
|
||||
VelocityActual::DataFields velocityActualData = velocityActualObj->getData();
|
||||
AirspeedActual::DataFields airspeedActualData = airspeedActualObj->getData();
|
||||
AttitudeState::DataFields attitudeStateData = attitudeStateObj->getData();
|
||||
PositionState::DataFields positionStateData = positionStateObj->getData();
|
||||
VelocityState::DataFields velocityStateData = velocityStateObj->getData();
|
||||
AirspeedState::DataFields airspeedStateData = airspeedStateObj->getData();
|
||||
|
||||
Gyros::DataFields gyrosData = gyrosObj->getData();
|
||||
GyroState::DataFields gyroStateData = gyroStateObj->getData();
|
||||
|
||||
double NED[3] = { positionActualData.North, positionActualData.East, positionActualData.Down };
|
||||
double vNED[3] = { velocityActualData.North, velocityActualData.East, velocityActualData.Down };
|
||||
double NED[3] = { positionStateData.North, positionStateData.East, positionStateData.Down };
|
||||
double vNED[3] = { velocityStateData.North, velocityStateData.East, velocityStateData.Down };
|
||||
|
||||
// Set the position and heading estimates in the painter module
|
||||
m_map->UAV->SetNED(NED);
|
||||
m_map->UAV->SetCAS(airspeedActualData.CalibratedAirspeed);
|
||||
m_map->UAV->SetCAS(airspeedStateData.CalibratedAirspeed);
|
||||
m_map->UAV->SetGroundspeed(vNED, m_maxUpdateRate);
|
||||
|
||||
// Convert angular velocities into a rotationg rate around the world-frame yaw axis. This is found by simply taking the dot product of the angular Euler-rate matrix with the angular rates.
|
||||
float psiRate_dps = 0 * gyrosData.z + sin(attitudeActualData.Roll * deg_to_rad) / cos(attitudeActualData.Pitch * deg_to_rad) * gyrosData.y + cos(attitudeActualData.Roll * deg_to_rad) / cos(attitudeActualData.Pitch * deg_to_rad) * gyrosData.z;
|
||||
float psiRate_dps = 0 * gyroStateData.z + sin(attitudeStateData.Roll * deg_to_rad) / cos(attitudeStateData.Pitch * deg_to_rad) * gyroStateData.y + cos(attitudeStateData.Roll * deg_to_rad) / cos(attitudeStateData.Pitch * deg_to_rad) * gyroStateData.z;
|
||||
|
||||
// Set the angular rate in the painter module
|
||||
m_map->UAV->SetYawRate(psiRate_dps); // Not correct, but I'm being lazy right now.
|
||||
@ -2178,13 +2178,13 @@ bool OPMapGadgetWidget::getUAVPosition(double &latitude, double &longitude, doub
|
||||
homeLLA[1] = homeLocationData.Longitude / 1e7;
|
||||
homeLLA[2] = homeLocationData.Altitude;
|
||||
|
||||
PositionActual *positionActual = PositionActual::GetInstance(obm);
|
||||
Q_ASSERT(positionActual != NULL);
|
||||
PositionActual::DataFields positionActualData = positionActual->getData();
|
||||
PositionState *positionState = PositionState::GetInstance(obm);
|
||||
Q_ASSERT(positionState != NULL);
|
||||
PositionState::DataFields positionStateData = positionState->getData();
|
||||
|
||||
NED[0] = positionActualData.North;
|
||||
NED[1] = positionActualData.East;
|
||||
NED[2] = positionActualData.Down;
|
||||
NED[0] = positionStateData.North;
|
||||
NED[1] = positionStateData.East;
|
||||
NED[2] = positionStateData.Down;
|
||||
|
||||
Utils::CoordinateConversions().NED2LLA_HomeLLA(homeLLA, NED, LLA);
|
||||
|
||||
@ -2220,7 +2220,7 @@ double OPMapGadgetWidget::getUAV_Yaw()
|
||||
return 0;
|
||||
}
|
||||
|
||||
UAVObject *obj = dynamic_cast<UAVDataObject *>(obm->getObject(QString("AttitudeActual")));
|
||||
UAVObject *obj = dynamic_cast<UAVDataObject *>(obm->getObject(QString("AttitudeState")));
|
||||
double yaw = obj->getField(QString("Yaw"))->getDouble();
|
||||
|
||||
if (yaw != yaw) {
|
||||
|
@ -93,9 +93,9 @@ using namespace osgEarth::Annotation;
|
||||
#include "utils/homelocationutil.h"
|
||||
#include "utils/worldmagmodel.h"
|
||||
#include "utils/coordinateconversions.h"
|
||||
#include "attitudeactual.h"
|
||||
#include "attitudestate.h"
|
||||
#include "homelocation.h"
|
||||
#include "positionactual.h"
|
||||
#include "positionstate.h"
|
||||
|
||||
using namespace Utils;
|
||||
|
||||
|
@ -95,10 +95,10 @@ using namespace osgEarth::Annotation;
|
||||
#include "utils/homelocationutil.h"
|
||||
#include "utils/worldmagmodel.h"
|
||||
#include "utils/coordinateconversions.h"
|
||||
#include "attitudeactual.h"
|
||||
#include "attitudestate.h"
|
||||
#include "gpsposition.h"
|
||||
#include "homelocation.h"
|
||||
#include "positionactual.h"
|
||||
#include "positionstate.h"
|
||||
#include "systemsettings.h"
|
||||
|
||||
using namespace Utils;
|
||||
@ -256,12 +256,12 @@ void OsgViewerWidget::paintEvent(QPaintEvent *event)
|
||||
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
||||
UAVObjectManager *objMngr = pm->getObject<UAVObjectManager>();
|
||||
|
||||
PositionActual *positionActualObj = PositionActual::GetInstance(objMngr);
|
||||
PositionActual::DataFields positionActual = positionActualObj->getData();
|
||||
double NED[3] = { positionActual.North, positionActual.East, positionActual.Down };
|
||||
PositionState *positionStateObj = PositionState::GetInstance(objMngr);
|
||||
PositionState::DataFields positionState = positionStateObj->getData();
|
||||
double NED[3] = { positionState.North, positionState.East, positionState.Down };
|
||||
|
||||
bool positionActualUpdate = true;
|
||||
if (positionActualUpdate) {
|
||||
bool positionStateUpdate = true;
|
||||
if (positionStateUpdate) {
|
||||
HomeLocation *homeLocationObj = HomeLocation::GetInstance(objMngr);
|
||||
HomeLocation::DataFields homeLocation = homeLocationObj->getData();
|
||||
double homeLLA[3] = { homeLocation.Latitude / 10.0e6, homeLocation.Longitude / 10.0e6, homeLocation.Altitude };
|
||||
@ -276,9 +276,9 @@ void OsgViewerWidget::paintEvent(QPaintEvent *event)
|
||||
}
|
||||
|
||||
// Set the attitude (reverse the attitude)
|
||||
AttitudeActual *attitudeActualObj = AttitudeActual::GetInstance(objMngr);
|
||||
AttitudeActual::DataFields attitudeActual = attitudeActualObj->getData();
|
||||
osg::Quat quat(attitudeActual.q2, attitudeActual.q3, attitudeActual.q4, attitudeActual.q1);
|
||||
AttitudeState *attitudeStateObj = AttitudeState::GetInstance(objMngr);
|
||||
AttitudeState::DataFields attitudeState = attitudeStateObj->getData();
|
||||
osg::Quat quat(attitudeState.q2, attitudeState.q3, attitudeState.q4, attitudeState.q1);
|
||||
|
||||
// Have to rotate the axes from OP NED frame to OSG frame (X east, Y north, Z down)
|
||||
double angle;
|
||||
|
@ -86,7 +86,7 @@ void PFDGadgetWidget::setToolTipPrivate()
|
||||
UAVObject::Metadata mdata = attitudeObj->getMetadata();
|
||||
|
||||
if (mdata.flightTelemetryUpdatePeriod != updateRate) {
|
||||
this->setToolTip("Current refresh rate:" + QString::number(mdata.flightTelemetryUpdatePeriod) + " miliseconds" + "\nIf you want to change it please edit the AttitudeActual metadata on the object browser.");
|
||||
this->setToolTip("Current refresh rate:" + QString::number(mdata.flightTelemetryUpdatePeriod) + " miliseconds" + "\nIf you want to change it please edit the AttitudeState metadata on the object browser.");
|
||||
}
|
||||
}
|
||||
|
||||
@ -106,7 +106,7 @@ void PFDGadgetWidget::enableOpenGL(bool flag)
|
||||
\brief Connects the widget to the relevant UAVObjects
|
||||
|
||||
Should only be called after the PFD artwork is loaded.
|
||||
We want: AttitudeActual, FlightBattery, Location.
|
||||
We want: AttitudeState, FlightBattery, Location.
|
||||
|
||||
*/
|
||||
void PFDGadgetWidget::connectNeedles()
|
||||
@ -134,39 +134,39 @@ void PFDGadgetWidget::connectNeedles()
|
||||
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
||||
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
|
||||
|
||||
airspeedObj = dynamic_cast<UAVDataObject *>(objManager->getObject("AirspeedActual"));
|
||||
airspeedObj = dynamic_cast<UAVDataObject *>(objManager->getObject("AirspeedState"));
|
||||
if (airspeedObj != NULL) {
|
||||
connect(airspeedObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateAirspeed(UAVObject *)));
|
||||
} else {
|
||||
qDebug() << "Error: Object is unknown (AirspeedActual).";
|
||||
qDebug() << "Error: Object is unknown (AirspeedState).";
|
||||
}
|
||||
|
||||
groundspeedObj = dynamic_cast<UAVDataObject *>(objManager->getObject("VelocityActual"));
|
||||
groundspeedObj = dynamic_cast<UAVDataObject *>(objManager->getObject("VelocityState"));
|
||||
if (groundspeedObj != NULL) {
|
||||
connect(groundspeedObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateGroundspeed(UAVObject *)));
|
||||
} else {
|
||||
qDebug() << "Error: Object is unknown (VelocityActual).";
|
||||
qDebug() << "Error: Object is unknown (VelocityState).";
|
||||
}
|
||||
|
||||
altitudeObj = dynamic_cast<UAVDataObject *>(objManager->getObject("PositionActual"));
|
||||
altitudeObj = dynamic_cast<UAVDataObject *>(objManager->getObject("PositionState"));
|
||||
if (altitudeObj != NULL) {
|
||||
connect(altitudeObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateAltitude(UAVObject *)));
|
||||
} else {
|
||||
qDebug() << "Error: Object is unknown (PositionActual).";
|
||||
qDebug() << "Error: Object is unknown (PositionState).";
|
||||
}
|
||||
|
||||
attitudeObj = dynamic_cast<UAVDataObject *>(objManager->getObject("AttitudeActual"));
|
||||
attitudeObj = dynamic_cast<UAVDataObject *>(objManager->getObject("AttitudeState"));
|
||||
if (attitudeObj != NULL) {
|
||||
connect(attitudeObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateAttitude(UAVObject *)));
|
||||
} else {
|
||||
qDebug() << "Error: Object is unknown (AttitudeActual).";
|
||||
qDebug() << "Error: Object is unknown (AttitudeState).";
|
||||
}
|
||||
|
||||
headingObj = dynamic_cast<UAVDataObject *>(objManager->getObject("PositionActual"));
|
||||
headingObj = dynamic_cast<UAVDataObject *>(objManager->getObject("PositionState"));
|
||||
if (headingObj != NULL) {
|
||||
connect(headingObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateHeading(UAVObject *)));
|
||||
} else {
|
||||
qDebug() << "Error: Object is unknown (PositionActual).";
|
||||
qDebug() << "Error: Object is unknown (PositionState).";
|
||||
}
|
||||
|
||||
if (gcsGPSStats) {
|
||||
@ -307,7 +307,7 @@ void PFDGadgetWidget::updateAttitude(UAVObject *object1)
|
||||
/*!
|
||||
\brief Updates the compass reading and speed dial.
|
||||
|
||||
This also updates speed & altitude according to PositionActual data.
|
||||
This also updates speed & altitude according to PositionState data.
|
||||
|
||||
Note: the speed dial shows the ground speed at the moment, because
|
||||
there is no airspeed by default. Should become configurable in a future
|
||||
@ -319,7 +319,7 @@ void PFDGadgetWidget::updateHeading(UAVObject *object)
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Called by updates to @PositionActual to compute groundspeed from velocity
|
||||
\brief Called by updates to @PositionState to compute groundspeed from velocity
|
||||
*/
|
||||
void PFDGadgetWidget::updateGroundspeed(UAVObject *object)
|
||||
{
|
||||
@ -340,7 +340,7 @@ void PFDGadgetWidget::updateGroundspeed(UAVObject *object)
|
||||
|
||||
|
||||
/*!
|
||||
\brief Called by updates to @AirspeedActual
|
||||
\brief Called by updates to @AirspeedState
|
||||
*/
|
||||
void PFDGadgetWidget::updateAirspeed(UAVObject *object)
|
||||
{
|
||||
@ -358,7 +358,7 @@ void PFDGadgetWidget::updateAirspeed(UAVObject *object)
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Called by the @ref PositionActual updates to show altitude
|
||||
\brief Called by the @ref PositionState updates to show altitude
|
||||
*/
|
||||
void PFDGadgetWidget::updateAltitude(UAVObject *object)
|
||||
{
|
||||
|
@ -48,10 +48,10 @@ PfdQmlGadgetWidget::PfdQmlGadgetWidget(QWidget *parent) :
|
||||
// setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
|
||||
|
||||
QStringList objectsToExport;
|
||||
objectsToExport << "VelocityActual" <<
|
||||
"PositionActual" <<
|
||||
"AttitudeActual" <<
|
||||
"Accels" <<
|
||||
objectsToExport << "VelocityState" <<
|
||||
"PositionState" <<
|
||||
"AttitudeState" <<
|
||||
"AccelState" <<
|
||||
"VelocityDesired" <<
|
||||
"PositionDesired" <<
|
||||
"AttitudeHoldDesired" <<
|
||||
@ -138,7 +138,7 @@ void PfdQmlGadgetWidget::setOpenGLEnabled(bool arg)
|
||||
}
|
||||
}
|
||||
|
||||
// Switch between PositionActual UAVObject position
|
||||
// Switch between PositionState UAVObject position
|
||||
// and pre-defined latitude/longitude/altitude properties
|
||||
void PfdQmlGadgetWidget::setActualPositionUsed(bool arg)
|
||||
{
|
||||
|
@ -49,9 +49,9 @@ QmlViewGadgetWidget::QmlViewGadgetWidget(QWidget *parent) :
|
||||
setResizeMode(SizeRootObjectToView);
|
||||
|
||||
QStringList objectsToExport;
|
||||
objectsToExport << "VelocityActual" <<
|
||||
"PositionActual" <<
|
||||
"AttitudeActual" <<
|
||||
objectsToExport << "VelocityState" <<
|
||||
"PositionState" <<
|
||||
"AttitudeState" <<
|
||||
"GPSPosition" <<
|
||||
"GCSTelemetryStats" <<
|
||||
"FlightBatteryState";
|
||||
|
@ -29,8 +29,8 @@
|
||||
#include "extensionsystem/pluginmanager.h"
|
||||
#include "uavobjectmanager.h"
|
||||
#include "attitudesettings.h"
|
||||
#include "accels.h"
|
||||
#include "gyros.h"
|
||||
#include "accelstate.h"
|
||||
#include "gyrostate.h"
|
||||
#include "qdebug.h"
|
||||
|
||||
|
||||
@ -73,12 +73,12 @@ void BiasCalibrationUtil::gyroMeasurementsUpdated(UAVObject *obj)
|
||||
UAVObjectManager *uavObjectManager = pm->getObject<UAVObjectManager>();
|
||||
Q_ASSERT(uavObjectManager);
|
||||
|
||||
Gyros *gyros = Gyros::GetInstance(uavObjectManager);
|
||||
Gyros::DataFields gyrosData = gyros->getData();
|
||||
GyroState *gyroState = GyroState::GetInstance(uavObjectManager);
|
||||
GyroState::DataFields gyroStateData = gyroState->getData();
|
||||
|
||||
m_gyroX += gyrosData.x;
|
||||
m_gyroY += gyrosData.y;
|
||||
m_gyroZ += gyrosData.z;
|
||||
m_gyroX += gyroStateData.x;
|
||||
m_gyroY += gyroStateData.y;
|
||||
m_gyroZ += gyroStateData.z;
|
||||
|
||||
m_receivedGyroUpdates++;
|
||||
emit progress(m_receivedGyroUpdates + m_receivedAccelUpdates, m_gyroMeasurementCount + m_accelMeasurementCount);
|
||||
@ -97,12 +97,12 @@ void BiasCalibrationUtil::accelMeasurementsUpdated(UAVObject *obj)
|
||||
UAVObjectManager *uavObjectManager = pm->getObject<UAVObjectManager>();
|
||||
Q_ASSERT(uavObjectManager);
|
||||
|
||||
Accels *accels = Accels::GetInstance(uavObjectManager);
|
||||
Accels::DataFields accelsData = accels->getData();
|
||||
AccelState *accelState = AccelState::GetInstance(uavObjectManager);
|
||||
AccelState::DataFields AccelStateData = accelState->getData();
|
||||
|
||||
m_accelerometerX += accelsData.x;
|
||||
m_accelerometerY += accelsData.y;
|
||||
m_accelerometerZ += accelsData.z;
|
||||
m_accelerometerX += AccelStateData.x;
|
||||
m_accelerometerY += AccelStateData.y;
|
||||
m_accelerometerZ += AccelStateData.z;
|
||||
|
||||
m_receivedAccelUpdates++;
|
||||
emit progress(m_receivedGyroUpdates + m_receivedAccelUpdates, m_gyroMeasurementCount + m_accelMeasurementCount);
|
||||
@ -143,7 +143,7 @@ void BiasCalibrationUtil::startMeasurement()
|
||||
AttitudeSettings::GetInstance(uavObjectManager)->setData(attitudeSettingsData);
|
||||
|
||||
// Set up to receive updates for accels
|
||||
UAVDataObject *uavObject = Accels::GetInstance(uavObjectManager);
|
||||
UAVDataObject *uavObject = AccelState::GetInstance(uavObjectManager);
|
||||
connect(uavObject, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(accelMeasurementsUpdated(UAVObject *)));
|
||||
|
||||
// Set update period for accels
|
||||
@ -154,7 +154,7 @@ void BiasCalibrationUtil::startMeasurement()
|
||||
uavObject->setMetadata(newMetaData);
|
||||
|
||||
// Set up to receive updates from gyros
|
||||
uavObject = Gyros::GetInstance(uavObjectManager);
|
||||
uavObject = GyroState::GetInstance(uavObjectManager);
|
||||
connect(uavObject, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(gyroMeasurementsUpdated(UAVObject *)));
|
||||
|
||||
// Set update period for gyros
|
||||
@ -180,12 +180,12 @@ void BiasCalibrationUtil::stopMeasurement()
|
||||
Q_ASSERT(uavObjectManager);
|
||||
|
||||
// Stop listening for updates from accels
|
||||
UAVDataObject *uavObject = Accels::GetInstance(uavObjectManager);
|
||||
UAVDataObject *uavObject = AccelState::GetInstance(uavObjectManager);
|
||||
disconnect(uavObject, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(accelMeasurementsUpdated(UAVObject *)));
|
||||
uavObject->setMetadata(m_previousAccelMetaData);
|
||||
|
||||
// Stop listening for updates from gyros
|
||||
uavObject = Gyros::GetInstance(uavObjectManager);
|
||||
uavObject = GyroState::GetInstance(uavObjectManager);
|
||||
disconnect(uavObject, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(gyroMeasurementsUpdated(UAVObject *)));
|
||||
uavObject->setMetadata(m_previousGyroMetaData);
|
||||
|
||||
|
@ -5,10 +5,10 @@ function OPPlots()
|
||||
|
||||
%load('specificfilename')
|
||||
|
||||
TimeVA = [VelocityActual.timestamp]/1000;
|
||||
VA = [[VelocityActual.North]
|
||||
[VelocityActual.East]
|
||||
[VelocityActual.Down]]/100;
|
||||
TimeVA = [VelocityState.timestamp]/1000;
|
||||
VA = [[VelocityState.North]
|
||||
[VelocityState.East]
|
||||
[VelocityState.Down]]/100;
|
||||
|
||||
TimeGPSPos = [GPSPosition.timestamp]/1000;
|
||||
Vgps=[[GPSPosition.Groundspeed].*cos([GPSPosition.Heading]*pi/180)
|
||||
@ -16,8 +16,8 @@ function OPPlots()
|
||||
|
||||
figure(1);
|
||||
plot(TimeVA,VA(1,:),TimeVA,VA(2,:),TimeGPSPos,Vgps(1,:),TimeGPSPos,Vgps(2,:));
|
||||
s1='Velocity Actual North';
|
||||
s2='Velocity Actual East';
|
||||
s1='Velocity State North';
|
||||
s2='Velocity State East';
|
||||
s3='GPS Velocity North';
|
||||
s4='GPS Velocity East';
|
||||
legend(s1,s2,s3,s4);
|
||||
@ -25,10 +25,10 @@ function OPPlots()
|
||||
ylabel('Velocity (m/s)');
|
||||
|
||||
|
||||
TimePA = [PositionActual.timestamp]/1000;
|
||||
PA = [[PositionActual.North]
|
||||
[PositionActual.East]
|
||||
[PositionActual.Down]]/100;
|
||||
TimePA = [PositionState.timestamp]/1000;
|
||||
PA = [[PositionState.North]
|
||||
[PositionState.East]
|
||||
[PositionState.Down]]/100;
|
||||
|
||||
TimeGPSPos = [GPSPosition.timestamp]/1000;
|
||||
LLA=[[GPSPosition.Latitude]*1e-7;
|
||||
@ -40,8 +40,8 @@ function OPPlots()
|
||||
|
||||
figure(2);
|
||||
plot(TimePA,PA(1,:),TimePA,PA(2,:),TimeGPSPos,GPSPos(1,:),TimeGPSPos,GPSPos(2,:));
|
||||
s1='Position Actual North';
|
||||
s2='Position Actual East';
|
||||
s1='Position State North';
|
||||
s2='Position State East';
|
||||
s3='GPS Position North';
|
||||
s4='GPS Position East';
|
||||
legend(s1,s2,s3,s4);
|
||||
@ -50,7 +50,7 @@ function OPPlots()
|
||||
|
||||
figure(3);
|
||||
plot3(PA(2,:),PA(1,:),PA(3,:),GPSPos(2,:),GPSPos(1,:),GPSPos(3,:));
|
||||
s1='Pos Actual';
|
||||
s1='Pos State';
|
||||
s2='GPS Pos';
|
||||
legend(s1,s2);
|
||||
xlabel('East (m)');
|
||||
|
@ -24,11 +24,11 @@ OTHER_FILES += UAVObjects.pluginspec
|
||||
|
||||
# Add in all of the synthetic/generated uavobject files
|
||||
HEADERS += $$UAVOBJECT_SYNTHETICS/accessorydesired.h \
|
||||
$$UAVOBJECT_SYNTHETICS/baroaltitude.h \
|
||||
$$UAVOBJECT_SYNTHETICS/barosensor.h \
|
||||
$$UAVOBJECT_SYNTHETICS/airspeedsensor.h \
|
||||
$$UAVOBJECT_SYNTHETICS/airspeedsettings.h \
|
||||
$$UAVOBJECT_SYNTHETICS/airspeedactual.h \
|
||||
$$UAVOBJECT_SYNTHETICS/attitudeactual.h \
|
||||
$$UAVOBJECT_SYNTHETICS/airspeedstate.h \
|
||||
$$UAVOBJECT_SYNTHETICS/attitudestate.h \
|
||||
$$UAVOBJECT_SYNTHETICS/attitudesimulated.h \
|
||||
$$UAVOBJECT_SYNTHETICS/altholdsmoothed.h \
|
||||
$$UAVOBJECT_SYNTHETICS/altitudeholddesired.h \
|
||||
@ -38,11 +38,12 @@ HEADERS += $$UAVOBJECT_SYNTHETICS/accessorydesired.h \
|
||||
$$UAVOBJECT_SYNTHETICS/revocalibration.h \
|
||||
$$UAVOBJECT_SYNTHETICS/revosettings.h \
|
||||
$$UAVOBJECT_SYNTHETICS/gcstelemetrystats.h \
|
||||
$$UAVOBJECT_SYNTHETICS/gyros.h \
|
||||
$$UAVOBJECT_SYNTHETICS/gyrosbias.h \
|
||||
$$UAVOBJECT_SYNTHETICS/accels.h \
|
||||
$$UAVOBJECT_SYNTHETICS/magnetometer.h \
|
||||
$$UAVOBJECT_SYNTHETICS/magbias.h \
|
||||
$$UAVOBJECT_SYNTHETICS/gyrostate.h \
|
||||
$$UAVOBJECT_SYNTHETICS/gyrosensor.h \
|
||||
$$UAVOBJECT_SYNTHETICS/accelsensor.h \
|
||||
$$UAVOBJECT_SYNTHETICS/accelstate.h \
|
||||
$$UAVOBJECT_SYNTHETICS/magnetosensor.h \
|
||||
$$UAVOBJECT_SYNTHETICS/magnetostate.h \
|
||||
$$UAVOBJECT_SYNTHETICS/camerastabsettings.h \
|
||||
$$UAVOBJECT_SYNTHETICS/flighttelemetrystats.h \
|
||||
$$UAVOBJECT_SYNTHETICS/systemstats.h \
|
||||
@ -65,13 +66,13 @@ HEADERS += $$UAVOBJECT_SYNTHETICS/accessorydesired.h \
|
||||
$$UAVOBJECT_SYNTHETICS/pathdesired.h \
|
||||
$$UAVOBJECT_SYNTHETICS/pathstatus.h \
|
||||
$$UAVOBJECT_SYNTHETICS/gpsvelocity.h \
|
||||
$$UAVOBJECT_SYNTHETICS/positionactual.h \
|
||||
$$UAVOBJECT_SYNTHETICS/positionstate.h \
|
||||
$$UAVOBJECT_SYNTHETICS/flightbatterystate.h \
|
||||
$$UAVOBJECT_SYNTHETICS/homelocation.h \
|
||||
$$UAVOBJECT_SYNTHETICS/mixersettings.h \
|
||||
$$UAVOBJECT_SYNTHETICS/mixerstatus.h \
|
||||
$$UAVOBJECT_SYNTHETICS/velocitydesired.h \
|
||||
$$UAVOBJECT_SYNTHETICS/velocityactual.h \
|
||||
$$UAVOBJECT_SYNTHETICS/velocitystate.h \
|
||||
$$UAVOBJECT_SYNTHETICS/groundtruth.h \
|
||||
$$UAVOBJECT_SYNTHETICS/fixedwingpathfollowersettings.h \
|
||||
$$UAVOBJECT_SYNTHETICS/fixedwingpathfollowerstatus.h \
|
||||
@ -107,11 +108,11 @@ HEADERS += $$UAVOBJECT_SYNTHETICS/accessorydesired.h \
|
||||
$$UAVOBJECT_SYNTHETICS/mpu6000settings.h
|
||||
|
||||
SOURCES += $$UAVOBJECT_SYNTHETICS/accessorydesired.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/baroaltitude.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/barosensor.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/airspeedsensor.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/airspeedsettings.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/airspeedactual.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/attitudeactual.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/airspeedstate.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/attitudestate.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/attitudesimulated.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/altholdsmoothed.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/altitudeholddesired.cpp \
|
||||
@ -121,11 +122,12 @@ SOURCES += $$UAVOBJECT_SYNTHETICS/accessorydesired.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/revocalibration.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/revosettings.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/gcstelemetrystats.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/accels.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/gyros.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/gyrosbias.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/magnetometer.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/magbias.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/accelsensor.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/accelstate.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/gyrostate.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/gyrosensor.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/magnetosensor.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/magnetostate.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/camerastabsettings.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/flighttelemetrystats.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/systemstats.cpp \
|
||||
@ -148,13 +150,13 @@ SOURCES += $$UAVOBJECT_SYNTHETICS/accessorydesired.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/pathdesired.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/pathstatus.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/gpsvelocity.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/positionactual.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/positionstate.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/flightbatterystate.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/homelocation.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/mixersettings.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/mixerstatus.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/velocitydesired.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/velocityactual.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/velocitystate.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/groundtruth.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/fixedwingpathfollowersettings.cpp \
|
||||
$$UAVOBJECT_SYNTHETICS/fixedwingpathfollowerstatus.cpp \
|
||||
|
@ -1,5 +1,5 @@
|
||||
<xml>
|
||||
<object name="Accels" singleinstance="true" settings="false">
|
||||
<object name="AccelSensor" singleinstance="true" settings="false">
|
||||
<description>The accel data.</description>
|
||||
<field name="x" units="m/s^2" type="float" elements="1"/>
|
||||
<field name="y" units="m/s^2" type="float" elements="1"/>
|
||||
@ -7,7 +7,7 @@
|
||||
<field name="temperature" units="deg C" type="float" elements="1"/>
|
||||
<access gcs="readwrite" flight="readwrite"/>
|
||||
<telemetrygcs acked="false" updatemode="manual" period="0"/>
|
||||
<telemetryflight acked="false" updatemode="periodic" period="1000"/>
|
||||
<telemetryflight acked="false" updatemode="manual" period="0"/>
|
||||
<logging updatemode="manual" period="0"/>
|
||||
</object>
|
||||
</xml>
|
12
shared/uavobjectdefinition/accelstate.xml
Normal file
12
shared/uavobjectdefinition/accelstate.xml
Normal file
@ -0,0 +1,12 @@
|
||||
<xml>
|
||||
<object name="AccelState" singleinstance="true" settings="false">
|
||||
<description>The filtered acceleration data.</description>
|
||||
<field name="x" units="m/s^2" type="float" elements="1"/>
|
||||
<field name="y" units="m/s^2" type="float" elements="1"/>
|
||||
<field name="z" units="m/s^2" type="float" elements="1"/>
|
||||
<access gcs="readwrite" flight="readwrite"/>
|
||||
<telemetrygcs acked="false" updatemode="manual" period="0"/>
|
||||
<telemetryflight acked="false" updatemode="periodic" period="1000"/>
|
||||
<logging updatemode="manual" period="0"/>
|
||||
</object>
|
||||
</xml>
|
@ -1,5 +1,5 @@
|
||||
<xml>
|
||||
<object name="AirspeedActual" singleinstance="true" settings="false">
|
||||
<object name="AirspeedState" singleinstance="true" settings="false">
|
||||
<description>UAVO for true airspeed, calibrated airspeed, angle of attack, and angle of slip</description>
|
||||
<field name="CalibratedAirspeed" units="m/s" type="float" elements="1"/>
|
||||
<field name="TrueAirspeed" units="m/s" type="float" elements="1"/>
|
@ -1,5 +1,5 @@
|
||||
<xml>
|
||||
<object name="AttitudeActual" singleinstance="true" settings="false">
|
||||
<object name="AttitudeState" singleinstance="true" settings="false">
|
||||
<description>The updated Attitude estimation from @ref AHRSCommsModule.</description>
|
||||
<field name="q1" units="" type="float" elements="1"/>
|
||||
<field name="q2" units="" type="float" elements="1"/>
|
@ -1,5 +1,5 @@
|
||||
<xml>
|
||||
<object name="BaroAltitude" singleinstance="true" settings="false">
|
||||
<object name="BaroSensor" singleinstance="true" settings="false">
|
||||
<description>The raw data from the barometric sensor with pressure, temperature and altitude estimate.</description>
|
||||
<field name="Altitude" units="m" type="float" elements="1"/>
|
||||
<field name="Temperature" units="C" type="float" elements="1"/>
|
@ -1,5 +1,5 @@
|
||||
<xml>
|
||||
<object name="Gyros" singleinstance="true" settings="false">
|
||||
<object name="GyroSensor" singleinstance="true" settings="false">
|
||||
<description>The gyro data.</description>
|
||||
<field name="x" units="deg/s" type="float" elements="1"/>
|
||||
<field name="y" units="deg/s" type="float" elements="1"/>
|
@ -1,6 +1,6 @@
|
||||
<xml>
|
||||
<object name="GyrosBias" singleinstance="true" settings="false">
|
||||
<description>The gyro data.</description>
|
||||
<object name="GyroState" singleinstance="true" settings="false">
|
||||
<description>The filtered rotation sensor data.</description>
|
||||
<field name="x" units="deg/s" type="float" elements="1"/>
|
||||
<field name="y" units="deg/s" type="float" elements="1"/>
|
||||
<field name="z" units="deg/s" type="float" elements="1"/>
|
@ -1,12 +0,0 @@
|
||||
<xml>
|
||||
<object name="MagBias" singleinstance="true" settings="false">
|
||||
<description>The gyro data.</description>
|
||||
<field name="x" units="mGau" type="float" elements="1"/>
|
||||
<field name="y" units="mGau" type="float" elements="1"/>
|
||||
<field name="z" units="mGau" type="float" elements="1"/>
|
||||
<access gcs="readwrite" flight="readwrite"/>
|
||||
<telemetrygcs acked="false" updatemode="manual" period="0"/>
|
||||
<telemetryflight acked="false" updatemode="periodic" period="1000"/>
|
||||
<logging updatemode="manual" period="0"/>
|
||||
</object>
|
||||
</xml>
|
12
shared/uavobjectdefinition/magnetosensor.xml
Normal file
12
shared/uavobjectdefinition/magnetosensor.xml
Normal file
@ -0,0 +1,12 @@
|
||||
<xml>
|
||||
<object name="MagnetoSensor" singleinstance="true" settings="false">
|
||||
<description>The mag data.</description>
|
||||
<field name="x" units="mGa" type="float" elements="1"/>
|
||||
<field name="y" units="mGa" type="float" elements="1"/>
|
||||
<field name="z" units="mGa" type="float" elements="1"/>
|
||||
<access gcs="readwrite" flight="readwrite"/>
|
||||
<telemetrygcs acked="false" updatemode="manual" period="0"/>
|
||||
<telemetryflight acked="false" updatemode="manual" period="0"/>
|
||||
<logging updatemode="manual" period="0"/>
|
||||
</object>
|
||||
</xml>
|
@ -1,5 +1,5 @@
|
||||
<xml>
|
||||
<object name="Magnetometer" singleinstance="true" settings="false">
|
||||
<object name="MagnetoState" singleinstance="true" settings="false">
|
||||
<description>The mag data.</description>
|
||||
<field name="x" units="mGa" type="float" elements="1"/>
|
||||
<field name="y" units="mGa" type="float" elements="1"/>
|
@ -1,5 +1,5 @@
|
||||
<xml>
|
||||
<object name="PositionActual" singleinstance="true" settings="false">
|
||||
<object name="PositionState" singleinstance="true" settings="false">
|
||||
<description>Contains the current position relative to @ref HomeLocation</description>
|
||||
<field name="North" units="m" type="float" elements="1"/>
|
||||
<field name="East" units="m" type="float" elements="1"/>
|
@ -1,6 +1,6 @@
|
||||
<xml>
|
||||
<object name="VelocityActual" singleinstance="true" settings="false">
|
||||
<description>Updated by @ref AHRSCommsModule and used within @ref GuidanceModule for velocity control</description>
|
||||
<object name="VelocityState" singleinstance="true" settings="false">
|
||||
<description>Updated by filters, velocity relative to @ref HomeLocation</description>
|
||||
<field name="North" units="m/s" type="float" elements="1"/>
|
||||
<field name="East" units="m/s" type="float" elements="1"/>
|
||||
<field name="Down" units="m/s" type="float" elements="1"/>
|
Loading…
x
Reference in New Issue
Block a user