mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-01-30 15:52:12 +01:00
Merge remote-tracking branch 'origin/amorale/OP-1374_autoenable_pathfollowers' into rel-14.06
This commit is contained in:
commit
00ce8dadb3
@ -32,6 +32,14 @@
|
|||||||
|
|
||||||
#include <systemalarms.h>
|
#include <systemalarms.h>
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
FRAME_TYPE_MULTIROTOR,
|
||||||
|
FRAME_TYPE_HELI,
|
||||||
|
FRAME_TYPE_FIXED_WING,
|
||||||
|
FRAME_TYPE_GROUND,
|
||||||
|
FRAME_TYPE_CUSTOM,
|
||||||
|
} FrameType_t;
|
||||||
|
|
||||||
#define SANITYCHECK_STATUS_ERROR_NONE SYSTEMALARMS_EXTENDEDALARMSTATUS_NONE
|
#define SANITYCHECK_STATUS_ERROR_NONE SYSTEMALARMS_EXTENDEDALARMSTATUS_NONE
|
||||||
#define SANITYCHECK_STATUS_ERROR_FLIGHTMODE SYSTEMALARMS_EXTENDEDALARMSTATUS_FLIGHTMODE
|
#define SANITYCHECK_STATUS_ERROR_FLIGHTMODE SYSTEMALARMS_EXTENDEDALARMSTATUS_FLIGHTMODE
|
||||||
|
|
||||||
@ -45,4 +53,6 @@
|
|||||||
|
|
||||||
extern int32_t configuration_check();
|
extern int32_t configuration_check();
|
||||||
|
|
||||||
|
FrameType_t GetCurrentFrameType();
|
||||||
|
|
||||||
#endif /* SANITYCHECK_H */
|
#endif /* SANITYCHECK_H */
|
||||||
|
@ -94,26 +94,8 @@ int32_t configuration_check()
|
|||||||
|
|
||||||
|
|
||||||
// Classify airframe type
|
// Classify airframe type
|
||||||
bool multirotor;
|
bool multirotor = (GetCurrentFrameType() == FRAME_TYPE_MULTIROTOR);
|
||||||
uint8_t airframe_type;
|
|
||||||
|
|
||||||
SystemSettingsAirframeTypeGet(&airframe_type);
|
|
||||||
switch (airframe_type) {
|
|
||||||
case SYSTEMSETTINGS_AIRFRAMETYPE_QUADX:
|
|
||||||
case SYSTEMSETTINGS_AIRFRAMETYPE_QUADP:
|
|
||||||
case SYSTEMSETTINGS_AIRFRAMETYPE_HEXA:
|
|
||||||
case SYSTEMSETTINGS_AIRFRAMETYPE_OCTO:
|
|
||||||
case SYSTEMSETTINGS_AIRFRAMETYPE_HEXAX:
|
|
||||||
case SYSTEMSETTINGS_AIRFRAMETYPE_OCTOV:
|
|
||||||
case SYSTEMSETTINGS_AIRFRAMETYPE_OCTOCOAXP:
|
|
||||||
case SYSTEMSETTINGS_AIRFRAMETYPE_HEXACOAX:
|
|
||||||
case SYSTEMSETTINGS_AIRFRAMETYPE_TRI:
|
|
||||||
case SYSTEMSETTINGS_AIRFRAMETYPE_OCTOCOAXX:
|
|
||||||
multirotor = true;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
multirotor = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// For each available flight mode position sanity check the available
|
// For each available flight mode position sanity check the available
|
||||||
// modes
|
// modes
|
||||||
@ -272,3 +254,42 @@ static bool check_stabilization_settings(int index, bool multirotor, bool copter
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FrameType_t GetCurrentFrameType()
|
||||||
|
{
|
||||||
|
uint8_t airframe_type;
|
||||||
|
|
||||||
|
SystemSettingsAirframeTypeGet(&airframe_type);
|
||||||
|
switch ((SystemSettingsAirframeTypeOptions)airframe_type) {
|
||||||
|
case SYSTEMSETTINGS_AIRFRAMETYPE_QUADX:
|
||||||
|
case SYSTEMSETTINGS_AIRFRAMETYPE_QUADP:
|
||||||
|
case SYSTEMSETTINGS_AIRFRAMETYPE_HEXA:
|
||||||
|
case SYSTEMSETTINGS_AIRFRAMETYPE_OCTO:
|
||||||
|
case SYSTEMSETTINGS_AIRFRAMETYPE_HEXAX:
|
||||||
|
case SYSTEMSETTINGS_AIRFRAMETYPE_OCTOV:
|
||||||
|
case SYSTEMSETTINGS_AIRFRAMETYPE_OCTOCOAXP:
|
||||||
|
case SYSTEMSETTINGS_AIRFRAMETYPE_HEXACOAX:
|
||||||
|
case SYSTEMSETTINGS_AIRFRAMETYPE_TRI:
|
||||||
|
case SYSTEMSETTINGS_AIRFRAMETYPE_OCTOCOAXX:
|
||||||
|
return FRAME_TYPE_MULTIROTOR;
|
||||||
|
|
||||||
|
case SYSTEMSETTINGS_AIRFRAMETYPE_FIXEDWING:
|
||||||
|
case SYSTEMSETTINGS_AIRFRAMETYPE_FIXEDWINGELEVON:
|
||||||
|
case SYSTEMSETTINGS_AIRFRAMETYPE_FIXEDWINGVTAIL:
|
||||||
|
return FRAME_TYPE_FIXED_WING;
|
||||||
|
|
||||||
|
case SYSTEMSETTINGS_AIRFRAMETYPE_HELICP:
|
||||||
|
return FRAME_TYPE_HELI;
|
||||||
|
|
||||||
|
case SYSTEMSETTINGS_AIRFRAMETYPE_GROUNDVEHICLECAR:
|
||||||
|
case SYSTEMSETTINGS_AIRFRAMETYPE_GROUNDVEHICLEDIFFERENTIAL:
|
||||||
|
case SYSTEMSETTINGS_AIRFRAMETYPE_GROUNDVEHICLEMOTORCYCLE:
|
||||||
|
return FRAME_TYPE_GROUND;
|
||||||
|
|
||||||
|
case SYSTEMSETTINGS_AIRFRAMETYPE_VTOL:
|
||||||
|
case SYSTEMSETTINGS_AIRFRAMETYPE_CUSTOM:
|
||||||
|
return FRAME_TYPE_CUSTOM;
|
||||||
|
}
|
||||||
|
// anyway it should not reach here
|
||||||
|
return FRAME_TYPE_CUSTOM;
|
||||||
|
}
|
||||||
|
@ -62,6 +62,7 @@
|
|||||||
#include "velocitystate.h"
|
#include "velocitystate.h"
|
||||||
#include "taskinfo.h"
|
#include "taskinfo.h"
|
||||||
#include <pios_struct_helper.h>
|
#include <pios_struct_helper.h>
|
||||||
|
#include <sanitycheck.h>
|
||||||
|
|
||||||
#include "sin_lookup.h"
|
#include "sin_lookup.h"
|
||||||
#include "paths.h"
|
#include "paths.h"
|
||||||
@ -112,7 +113,10 @@ int32_t FixedWingPathFollowerInitialize()
|
|||||||
HwSettingsInitialize();
|
HwSettingsInitialize();
|
||||||
HwSettingsOptionalModulesData optionalModules;
|
HwSettingsOptionalModulesData optionalModules;
|
||||||
HwSettingsOptionalModulesGet(&optionalModules);
|
HwSettingsOptionalModulesGet(&optionalModules);
|
||||||
if (optionalModules.FixedWingPathFollower == HWSETTINGS_OPTIONALMODULES_ENABLED) {
|
FrameType_t frameType = GetCurrentFrameType();
|
||||||
|
|
||||||
|
if ((optionalModules.FixedWingPathFollower == HWSETTINGS_OPTIONALMODULES_ENABLED) ||
|
||||||
|
(frameType == FRAME_TYPE_FIXED_WING)) {
|
||||||
followerEnabled = true;
|
followerEnabled = true;
|
||||||
FixedWingPathFollowerSettingsInitialize();
|
FixedWingPathFollowerSettingsInitialize();
|
||||||
FixedWingPathFollowerStatusInitialize();
|
FixedWingPathFollowerStatusInitialize();
|
||||||
|
@ -234,7 +234,7 @@ static filterResult complementaryFilter(struct data *this, float gyro[3], float
|
|||||||
float magBias[3];
|
float magBias[3];
|
||||||
RevoCalibrationmag_biasArrayGet(magBias);
|
RevoCalibrationmag_biasArrayGet(magBias);
|
||||||
// don't trust Mag for initial orientation if it has not been calibrated
|
// don't trust Mag for initial orientation if it has not been calibrated
|
||||||
if (magBias[0] < 1e-6f && magBias[1] < 1e-6f && magBias[2] < 1e-6f) {
|
if (fabsf(magBias[0]) < 1e-6f && fabsf(magBias[1]) < 1e-6f && fabsf(magBias[2]) < 1e-6f) {
|
||||||
this->magCalibrated = false;
|
this->magCalibrated = false;
|
||||||
mag[0] = 100.0f;
|
mag[0] = 100.0f;
|
||||||
mag[1] = 0.0f;
|
mag[1] = 0.0f;
|
||||||
|
@ -96,11 +96,12 @@ static xQueueHandle objectPersistenceQueue;
|
|||||||
static enum { STACKOVERFLOW_NONE = 0, STACKOVERFLOW_WARNING = 1, STACKOVERFLOW_CRITICAL = 3 } stackOverflow;
|
static enum { STACKOVERFLOW_NONE = 0, STACKOVERFLOW_WARNING = 1, STACKOVERFLOW_CRITICAL = 3 } stackOverflow;
|
||||||
static bool mallocFailed;
|
static bool mallocFailed;
|
||||||
static HwSettingsData bootHwSettings;
|
static HwSettingsData bootHwSettings;
|
||||||
|
static FrameType_t bootFrameType;
|
||||||
static struct PIOS_FLASHFS_Stats fsStats;
|
static struct PIOS_FLASHFS_Stats fsStats;
|
||||||
|
|
||||||
// Private functions
|
// Private functions
|
||||||
static void objectUpdatedCb(UAVObjEvent *ev);
|
static void objectUpdatedCb(UAVObjEvent *ev);
|
||||||
static void hwSettingsUpdatedCb(UAVObjEvent *ev);
|
static void checkSettingsUpdatedCb(UAVObjEvent *ev);
|
||||||
#ifdef DIAG_TASKS
|
#ifdef DIAG_TASKS
|
||||||
static void taskMonitorForEachCallback(uint16_t task_id, const struct pios_task_info *task_info, void *context);
|
static void taskMonitorForEachCallback(uint16_t task_id, const struct pios_task_info *task_info, void *context);
|
||||||
static void callbackSchedulerForEachCallback(int16_t callback_id, const struct pios_callback_info *callback_info, void *context);
|
static void callbackSchedulerForEachCallback(int16_t callback_id, const struct pios_callback_info *callback_info, void *context);
|
||||||
@ -195,8 +196,10 @@ static void systemTask(__attribute__((unused)) void *parameters)
|
|||||||
|
|
||||||
// Load a copy of HwSetting active at boot time
|
// Load a copy of HwSetting active at boot time
|
||||||
HwSettingsGet(&bootHwSettings);
|
HwSettingsGet(&bootHwSettings);
|
||||||
|
bootFrameType = GetCurrentFrameType();
|
||||||
// Whenever the configuration changes, make sure it is safe to fly
|
// Whenever the configuration changes, make sure it is safe to fly
|
||||||
HwSettingsConnectCallback(hwSettingsUpdatedCb);
|
HwSettingsConnectCallback(checkSettingsUpdatedCb);
|
||||||
|
SystemSettingsConnectCallback(checkSettingsUpdatedCb);
|
||||||
|
|
||||||
#ifdef DIAG_TASKS
|
#ifdef DIAG_TASKS
|
||||||
TaskInfoData taskInfoData;
|
TaskInfoData taskInfoData;
|
||||||
@ -396,13 +399,15 @@ static void objectUpdatedCb(UAVObjEvent *ev)
|
|||||||
/**
|
/**
|
||||||
* Called whenever hardware settings changed
|
* Called whenever hardware settings changed
|
||||||
*/
|
*/
|
||||||
static void hwSettingsUpdatedCb(__attribute__((unused)) UAVObjEvent *ev)
|
static void checkSettingsUpdatedCb(__attribute__((unused)) UAVObjEvent *ev)
|
||||||
{
|
{
|
||||||
HwSettingsData currentHwSettings;
|
HwSettingsData currentHwSettings;
|
||||||
|
|
||||||
HwSettingsGet(¤tHwSettings);
|
HwSettingsGet(¤tHwSettings);
|
||||||
|
FrameType_t currentFrameType = GetCurrentFrameType();
|
||||||
// check whether the Hw Configuration has changed from the one used at boot time
|
// check whether the Hw Configuration has changed from the one used at boot time
|
||||||
if (memcmp(&bootHwSettings, ¤tHwSettings, sizeof(HwSettingsData)) != 0) {
|
if ((memcmp(&bootHwSettings, ¤tHwSettings, sizeof(HwSettingsData)) != 0) ||
|
||||||
|
(currentFrameType != bootFrameType)) {
|
||||||
ExtendedAlarmsSet(SYSTEMALARMS_ALARM_BOOTFAULT, SYSTEMALARMS_ALARM_CRITICAL, SYSTEMALARMS_EXTENDEDALARMSTATUS_REBOOTREQUIRED, 0);
|
ExtendedAlarmsSet(SYSTEMALARMS_ALARM_BOOTFAULT, SYSTEMALARMS_ALARM_CRITICAL, SYSTEMALARMS_EXTENDEDALARMSTATUS_REBOOTREQUIRED, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -73,6 +73,7 @@
|
|||||||
|
|
||||||
#include "paths.h"
|
#include "paths.h"
|
||||||
#include "CoordinateConversions.h"
|
#include "CoordinateConversions.h"
|
||||||
|
#include <sanitycheck.h>
|
||||||
|
|
||||||
#include "cameradesired.h"
|
#include "cameradesired.h"
|
||||||
#include "poilearnsettings.h"
|
#include "poilearnsettings.h"
|
||||||
@ -128,8 +129,10 @@ int32_t VtolPathFollowerInitialize()
|
|||||||
HwSettingsOptionalModulesData optionalModules;
|
HwSettingsOptionalModulesData optionalModules;
|
||||||
|
|
||||||
HwSettingsOptionalModulesGet(&optionalModules);
|
HwSettingsOptionalModulesGet(&optionalModules);
|
||||||
|
FrameType_t frameType = GetCurrentFrameType();
|
||||||
|
|
||||||
if (optionalModules.VtolPathFollower == HWSETTINGS_OPTIONALMODULES_ENABLED) {
|
if ((optionalModules.VtolPathFollower == HWSETTINGS_OPTIONALMODULES_ENABLED) ||
|
||||||
|
(frameType == FRAME_TYPE_MULTIROTOR)) {
|
||||||
VtolPathFollowerSettingsInitialize();
|
VtolPathFollowerSettingsInitialize();
|
||||||
NedAccelInitialize();
|
NedAccelInitialize();
|
||||||
PathDesiredInitialize();
|
PathDesiredInitialize();
|
||||||
|
@ -4,8 +4,8 @@
|
|||||||
<field name="BoardRotation" units="deg" type="float" elementnames="Roll,Pitch,Yaw" defaultvalue="0,0,0"/>
|
<field name="BoardRotation" units="deg" type="float" elementnames="Roll,Pitch,Yaw" defaultvalue="0,0,0"/>
|
||||||
<field name="AccelKp" units="channel" type="float" elements="1" defaultvalue="0.05"/>
|
<field name="AccelKp" units="channel" type="float" elements="1" defaultvalue="0.05"/>
|
||||||
<field name="AccelKi" units="channel" type="float" elements="1" defaultvalue="0.0001"/>
|
<field name="AccelKi" units="channel" type="float" elements="1" defaultvalue="0.0001"/>
|
||||||
<field name="MagKi" units="" type="float" elements="1" defaultvalue="0"/>
|
<field name="MagKi" units="" type="float" elements="1" defaultvalue="0.000001"/>
|
||||||
<field name="MagKp" units="" type="float" elements="1" defaultvalue="0"/>
|
<field name="MagKp" units="" type="float" elements="1" defaultvalue="0.01"/>
|
||||||
<field name="AccelTau" units="" type="float" elements="1" defaultvalue="0"/>
|
<field name="AccelTau" units="" type="float" elements="1" defaultvalue="0"/>
|
||||||
<field name="YawBiasRate" units="channel" type="float" elements="1" defaultvalue="0.000001"/>
|
<field name="YawBiasRate" units="channel" type="float" elements="1" defaultvalue="0.000001"/>
|
||||||
<field name="ZeroDuringArming" units="channel" type="enum" elements="1" options="FALSE,TRUE" defaultvalue="TRUE"/>
|
<field name="ZeroDuringArming" units="channel" type="enum" elements="1" options="FALSE,TRUE" defaultvalue="TRUE"/>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user