From c3e509c2cb9d612b1ca0c85997b775a64c34d33a Mon Sep 17 00:00:00 2001 From: stac Date: Sat, 14 Aug 2010 23:42:14 +0000 Subject: [PATCH] attituderaw: Replace HeadingActual with AttitudeRaw AttitudeRaw now includes: - magnetometers XYZ (in mG) - gyros XYZ (raw ADC samples) - accelerometers XYZ (raw ADC samples) - placeholder for gyro temp sensors (read as zero for now) git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@1289 ebee16cc-31ac-478f-84a7-5cbb03baadba --- flight/AHRS/ahrs.c | 60 ++++++++--- flight/AHRS/inc/pios_board.h | 101 +----------------- flight/OpenPilot/Makefile | 2 +- .../OpenPilot/Modules/AHRSComms/ahrs_comms.c | 37 ++++--- .../{headingactual.c => attituderaw.c} | 22 ++-- flight/OpenPilot/UAVObjects/inc/attituderaw.h | 94 ++++++++++++++++ .../OpenPilot/UAVObjects/inc/headingactual.h | 78 -------------- flight/OpenPilot/UAVObjects/uavobjectsinit.c | 4 +- flight/PiOS/Common/pios_opahrs.c | 11 +- flight/PiOS/inc/pios_opahrs.h | 4 +- flight/PiOS/inc/pios_opahrs_proto.h | 47 ++++---- .../{headingactual.cpp => attituderaw.cpp} | 55 ++++++---- .../{headingactual.h => attituderaw.h} | 50 ++++++--- .../{headingactual.py => attituderaw.py} | 51 ++++++--- ground/src/plugins/uavobjects/uavobjects.pro | 4 +- .../src/plugins/uavobjects/uavobjectsinit.cpp | 4 +- .../uavobjectdefinition/attituderaw.xml | 12 +++ .../uavobjectdefinition/headingactual.xml | 10 -- 18 files changed, 337 insertions(+), 309 deletions(-) rename flight/OpenPilot/UAVObjects/{headingactual.c => attituderaw.c} (78%) create mode 100644 flight/OpenPilot/UAVObjects/inc/attituderaw.h delete mode 100644 flight/OpenPilot/UAVObjects/inc/headingactual.h rename ground/src/plugins/uavobjects/{headingactual.cpp => attituderaw.cpp} (60%) rename ground/src/plugins/uavobjects/{headingactual.h => attituderaw.h} (53%) rename ground/src/plugins/uavobjects/{headingactual.py => attituderaw.py} (80%) create mode 100644 ground/src/shared/uavobjectdefinition/attituderaw.xml delete mode 100644 ground/src/shared/uavobjectdefinition/headingactual.xml diff --git a/flight/AHRS/ahrs.c b/flight/AHRS/ahrs.c index 36fb7ad1c..762172a9b 100644 --- a/flight/AHRS/ahrs.c +++ b/flight/AHRS/ahrs.c @@ -36,7 +36,6 @@ struct mag_sensor { uint8_t id[4]; struct { int16_t axis[3]; - float heading; } raw; }; @@ -48,6 +47,18 @@ struct accel_sensor { } raw; }; +struct gyro_sensor { + struct { + uint16_t x; + uint16_t y; + uint16_t z; + } raw; + struct { + uint16_t xy; + uint16_t z; + } temp; +}; + struct attitude_solution { struct { float q1; @@ -65,6 +76,8 @@ struct attitude_solution { static struct mag_sensor mag_data; static struct accel_sensor accel_data; +static struct gyro_sensor gyro_data; + static struct attitude_solution attitude_data = { .quaternion = { .q1 = 1.011, @@ -137,14 +150,23 @@ int main() // Get magnetic readings PIOS_HMC5843_ReadMag(mag_data.raw.axis); - // Calculate the heading - mag_data.raw.heading = atan2((double)(mag_data.raw.axis[0]), (double)(-1 * mag_data.raw.axis[1])) * (180 / M_PI); - if(mag_data.raw.heading < 0) mag_data.raw.heading += 360; - // Test ADC - accel_data.raw.x = PIOS_ADC_PinGet(0); + accel_data.raw.x = PIOS_ADC_PinGet(2); accel_data.raw.y = PIOS_ADC_PinGet(1); - accel_data.raw.z = PIOS_ADC_PinGet(2); + accel_data.raw.z = PIOS_ADC_PinGet(0); + + gyro_data.raw.x = PIOS_ADC_PinGet(3); + gyro_data.raw.y = PIOS_ADC_PinGet(4); + gyro_data.raw.z = PIOS_ADC_PinGet(5); + +#if 0 + /* Turn this on when the temperature ADCs are configured */ + gyro_data.temp.xy = PIOS_ADC_PinGet(6); + gyro_data.temp.z = PIOS_ADC_PinGet(7); +#else + gyro_data.temp.xy = 0; + gyro_data.temp.z = 0; +#endif //PIOS_COM_SendFormattedString(PIOS_COM_AUX, "ADC Values: %d,%d,%d,%d,%d,%d\r\n", PIOS_ADC_PinGet(0), PIOS_ADC_PinGet(1), PIOS_ADC_PinGet(2), PIOS_ADC_PinGet(3), PIOS_ADC_PinGet(4), PIOS_ADC_PinGet(5)); @@ -243,13 +265,23 @@ void process_spi_request(void) dump_spi_message(PIOS_COM_AUX, "I", (uint8_t *)&user_tx_v1, sizeof(user_tx_v1)); lfsm_user_set_tx_v1 (&user_tx_v1); break; - case OPAHRS_MSG_V1_REQ_HEADING: - opahrs_msg_v1_init_user_tx (&user_tx_v1, OPAHRS_MSG_V1_RSP_HEADING); - user_tx_v1.payload.user.v.rsp.heading.raw_mag.x = mag_data.raw.axis[0]; - user_tx_v1.payload.user.v.rsp.heading.raw_mag.y = mag_data.raw.axis[1]; - user_tx_v1.payload.user.v.rsp.heading.raw_mag.z = mag_data.raw.axis[2]; - user_tx_v1.payload.user.v.rsp.heading.heading = mag_data.raw.heading; - dump_spi_message(PIOS_COM_AUX, "H", (uint8_t *)&user_tx_v1, sizeof(user_tx_v1)); + case OPAHRS_MSG_V1_REQ_ATTITUDERAW: + opahrs_msg_v1_init_user_tx (&user_tx_v1, OPAHRS_MSG_V1_RSP_ATTITUDERAW); + user_tx_v1.payload.user.v.rsp.attituderaw.mags.x = mag_data.raw.axis[0]; + user_tx_v1.payload.user.v.rsp.attituderaw.mags.y = mag_data.raw.axis[1]; + user_tx_v1.payload.user.v.rsp.attituderaw.mags.z = mag_data.raw.axis[2]; + + user_tx_v1.payload.user.v.rsp.attituderaw.gyros.x = gyro_data.raw.x; + user_tx_v1.payload.user.v.rsp.attituderaw.gyros.y = gyro_data.raw.y; + user_tx_v1.payload.user.v.rsp.attituderaw.gyros.z = gyro_data.raw.z; + user_tx_v1.payload.user.v.rsp.attituderaw.gyros.xy_temp = gyro_data.temp.xy; + user_tx_v1.payload.user.v.rsp.attituderaw.gyros.z_temp = gyro_data.temp.z; + + user_tx_v1.payload.user.v.rsp.attituderaw.accels.x = accel_data.raw.x; + user_tx_v1.payload.user.v.rsp.attituderaw.accels.y = accel_data.raw.y; + user_tx_v1.payload.user.v.rsp.attituderaw.accels.z = accel_data.raw.z; + + dump_spi_message(PIOS_COM_AUX, "R", (uint8_t *)&user_tx_v1, sizeof(user_tx_v1)); lfsm_user_set_tx_v1 (&user_tx_v1); break; case OPAHRS_MSG_V1_REQ_ATTITUDE: diff --git a/flight/AHRS/inc/pios_board.h b/flight/AHRS/inc/pios_board.h index 1cda2580b..7a5b3b5de 100644 --- a/flight/AHRS/inc/pios_board.h +++ b/flight/AHRS/inc/pios_board.h @@ -118,105 +118,14 @@ TIM8 | | | | #define PIOS_COM_AUX 0 #define PIOS_COM_DEBUG PIOS_COM_AUX -#if 0 //------------------------- // ADC // PIOS_ADC_PinGet(0) = Accel Z -// PIOS_ADC_PinGet(1) = -// PIOS_ADC_PinGet(2) = -// PIOS_ADC_PinGet(3) = -// PIOS_ADC_PinGet(4) = Accel ? -// PIOS_ADC_PinGet(5) = -// PIOS_ADC_PinGet(6) = -// PIOS_ADC_PinGet(7) = -//------------------------- -//#define PIOS_ADC_OVERSAMPLING_RATE 1 -#define PIOS_ADC_USE_TEMP_SENSOR 0 -#define PIOS_ADC_TEMP_SENSOR_ADC ADC1 -#define PIOS_ADC_TEMP_SENSOR_ADC_CHANNEL 1 - -#define PIOS_ADC_PIN1_GPIO_PORT GPIOA // PA0 (Accel Z) -#define PIOS_ADC_PIN1_GPIO_PIN GPIO_Pin_0 // ADC12_IN0 -#define PIOS_ADC_PIN1_GPIO_CHANNEL ADC_Channel_0 -#define PIOS_ADC_PIN1_ADC ADC1 -#define PIOS_ADC_PIN1_ADC_NUMBER 1 - -#define PIOS_ADC_PIN2_GPIO_PORT GPIOA // PA1 (Accel Y) -#define PIOS_ADC_PIN2_GPIO_PIN GPIO_Pin_1 // ADC123_IN1 -#define PIOS_ADC_PIN2_GPIO_CHANNEL ADC_Channel_1 -#define PIOS_ADC_PIN2_ADC ADC1 -#define PIOS_ADC_PIN2_ADC_NUMBER 2 - -#define PIOS_ADC_PIN3_GPIO_PORT GPIOA // PA1 (Accel X) -#define PIOS_ADC_PIN3_GPIO_PIN GPIO_Pin_2 // ADC12_IN2 -#define PIOS_ADC_PIN3_GPIO_CHANNEL ADC_Channel_2 -#define PIOS_ADC_PIN3_ADC ADC1 -#define PIOS_ADC_PIN3_ADC_NUMBER 3 - -#define PIOS_ADC_PIN4_GPIO_PORT GPIOA // PA4 (Gyro X) -#define PIOS_ADC_PIN4_GPIO_PIN GPIO_Pin_4 // ADC12_IN4 -#define PIOS_ADC_PIN4_GPIO_CHANNEL ADC_Channel_4 -#define PIOS_ADC_PIN4_ADC ADC1 -#define PIOS_ADC_PIN4_ADC_NUMBER 4 - -#define PIOS_ADC_PIN5_GPIO_PORT GPIOA // PA5 (Gyro Y) -#define PIOS_ADC_PIN5_GPIO_PIN GPIO_Pin_5 // ADC12_IN5 -#define PIOS_ADC_PIN5_GPIO_CHANNEL ADC_Channel_5 -#define PIOS_ADC_PIN5_ADC ADC2 -#define PIOS_ADC_PIN5_ADC_NUMBER 1 - -#define PIOS_ADC_PIN6_GPIO_PORT GPIOA // PA6 (XY Temp) -#define PIOS_ADC_PIN6_GPIO_PIN GPIO_Pin_6 // ADC12_IN6 -#define PIOS_ADC_PIN6_GPIO_CHANNEL ADC_Channel_6 -#define PIOS_ADC_PIN6_ADC ADC2 -#define PIOS_ADC_PIN6_ADC_NUMBER 2 - -#define PIOS_ADC_PIN7_GPIO_PORT GPIOA // PA7 (Gyro Z) -#define PIOS_ADC_PIN7_GPIO_PIN GPIO_Pin_7 // ADC12_IN7 -#define PIOS_ADC_PIN7_GPIO_CHANNEL ADC_Channel_7 -#define PIOS_ADC_PIN7_ADC ADC2 -#define PIOS_ADC_PIN7_ADC_NUMBER 3 - -#define PIOS_ADC_PIN8_GPIO_PORT GPIOB // PB1 (Z Temp) -#define PIOS_ADC_PIN8_GPIO_PIN GPIO_Pin_1 // ADC12_IN9 -#define PIOS_ADC_PIN8_GPIO_CHANNEL ADC_Channel_9 -#define PIOS_ADC_PIN8_ADC ADC2 -#define PIOS_ADC_PIN8_ADC_NUMBER 4 - -#define PIOS_ADC_NUM_PINS 8 - -#define PIOS_ADC_PORTS { PIOS_ADC_PIN1_GPIO_PORT, PIOS_ADC_PIN2_GPIO_PORT, PIOS_ADC_PIN3_GPIO_PORT, PIOS_ADC_PIN4_GPIO_PORT, PIOS_ADC_PIN5_GPIO_PORT, PIOS_ADC_PIN6_GPIO_PORT, PIOS_ADC_PIN7_GPIO_PORT, PIOS_ADC_PIN8_GPIO_PORT } -#define PIOS_ADC_PINS { PIOS_ADC_PIN1_GPIO_PIN, PIOS_ADC_PIN2_GPIO_PIN, PIOS_ADC_PIN3_GPIO_PIN, PIOS_ADC_PIN4_GPIO_PIN, PIOS_ADC_PIN5_GPIO_PIN, PIOS_ADC_PIN6_GPIO_PIN, PIOS_ADC_PIN7_GPIO_PIN, PIOS_ADC_PIN8_GPIO_PIN } -#define PIOS_ADC_CHANNELS { PIOS_ADC_PIN1_GPIO_CHANNEL, PIOS_ADC_PIN2_GPIO_CHANNEL, PIOS_ADC_PIN3_GPIO_CHANNEL, PIOS_ADC_PIN4_GPIO_CHANNEL, PIOS_ADC_PIN5_GPIO_CHANNEL, PIOS_ADC_PIN6_GPIO_CHANNEL, PIOS_ADC_PIN7_GPIO_CHANNEL, PIOS_ADC_PIN8_GPIO_CHANNEL } -#define PIOS_ADC_MAPPING { PIOS_ADC_PIN1_ADC, PIOS_ADC_PIN2_ADC, PIOS_ADC_PIN3_ADC, PIOS_ADC_PIN4_ADC, PIOS_ADC_PIN5_ADC, PIOS_ADC_PIN6_ADC, PIOS_ADC_PIN7_ADC, PIOS_ADC_PIN8_ADC } -#define PIOS_ADC_CHANNEL_MAPPING { PIOS_ADC_PIN1_ADC_NUMBER, PIOS_ADC_PIN2_ADC_NUMBER, PIOS_ADC_PIN3_ADC_NUMBER, PIOS_ADC_PIN4_ADC_NUMBER, PIOS_ADC_PIN5_ADC_NUMBER, PIOS_ADC_PIN6_ADC_NUMBER, PIOS_ADC_PIN7_ADC_NUMBER, PIOS_ADC_PIN8_ADC_NUMBER } -#define PIOS_ADC_NUM_CHANNELS (PIOS_ADC_NUM_PINS + PIOS_ADC_USE_TEMP_SENSOR) -#define PIOS_ADC_NUM_ADC_CHANNELS 2 -#define PIOS_ADC_USE_ADC2 1 -#define PIOS_ADC_CLOCK_FUNCTION RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC2, ENABLE) -#define PIOS_ADC_ADCCLK RCC_PCLK2_Div8 - /* RCC_PCLK2_Div2: ADC clock = PCLK2/2 */ - /* RCC_PCLK2_Div4: ADC clock = PCLK2/4 */ - /* RCC_PCLK2_Div6: ADC clock = PCLK2/6 */ - /* RCC_PCLK2_Div8: ADC clock = PCLK2/8 */ -#define PIOS_ADC_SAMPLE_TIME ADC_SampleTime_239Cycles5 - /* Sample time: */ - /* With an ADCCLK = 14 MHz and a sampling time of 293.5 cycles: */ - /* Tconv = 239.5 + 12.5 = 252 cycles = 18�s */ - /* (1 / (ADCCLK / CYCLES)) = Sample Time (�S) */ -#define PIOS_ADC_IRQ_PRIO PIOS_IRQ_PRIO_HIGH -#endif - -//------------------------- -// ADC -// PIOS_ADC_PinGet(0) = Accel Z -// PIOS_ADC_PinGet(1) = -// PIOS_ADC_PinGet(2) = -// PIOS_ADC_PinGet(3) = -// PIOS_ADC_PinGet(4) = Accel ? -// PIOS_ADC_PinGet(5) = -// PIOS_ADC_PinGet(6) = -// PIOS_ADC_PinGet(7) = +// PIOS_ADC_PinGet(1) = Accel Y +// PIOS_ADC_PinGet(2) = Accel X +// PIOS_ADC_PinGet(3) = Gyro X +// PIOS_ADC_PinGet(4) = Gyro Y +// PIOS_ADC_PinGet(5) = Gyro Z //------------------------- //#define PIOS_ADC_OVERSAMPLING_RATE 1 #define PIOS_ADC_USE_TEMP_SENSOR 0 diff --git a/flight/OpenPilot/Makefile b/flight/OpenPilot/Makefile index 1b50e90bd..95906e2bf 100644 --- a/flight/OpenPilot/Makefile +++ b/flight/OpenPilot/Makefile @@ -167,7 +167,7 @@ SRC += $(OPUAVOBJ)/flightsituationactual.c SRC += $(OPUAVOBJ)/navigationsettings.c SRC += $(OPUAVOBJ)/navigationdesired.c SRC += $(OPUAVOBJ)/flightbatterystate.c -SRC += $(OPUAVOBJ)/headingactual.c +SRC += $(OPUAVOBJ)/attituderaw.c endif ## PIOS Hardware (STM32F10x) diff --git a/flight/OpenPilot/Modules/AHRSComms/ahrs_comms.c b/flight/OpenPilot/Modules/AHRSComms/ahrs_comms.c index 040956266..ec5abc440 100644 --- a/flight/OpenPilot/Modules/AHRSComms/ahrs_comms.c +++ b/flight/OpenPilot/Modules/AHRSComms/ahrs_comms.c @@ -4,7 +4,7 @@ * @{ * @addtogroup AHRSCommsModule AHRSComms Module * @brief Handles communication with AHRS and updating position - * Specifically updates the the @ref AttitudeActual "AttitudeActual" and @ref HeadingActual "HeadingActual" settings objects + * Specifically updates the the @ref AttitudeActual "AttitudeActual" and @ref AttitudeRaw "AttitudeRaw" settings objects * @{ * * @file ahrs_comms.c @@ -53,7 +53,7 @@ #include "ahrs_comms.h" #include "attitudeactual.h" #include "attitudesettings.h" -#include "headingactual.h" +#include "attituderaw.h" #include "ahrsstatus.h" #include "alarms.h" @@ -72,7 +72,7 @@ static xTaskHandle taskHandle; // Private functions static void ahrscommsTask(void* parameters); static void update_attitude_actual(struct opahrs_msg_v1_rsp_attitude * attitude); -static void update_heading_actual(struct opahrs_msg_v1_rsp_heading * heading); +static void update_attitude_raw(struct opahrs_msg_v1_rsp_attituderaw * attituderaw); static void update_ahrs_status(struct opahrs_msg_v1_rsp_serial * serial); /** @@ -131,8 +131,8 @@ static void ahrscommsTask(void* parameters) break; } - if (PIOS_OPAHRS_GetHeading(&rsp) == OPAHRS_RESULT_OK) { - update_heading_actual(&(rsp.payload.user.v.rsp.heading)); + if (PIOS_OPAHRS_GetAttitudeRaw(&rsp) == OPAHRS_RESULT_OK) { + update_attitude_raw(&(rsp.payload.user.v.rsp.attituderaw)); } else { /* Comms error */ break; @@ -160,17 +160,26 @@ static void update_attitude_actual(struct opahrs_msg_v1_rsp_attitude * attitude) AttitudeActualSet(&data); } -static void update_heading_actual(struct opahrs_msg_v1_rsp_heading * heading) +static void update_attitude_raw(struct opahrs_msg_v1_rsp_attituderaw * attituderaw) { - HeadingActualData data; + AttitudeRawData data; - data.raw[HEADINGACTUAL_RAW_X] = heading->raw_mag.x; - data.raw[HEADINGACTUAL_RAW_Y] = heading->raw_mag.y; - data.raw[HEADINGACTUAL_RAW_Z] = heading->raw_mag.z; + data.magnetometers[ATTITUDERAW_MAGNETOMETERS_X] = attituderaw->mags.x; + data.magnetometers[ATTITUDERAW_MAGNETOMETERS_Y] = attituderaw->mags.y; + data.magnetometers[ATTITUDERAW_MAGNETOMETERS_Z] = attituderaw->mags.z; + + data.gyros[ATTITUDERAW_GYROS_X] = attituderaw->gyros.x; + data.gyros[ATTITUDERAW_GYROS_Y] = attituderaw->gyros.y; + data.gyros[ATTITUDERAW_GYROS_Z] = attituderaw->gyros.z; + + data.gyrotemp[ATTITUDERAW_GYROTEMP_XY] = attituderaw->gyros.xy_temp; + data.gyrotemp[ATTITUDERAW_GYROTEMP_Z] = attituderaw->gyros.z_temp; + + data.accelerometers[ATTITUDERAW_ACCELEROMETERS_X] = attituderaw->accels.x; + data.accelerometers[ATTITUDERAW_ACCELEROMETERS_Y] = attituderaw->accels.y; + data.accelerometers[ATTITUDERAW_ACCELEROMETERS_Z] = attituderaw->accels.z; - data.heading = heading->heading; - - HeadingActualSet(&data); + AttitudeRawSet(&data); } static void update_ahrs_status(struct opahrs_msg_v1_rsp_serial * serial) @@ -190,4 +199,4 @@ static void update_ahrs_status(struct opahrs_msg_v1_rsp_serial * serial) /** * @} * @} - */ \ No newline at end of file + */ diff --git a/flight/OpenPilot/UAVObjects/headingactual.c b/flight/OpenPilot/UAVObjects/attituderaw.c similarity index 78% rename from flight/OpenPilot/UAVObjects/headingactual.c rename to flight/OpenPilot/UAVObjects/attituderaw.c index 45215b5c7..9ab1d1972 100644 --- a/flight/OpenPilot/UAVObjects/headingactual.c +++ b/flight/OpenPilot/UAVObjects/attituderaw.c @@ -1,12 +1,12 @@ /** ****************************************************************************** * - * @file headingactual.c + * @file attituderaw.c * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. - * @brief Implementation of the HeadingActual object. This file has been + * @brief Implementation of the AttitudeRaw object. This file has been * automatically generated by the UAVObjectGenerator. * - * @note Object definition file: headingactual.xml. + * @note Object definition file: attituderaw.xml. * This is an automatically generated file. * DO NOT modify manually. * @@ -30,7 +30,7 @@ */ #include "openpilot.h" -#include "headingactual.h" +#include "attituderaw.h" // Private variables static UAVObjHandle handle; @@ -43,11 +43,11 @@ static void setDefaults(UAVObjHandle obj, uint16_t instId); * \return 0 Success * \return -1 Failure */ -int32_t HeadingActualInitialize() +int32_t AttitudeRawInitialize() { // Register object with the object manager - handle = UAVObjRegister(HEADINGACTUAL_OBJID, HEADINGACTUAL_NAME, HEADINGACTUAL_METANAME, 0, - HEADINGACTUAL_ISSINGLEINST, HEADINGACTUAL_ISSETTINGS, HEADINGACTUAL_NUMBYTES, &setDefaults); + handle = UAVObjRegister(ATTITUDERAW_OBJID, ATTITUDERAW_NAME, ATTITUDERAW_METANAME, 0, + ATTITUDERAW_ISSINGLEINST, ATTITUDERAW_ISSETTINGS, ATTITUDERAW_NUMBYTES, &setDefaults); // Done if (handle != 0) @@ -67,12 +67,12 @@ int32_t HeadingActualInitialize() */ static void setDefaults(UAVObjHandle obj, uint16_t instId) { - HeadingActualData data; + AttitudeRawData data; UAVObjMetadata metadata; // Initialize object fields to their default values UAVObjGetInstanceData(obj, instId, &data); - memset(&data, 0, sizeof(HeadingActualData)); + memset(&data, 0, sizeof(AttitudeRawData)); UAVObjSetInstanceData(obj, instId, &data); @@ -81,7 +81,7 @@ static void setDefaults(UAVObjHandle obj, uint16_t instId) metadata.gcsAccess = ACCESS_READWRITE; metadata.telemetryAcked = 0; metadata.telemetryUpdateMode = UPDATEMODE_PERIODIC; - metadata.telemetryUpdatePeriod = 500; + metadata.telemetryUpdatePeriod = 1000; metadata.gcsTelemetryAcked = 0; metadata.gcsTelemetryUpdateMode = UPDATEMODE_MANUAL; metadata.gcsTelemetryUpdatePeriod = 0; @@ -93,7 +93,7 @@ static void setDefaults(UAVObjHandle obj, uint16_t instId) /** * Get object handle */ -UAVObjHandle HeadingActualHandle() +UAVObjHandle AttitudeRawHandle() { return handle; } diff --git a/flight/OpenPilot/UAVObjects/inc/attituderaw.h b/flight/OpenPilot/UAVObjects/inc/attituderaw.h new file mode 100644 index 000000000..ec5e230ce --- /dev/null +++ b/flight/OpenPilot/UAVObjects/inc/attituderaw.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * + * @file attituderaw.h + * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. + * @brief Implementation of the AttitudeRaw object. This file has been + * automatically generated by the UAVObjectGenerator. + * + * @note Object definition file: attituderaw.xml. + * This is an automatically generated file. + * DO NOT modify manually. + * + * @see The GNU Public License (GPL) Version 3 + * + *****************************************************************************/ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef ATTITUDERAW_H +#define ATTITUDERAW_H + +// Object constants +#define ATTITUDERAW_OBJID 4179445416U +#define ATTITUDERAW_NAME "AttitudeRaw" +#define ATTITUDERAW_METANAME "AttitudeRawMeta" +#define ATTITUDERAW_ISSINGLEINST 1 +#define ATTITUDERAW_ISSETTINGS 0 +#define ATTITUDERAW_NUMBYTES sizeof(AttitudeRawData) + +// Object access macros +#define AttitudeRawGet(dataOut) UAVObjGetData(AttitudeRawHandle(), dataOut) +#define AttitudeRawSet(dataIn) UAVObjSetData(AttitudeRawHandle(), dataIn) +#define AttitudeRawInstGet(instId, dataOut) UAVObjGetInstanceData(AttitudeRawHandle(), instId, dataOut) +#define AttitudeRawInstSet(instId, dataIn) UAVObjSetInstanceData(AttitudeRawHandle(), instId, dataIn) +#define AttitudeRawConnectQueue(queue) UAVObjConnectQueue(AttitudeRawHandle(), queue, EV_MASK_ALL_UPDATES) +#define AttitudeRawConnectCallback(cb) UAVObjConnectCallback(AttitudeRawHandle(), cb, EV_MASK_ALL_UPDATES) +#define AttitudeRawCreateInstance() UAVObjCreateInstance(AttitudeRawHandle()) +#define AttitudeRawRequestUpdate() UAVObjRequestUpdate(AttitudeRawHandle()) +#define AttitudeRawRequestInstUpdate(instId) UAVObjRequestInstanceUpdate(AttitudeRawHandle(), instId) +#define AttitudeRawUpdated() UAVObjUpdated(AttitudeRawHandle()) +#define AttitudeRawInstUpdated(instId) UAVObjUpdated(AttitudeRawHandle(), instId) +#define AttitudeRawGetMetadata(dataOut) UAVObjGetMetadata(AttitudeRawHandle(), dataOut) +#define AttitudeRawSetMetadata(dataIn) UAVObjSetMetadata(AttitudeRawHandle(), dataIn) + +// Object data +typedef struct { + int16_t magnetometers[3]; + uint16_t gyros[3]; + uint16_t gyrotemp[2]; + uint16_t accelerometers[3]; + +} __attribute__((packed)) AttitudeRawData; + +// Field information +// Field magnetometers information +/* Array element names for field magnetometers */ +typedef enum { ATTITUDERAW_MAGNETOMETERS_X=0, ATTITUDERAW_MAGNETOMETERS_Y=1, ATTITUDERAW_MAGNETOMETERS_Z=2 } AttitudeRawmagnetometersElem; +/* Number of elements for field magnetometers */ +#define ATTITUDERAW_MAGNETOMETERS_NUMELEM 3 +// Field gyros information +/* Array element names for field gyros */ +typedef enum { ATTITUDERAW_GYROS_X=0, ATTITUDERAW_GYROS_Y=1, ATTITUDERAW_GYROS_Z=2 } AttitudeRawgyrosElem; +/* Number of elements for field gyros */ +#define ATTITUDERAW_GYROS_NUMELEM 3 +// Field gyrotemp information +/* Array element names for field gyrotemp */ +typedef enum { ATTITUDERAW_GYROTEMP_XY=0, ATTITUDERAW_GYROTEMP_Z=1 } AttitudeRawgyrotempElem; +/* Number of elements for field gyrotemp */ +#define ATTITUDERAW_GYROTEMP_NUMELEM 2 +// Field accelerometers information +/* Array element names for field accelerometers */ +typedef enum { ATTITUDERAW_ACCELEROMETERS_X=0, ATTITUDERAW_ACCELEROMETERS_Y=1, ATTITUDERAW_ACCELEROMETERS_Z=2 } AttitudeRawaccelerometersElem; +/* Number of elements for field accelerometers */ +#define ATTITUDERAW_ACCELEROMETERS_NUMELEM 3 + + +// Generic interface functions +int32_t AttitudeRawInitialize(); +UAVObjHandle AttitudeRawHandle(); + +#endif // ATTITUDERAW_H diff --git a/flight/OpenPilot/UAVObjects/inc/headingactual.h b/flight/OpenPilot/UAVObjects/inc/headingactual.h deleted file mode 100644 index 8133bc66c..000000000 --- a/flight/OpenPilot/UAVObjects/inc/headingactual.h +++ /dev/null @@ -1,78 +0,0 @@ -/** - ****************************************************************************** - * - * @file headingactual.h - * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. - * @brief Implementation of the HeadingActual object. This file has been - * automatically generated by the UAVObjectGenerator. - * - * @note Object definition file: headingactual.xml. - * This is an automatically generated file. - * DO NOT modify manually. - * - * @see The GNU Public License (GPL) Version 3 - * - *****************************************************************************/ -/* - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef HEADINGACTUAL_H -#define HEADINGACTUAL_H - -// Object constants -#define HEADINGACTUAL_OBJID 2921442332U -#define HEADINGACTUAL_NAME "HeadingActual" -#define HEADINGACTUAL_METANAME "HeadingActualMeta" -#define HEADINGACTUAL_ISSINGLEINST 1 -#define HEADINGACTUAL_ISSETTINGS 0 -#define HEADINGACTUAL_NUMBYTES sizeof(HeadingActualData) - -// Object access macros -#define HeadingActualGet(dataOut) UAVObjGetData(HeadingActualHandle(), dataOut) -#define HeadingActualSet(dataIn) UAVObjSetData(HeadingActualHandle(), dataIn) -#define HeadingActualInstGet(instId, dataOut) UAVObjGetInstanceData(HeadingActualHandle(), instId, dataOut) -#define HeadingActualInstSet(instId, dataIn) UAVObjSetInstanceData(HeadingActualHandle(), instId, dataIn) -#define HeadingActualConnectQueue(queue) UAVObjConnectQueue(HeadingActualHandle(), queue, EV_MASK_ALL_UPDATES) -#define HeadingActualConnectCallback(cb) UAVObjConnectCallback(HeadingActualHandle(), cb, EV_MASK_ALL_UPDATES) -#define HeadingActualCreateInstance() UAVObjCreateInstance(HeadingActualHandle()) -#define HeadingActualRequestUpdate() UAVObjRequestUpdate(HeadingActualHandle()) -#define HeadingActualRequestInstUpdate(instId) UAVObjRequestInstanceUpdate(HeadingActualHandle(), instId) -#define HeadingActualUpdated() UAVObjUpdated(HeadingActualHandle()) -#define HeadingActualInstUpdated(instId) UAVObjUpdated(HeadingActualHandle(), instId) -#define HeadingActualGetMetadata(dataOut) UAVObjGetMetadata(HeadingActualHandle(), dataOut) -#define HeadingActualSetMetadata(dataIn) UAVObjSetMetadata(HeadingActualHandle(), dataIn) - -// Object data -typedef struct { - int16_t raw[3]; - float heading; - -} __attribute__((packed)) HeadingActualData; - -// Field information -// Field raw information -/* Array element names for field raw */ -typedef enum { HEADINGACTUAL_RAW_X=0, HEADINGACTUAL_RAW_Y=1, HEADINGACTUAL_RAW_Z=2 } HeadingActualrawElem; -/* Number of elements for field raw */ -#define HEADINGACTUAL_RAW_NUMELEM 3 -// Field heading information - - -// Generic interface functions -int32_t HeadingActualInitialize(); -UAVObjHandle HeadingActualHandle(); - -#endif // HEADINGACTUAL_H diff --git a/flight/OpenPilot/UAVObjects/uavobjectsinit.c b/flight/OpenPilot/UAVObjects/uavobjectsinit.c index 52209c5a0..d8eb95950 100644 --- a/flight/OpenPilot/UAVObjects/uavobjectsinit.c +++ b/flight/OpenPilot/UAVObjects/uavobjectsinit.c @@ -35,6 +35,7 @@ #include "altitudeactual.h" #include "attitudeactual.h" #include "attitudedesired.h" +#include "attituderaw.h" #include "attitudesettings.h" #include "exampleobject1.h" #include "exampleobject2.h" @@ -43,7 +44,6 @@ #include "flightsituationactual.h" #include "flighttelemetrystats.h" #include "gcstelemetrystats.h" -#include "headingactual.h" #include "manualcontrolcommand.h" #include "manualcontrolsettings.h" #include "navigationdesired.h" @@ -70,6 +70,7 @@ void UAVObjectsInitializeAll() AltitudeActualInitialize(); AttitudeActualInitialize(); AttitudeDesiredInitialize(); + AttitudeRawInitialize(); AttitudeSettingsInitialize(); ExampleObject1Initialize(); ExampleObject2Initialize(); @@ -78,7 +79,6 @@ void UAVObjectsInitializeAll() FlightSituationActualInitialize(); FlightTelemetryStatsInitialize(); GCSTelemetryStatsInitialize(); - HeadingActualInitialize(); ManualControlCommandInitialize(); ManualControlSettingsInitialize(); NavigationDesiredInitialize(); diff --git a/flight/PiOS/Common/pios_opahrs.c b/flight/PiOS/Common/pios_opahrs.c index d40a87d7b..2525869b9 100644 --- a/flight/PiOS/Common/pios_opahrs.c +++ b/flight/PiOS/Common/pios_opahrs.c @@ -222,8 +222,7 @@ extern enum opahrs_result PIOS_OPAHRS_Sync(struct opahrs_msg_v1 *rsp) return opahrs_msg_v1_recv_rsp (OPAHRS_MSG_V1_RSP_SYNC, rsp); } - -enum opahrs_result PIOS_OPAHRS_GetHeading(struct opahrs_msg_v1 *rsp) +enum opahrs_result PIOS_OPAHRS_GetAttitudeRaw(struct opahrs_msg_v1 *rsp) { struct opahrs_msg_v1 req; enum opahrs_result rc; @@ -232,8 +231,8 @@ enum opahrs_result PIOS_OPAHRS_GetHeading(struct opahrs_msg_v1 *rsp) return -1; } - /* Make up a serial number request */ - opahrs_msg_v1_init_user_tx (&req, OPAHRS_MSG_V1_REQ_HEADING); + /* Make up an attituderaw request */ + opahrs_msg_v1_init_user_tx (&req, OPAHRS_MSG_V1_REQ_ATTITUDERAW); /* Send the message until it is received */ rc = opahrs_msg_v1_send_req (&req); @@ -242,7 +241,7 @@ enum opahrs_result PIOS_OPAHRS_GetHeading(struct opahrs_msg_v1 *rsp) return rc; } - return opahrs_msg_v1_recv_rsp (OPAHRS_MSG_V1_RSP_HEADING, rsp); + return opahrs_msg_v1_recv_rsp (OPAHRS_MSG_V1_RSP_ATTITUDERAW, rsp); } enum opahrs_result PIOS_OPAHRS_GetAttitude(struct opahrs_msg_v1 *rsp) @@ -254,7 +253,7 @@ enum opahrs_result PIOS_OPAHRS_GetAttitude(struct opahrs_msg_v1 *rsp) return -1; } - /* Make up a serial number request */ + /* Make up an attitude solution request */ opahrs_msg_v1_init_user_tx (&req, OPAHRS_MSG_V1_REQ_ATTITUDE); /* Send the message until it is received */ diff --git a/flight/PiOS/inc/pios_opahrs.h b/flight/PiOS/inc/pios_opahrs.h index db294d793..a60371331 100644 --- a/flight/PiOS/inc/pios_opahrs.h +++ b/flight/PiOS/inc/pios_opahrs.h @@ -42,7 +42,7 @@ extern void PIOS_OPAHRS_Init(void); extern enum opahrs_result PIOS_OPAHRS_Sync(struct opahrs_msg_v1 *rsp); extern enum opahrs_result PIOS_OPAHRS_GetSerial(struct opahrs_msg_v1 *rsp); extern enum opahrs_result PIOS_OPAHRS_GetAttitude(struct opahrs_msg_v1 *rsp); -extern enum opahrs_result PIOS_OPAHRS_GetHeading(struct opahrs_msg_v1 *rsp); +extern enum opahrs_result PIOS_OPAHRS_GetAttitudeRaw(struct opahrs_msg_v1 *rsp); extern enum opahrs_result PIOS_OPAHRS_resync(void); #endif /* PIOS_OPAHRS_H */ @@ -50,4 +50,4 @@ extern enum opahrs_result PIOS_OPAHRS_resync(void); /** * @} * @} - */ \ No newline at end of file + */ diff --git a/flight/PiOS/inc/pios_opahrs_proto.h b/flight/PiOS/inc/pios_opahrs_proto.h index 20e6dd24d..220657947 100644 --- a/flight/PiOS/inc/pios_opahrs_proto.h +++ b/flight/PiOS/inc/pios_opahrs_proto.h @@ -184,19 +184,19 @@ struct opahrs_msg_v1_req_reset { struct opahrs_msg_v1_req_serial { } __attribute__((__packed__)); -struct opahrs_msg_v1_req_heading { +struct opahrs_msg_v1_req_attituderaw { } __attribute__((__packed__)); struct opahrs_msg_v1_req_attitude { } __attribute__((__packed__)); union opahrs_msg_v1_req { - struct opahrs_msg_v1_req_nop nop; - struct opahrs_msg_v1_req_sync sync; - struct opahrs_msg_v1_req_reset reset; - struct opahrs_msg_v1_req_serial serial; - struct opahrs_msg_v1_req_heading heading; - struct opahrs_msg_v1_req_attitude attitude; + struct opahrs_msg_v1_req_nop nop; + struct opahrs_msg_v1_req_sync sync; + struct opahrs_msg_v1_req_reset reset; + struct opahrs_msg_v1_req_serial serial; + struct opahrs_msg_v1_req_attituderaw attituderaw; + struct opahrs_msg_v1_req_attitude attitude; } __attribute__((__packed__)); struct opahrs_msg_v1_rsp_sync { @@ -212,15 +212,24 @@ struct opahrs_msg_v1_rsp_serial { uint8_t serial_bcd[25]; } __attribute__((__packed__)); -struct opahrs_msg_v1_rsp_heading { +struct opahrs_msg_v1_rsp_attituderaw { struct { - float scale; int16_t x; int16_t y; int16_t z; - } raw_mag; - - uint16_t heading; + } mags; + struct { + uint16_t x; + uint16_t y; + uint16_t z; + uint16_t xy_temp; + uint16_t z_temp; + } gyros; + struct { + uint16_t x; + uint16_t y; + uint16_t z; + } accels; } __attribute__((__packed__)); struct opahrs_msg_v1_rsp_attitude { @@ -238,10 +247,10 @@ struct opahrs_msg_v1_rsp_attitude { } __attribute__((__packed__)); union opahrs_msg_v1_rsp { - struct opahrs_msg_v1_rsp_sync sync; - struct opahrs_msg_v1_rsp_serial serial; - struct opahrs_msg_v1_rsp_heading heading; - struct opahrs_msg_v1_rsp_attitude attitude; + struct opahrs_msg_v1_rsp_sync sync; + struct opahrs_msg_v1_rsp_serial serial; + struct opahrs_msg_v1_rsp_attituderaw attituderaw; + struct opahrs_msg_v1_rsp_attitude attitude; } __attribute__((__packed__)); enum opahrs_msg_v1_tag { @@ -249,12 +258,12 @@ enum opahrs_msg_v1_tag { OPAHRS_MSG_V1_REQ_SYNC, OPAHRS_MSG_V1_REQ_RESET, OPAHRS_MSG_V1_REQ_SERIAL, - OPAHRS_MSG_V1_REQ_HEADING, + OPAHRS_MSG_V1_REQ_ATTITUDERAW, OPAHRS_MSG_V1_REQ_ATTITUDE, OPAHRS_MSG_V1_RSP_SYNC, OPAHRS_MSG_V1_RSP_SERIAL, - OPAHRS_MSG_V1_RSP_HEADING, + OPAHRS_MSG_V1_RSP_ATTITUDERAW, OPAHRS_MSG_V1_RSP_ATTITUDE, }; @@ -288,4 +297,4 @@ extern void opahrs_msg_v1_init_link_tx (struct opahrs_msg_v1 * msg, enum opahrs_ /** * @} * @} - */ \ No newline at end of file + */ diff --git a/ground/src/plugins/uavobjects/headingactual.cpp b/ground/src/plugins/uavobjects/attituderaw.cpp similarity index 60% rename from ground/src/plugins/uavobjects/headingactual.cpp rename to ground/src/plugins/uavobjects/attituderaw.cpp index f75ab9571..6a3aa1648 100644 --- a/ground/src/plugins/uavobjects/headingactual.cpp +++ b/ground/src/plugins/uavobjects/attituderaw.cpp @@ -1,7 +1,7 @@ /** ****************************************************************************** * - * @file headingactual.cpp + * @file attituderaw.cpp * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. * @see The GNU Public License (GPL) Version 3 * @addtogroup GCSPlugins GCS Plugins @@ -9,7 +9,7 @@ * @addtogroup UAVObjectsPlugin UAVObjects Plugin * @{ * - * @note Object definition file: headingactual.xml. + * @note Object definition file: attituderaw.xml. * This is an automatically generated file. * DO NOT modify manually. * @@ -30,26 +30,37 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "headingactual.h" +#include "attituderaw.h" #include "uavobjectfield.h" -const QString HeadingActual::NAME = QString("HeadingActual"); +const QString AttitudeRaw::NAME = QString("AttitudeRaw"); /** * Constructor */ -HeadingActual::HeadingActual(): UAVDataObject(OBJID, ISSINGLEINST, ISSETTINGS, NAME) +AttitudeRaw::AttitudeRaw(): UAVDataObject(OBJID, ISSINGLEINST, ISSETTINGS, NAME) { // Create fields QList fields; - QStringList rawElemNames; - rawElemNames.append("X"); - rawElemNames.append("Y"); - rawElemNames.append("Z"); - fields.append( new UAVObjectField(QString("raw"), QString("mGa"), UAVObjectField::INT16, rawElemNames, QStringList()) ); - QStringList headingElemNames; - headingElemNames.append("0"); - fields.append( new UAVObjectField(QString("heading"), QString("degrees"), UAVObjectField::FLOAT32, headingElemNames, QStringList()) ); + QStringList magnetometersElemNames; + magnetometersElemNames.append("X"); + magnetometersElemNames.append("Y"); + magnetometersElemNames.append("Z"); + fields.append( new UAVObjectField(QString("magnetometers"), QString("mGa"), UAVObjectField::INT16, magnetometersElemNames, QStringList()) ); + QStringList gyrosElemNames; + gyrosElemNames.append("X"); + gyrosElemNames.append("Y"); + gyrosElemNames.append("Z"); + fields.append( new UAVObjectField(QString("gyros"), QString("raw"), UAVObjectField::UINT16, gyrosElemNames, QStringList()) ); + QStringList gyrotempElemNames; + gyrotempElemNames.append("XY"); + gyrotempElemNames.append("Z"); + fields.append( new UAVObjectField(QString("gyrotemp"), QString("raw"), UAVObjectField::UINT16, gyrotempElemNames, QStringList()) ); + QStringList accelerometersElemNames; + accelerometersElemNames.append("X"); + accelerometersElemNames.append("Y"); + accelerometersElemNames.append("Z"); + fields.append( new UAVObjectField(QString("accelerometers"), QString("raw"), UAVObjectField::UINT16, accelerometersElemNames, QStringList()) ); // Initialize object initializeFields(fields, (quint8*)&data, NUMBYTES); @@ -60,7 +71,7 @@ HeadingActual::HeadingActual(): UAVDataObject(OBJID, ISSINGLEINST, ISSETTINGS, N /** * Get the default metadata for this object */ -UAVObject::Metadata HeadingActual::getDefaultMetadata() +UAVObject::Metadata AttitudeRaw::getDefaultMetadata() { UAVObject::Metadata metadata; metadata.flightAccess = ACCESS_READWRITE; @@ -70,7 +81,7 @@ UAVObject::Metadata HeadingActual::getDefaultMetadata() metadata.gcsTelemetryUpdatePeriod = 0; metadata.flightTelemetryAcked = 0; metadata.flightTelemetryUpdateMode = UAVObject::UPDATEMODE_PERIODIC; - metadata.flightTelemetryUpdatePeriod = 500; + metadata.flightTelemetryUpdatePeriod = 1000; metadata.loggingUpdateMode = UAVObject::UPDATEMODE_NEVER; metadata.loggingUpdatePeriod = 0; return metadata; @@ -81,7 +92,7 @@ UAVObject::Metadata HeadingActual::getDefaultMetadata() * If a default value is not specified the object fields * will be initialized to zero. */ -void HeadingActual::setDefaultFieldValues() +void AttitudeRaw::setDefaultFieldValues() { } @@ -89,7 +100,7 @@ void HeadingActual::setDefaultFieldValues() /** * Get the object data fields */ -HeadingActual::DataFields HeadingActual::getData() +AttitudeRaw::DataFields AttitudeRaw::getData() { QMutexLocker locker(mutex); return data; @@ -98,7 +109,7 @@ HeadingActual::DataFields HeadingActual::getData() /** * Set the object data fields */ -void HeadingActual::setData(const DataFields& data) +void AttitudeRaw::setData(const DataFields& data) { QMutexLocker locker(mutex); // Get metadata @@ -117,9 +128,9 @@ void HeadingActual::setData(const DataFields& data) * Do not use this function directly to create new instances, the * UAVObjectManager should be used instead. */ -UAVDataObject* HeadingActual::clone(quint32 instID) +UAVDataObject* AttitudeRaw::clone(quint32 instID) { - HeadingActual* obj = new HeadingActual(); + AttitudeRaw* obj = new AttitudeRaw(); obj->initialize(instID, this->getMetaObject()); return obj; } @@ -127,7 +138,7 @@ UAVDataObject* HeadingActual::clone(quint32 instID) /** * Static function to retrieve an instance of the object. */ -HeadingActual* HeadingActual::GetInstance(UAVObjectManager* objMngr, quint32 instID) +AttitudeRaw* AttitudeRaw::GetInstance(UAVObjectManager* objMngr, quint32 instID) { - return dynamic_cast(objMngr->getObject(HeadingActual::OBJID, instID)); + return dynamic_cast(objMngr->getObject(AttitudeRaw::OBJID, instID)); } diff --git a/ground/src/plugins/uavobjects/headingactual.h b/ground/src/plugins/uavobjects/attituderaw.h similarity index 53% rename from ground/src/plugins/uavobjects/headingactual.h rename to ground/src/plugins/uavobjects/attituderaw.h index 2eae4ae28..260111b44 100644 --- a/ground/src/plugins/uavobjects/headingactual.h +++ b/ground/src/plugins/uavobjects/attituderaw.h @@ -1,7 +1,7 @@ /** ****************************************************************************** * - * @file headingactual.h + * @file attituderaw.h * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. * @see The GNU Public License (GPL) Version 3 * @addtogroup GCSPlugins GCS Plugins @@ -9,7 +9,7 @@ * @addtogroup UAVObjectsPlugin UAVObjects Plugin * @{ * - * @note Object definition file: headingactual.xml. + * @note Object definition file: attituderaw.xml. * This is an automatically generated file. * DO NOT modify manually. * @@ -30,49 +30,65 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef HEADINGACTUAL_H -#define HEADINGACTUAL_H +#ifndef ATTITUDERAW_H +#define ATTITUDERAW_H #include "uavdataobject.h" #include "uavobjectmanager.h" -class UAVOBJECTS_EXPORT HeadingActual: public UAVDataObject +class UAVOBJECTS_EXPORT AttitudeRaw: public UAVDataObject { Q_OBJECT public: // Field structure typedef struct { - qint16 raw[3]; - float heading; + qint16 magnetometers[3]; + quint16 gyros[3]; + quint16 gyrotemp[2]; + quint16 accelerometers[3]; } __attribute__((packed)) DataFields; // Field information - // Field raw information - /* Array element names for field raw */ - typedef enum { RAW_X=0, RAW_Y=1, RAW_Z=2 } rawElem; - /* Number of elements for field raw */ - static const quint32 RAW_NUMELEM = 3; - // Field heading information + // Field magnetometers information + /* Array element names for field magnetometers */ + typedef enum { MAGNETOMETERS_X=0, MAGNETOMETERS_Y=1, MAGNETOMETERS_Z=2 } magnetometersElem; + /* Number of elements for field magnetometers */ + static const quint32 MAGNETOMETERS_NUMELEM = 3; + // Field gyros information + /* Array element names for field gyros */ + typedef enum { GYROS_X=0, GYROS_Y=1, GYROS_Z=2 } gyrosElem; + /* Number of elements for field gyros */ + static const quint32 GYROS_NUMELEM = 3; + // Field gyrotemp information + /* Array element names for field gyrotemp */ + typedef enum { GYROTEMP_XY=0, GYROTEMP_Z=1 } gyrotempElem; + /* Number of elements for field gyrotemp */ + static const quint32 GYROTEMP_NUMELEM = 2; + // Field accelerometers information + /* Array element names for field accelerometers */ + typedef enum { ACCELEROMETERS_X=0, ACCELEROMETERS_Y=1, ACCELEROMETERS_Z=2 } accelerometersElem; + /* Number of elements for field accelerometers */ + static const quint32 ACCELEROMETERS_NUMELEM = 3; // Constants - static const quint32 OBJID = 2921442332U; + static const quint32 OBJID = 4179445416U; static const QString NAME; static const bool ISSINGLEINST = 1; static const bool ISSETTINGS = 0; static const quint32 NUMBYTES = sizeof(DataFields); // Functions - HeadingActual(); + AttitudeRaw(); DataFields getData(); void setData(const DataFields& data); Metadata getDefaultMetadata(); UAVDataObject* clone(quint32 instID); - static HeadingActual* GetInstance(UAVObjectManager* objMngr, quint32 instID = 0); + static AttitudeRaw* GetInstance(UAVObjectManager* objMngr, quint32 instID = 0); private: DataFields data; @@ -81,4 +97,4 @@ private: }; -#endif // HEADINGACTUAL_H +#endif // ATTITUDERAW_H diff --git a/ground/src/plugins/uavobjects/headingactual.py b/ground/src/plugins/uavobjects/attituderaw.py similarity index 80% rename from ground/src/plugins/uavobjects/headingactual.py rename to ground/src/plugins/uavobjects/attituderaw.py index d53b7e47f..f722d1e89 100644 --- a/ground/src/plugins/uavobjects/headingactual.py +++ b/ground/src/plugins/uavobjects/attituderaw.py @@ -1,12 +1,12 @@ ## ############################################################################## # -# @file headingactual.py +# @file attituderaw.py # @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. -# @brief Implementation of the HeadingActual object. This file has been +# @brief Implementation of the AttitudeRaw object. This file has been # automatically generated by the UAVObjectGenerator. # -# @note Object definition file: headingactual.xml. +# @note Object definition file: attituderaw.xml. # This is an automatically generated file. # DO NOT modify manually. # @@ -38,7 +38,7 @@ from collections import namedtuple # This is a list of instances of the data fields contained in this object _fields = [ \ uavobject.UAVObjectField( - 'raw', + 'magnetometers', 'h', 3, [ @@ -50,11 +50,36 @@ _fields = [ \ } ), uavobject.UAVObjectField( - 'heading', - 'f', - 1, + 'gyros', + 'H', + 3, [ - '0', + 'X', + 'Y', + 'Z', + ], + { + } + ), + uavobject.UAVObjectField( + 'gyrotemp', + 'H', + 2, + [ + 'XY', + 'Z', + ], + { + } + ), + uavobject.UAVObjectField( + 'accelerometers', + 'H', + 3, + [ + 'X', + 'Y', + 'Z', ], { } @@ -62,11 +87,11 @@ _fields = [ \ ] -class HeadingActual(uavobject.UAVObject): +class AttitudeRaw(uavobject.UAVObject): ## Object constants - OBJID = 2921442332 - NAME = "HeadingActual" - METANAME = "HeadingActualMeta" + OBJID = 4179445416 + NAME = "AttitudeRaw" + METANAME = "AttitudeRawMeta" ISSINGLEINST = 1 ISSETTINGS = 0 @@ -90,7 +115,7 @@ class HeadingActual(uavobject.UAVObject): def main(): # Instantiate the object and dump out some interesting info - x = HeadingActual() + x = AttitudeRaw() print (x) if __name__ == "__main__": diff --git a/ground/src/plugins/uavobjects/uavobjects.pro b/ground/src/plugins/uavobjects/uavobjects.pro index 29de2233c..ab5f623cc 100644 --- a/ground/src/plugins/uavobjects/uavobjects.pro +++ b/ground/src/plugins/uavobjects/uavobjects.pro @@ -19,7 +19,7 @@ HEADERS += uavobjects_global.h \ exampleobject2.h \ exampleobject1.h \ gcstelemetrystats.h \ - headingactual.h \ + attituderaw.h \ flighttelemetrystats.h \ systemstats.h \ systemalarms.h \ @@ -53,7 +53,7 @@ SOURCES += uavobject.cpp \ exampleobject2.cpp \ exampleobject1.cpp \ gcstelemetrystats.cpp \ - headingactual.cpp \ + attituderaw.cpp \ flighttelemetrystats.cpp \ systemstats.cpp \ systemalarms.cpp \ diff --git a/ground/src/plugins/uavobjects/uavobjectsinit.cpp b/ground/src/plugins/uavobjects/uavobjectsinit.cpp index 01f158499..ac89959d6 100644 --- a/ground/src/plugins/uavobjects/uavobjectsinit.cpp +++ b/ground/src/plugins/uavobjects/uavobjectsinit.cpp @@ -37,6 +37,7 @@ #include "altitudeactual.h" #include "attitudeactual.h" #include "attitudedesired.h" +#include "attituderaw.h" #include "attitudesettings.h" #include "exampleobject1.h" #include "exampleobject2.h" @@ -45,7 +46,6 @@ #include "flightsituationactual.h" #include "flighttelemetrystats.h" #include "gcstelemetrystats.h" -#include "headingactual.h" #include "manualcontrolcommand.h" #include "manualcontrolsettings.h" #include "navigationdesired.h" @@ -72,6 +72,7 @@ void UAVObjectsInitialize(UAVObjectManager* objMngr) objMngr->registerObject( new AltitudeActual() ); objMngr->registerObject( new AttitudeActual() ); objMngr->registerObject( new AttitudeDesired() ); + objMngr->registerObject( new AttitudeRaw() ); objMngr->registerObject( new AttitudeSettings() ); objMngr->registerObject( new ExampleObject1() ); objMngr->registerObject( new ExampleObject2() ); @@ -80,7 +81,6 @@ void UAVObjectsInitialize(UAVObjectManager* objMngr) objMngr->registerObject( new FlightSituationActual() ); objMngr->registerObject( new FlightTelemetryStats() ); objMngr->registerObject( new GCSTelemetryStats() ); - objMngr->registerObject( new HeadingActual() ); objMngr->registerObject( new ManualControlCommand() ); objMngr->registerObject( new ManualControlSettings() ); objMngr->registerObject( new NavigationDesired() ); diff --git a/ground/src/shared/uavobjectdefinition/attituderaw.xml b/ground/src/shared/uavobjectdefinition/attituderaw.xml new file mode 100644 index 000000000..96b40b998 --- /dev/null +++ b/ground/src/shared/uavobjectdefinition/attituderaw.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/ground/src/shared/uavobjectdefinition/headingactual.xml b/ground/src/shared/uavobjectdefinition/headingactual.xml deleted file mode 100644 index 56ce18519..000000000 --- a/ground/src/shared/uavobjectdefinition/headingactual.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - -