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

AHRS/Flight: Renamed AttitudeSettings to AhrsSettings to make it more intuitive. Added the ability to change the algorithm from GCS.

git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@1383 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
peabody124 2010-08-23 03:39:13 +00:00 committed by peabody124
parent b32184d1ec
commit bd8fffe4d0
23 changed files with 339 additions and 207 deletions

View File

@ -46,7 +46,7 @@
* @arg AHRS_PROCESSING - Performing update on the available data
*/
enum {AHRS_IDLE, AHRS_DATA_READY, AHRS_PROCESSING} ahrs_state;
enum {SIMPLE_Algo, INSGPS_Algo} ahrs_algorithm;
enum algorithms ahrs_algorithm;
/**
* @addtogroup AHRS_ADC_Configuration ADC Configuration
@ -644,6 +644,12 @@ 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_ALGORITHM:
opahrs_msg_v1_init_user_tx (&user_tx_v1, OPAHRS_MSG_V1_RSP_ALGORITHM);
ahrs_algorithm = user_rx_v1.payload.user.v.req.algorithm.algorithm;
dump_spi_message(PIOS_COM_AUX, "A", (uint8_t *)&user_rx_v1, sizeof(user_rx_v1));
lfsm_user_set_tx_v1 (&user_tx_v1);
break;
case OPAHRS_MSG_V1_REQ_NORTH:
opahrs_msg_v1_init_user_tx (&user_tx_v1, OPAHRS_MSG_V1_RSP_NORTH);
INSSetMagNorth(user_rx_v1.payload.user.v.req.north.Be);

View File

@ -167,7 +167,7 @@ SRC += $(OPUAVOBJ)/ahrsstatus.c
SRC += $(OPUAVOBJ)/baroaltitude.c
SRC += $(OPUAVOBJ)/ahrscalibration.c
SRC += $(OPUAVOBJ)/attitudeactual.c
SRC += $(OPUAVOBJ)/attitudesettings.c
SRC += $(OPUAVOBJ)/ahrssettings.c
SRC += $(OPUAVOBJ)/flightsituationactual.c
SRC += $(OPUAVOBJ)/navigationsettings.c
SRC += $(OPUAVOBJ)/navigationdesired.c

View File

@ -52,7 +52,7 @@
#include "ahrs_comms.h"
#include "attitudeactual.h"
#include "attitudesettings.h"
#include "ahrssettings.h"
#include "attituderaw.h"
#include "ahrsstatus.h"
#include "alarms.h"
@ -86,6 +86,12 @@ static void update_ahrs_status(struct opahrs_msg_v1_rsp_serial * serial);
static void update_calibration(struct opahrs_msg_v1_rsp_calibration * calibration);
static void process_update(struct opahrs_msg_v1_rsp_update * update); // main information parser
static bool AHRSSettingsIsUpdatedFlag = false;
static void AHRSSettingsUpdatedCb(UAVObjEvent * ev)
{
AHRSSettingsIsUpdatedFlag = true;
}
static bool BaroAltitudeIsUpdatedFlag = false;
static void BaroAltitudeUpdatedCb(UAVObjEvent * ev)
{
@ -120,6 +126,7 @@ static void AHRSCalibrationUpdatedCb(UAVObjEvent * ev)
*/
int32_t AHRSCommsInitialize(void)
{
AHRSSettingsConnectCallback(AHRSSettingsUpdatedCb);
BaroAltitudeConnectCallback(BaroAltitudeUpdatedCb);
PositionActualConnectCallback(GPSPositionUpdatedCb);
HomeLocationConnectCallback(HomeLocationUpdatedCb);
@ -134,7 +141,7 @@ int32_t AHRSCommsInitialize(void)
}
static uint16_t update_errors = 0, attituderaw_errors = 0,
home_errors = 0, calibration_errors;
home_errors = 0, calibration_errors = 0, algorithm_errors = 0;
/**
* Module thread, should not return.
@ -154,6 +161,7 @@ static void ahrscommsTask(void* parameters)
AhrsStatusGet(&data);
data.HomeSet = AHRSSTATUS_HOMESET_FALSE;
data.CalibrationSet = AHRSSTATUS_CALIBRATIONSET_FALSE;
data.AlgorithmSet = AHRSSTATUS_CALIBRATIONSET_FALSE;
AhrsStatusSet(&data);
/* Spin here until we're in sync */
@ -175,52 +183,10 @@ static void ahrscommsTask(void* parameters)
/* We're in sync with the AHRS, spin here until an error occurs */
while (1) {
AttitudeSettingsData settings;
AHRSSettingsData settings;
/* Update settings with latest value */
AttitudeSettingsGet(&settings);
// If settings indicate, grab the raw and filtered data instead of estimate
if (settings.UpdateRaw)
{
if( (result = PIOS_OPAHRS_GetAttitudeRaw(&rsp)) == OPAHRS_RESULT_OK) {
update_attitude_raw(&(rsp.payload.user.v.rsp.attituderaw));
} else {
/* Comms error */
attituderaw_errors++;
break;
}
continue;
}
// Otherwise do standard technique
struct opahrs_msg_v1 req;
struct opahrs_msg_v1 rsp;
// Load barometer if updated
if (BaroAltitudeIsUpdatedFlag)
load_baro_altitude(&(req.payload.user.v.req.update));
else
req.payload.user.v.req.update.barometer.updated = 0;
// Load GPS if updated
if (GPSPositionIsUpdatedFlag)
load_gps_position(&(req.payload.user.v.req.update));
else
req.payload.user.v.req.update.gps.updated = 0;
// Transfer packet and process returned attitude
if ((result = PIOS_OPAHRS_SetGetUpdate(&req,&rsp)) == OPAHRS_RESULT_OK) {
if (req.payload.user.v.req.update.barometer.updated)
BaroAltitudeIsUpdatedFlag = false;
if (req.payload.user.v.req.update.gps.updated)
GPSPositionIsUpdatedFlag = false;
process_update(&(rsp.payload.user.v.rsp.update));
} else {
/* Comms error */
update_errors++;
break;
}
AHRSSettingsGet(&settings);
// Update home coordinate if it hasn't been updated
AhrsStatusGet(&data);
@ -253,7 +219,7 @@ static void ahrscommsTask(void* parameters)
AHRSCalibrationIsUpdatedFlag = false;
data.CalibrationSet = AHRSSTATUS_CALIBRATIONSET_TRUE;
AhrsStatusSet(&data);
} else {
/* Comms error */
data.CalibrationSet = AHRSSTATUS_CALIBRATIONSET_FALSE;
@ -262,7 +228,72 @@ static void ahrscommsTask(void* parameters)
break;
}
}
// Update algorithm
if (AHRSSettingsIsUpdatedFlag || (data.AlgorithmSet == AHRSSTATUS_ALGORITHMSET_FALSE))
{
struct opahrs_msg_v1 req;
req.payload.user.v.req.algorithm.algorithm = settings.Algorithm;
if(( result = PIOS_OPAHRS_SetAlgorithm(&req) ) == OPAHRS_RESULT_OK ) {
data.AlgorithmSet = AHRSSTATUS_ALGORITHMSET_TRUE;
AhrsStatusSet(&data);
} else {
/* Comms error */
data.AlgorithmSet = AHRSSTATUS_ALGORITHMSET_FALSE;
AhrsStatusSet(&data);
algorithm_errors++;
break;
}
}
// If settings indicate, grab the raw and filtered data instead of estimate
if (settings.UpdateRaw)
{
if( (result = PIOS_OPAHRS_GetAttitudeRaw(&rsp)) == OPAHRS_RESULT_OK) {
update_attitude_raw(&(rsp.payload.user.v.rsp.attituderaw));
} else {
/* Comms error */
attituderaw_errors++;
break;
}
}
if (settings.UpdateFiltered)
{
// Otherwise do standard technique
struct opahrs_msg_v1 req;
struct opahrs_msg_v1 rsp;
// Load barometer if updated
if (BaroAltitudeIsUpdatedFlag)
load_baro_altitude(&(req.payload.user.v.req.update));
else
req.payload.user.v.req.update.barometer.updated = 0;
// Load GPS if updated
if (GPSPositionIsUpdatedFlag)
load_gps_position(&(req.payload.user.v.req.update));
else
req.payload.user.v.req.update.gps.updated = 0;
// Transfer packet and process returned attitude
if ((result = PIOS_OPAHRS_SetGetUpdate(&req,&rsp)) == OPAHRS_RESULT_OK) {
if (req.payload.user.v.req.update.barometer.updated)
BaroAltitudeIsUpdatedFlag = false;
if (req.payload.user.v.req.update.gps.updated)
GPSPositionIsUpdatedFlag = false;
process_update(&(rsp.payload.user.v.rsp.update));
} else {
/* Comms error */
update_errors++;
break;
}
}
/* Wait for the next update interval */
vTaskDelay( settings.UpdatePeriod / portTICK_RATE_MS );
}
@ -459,6 +490,7 @@ static void update_ahrs_status(struct opahrs_msg_v1_rsp_serial * serial)
data.CommErrors[AHRSSTATUS_COMMERRORS_ATTITUDERAW] = attituderaw_errors;
data.CommErrors[AHRSSTATUS_COMMERRORS_HOMELOCATION] = home_errors;
data.CommErrors[AHRSSTATUS_COMMERRORS_CALIBRATION] = calibration_errors;
data.CommErrors[AHRSSTATUS_COMMERRORS_ALGORITHM] = algorithm_errors;
AhrsStatusSet(&data);
}

View File

@ -1,12 +1,12 @@
/**
******************************************************************************
*
* @file attitudesettings.c
* @file ahrssettings.c
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
* @brief Implementation of the AttitudeSettings object. This file has been
* @brief Implementation of the AHRSSettings object. This file has been
* automatically generated by the UAVObjectGenerator.
*
* @note Object definition file: attitudesettings.xml.
* @note Object definition file: ahrssettings.xml.
* This is an automatically generated file.
* DO NOT modify manually.
*
@ -30,7 +30,7 @@
*/
#include "openpilot.h"
#include "attitudesettings.h"
#include "ahrssettings.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 AttitudeSettingsInitialize()
int32_t AHRSSettingsInitialize()
{
// Register object with the object manager
handle = UAVObjRegister(ATTITUDESETTINGS_OBJID, ATTITUDESETTINGS_NAME, ATTITUDESETTINGS_METANAME, 0,
ATTITUDESETTINGS_ISSINGLEINST, ATTITUDESETTINGS_ISSETTINGS, ATTITUDESETTINGS_NUMBYTES, &setDefaults);
handle = UAVObjRegister(AHRSSETTINGS_OBJID, AHRSSETTINGS_NAME, AHRSSETTINGS_METANAME, 0,
AHRSSETTINGS_ISSINGLEINST, AHRSSETTINGS_ISSETTINGS, AHRSSETTINGS_NUMBYTES, &setDefaults);
// Done
if (handle != 0)
@ -67,15 +67,16 @@ int32_t AttitudeSettingsInitialize()
*/
static void setDefaults(UAVObjHandle obj, uint16_t instId)
{
AttitudeSettingsData data;
AHRSSettingsData data;
UAVObjMetadata metadata;
// Initialize object fields to their default values
UAVObjGetInstanceData(obj, instId, &data);
memset(&data, 0, sizeof(AttitudeSettingsData));
memset(&data, 0, sizeof(AHRSSettingsData));
data.Algorithm = 0;
data.UpdateRaw = 0;
data.UpdatePeriod = 500;
data.UpdateFiltered = 1;
data.UpdatePeriod = 20;
UAVObjSetInstanceData(obj, instId, &data);
@ -96,7 +97,7 @@ static void setDefaults(UAVObjHandle obj, uint16_t instId)
/**
* Get object handle
*/
UAVObjHandle AttitudeSettingsHandle()
UAVObjHandle AHRSSettingsHandle()
{
return handle;
}

View File

@ -0,0 +1,84 @@
/**
******************************************************************************
*
* @file ahrssettings.h
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
* @brief Implementation of the AHRSSettings object. This file has been
* automatically generated by the UAVObjectGenerator.
*
* @note Object definition file: ahrssettings.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 AHRSSETTINGS_H
#define AHRSSETTINGS_H
// Object constants
#define AHRSSETTINGS_OBJID 1565605328U
#define AHRSSETTINGS_NAME "AHRSSettings"
#define AHRSSETTINGS_METANAME "AHRSSettingsMeta"
#define AHRSSETTINGS_ISSINGLEINST 1
#define AHRSSETTINGS_ISSETTINGS 1
#define AHRSSETTINGS_NUMBYTES sizeof(AHRSSettingsData)
// Object access macros
#define AHRSSettingsGet(dataOut) UAVObjGetData(AHRSSettingsHandle(), dataOut)
#define AHRSSettingsSet(dataIn) UAVObjSetData(AHRSSettingsHandle(), dataIn)
#define AHRSSettingsInstGet(instId, dataOut) UAVObjGetInstanceData(AHRSSettingsHandle(), instId, dataOut)
#define AHRSSettingsInstSet(instId, dataIn) UAVObjSetInstanceData(AHRSSettingsHandle(), instId, dataIn)
#define AHRSSettingsConnectQueue(queue) UAVObjConnectQueue(AHRSSettingsHandle(), queue, EV_MASK_ALL_UPDATES)
#define AHRSSettingsConnectCallback(cb) UAVObjConnectCallback(AHRSSettingsHandle(), cb, EV_MASK_ALL_UPDATES)
#define AHRSSettingsCreateInstance() UAVObjCreateInstance(AHRSSettingsHandle())
#define AHRSSettingsRequestUpdate() UAVObjRequestUpdate(AHRSSettingsHandle())
#define AHRSSettingsRequestInstUpdate(instId) UAVObjRequestInstanceUpdate(AHRSSettingsHandle(), instId)
#define AHRSSettingsUpdated() UAVObjUpdated(AHRSSettingsHandle())
#define AHRSSettingsInstUpdated(instId) UAVObjUpdated(AHRSSettingsHandle(), instId)
#define AHRSSettingsGetMetadata(dataOut) UAVObjGetMetadata(AHRSSettingsHandle(), dataOut)
#define AHRSSettingsSetMetadata(dataIn) UAVObjSetMetadata(AHRSSettingsHandle(), dataIn)
// Object data
typedef struct {
uint8_t Algorithm;
uint8_t UpdateRaw;
uint8_t UpdateFiltered;
int32_t UpdatePeriod;
} __attribute__((packed)) AHRSSettingsData;
// Field information
// Field Algorithm information
/* Enumeration options for field Algorithm */
typedef enum { AHRSSETTINGS_ALGORITHM_INSGPS=0 } AHRSSettingsAlgorithmOptions;
// Field UpdateRaw information
/* Enumeration options for field UpdateRaw */
typedef enum { AHRSSETTINGS_UPDATERAW_FALSE=0, AHRSSETTINGS_UPDATERAW_TRUE=1 } AHRSSettingsUpdateRawOptions;
// Field UpdateFiltered information
/* Enumeration options for field UpdateFiltered */
typedef enum { AHRSSETTINGS_UPDATEFILTERED_FALSE=0, AHRSSETTINGS_UPDATEFILTERED_TRUE=1 } AHRSSettingsUpdateFilteredOptions;
// Field UpdatePeriod information
// Generic interface functions
int32_t AHRSSettingsInitialize();
UAVObjHandle AHRSSettingsHandle();
#endif // AHRSSETTINGS_H

View File

@ -33,7 +33,7 @@
#define AHRSSTATUS_H
// Object constants
#define AHRSSTATUS_OBJID 1048419880U
#define AHRSSTATUS_OBJID 842145078U
#define AHRSSTATUS_NAME "AhrsStatus"
#define AHRSSTATUS_METANAME "AhrsStatusMeta"
#define AHRSSTATUS_ISSINGLEINST 1
@ -58,9 +58,10 @@
// Object data
typedef struct {
uint8_t SerialNumber[25];
uint8_t CommErrors[4];
uint8_t HomeSet;
uint8_t CommErrors[5];
uint8_t AlgorithmSet;
uint8_t CalibrationSet;
uint8_t HomeSet;
} __attribute__((packed)) AhrsStatusData;
@ -70,15 +71,18 @@ typedef struct {
#define AHRSSTATUS_SERIALNUMBER_NUMELEM 25
// Field CommErrors information
/* Array element names for field CommErrors */
typedef enum { AHRSSTATUS_COMMERRORS_UPDATE=0, AHRSSTATUS_COMMERRORS_ATTITUDERAW=1, AHRSSTATUS_COMMERRORS_HOMELOCATION=2, AHRSSTATUS_COMMERRORS_CALIBRATION=3 } AhrsStatusCommErrorsElem;
typedef enum { AHRSSTATUS_COMMERRORS_ALGORITHM=0, AHRSSTATUS_COMMERRORS_UPDATE=1, AHRSSTATUS_COMMERRORS_ATTITUDERAW=2, AHRSSTATUS_COMMERRORS_HOMELOCATION=3, AHRSSTATUS_COMMERRORS_CALIBRATION=4 } AhrsStatusCommErrorsElem;
/* Number of elements for field CommErrors */
#define AHRSSTATUS_COMMERRORS_NUMELEM 4
// Field HomeSet information
/* Enumeration options for field HomeSet */
typedef enum { AHRSSTATUS_HOMESET_FALSE=0, AHRSSTATUS_HOMESET_TRUE=1 } AhrsStatusHomeSetOptions;
#define AHRSSTATUS_COMMERRORS_NUMELEM 5
// Field AlgorithmSet information
/* Enumeration options for field AlgorithmSet */
typedef enum { AHRSSTATUS_ALGORITHMSET_FALSE=0, AHRSSTATUS_ALGORITHMSET_TRUE=1 } AhrsStatusAlgorithmSetOptions;
// Field CalibrationSet information
/* Enumeration options for field CalibrationSet */
typedef enum { AHRSSTATUS_CALIBRATIONSET_FALSE=0, AHRSSTATUS_CALIBRATIONSET_TRUE=1 } AhrsStatusCalibrationSetOptions;
// Field HomeSet information
/* Enumeration options for field HomeSet */
typedef enum { AHRSSTATUS_HOMESET_FALSE=0, AHRSSTATUS_HOMESET_TRUE=1 } AhrsStatusHomeSetOptions;
// Generic interface functions

View File

@ -1,80 +0,0 @@
/**
******************************************************************************
*
* @file attitudesettings.h
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
* @brief Implementation of the AttitudeSettings object. This file has been
* automatically generated by the UAVObjectGenerator.
*
* @note Object definition file: attitudesettings.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 ATTITUDESETTINGS_H
#define ATTITUDESETTINGS_H
// Object constants
#define ATTITUDESETTINGS_OBJID 2356162226U
#define ATTITUDESETTINGS_NAME "AttitudeSettings"
#define ATTITUDESETTINGS_METANAME "AttitudeSettingsMeta"
#define ATTITUDESETTINGS_ISSINGLEINST 1
#define ATTITUDESETTINGS_ISSETTINGS 1
#define ATTITUDESETTINGS_NUMBYTES sizeof(AttitudeSettingsData)
// Object access macros
#define AttitudeSettingsGet(dataOut) UAVObjGetData(AttitudeSettingsHandle(), dataOut)
#define AttitudeSettingsSet(dataIn) UAVObjSetData(AttitudeSettingsHandle(), dataIn)
#define AttitudeSettingsInstGet(instId, dataOut) UAVObjGetInstanceData(AttitudeSettingsHandle(), instId, dataOut)
#define AttitudeSettingsInstSet(instId, dataIn) UAVObjSetInstanceData(AttitudeSettingsHandle(), instId, dataIn)
#define AttitudeSettingsConnectQueue(queue) UAVObjConnectQueue(AttitudeSettingsHandle(), queue, EV_MASK_ALL_UPDATES)
#define AttitudeSettingsConnectCallback(cb) UAVObjConnectCallback(AttitudeSettingsHandle(), cb, EV_MASK_ALL_UPDATES)
#define AttitudeSettingsCreateInstance() UAVObjCreateInstance(AttitudeSettingsHandle())
#define AttitudeSettingsRequestUpdate() UAVObjRequestUpdate(AttitudeSettingsHandle())
#define AttitudeSettingsRequestInstUpdate(instId) UAVObjRequestInstanceUpdate(AttitudeSettingsHandle(), instId)
#define AttitudeSettingsUpdated() UAVObjUpdated(AttitudeSettingsHandle())
#define AttitudeSettingsInstUpdated(instId) UAVObjUpdated(AttitudeSettingsHandle(), instId)
#define AttitudeSettingsGetMetadata(dataOut) UAVObjGetMetadata(AttitudeSettingsHandle(), dataOut)
#define AttitudeSettingsSetMetadata(dataIn) UAVObjSetMetadata(AttitudeSettingsHandle(), dataIn)
// Object data
typedef struct {
uint8_t Algorithm;
uint8_t UpdateRaw;
int32_t UpdatePeriod;
} __attribute__((packed)) AttitudeSettingsData;
// Field information
// Field Algorithm information
/* Enumeration options for field Algorithm */
typedef enum { ATTITUDESETTINGS_ALGORITHM_INSGPS=0 } AttitudeSettingsAlgorithmOptions;
// Field UpdateRaw information
/* Enumeration options for field UpdateRaw */
typedef enum { ATTITUDESETTINGS_UPDATERAW_FALSE=0, ATTITUDESETTINGS_UPDATERAW_TRUE=1 } AttitudeSettingsUpdateRawOptions;
// Field UpdatePeriod information
// Generic interface functions
int32_t AttitudeSettingsInitialize();
UAVObjHandle AttitudeSettingsHandle();
#endif // ATTITUDESETTINGS_H

View File

@ -32,11 +32,11 @@
#include "actuatordesired.h"
#include "actuatorsettings.h"
#include "ahrscalibration.h"
#include "ahrssettings.h"
#include "ahrsstatus.h"
#include "attitudeactual.h"
#include "attitudedesired.h"
#include "attituderaw.h"
#include "attitudesettings.h"
#include "baroaltitude.h"
#include "exampleobject1.h"
#include "exampleobject2.h"
@ -70,11 +70,11 @@ void UAVObjectsInitializeAll()
ActuatorDesiredInitialize();
ActuatorSettingsInitialize();
AHRSCalibrationInitialize();
AHRSSettingsInitialize();
AhrsStatusInitialize();
AttitudeActualInitialize();
AttitudeDesiredInitialize();
AttitudeRawInitialize();
AttitudeSettingsInitialize();
BaroAltitudeInitialize();
ExampleObject1Initialize();
ExampleObject2Initialize();

View File

@ -245,6 +245,28 @@ enum opahrs_result PIOS_OPAHRS_GetAttitudeRaw(struct opahrs_msg_v1 *rsp)
return opahrs_msg_v1_recv_rsp (OPAHRS_MSG_V1_RSP_ATTITUDERAW, rsp);
}
extern enum opahrs_result PIOS_OPAHRS_SetAlgorithm(struct opahrs_msg_v1 *req)
{
struct opahrs_msg_v1 rsp;
enum opahrs_result rc;
if (!req) {
return -1;
}
/* Make up an attituderaw request */
opahrs_msg_v1_init_user_tx (req, OPAHRS_MSG_V1_REQ_ALGORITHM);
/* Send the message until it is received */
rc = opahrs_msg_v1_send_req (req);
if (rc != OPAHRS_RESULT_OK) {
/* Failed to send the request, bail out */
return rc;
}
return opahrs_msg_v1_recv_rsp (OPAHRS_MSG_V1_RSP_ALGORITHM, &rsp);
}
enum opahrs_result PIOS_OPAHRS_SetMagNorth(struct opahrs_msg_v1 *req)
{
struct opahrs_msg_v1 rsp;

View File

@ -43,6 +43,7 @@ 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_SetGetUpdate(struct opahrs_msg_v1 *rsp, struct opahrs_msg_v1 *req);
extern enum opahrs_result PIOS_OPAHRS_GetAttitudeRaw(struct opahrs_msg_v1 *rsp);
extern enum opahrs_result PIOS_OPAHRS_SetAlgorithm(struct opahrs_msg_v1 *req);
extern enum opahrs_result PIOS_OPAHRS_SetMagNorth(struct opahrs_msg_v1 *req);
extern enum opahrs_result PIOS_OPAHRS_SetGetCalibration(struct opahrs_msg_v1 *req, struct opahrs_msg_v1 *rsp);
extern enum opahrs_result PIOS_OPAHRS_resync(void);

View File

@ -188,6 +188,12 @@ struct opahrs_msg_v1_req_north {
float Be[3];
} __attribute__((__packed__));
enum algorithms {SIMPLE_Algo, INSGPS_Algo};
struct opahrs_msg_v1_req_algorithm {
enum algorithms algorithm;
} __attribute__((__packed__));
struct opahrs_msg_v1_req_update {
struct {
uint8_t updated;
@ -223,6 +229,7 @@ union opahrs_msg_v1_req {
struct opahrs_msg_v1_req_reset reset;
struct opahrs_msg_v1_req_serial serial;
struct opahrs_msg_v1_req_update update;
struct opahrs_msg_v1_req_algorithm algorithm;
struct opahrs_msg_v1_req_north north;
struct opahrs_msg_v1_req_attituderaw attituderaw;
struct opahrs_msg_v1_req_calibration calibration;
@ -244,6 +251,9 @@ struct opahrs_msg_v1_rsp_serial {
struct opahrs_msg_v1_rsp_north {
} __attribute__((__packed__));
struct opahrs_msg_v1_rsp_algorithm {
} __attribute__((__packed__));
struct opahrs_msg_v1_rsp_attituderaw {
struct {
int16_t x;
@ -297,6 +307,7 @@ union opahrs_msg_v1_rsp {
struct opahrs_msg_v1_rsp_sync sync;
struct opahrs_msg_v1_rsp_serial serial;
struct opahrs_msg_v1_rsp_north north;
struct opahrs_msg_v1_rsp_algorithm algorithm;
struct opahrs_msg_v1_rsp_attituderaw attituderaw;
struct opahrs_msg_v1_rsp_update update;
struct opahrs_msg_v1_rsp_calibration calibration;
@ -308,6 +319,7 @@ enum opahrs_msg_v1_tag {
OPAHRS_MSG_V1_REQ_RESET,
OPAHRS_MSG_V1_REQ_SERIAL,
OPAHRS_MSG_V1_REQ_NORTH,
OPAHRS_MSG_V1_REQ_ALGORITHM,
OPAHRS_MSG_V1_REQ_UPDATE,
OPAHRS_MSG_V1_REQ_ATTITUDERAW,
OPAHRS_MSG_V1_REQ_CALIBRATION,
@ -315,6 +327,7 @@ enum opahrs_msg_v1_tag {
OPAHRS_MSG_V1_RSP_SYNC,
OPAHRS_MSG_V1_RSP_SERIAL,
OPAHRS_MSG_V1_RSP_NORTH,
OPAHRS_MSG_V1_RSP_ALGORITHM,
OPAHRS_MSG_V1_RSP_UPDATE,
OPAHRS_MSG_V1_RSP_ATTITUDERAW,
OPAHRS_MSG_V1_RSP_CALIBRATION,

View File

@ -6676,8 +6676,8 @@
65B367E9121C2620003EAD18 /* attitudeactual.xml */,
65B367EA121C2620003EAD18 /* attitudedesired.xml */,
65B367EB121C2620003EAD18 /* attituderaw.xml */,
65209A1812208B0600453371 /* baroaltitude.xml */,
65B367EC121C2620003EAD18 /* attitudesettings.xml */,
65209A1812208B0600453371 /* baroaltitude.xml */,
65B367ED121C2620003EAD18 /* exampleobject1.xml */,
65B367EE121C2620003EAD18 /* exampleobject2.xml */,
65B367EF121C2620003EAD18 /* examplesettings.xml */,

View File

@ -1,7 +1,7 @@
/**
******************************************************************************
*
* @file attitudesettings.cpp
* @file ahrssettings.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: attitudesettings.xml.
* @note Object definition file: ahrssettings.xml.
* This is an automatically generated file.
* DO NOT modify manually.
*
@ -30,15 +30,15 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "attitudesettings.h"
#include "ahrssettings.h"
#include "uavobjectfield.h"
const QString AttitudeSettings::NAME = QString("AttitudeSettings");
const QString AHRSSettings::NAME = QString("AHRSSettings");
/**
* Constructor
*/
AttitudeSettings::AttitudeSettings(): UAVDataObject(OBJID, ISSINGLEINST, ISSETTINGS, NAME)
AHRSSettings::AHRSSettings(): UAVDataObject(OBJID, ISSINGLEINST, ISSETTINGS, NAME)
{
// Create fields
QList<UAVObjectField*> fields;
@ -53,6 +53,12 @@ AttitudeSettings::AttitudeSettings(): UAVDataObject(OBJID, ISSINGLEINST, ISSETTI
UpdateRawEnumOptions.append("FALSE");
UpdateRawEnumOptions.append("TRUE");
fields.append( new UAVObjectField(QString("UpdateRaw"), QString("raw"), UAVObjectField::ENUM, UpdateRawElemNames, UpdateRawEnumOptions) );
QStringList UpdateFilteredElemNames;
UpdateFilteredElemNames.append("0");
QStringList UpdateFilteredEnumOptions;
UpdateFilteredEnumOptions.append("FALSE");
UpdateFilteredEnumOptions.append("TRUE");
fields.append( new UAVObjectField(QString("UpdateFiltered"), QString("raw"), UAVObjectField::ENUM, UpdateFilteredElemNames, UpdateFilteredEnumOptions) );
QStringList UpdatePeriodElemNames;
UpdatePeriodElemNames.append("0");
fields.append( new UAVObjectField(QString("UpdatePeriod"), QString("ms"), UAVObjectField::INT32, UpdatePeriodElemNames, QStringList()) );
@ -66,7 +72,7 @@ AttitudeSettings::AttitudeSettings(): UAVDataObject(OBJID, ISSINGLEINST, ISSETTI
/**
* Get the default metadata for this object
*/
UAVObject::Metadata AttitudeSettings::getDefaultMetadata()
UAVObject::Metadata AHRSSettings::getDefaultMetadata()
{
UAVObject::Metadata metadata;
metadata.flightAccess = ACCESS_READWRITE;
@ -87,18 +93,19 @@ UAVObject::Metadata AttitudeSettings::getDefaultMetadata()
* If a default value is not specified the object fields
* will be initialized to zero.
*/
void AttitudeSettings::setDefaultFieldValues()
void AHRSSettings::setDefaultFieldValues()
{
data.Algorithm = 0;
data.UpdateRaw = 0;
data.UpdatePeriod = 500;
data.UpdateFiltered = 1;
data.UpdatePeriod = 20;
}
/**
* Get the object data fields
*/
AttitudeSettings::DataFields AttitudeSettings::getData()
AHRSSettings::DataFields AHRSSettings::getData()
{
QMutexLocker locker(mutex);
return data;
@ -107,7 +114,7 @@ AttitudeSettings::DataFields AttitudeSettings::getData()
/**
* Set the object data fields
*/
void AttitudeSettings::setData(const DataFields& data)
void AHRSSettings::setData(const DataFields& data)
{
QMutexLocker locker(mutex);
// Get metadata
@ -126,9 +133,9 @@ void AttitudeSettings::setData(const DataFields& data)
* Do not use this function directly to create new instances, the
* UAVObjectManager should be used instead.
*/
UAVDataObject* AttitudeSettings::clone(quint32 instID)
UAVDataObject* AHRSSettings::clone(quint32 instID)
{
AttitudeSettings* obj = new AttitudeSettings();
AHRSSettings* obj = new AHRSSettings();
obj->initialize(instID, this->getMetaObject());
return obj;
}
@ -136,7 +143,7 @@ UAVDataObject* AttitudeSettings::clone(quint32 instID)
/**
* Static function to retrieve an instance of the object.
*/
AttitudeSettings* AttitudeSettings::GetInstance(UAVObjectManager* objMngr, quint32 instID)
AHRSSettings* AHRSSettings::GetInstance(UAVObjectManager* objMngr, quint32 instID)
{
return dynamic_cast<AttitudeSettings*>(objMngr->getObject(AttitudeSettings::OBJID, instID));
return dynamic_cast<AHRSSettings*>(objMngr->getObject(AHRSSettings::OBJID, instID));
}

View File

@ -1,7 +1,7 @@
/**
******************************************************************************
*
* @file attitudesettings.h
* @file ahrssettings.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: attitudesettings.xml.
* @note Object definition file: ahrssettings.xml.
* This is an automatically generated file.
* DO NOT modify manually.
*
@ -30,13 +30,13 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef ATTITUDESETTINGS_H
#define ATTITUDESETTINGS_H
#ifndef AHRSSETTINGS_H
#define AHRSSETTINGS_H
#include "uavdataobject.h"
#include "uavobjectmanager.h"
class UAVOBJECTS_EXPORT AttitudeSettings: public UAVDataObject
class UAVOBJECTS_EXPORT AHRSSettings: public UAVDataObject
{
Q_OBJECT
@ -45,6 +45,7 @@ public:
typedef struct {
quint8 Algorithm;
quint8 UpdateRaw;
quint8 UpdateFiltered;
qint32 UpdatePeriod;
} __attribute__((packed)) DataFields;
@ -56,25 +57,28 @@ public:
// Field UpdateRaw information
/* Enumeration options for field UpdateRaw */
typedef enum { UPDATERAW_FALSE=0, UPDATERAW_TRUE=1 } UpdateRawOptions;
// Field UpdateFiltered information
/* Enumeration options for field UpdateFiltered */
typedef enum { UPDATEFILTERED_FALSE=0, UPDATEFILTERED_TRUE=1 } UpdateFilteredOptions;
// Field UpdatePeriod information
// Constants
static const quint32 OBJID = 2356162226U;
static const quint32 OBJID = 1565605328U;
static const QString NAME;
static const bool ISSINGLEINST = 1;
static const bool ISSETTINGS = 1;
static const quint32 NUMBYTES = sizeof(DataFields);
// Functions
AttitudeSettings();
AHRSSettings();
DataFields getData();
void setData(const DataFields& data);
Metadata getDefaultMetadata();
UAVDataObject* clone(quint32 instID);
static AttitudeSettings* GetInstance(UAVObjectManager* objMngr, quint32 instID = 0);
static AHRSSettings* GetInstance(UAVObjectManager* objMngr, quint32 instID = 0);
private:
DataFields data;
@ -83,4 +87,4 @@ private:
};
#endif // ATTITUDESETTINGS_H
#endif // AHRSSETTINGS_H

View File

@ -1,12 +1,12 @@
##
##############################################################################
#
# @file attitudesettings.py
# @file ahrssettings.py
# @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
# @brief Implementation of the AttitudeSettings object. This file has been
# @brief Implementation of the AHRSSettings object. This file has been
# automatically generated by the UAVObjectGenerator.
#
# @note Object definition file: attitudesettings.xml.
# @note Object definition file: ahrssettings.xml.
# This is an automatically generated file.
# DO NOT modify manually.
#
@ -60,6 +60,18 @@ _fields = [ \
'1' : 'TRUE',
}
),
uavobject.UAVObjectField(
'UpdateFiltered',
'b',
1,
[
'0',
],
{
'0' : 'FALSE',
'1' : 'TRUE',
}
),
uavobject.UAVObjectField(
'UpdatePeriod',
'i',
@ -73,11 +85,11 @@ _fields = [ \
]
class AttitudeSettings(uavobject.UAVObject):
class AHRSSettings(uavobject.UAVObject):
## Object constants
OBJID = 2356162226
NAME = "AttitudeSettings"
METANAME = "AttitudeSettingsMeta"
OBJID = 1565605328
NAME = "AHRSSettings"
METANAME = "AHRSSettingsMeta"
ISSINGLEINST = 1
ISSETTINGS = 1
@ -101,7 +113,7 @@ class AttitudeSettings(uavobject.UAVObject):
def main():
# Instantiate the object and dump out some interesting info
x = AttitudeSettings()
x = AHRSSettings()
print (x)
if __name__ == "__main__":

View File

@ -70,23 +70,30 @@ AhrsStatus::AhrsStatus(): UAVDataObject(OBJID, ISSINGLEINST, ISSETTINGS, NAME)
SerialNumberElemNames.append("24");
fields.append( new UAVObjectField(QString("SerialNumber"), QString("n/a"), UAVObjectField::UINT8, SerialNumberElemNames, QStringList()) );
QStringList CommErrorsElemNames;
CommErrorsElemNames.append("Algorithm");
CommErrorsElemNames.append("Update");
CommErrorsElemNames.append("AttitudeRaw");
CommErrorsElemNames.append("HomeLocation");
CommErrorsElemNames.append("Calibration");
fields.append( new UAVObjectField(QString("CommErrors"), QString("count"), UAVObjectField::UINT8, CommErrorsElemNames, QStringList()) );
QStringList HomeSetElemNames;
HomeSetElemNames.append("0");
QStringList HomeSetEnumOptions;
HomeSetEnumOptions.append("FALSE");
HomeSetEnumOptions.append("TRUE");
fields.append( new UAVObjectField(QString("HomeSet"), QString(""), UAVObjectField::ENUM, HomeSetElemNames, HomeSetEnumOptions) );
QStringList AlgorithmSetElemNames;
AlgorithmSetElemNames.append("0");
QStringList AlgorithmSetEnumOptions;
AlgorithmSetEnumOptions.append("FALSE");
AlgorithmSetEnumOptions.append("TRUE");
fields.append( new UAVObjectField(QString("AlgorithmSet"), QString(""), UAVObjectField::ENUM, AlgorithmSetElemNames, AlgorithmSetEnumOptions) );
QStringList CalibrationSetElemNames;
CalibrationSetElemNames.append("0");
QStringList CalibrationSetEnumOptions;
CalibrationSetEnumOptions.append("FALSE");
CalibrationSetEnumOptions.append("TRUE");
fields.append( new UAVObjectField(QString("CalibrationSet"), QString(""), UAVObjectField::ENUM, CalibrationSetElemNames, CalibrationSetEnumOptions) );
QStringList HomeSetElemNames;
HomeSetElemNames.append("0");
QStringList HomeSetEnumOptions;
HomeSetEnumOptions.append("FALSE");
HomeSetEnumOptions.append("TRUE");
fields.append( new UAVObjectField(QString("HomeSet"), QString(""), UAVObjectField::ENUM, HomeSetElemNames, HomeSetEnumOptions) );
// Initialize object
initializeFields(fields, (quint8*)&data, NUMBYTES);

View File

@ -44,9 +44,10 @@ public:
// Field structure
typedef struct {
quint8 SerialNumber[25];
quint8 CommErrors[4];
quint8 HomeSet;
quint8 CommErrors[5];
quint8 AlgorithmSet;
quint8 CalibrationSet;
quint8 HomeSet;
} __attribute__((packed)) DataFields;
@ -56,19 +57,22 @@ public:
static const quint32 SERIALNUMBER_NUMELEM = 25;
// Field CommErrors information
/* Array element names for field CommErrors */
typedef enum { COMMERRORS_UPDATE=0, COMMERRORS_ATTITUDERAW=1, COMMERRORS_HOMELOCATION=2, COMMERRORS_CALIBRATION=3 } CommErrorsElem;
typedef enum { COMMERRORS_ALGORITHM=0, COMMERRORS_UPDATE=1, COMMERRORS_ATTITUDERAW=2, COMMERRORS_HOMELOCATION=3, COMMERRORS_CALIBRATION=4 } CommErrorsElem;
/* Number of elements for field CommErrors */
static const quint32 COMMERRORS_NUMELEM = 4;
// Field HomeSet information
/* Enumeration options for field HomeSet */
typedef enum { HOMESET_FALSE=0, HOMESET_TRUE=1 } HomeSetOptions;
static const quint32 COMMERRORS_NUMELEM = 5;
// Field AlgorithmSet information
/* Enumeration options for field AlgorithmSet */
typedef enum { ALGORITHMSET_FALSE=0, ALGORITHMSET_TRUE=1 } AlgorithmSetOptions;
// Field CalibrationSet information
/* Enumeration options for field CalibrationSet */
typedef enum { CALIBRATIONSET_FALSE=0, CALIBRATIONSET_TRUE=1 } CalibrationSetOptions;
// Field HomeSet information
/* Enumeration options for field HomeSet */
typedef enum { HOMESET_FALSE=0, HOMESET_TRUE=1 } HomeSetOptions;
// Constants
static const quint32 OBJID = 1048419880U;
static const quint32 OBJID = 842145078U;
static const QString NAME;
static const bool ISSINGLEINST = 1;
static const bool ISSETTINGS = 0;

View File

@ -74,8 +74,9 @@ _fields = [ \
uavobject.UAVObjectField(
'CommErrors',
'B',
4,
5,
[
'Algorithm',
'Update',
'AttitudeRaw',
'HomeLocation',
@ -85,7 +86,7 @@ _fields = [ \
}
),
uavobject.UAVObjectField(
'HomeSet',
'AlgorithmSet',
'b',
1,
[
@ -108,12 +109,24 @@ _fields = [ \
'1' : 'TRUE',
}
),
uavobject.UAVObjectField(
'HomeSet',
'b',
1,
[
'0',
],
{
'0' : 'FALSE',
'1' : 'TRUE',
}
),
]
class AhrsStatus(uavobject.UAVObject):
## Object constants
OBJID = 1048419880
OBJID = 842145078
NAME = "AhrsStatus"
METANAME = "AhrsStatusMeta"
ISSINGLEINST = 1

View File

@ -16,7 +16,7 @@ HEADERS += uavobjects_global.h \
ahrscalibration.h \
baroaltitude.h \
attitudeactual.h \
attitudesettings.h \
ahrssettings.h \
exampleobject2.h \
exampleobject1.h \
gcstelemetrystats.h \
@ -52,7 +52,7 @@ SOURCES += uavobject.cpp \
ahrscalibration.cpp \
baroaltitude.cpp \
attitudeactual.cpp \
attitudesettings.cpp \
ahrssettings.cpp \
examplesettings.cpp \
exampleobject2.cpp \
exampleobject1.cpp \

View File

@ -34,11 +34,11 @@
#include "actuatordesired.h"
#include "actuatorsettings.h"
#include "ahrscalibration.h"
#include "ahrssettings.h"
#include "ahrsstatus.h"
#include "attitudeactual.h"
#include "attitudedesired.h"
#include "attituderaw.h"
#include "attitudesettings.h"
#include "baroaltitude.h"
#include "exampleobject1.h"
#include "exampleobject2.h"
@ -72,11 +72,11 @@ void UAVObjectsInitialize(UAVObjectManager* objMngr)
objMngr->registerObject( new ActuatorDesired() );
objMngr->registerObject( new ActuatorSettings() );
objMngr->registerObject( new AHRSCalibration() );
objMngr->registerObject( new AHRSSettings() );
objMngr->registerObject( new AhrsStatus() );
objMngr->registerObject( new AttitudeActual() );
objMngr->registerObject( new AttitudeDesired() );
objMngr->registerObject( new AttitudeRaw() );
objMngr->registerObject( new AttitudeSettings() );
objMngr->registerObject( new BaroAltitude() );
objMngr->registerObject( new ExampleObject1() );
objMngr->registerObject( new ExampleObject2() );

View File

@ -1,8 +1,9 @@
<xml>
<object name="AttitudeSettings" singleinstance="true" settings="true">
<object name="AHRSSettings" singleinstance="true" settings="true">
<field name="Algorithm" units="" type="enum" elements="1" options="INSGPS" defaultvalue="INSGPS"/>
<field name="UpdateRaw" units="raw" type="enum" elements="1" options="FALSE,TRUE" defaultvalue="FALSE"/>
<field name="UpdatePeriod" units="ms" type="int32" elements="1" defaultvalue="500"/>
<field name="UpdateFiltered" units="raw" type="enum" elements="1" options="FALSE,TRUE" defaultvalue="TRUE"/>
<field name="UpdatePeriod" units="ms" type="int32" elements="1" defaultvalue="20"/>
<access gcs="readwrite" flight="readwrite"/>
<telemetrygcs acked="true" updatemode="onchange" period="0"/>
<telemetryflight acked="true" updatemode="onchange" period="0"/>

View File

@ -1,9 +1,10 @@
<xml>
<object name="AhrsStatus" singleinstance="true" settings="false">
<field name="SerialNumber" units="n/a" type="uint8" elements="25"/>
<field name="CommErrors" units="count" type="uint8" elementnames="Update,AttitudeRaw,HomeLocation,Calibration"/>
<field name="HomeSet" units="" type="enum" elements="1" options="FALSE,TRUE"/>
<field name="CommErrors" units="count" type="uint8" elementnames="Algorithm,Update,AttitudeRaw,HomeLocation,Calibration"/>
<field name="AlgorithmSet" units="" type="enum" elements="1" options="FALSE,TRUE"/>
<field name="CalibrationSet" units="" type="enum" elements="1" options="FALSE,TRUE"/>
<field name="HomeSet" units="" type="enum" elements="1" options="FALSE,TRUE"/>
<access gcs="readwrite" flight="readwrite"/>
<telemetrygcs acked="false" updatemode="manual" period="0"/>
<telemetryflight acked="false" updatemode="periodic" period="1000"/>