1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-02-20 10:54:14 +01:00

Create separate UAVOs for the sensors.

This commit is contained in:
James Cotton 2011-12-12 01:34:26 -06:00
parent 7273f87f9b
commit d22e0e66dd
7 changed files with 61 additions and 38 deletions

View File

@ -50,7 +50,9 @@
#include "pios.h"
#include "attitude.h"
#include "attituderaw.h"
#include "magnetometer.h"
#include "accels.h"
#include "gyros.h"
#include "attitudeactual.h"
#include "attitudesettings.h"
#include "baroaltitude.h"
@ -94,23 +96,13 @@ static int8_t rotate = 0;
static bool zero_during_arming = false;
static bool bias_correct_gyro = true;
struct gyro_data {
float x;
float y;
float z;
};
struct accel_data {
float x;
float y;
float z;
};
struct mag_data {
float x;
float y;
float z;
};
/**
* API for sensor fusion algorithms:
* Configure(xQueueHandle gyro, xQueueHandle accel, xQueueHandle mag, xQueueHandle baro)
* Stores all the queues the algorithm will pull data from
* FinalizeSensors() -- before saving the sensors modifies them based on internal state (gyro bias)
* Update() -- queries queues and updates the attitude estiamte
*/
/**
* Initialise the module, called on startup
@ -119,10 +111,10 @@ struct mag_data {
int32_t AttitudeStart(void)
{
// Create the queues for the sensors
gyroQueue = xQueueCreate(SENSOR_QUEUE_SIZE, sizeof(struct gyro_data));
accelQueue = xQueueCreate(SENSOR_QUEUE_SIZE, sizeof(struct accel_data));
magQueue = xQueueCreate(SENSOR_QUEUE_SIZE, sizeof(struct mag_data));
gyroQueue = xQueueCreate(SENSOR_QUEUE_SIZE, sizeof(GyrosData));
accelQueue = xQueueCreate(SENSOR_QUEUE_SIZE, sizeof(AccelsData));
magQueue = xQueueCreate(SENSOR_QUEUE_SIZE, sizeof(MagnetometerData));
// Start main task
xTaskCreate(SensorTask, (signed char *)"Sensors", STACK_SIZE_BYTES/4, NULL, TASK_PRIORITY, &sensorTaskHandle);
xTaskCreate(AttitudeTask, (signed char *)"Attitude", STACK_SIZE_BYTES/4, NULL, TASK_PRIORITY, &attitudeTaskHandle);

View File

@ -32,7 +32,9 @@ UAVOBJSRCFILENAMES += attitudesettings
UAVOBJSRCFILENAMES += inssettings
UAVOBJSRCFILENAMES += insstatus
UAVOBJSRCFILENAMES += attitudeactual
UAVOBJSRCFILENAMES += attituderaw
UAVOBJSRCFILENAMES += gyros
UAVOBJSRCFILENAMES += accels
UAVOBJSRCFILENAMES += magnetometer
UAVOBJSRCFILENAMES += baroaltitude
UAVOBJSRCFILENAMES += flightbatterysettings
UAVOBJSRCFILENAMES += firmwareiapobj

View File

@ -29,7 +29,9 @@ HEADERS += $$UAVOBJECT_SYNTHETICS/accessorydesired.h \
$$UAVOBJECT_SYNTHETICS/attitudeactual.h \
$$UAVOBJECT_SYNTHETICS/inssettings.h \
$$UAVOBJECT_SYNTHETICS/gcstelemetrystats.h \
$$UAVOBJECT_SYNTHETICS/attituderaw.h \
$$UAVOBJECT_SYNTHETICS/gyros.h \
$$UAVOBJECT_SYNTHETICS/accels.h \
$$UAVOBJECT_SYNTHETICS/magnetometer.h \
$$UAVOBJECT_SYNTHETICS/camerastabsettings.h \
$$UAVOBJECT_SYNTHETICS/flighttelemetrystats.h \
$$UAVOBJECT_SYNTHETICS/systemstats.h \
@ -79,7 +81,9 @@ SOURCES += $$UAVOBJECT_SYNTHETICS/accessorydesired.cpp \
$$UAVOBJECT_SYNTHETICS/attitudeactual.cpp \
$$UAVOBJECT_SYNTHETICS/inssettings.cpp \
$$UAVOBJECT_SYNTHETICS/gcstelemetrystats.cpp \
$$UAVOBJECT_SYNTHETICS/attituderaw.cpp \
$$UAVOBJECT_SYNTHETICS/accels.cpp \
$$UAVOBJECT_SYNTHETICS/gyros.cpp \
$$UAVOBJECT_SYNTHETICS/magnetometer.cpp \
$$UAVOBJECT_SYNTHETICS/camerastabsettings.cpp \
$$UAVOBJECT_SYNTHETICS/flighttelemetrystats.cpp \
$$UAVOBJECT_SYNTHETICS/systemstats.cpp \

View File

@ -0,0 +1,13 @@
<xml>
<object name="Accels" singleinstance="true" settings="false">
<description>The accel 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"/>
<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"/>
<logging updatemode="never" period="0"/>
</object>
</xml>

View File

@ -1,13 +0,0 @@
<xml>
<object name="AttitudeRaw" singleinstance="true" settings="false">
<description>The raw attitude sensor data from @ref AHRSCommsModule. Not always updated.</description>
<field name="magnetometers" units="mGa" type="int16" elementnames="X,Y,Z"/>
<field name="gyros" units="deg/s" type="float" elementnames="X,Y,Z"/>
<field name="temperature" units="deg C" type="float" elementnames="gyro,accel"/>
<field name="accels" units="m/s^2" type="float" elementnames="X,Y,Z"/>
<access gcs="readwrite" flight="readwrite"/>
<telemetrygcs acked="false" updatemode="manual" period="0"/>
<telemetryflight acked="false" updatemode="periodic" period="1000"/>
<logging updatemode="never" period="0"/>
</object>
</xml>

View File

@ -0,0 +1,13 @@
<xml>
<object name="Gyros" 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"/>
<field name="z" units="deg/s" type="float" elements="1"/>
<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"/>
<logging updatemode="never" period="0"/>
</object>
</xml>

View File

@ -0,0 +1,12 @@
<xml>
<object name="Magnetometer" 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="periodic" period="1000"/>
<logging updatemode="never" period="0"/>
</object>
</xml>