mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-05 21:52:10 +01:00
Flight: Got a much nicer arming/disarming system going. Made it a separate flag in the end to allow testing the stabilization code with motors not running. Also changes maxRoll/maxPitch/maxYaw to uint8 to keep object size smaller - no reason for float precision for this.
git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@1660 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
parent
a6e71177e4
commit
3b015b41c5
@ -38,6 +38,7 @@
|
|||||||
#include "systemsettings.h"
|
#include "systemsettings.h"
|
||||||
#include "actuatordesired.h"
|
#include "actuatordesired.h"
|
||||||
#include "actuatorcommand.h"
|
#include "actuatorcommand.h"
|
||||||
|
#include "manualcontrolcommand.h"
|
||||||
|
|
||||||
// Private constants
|
// Private constants
|
||||||
#define MAX_QUEUE_SIZE 2
|
#define MAX_QUEUE_SIZE 2
|
||||||
@ -63,7 +64,6 @@ static void setFailsafe();
|
|||||||
|
|
||||||
static float bound(float val, float min, float max);
|
static float bound(float val, float min, float max);
|
||||||
|
|
||||||
static uint8_t vtolEnabled = 0;
|
|
||||||
/**
|
/**
|
||||||
* @brief Module initialization
|
* @brief Module initialization
|
||||||
* @return 0
|
* @return 0
|
||||||
@ -98,8 +98,6 @@ static void actuatorTask(void* parameters)
|
|||||||
ActuatorSettingsGet(&settings);
|
ActuatorSettingsGet(&settings);
|
||||||
PIOS_Servo_SetHz(settings.ChannelUpdateFreq[0], settings.ChannelUpdateFreq[1]);
|
PIOS_Servo_SetHz(settings.ChannelUpdateFreq[0], settings.ChannelUpdateFreq[1]);
|
||||||
|
|
||||||
vtolEnabled = 0; // a flag that must be set by moving throttle up and down again
|
|
||||||
|
|
||||||
// Go to the neutral (failsafe) values until an ActuatorDesired update is received
|
// Go to the neutral (failsafe) values until an ActuatorDesired update is received
|
||||||
setFailsafe();
|
setFailsafe();
|
||||||
|
|
||||||
@ -196,6 +194,7 @@ static void actuatorTask(void* parameters)
|
|||||||
*/
|
*/
|
||||||
static int32_t mixerFixedWing(const ActuatorSettingsData* settings, const ActuatorDesiredData* desired, ActuatorCommandData* cmd)
|
static int32_t mixerFixedWing(const ActuatorSettingsData* settings, const ActuatorDesiredData* desired, ActuatorCommandData* cmd)
|
||||||
{
|
{
|
||||||
|
|
||||||
// Check settings
|
// Check settings
|
||||||
if ( settings->FixedWingPitch1 == ACTUATORSETTINGS_FIXEDWINGPITCH1_NONE ||
|
if ( settings->FixedWingPitch1 == ACTUATORSETTINGS_FIXEDWINGPITCH1_NONE ||
|
||||||
settings->FixedWingRoll1 == ACTUATORSETTINGS_FIXEDWINGROLL1_NONE ||
|
settings->FixedWingRoll1 == ACTUATORSETTINGS_FIXEDWINGROLL1_NONE ||
|
||||||
@ -204,6 +203,9 @@ static int32_t mixerFixedWing(const ActuatorSettingsData* settings, const Actuat
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ManualControlCommandData manualControl;
|
||||||
|
ManualControlCommandGet(&manualControl);
|
||||||
|
|
||||||
// Set pitch servo command
|
// Set pitch servo command
|
||||||
cmd->Channel[ settings->FixedWingPitch1 ] = scaleChannel(desired->Pitch, settings->ChannelMax[ settings->FixedWingPitch1 ],
|
cmd->Channel[ settings->FixedWingPitch1 ] = scaleChannel(desired->Pitch, settings->ChannelMax[ settings->FixedWingPitch1 ],
|
||||||
settings->ChannelMin[ settings->FixedWingPitch1 ],
|
settings->ChannelMin[ settings->FixedWingPitch1 ],
|
||||||
@ -235,9 +237,12 @@ static int32_t mixerFixedWing(const ActuatorSettingsData* settings, const Actuat
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Set throttle servo command
|
// Set throttle servo command
|
||||||
cmd->Channel[ settings->FixedWingThrottle ] = scaleChannel(desired->Throttle, settings->ChannelMax[ settings->FixedWingThrottle ],
|
if(manualControl.Armed == MANUALCONTROLCOMMAND_ARMED_TRUE)
|
||||||
|
cmd->Channel[ settings->FixedWingThrottle ] = scaleChannel(desired->Throttle, settings->ChannelMax[ settings->FixedWingThrottle ],
|
||||||
settings->ChannelMin[ settings->FixedWingThrottle ],
|
settings->ChannelMin[ settings->FixedWingThrottle ],
|
||||||
settings->ChannelNeutral[ settings->FixedWingThrottle ]);
|
settings->ChannelNeutral[ settings->FixedWingThrottle ]);
|
||||||
|
else
|
||||||
|
cmd->Channel[ settings->FixedWingThrottle ] = -1;
|
||||||
|
|
||||||
// Done
|
// Done
|
||||||
return 0;
|
return 0;
|
||||||
@ -257,21 +262,27 @@ static int32_t mixerFixedWingElevon(const ActuatorSettingsData* settings, const
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ManualControlCommandData manualControl;
|
||||||
|
ManualControlCommandGet(&manualControl);
|
||||||
|
|
||||||
// Set first elevon servo command
|
// Set first elevon servo command
|
||||||
cmd->Channel[ settings->FixedWingRoll1 ] = scaleChannel(desired->Pitch + desired->Roll, settings->ChannelMax[ settings->FixedWingRoll1 ],
|
cmd->Channel[ settings->FixedWingRoll1 ] = scaleChannel(desired->Pitch + desired->Roll, settings->ChannelMax[ settings->FixedWingRoll1 ],
|
||||||
settings->ChannelMin[ settings->FixedWingRoll1 ],
|
settings->ChannelMin[ settings->FixedWingRoll1 ],
|
||||||
settings->ChannelNeutral[ settings->FixedWingRoll1 ]);
|
settings->ChannelNeutral[ settings->FixedWingRoll1 ]);
|
||||||
|
|
||||||
// Set second elevon servo command
|
// Set second elevon servo command
|
||||||
cmd->Channel[ settings->FixedWingRoll2 ] = scaleChannel(desired->Pitch - desired->Roll, settings->ChannelMax[ settings->FixedWingRoll2 ],
|
cmd->Channel[ settings->FixedWingRoll2 ] = scaleChannel(desired->Pitch - desired->Roll, settings->ChannelMax[ settings->FixedWingRoll2 ],
|
||||||
settings->ChannelMin[ settings->FixedWingRoll2 ],
|
settings->ChannelMin[ settings->FixedWingRoll2 ],
|
||||||
settings->ChannelNeutral[ settings->FixedWingRoll2 ]);
|
settings->ChannelNeutral[ settings->FixedWingRoll2 ]);
|
||||||
|
|
||||||
// Set throttle servo command
|
// Set throttle servo command
|
||||||
cmd->Channel[ settings->FixedWingThrottle ] = scaleChannel(desired->Throttle, settings->ChannelMax[ settings->FixedWingThrottle ],
|
if(manualControl.Armed == MANUALCONTROLCOMMAND_ARMED_TRUE)
|
||||||
settings->ChannelMin[ settings->FixedWingThrottle ],
|
cmd->Channel[ settings->FixedWingThrottle ] = scaleChannel(desired->Throttle, settings->ChannelMax[ settings->FixedWingThrottle ],
|
||||||
settings->ChannelNeutral[ settings->FixedWingThrottle ]);
|
settings->ChannelMin[ settings->FixedWingThrottle ],
|
||||||
|
settings->ChannelNeutral[ settings->FixedWingThrottle ]);
|
||||||
|
else
|
||||||
|
cmd->Channel[ settings->FixedWingThrottle ] = -1;
|
||||||
|
|
||||||
// Done
|
// Done
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -293,20 +304,18 @@ static int32_t mixerVTOL(const ActuatorSettingsData* settings, const ActuatorDes
|
|||||||
VTOLStatusData vtolStatus;
|
VTOLStatusData vtolStatus;
|
||||||
VTOLSettingsGet(&vtolSettings);
|
VTOLSettingsGet(&vtolSettings);
|
||||||
VTOLStatusGet(&vtolStatus);
|
VTOLStatusGet(&vtolStatus);
|
||||||
|
|
||||||
// Simple logic to require throttle past .5 and then brought back before enabling motors.
|
ManualControlCommandData manualControl;
|
||||||
// This possibly should be used for other mixers.
|
ManualControlCommandGet(&manualControl);
|
||||||
if ((vtolEnabled == 0) && (desired->Throttle > .5))
|
|
||||||
vtolEnabled = 1;
|
|
||||||
if ((vtolEnabled == 1) && (desired->Throttle <= 0))
|
|
||||||
vtolEnabled = 2;
|
|
||||||
|
|
||||||
const int vtolMin = -1;
|
const int vtolMin = -1;
|
||||||
int vtolMax = 1;
|
int vtolMax = -1;
|
||||||
if(desired->Throttle < 0 || vtolEnabled < 2)
|
|
||||||
vtolMax = -1;
|
if((manualControl.Armed == MANUALCONTROLCOMMAND_ARMED_TRUE) &&
|
||||||
|
(desired->Throttle >= 0))
|
||||||
|
vtolMax = 1;
|
||||||
else
|
else
|
||||||
vtolMax = 1;
|
vtolMax = -1;
|
||||||
|
|
||||||
if(((settings->VTOLMotorN != ACTUATORSETTINGS_VTOLMOTORN_NONE) +
|
if(((settings->VTOLMotorN != ACTUATORSETTINGS_VTOLMOTORN_NONE) +
|
||||||
(settings->VTOLMotorNE != ACTUATORSETTINGS_VTOLMOTORS_NONE) +
|
(settings->VTOLMotorNE != ACTUATORSETTINGS_VTOLMOTORS_NONE) +
|
||||||
@ -320,51 +329,51 @@ static int32_t mixerVTOL(const ActuatorSettingsData* settings, const ActuatorDes
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(settings->VTOLMotorN != ACTUATORSETTINGS_VTOLMOTORN_NONE) {
|
if(settings->VTOLMotorN != ACTUATORSETTINGS_VTOLMOTORN_NONE) {
|
||||||
vtolStatus.MotorN = bound(desired->Throttle * vtolSettings.MotorN[VTOLSETTINGS_MOTORN_THROTTLE] +
|
vtolStatus.MotorN = desired->Throttle * vtolSettings.MotorN[VTOLSETTINGS_MOTORN_THROTTLE] +
|
||||||
desired->Pitch * vtolSettings.MotorN[VTOLSETTINGS_MOTORN_PITCH] +
|
desired->Pitch * vtolSettings.MotorN[VTOLSETTINGS_MOTORN_PITCH] +
|
||||||
desired->Roll * vtolSettings.MotorN[VTOLSETTINGS_MOTORN_ROLL] +
|
desired->Roll * vtolSettings.MotorN[VTOLSETTINGS_MOTORN_ROLL] +
|
||||||
desired->Yaw * vtolSettings.MotorN[VTOLSETTINGS_MOTORN_YAW],vtolMin,vtolMax);
|
desired->Yaw * vtolSettings.MotorN[VTOLSETTINGS_MOTORN_YAW];
|
||||||
cmd->Channel[settings->VTOLMotorN] = scaleChannel(vtolStatus.MotorN,
|
cmd->Channel[settings->VTOLMotorN] = scaleChannel(bound(vtolStatus.MotorN, vtolMin, vtolMax),
|
||||||
settings->ChannelMax[settings->VTOLMotorN],
|
settings->ChannelMax[settings->VTOLMotorN],
|
||||||
settings->ChannelMin[settings->VTOLMotorN],
|
settings->ChannelMin[settings->VTOLMotorN],
|
||||||
settings->ChannelNeutral[settings->VTOLMotorN]);
|
settings->ChannelNeutral[settings->VTOLMotorN]);
|
||||||
}
|
}
|
||||||
if(settings->VTOLMotorNE != ACTUATORSETTINGS_VTOLMOTORNE_NONE) {
|
if(settings->VTOLMotorNE != ACTUATORSETTINGS_VTOLMOTORNE_NONE) {
|
||||||
vtolStatus.MotorNE = bound(desired->Throttle * vtolSettings.MotorNE[VTOLSETTINGS_MOTORNE_THROTTLE] +
|
vtolStatus.MotorNE = desired->Throttle * vtolSettings.MotorNE[VTOLSETTINGS_MOTORNE_THROTTLE] +
|
||||||
desired->Pitch * vtolSettings.MotorNE[VTOLSETTINGS_MOTORNE_PITCH] +
|
desired->Pitch * vtolSettings.MotorNE[VTOLSETTINGS_MOTORNE_PITCH] +
|
||||||
desired->Roll * vtolSettings.MotorNE[VTOLSETTINGS_MOTORNE_ROLL] +
|
desired->Roll * vtolSettings.MotorNE[VTOLSETTINGS_MOTORNE_ROLL] +
|
||||||
desired->Yaw * vtolSettings.MotorNE[VTOLSETTINGS_MOTORNE_YAW],vtolMin,vtolMax);
|
desired->Yaw * vtolSettings.MotorNE[VTOLSETTINGS_MOTORNE_YAW];
|
||||||
cmd->Channel[settings->VTOLMotorNE] = scaleChannel(vtolStatus.MotorNE,
|
cmd->Channel[settings->VTOLMotorNE] = scaleChannel(bound(vtolStatus.MotorNE, vtolMin, vtolMax),
|
||||||
settings->ChannelMax[settings->VTOLMotorNE],
|
settings->ChannelMax[settings->VTOLMotorNE],
|
||||||
settings->ChannelMin[settings->VTOLMotorNE],
|
settings->ChannelMin[settings->VTOLMotorNE],
|
||||||
settings->ChannelNeutral[settings->VTOLMotorNE]);
|
settings->ChannelNeutral[settings->VTOLMotorNE]);
|
||||||
}
|
}
|
||||||
if(settings->VTOLMotorE != ACTUATORSETTINGS_VTOLMOTORE_NONE) {
|
if(settings->VTOLMotorE != ACTUATORSETTINGS_VTOLMOTORE_NONE) {
|
||||||
vtolStatus.MotorE = bound(desired->Throttle * vtolSettings.MotorE[VTOLSETTINGS_MOTORE_THROTTLE] +
|
vtolStatus.MotorE = desired->Throttle * vtolSettings.MotorE[VTOLSETTINGS_MOTORE_THROTTLE] +
|
||||||
desired->Pitch * vtolSettings.MotorE[VTOLSETTINGS_MOTORE_PITCH] +
|
desired->Pitch * vtolSettings.MotorE[VTOLSETTINGS_MOTORE_PITCH] +
|
||||||
desired->Roll * vtolSettings.MotorE[VTOLSETTINGS_MOTORE_ROLL] +
|
desired->Roll * vtolSettings.MotorE[VTOLSETTINGS_MOTORE_ROLL] +
|
||||||
desired->Yaw * vtolSettings.MotorE[VTOLSETTINGS_MOTORE_YAW],vtolMin,vtolMax);
|
desired->Yaw * vtolSettings.MotorE[VTOLSETTINGS_MOTORE_YAW];
|
||||||
cmd->Channel[settings->VTOLMotorE] = scaleChannel(vtolStatus.MotorE,
|
cmd->Channel[settings->VTOLMotorE] = scaleChannel(bound(vtolStatus.MotorE, vtolMin, vtolMax),
|
||||||
settings->ChannelMax[settings->VTOLMotorE],
|
settings->ChannelMax[settings->VTOLMotorE],
|
||||||
settings->ChannelMin[settings->VTOLMotorE],
|
settings->ChannelMin[settings->VTOLMotorE],
|
||||||
settings->ChannelNeutral[settings->VTOLMotorE]);
|
settings->ChannelNeutral[settings->VTOLMotorE]);
|
||||||
}
|
}
|
||||||
if(settings->VTOLMotorSE != ACTUATORSETTINGS_VTOLMOTORSE_NONE) {
|
if(settings->VTOLMotorSE != ACTUATORSETTINGS_VTOLMOTORSE_NONE) {
|
||||||
vtolStatus.MotorSE = bound(desired->Throttle * vtolSettings.MotorSE[VTOLSETTINGS_MOTORSE_THROTTLE] +
|
vtolStatus.MotorSE = desired->Throttle * vtolSettings.MotorSE[VTOLSETTINGS_MOTORSE_THROTTLE] +
|
||||||
desired->Pitch * vtolSettings.MotorSE[VTOLSETTINGS_MOTORSE_PITCH] +
|
desired->Pitch * vtolSettings.MotorSE[VTOLSETTINGS_MOTORSE_PITCH] +
|
||||||
desired->Roll * vtolSettings.MotorSE[VTOLSETTINGS_MOTORSE_ROLL] +
|
desired->Roll * vtolSettings.MotorSE[VTOLSETTINGS_MOTORSE_ROLL] +
|
||||||
desired->Yaw * vtolSettings.MotorSE[VTOLSETTINGS_MOTORSE_YAW],vtolMin,vtolMax);
|
desired->Yaw * vtolSettings.MotorSE[VTOLSETTINGS_MOTORSE_YAW];
|
||||||
cmd->Channel[settings->VTOLMotorSE] = scaleChannel(vtolStatus.MotorSE,
|
cmd->Channel[settings->VTOLMotorSE] = scaleChannel(bound(vtolStatus.MotorSE, vtolMin, vtolMax),
|
||||||
settings->ChannelMax[settings->VTOLMotorSE],
|
settings->ChannelMax[settings->VTOLMotorSE],
|
||||||
settings->ChannelMin[settings->VTOLMotorSE],
|
settings->ChannelMin[settings->VTOLMotorSE],
|
||||||
settings->ChannelNeutral[settings->VTOLMotorSE]);
|
settings->ChannelNeutral[settings->VTOLMotorSE]);
|
||||||
}
|
}
|
||||||
if(settings->VTOLMotorS != ACTUATORSETTINGS_VTOLMOTORS_NONE) {
|
if(settings->VTOLMotorS != ACTUATORSETTINGS_VTOLMOTORS_NONE) {
|
||||||
vtolStatus.MotorS = bound(desired->Throttle * vtolSettings.MotorS[VTOLSETTINGS_MOTORS_THROTTLE] +
|
vtolStatus.MotorS = desired->Throttle * vtolSettings.MotorS[VTOLSETTINGS_MOTORS_THROTTLE] +
|
||||||
desired->Pitch * vtolSettings.MotorS[VTOLSETTINGS_MOTORS_PITCH] +
|
desired->Pitch * vtolSettings.MotorS[VTOLSETTINGS_MOTORS_PITCH] +
|
||||||
desired->Roll * vtolSettings.MotorS[VTOLSETTINGS_MOTORS_ROLL] +
|
desired->Roll * vtolSettings.MotorS[VTOLSETTINGS_MOTORS_ROLL] +
|
||||||
desired->Yaw * vtolSettings.MotorS[VTOLSETTINGS_MOTORS_YAW],vtolMin,vtolMax);
|
desired->Yaw * vtolSettings.MotorS[VTOLSETTINGS_MOTORS_YAW];
|
||||||
cmd->Channel[settings->VTOLMotorS] = scaleChannel(vtolStatus.MotorS,
|
cmd->Channel[settings->VTOLMotorS] = scaleChannel(bound(vtolStatus.MotorS, vtolMin, vtolMax),
|
||||||
settings->ChannelMax[settings->VTOLMotorS],
|
settings->ChannelMax[settings->VTOLMotorS],
|
||||||
settings->ChannelMin[settings->VTOLMotorS],
|
settings->ChannelMin[settings->VTOLMotorS],
|
||||||
settings->ChannelNeutral[settings->VTOLMotorS]);
|
settings->ChannelNeutral[settings->VTOLMotorS]);
|
||||||
@ -380,21 +389,21 @@ static int32_t mixerVTOL(const ActuatorSettingsData* settings, const ActuatorDes
|
|||||||
settings->ChannelNeutral[settings->VTOLMotorSW]);
|
settings->ChannelNeutral[settings->VTOLMotorSW]);
|
||||||
}
|
}
|
||||||
if(settings->VTOLMotorW != ACTUATORSETTINGS_VTOLMOTORW_NONE) {
|
if(settings->VTOLMotorW != ACTUATORSETTINGS_VTOLMOTORW_NONE) {
|
||||||
vtolStatus.MotorW = bound(desired->Throttle * vtolSettings.MotorW[VTOLSETTINGS_MOTORW_THROTTLE] +
|
vtolStatus.MotorW = desired->Throttle * vtolSettings.MotorW[VTOLSETTINGS_MOTORW_THROTTLE] +
|
||||||
desired->Pitch * vtolSettings.MotorW[VTOLSETTINGS_MOTORW_PITCH] +
|
desired->Pitch * vtolSettings.MotorW[VTOLSETTINGS_MOTORW_PITCH] +
|
||||||
desired->Roll * vtolSettings.MotorW[VTOLSETTINGS_MOTORW_ROLL] +
|
desired->Roll * vtolSettings.MotorW[VTOLSETTINGS_MOTORW_ROLL] +
|
||||||
desired->Yaw * vtolSettings.MotorW[VTOLSETTINGS_MOTORW_YAW],vtolMin,vtolMax);
|
desired->Yaw * vtolSettings.MotorW[VTOLSETTINGS_MOTORW_YAW];
|
||||||
cmd->Channel[settings->VTOLMotorW] = scaleChannel(vtolStatus.MotorW,
|
cmd->Channel[settings->VTOLMotorW] = scaleChannel(bound(vtolStatus.MotorW, vtolMin, vtolMax),
|
||||||
settings->ChannelMax[settings->VTOLMotorW],
|
settings->ChannelMax[settings->VTOLMotorW],
|
||||||
settings->ChannelMin[settings->VTOLMotorW],
|
settings->ChannelMin[settings->VTOLMotorW],
|
||||||
settings->ChannelNeutral[settings->VTOLMotorW]);
|
settings->ChannelNeutral[settings->VTOLMotorW]);
|
||||||
}
|
}
|
||||||
if(settings->VTOLMotorNW != ACTUATORSETTINGS_VTOLMOTORNW_NONE) {
|
if(settings->VTOLMotorNW != ACTUATORSETTINGS_VTOLMOTORNW_NONE) {
|
||||||
vtolStatus.MotorNW = bound(desired->Throttle * vtolSettings.MotorNW[VTOLSETTINGS_MOTORNW_THROTTLE] +
|
vtolStatus.MotorNW = desired->Throttle * vtolSettings.MotorNW[VTOLSETTINGS_MOTORNW_THROTTLE] +
|
||||||
desired->Pitch * vtolSettings.MotorNW[VTOLSETTINGS_MOTORNW_PITCH] +
|
desired->Pitch * vtolSettings.MotorNW[VTOLSETTINGS_MOTORNW_PITCH] +
|
||||||
desired->Roll * vtolSettings.MotorNW[VTOLSETTINGS_MOTORNW_ROLL] +
|
desired->Roll * vtolSettings.MotorNW[VTOLSETTINGS_MOTORNW_ROLL] +
|
||||||
desired->Yaw * vtolSettings.MotorNW[VTOLSETTINGS_MOTORNW_YAW],vtolMin,vtolMax);
|
desired->Yaw * vtolSettings.MotorNW[VTOLSETTINGS_MOTORNW_YAW];
|
||||||
cmd->Channel[settings->VTOLMotorNW] = scaleChannel(vtolStatus.MotorNW,
|
cmd->Channel[settings->VTOLMotorNW] = scaleChannel(bound(vtolStatus.MotorNW, vtolMin, vtolMax),
|
||||||
settings->ChannelMax[settings->VTOLMotorNW],
|
settings->ChannelMax[settings->VTOLMotorNW],
|
||||||
settings->ChannelMin[settings->VTOLMotorNW],
|
settings->ChannelMin[settings->VTOLMotorNW],
|
||||||
settings->ChannelNeutral[settings->VTOLMotorNW]);
|
settings->ChannelNeutral[settings->VTOLMotorNW]);
|
||||||
|
@ -81,12 +81,18 @@ static void manualControlTask(void* parameters)
|
|||||||
ActuatorDesiredData actuator;
|
ActuatorDesiredData actuator;
|
||||||
AttitudeDesiredData attitude;
|
AttitudeDesiredData attitude;
|
||||||
portTickType lastSysTime;
|
portTickType lastSysTime;
|
||||||
|
portTickType armedDisarmStart = 0;
|
||||||
float flightMode;
|
float flightMode;
|
||||||
|
|
||||||
uint8_t disconnected_count = 0;
|
uint8_t disconnected_count = 0;
|
||||||
uint8_t connected_count = 0;
|
uint8_t connected_count = 0;
|
||||||
enum {CONNECTED, DISCONNECTED} connection_state = DISCONNECTED;
|
enum {CONNECTED, DISCONNECTED} connection_state = DISCONNECTED;
|
||||||
|
|
||||||
|
// Make sure unarmed on power up
|
||||||
|
ManualControlCommandGet(&cmd);
|
||||||
|
cmd.Armed = MANUALCONTROLCOMMAND_ARMED_FALSE;
|
||||||
|
ManualControlCommandSet(&cmd);
|
||||||
|
|
||||||
// Main task loop
|
// Main task loop
|
||||||
lastSysTime = xTaskGetTickCount();
|
lastSysTime = xTaskGetTickCount();
|
||||||
while (1)
|
while (1)
|
||||||
@ -228,6 +234,22 @@ static void manualControlTask(void* parameters)
|
|||||||
AlarmsClear(SYSTEMALARMS_ALARM_MANUALCONTROL);
|
AlarmsClear(SYSTEMALARMS_ALARM_MANUALCONTROL);
|
||||||
ManualControlCommandSet(&cmd);
|
ManualControlCommandSet(&cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Look for arm or disarm signal */
|
||||||
|
if ((cmd.Throttle <= 0.05) && (cmd.Roll <= -0.95)) {
|
||||||
|
if((armedDisarmStart == 0) || (lastSysTime < armedDisarmStart)) // store when started, deal with rollover
|
||||||
|
armedDisarmStart = lastSysTime;
|
||||||
|
else if ((lastSysTime - armedDisarmStart) > (1000 * portTICK_RATE_MS))
|
||||||
|
cmd.Armed = MANUALCONTROLCOMMAND_ARMED_TRUE;
|
||||||
|
}else if ((cmd.Throttle <= 0.05) && (cmd.Roll >= 0.95)) {
|
||||||
|
if((armedDisarmStart == 0) || (lastSysTime < armedDisarmStart)) // store when started, deal with rollover
|
||||||
|
armedDisarmStart = lastSysTime;
|
||||||
|
else if ((lastSysTime - armedDisarmStart) > (1000 * portTICK_RATE_MS))
|
||||||
|
cmd.Armed = MANUALCONTROLCOMMAND_ARMED_FALSE;
|
||||||
|
} else {
|
||||||
|
armedDisarmStart = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Depending on the mode update the Stabilization or Actuator objects
|
// Depending on the mode update the Stabilization or Actuator objects
|
||||||
if ( cmd.FlightMode == MANUALCONTROLCOMMAND_FLIGHTMODE_MANUAL )
|
if ( cmd.FlightMode == MANUALCONTROLCOMMAND_FLIGHTMODE_MANUAL )
|
||||||
@ -255,11 +277,11 @@ static void manualControlTask(void* parameters)
|
|||||||
{
|
{
|
||||||
attitude.Yaw = (cmd.Yaw*180.0);
|
attitude.Yaw = (cmd.Yaw*180.0);
|
||||||
}
|
}
|
||||||
if(cmd.Throttle < 0)
|
|
||||||
attitude.Throttle = -1;
|
|
||||||
else
|
|
||||||
attitude.Throttle = cmd.Throttle*stabSettings.ThrottleMax;
|
|
||||||
}
|
}
|
||||||
|
if(cmd.Throttle < 0)
|
||||||
|
attitude.Throttle = -1;
|
||||||
|
else
|
||||||
|
attitude.Throttle = cmd.Throttle*stabSettings.ThrottleMax;
|
||||||
AttitudeDesiredSet(&attitude);
|
AttitudeDesiredSet(&attitude);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -152,7 +152,7 @@ static void stabilizationTask(void* parameters)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Setup throttle
|
// Setup throttle
|
||||||
actuatorDesired.Throttle = bound(attitudeDesired.Throttle, 0.0, stabSettings.ThrottleMax);
|
actuatorDesired.Throttle = bound(attitudeDesired.Throttle, stabSettings.ThrottleMin, stabSettings.ThrottleMax);
|
||||||
|
|
||||||
// Write actuator desired (if not in manual mode)
|
// Write actuator desired (if not in manual mode)
|
||||||
if ( manualControl.FlightMode != MANUALCONTROLCOMMAND_FLIGHTMODE_MANUAL )
|
if ( manualControl.FlightMode != MANUALCONTROLCOMMAND_FLIGHTMODE_MANUAL )
|
||||||
|
@ -41,7 +41,7 @@
|
|||||||
#define MANUALCONTROLCOMMAND_H
|
#define MANUALCONTROLCOMMAND_H
|
||||||
|
|
||||||
// Object constants
|
// Object constants
|
||||||
#define MANUALCONTROLCOMMAND_OBJID 1289277596U
|
#define MANUALCONTROLCOMMAND_OBJID 9594768U
|
||||||
#define MANUALCONTROLCOMMAND_NAME "ManualControlCommand"
|
#define MANUALCONTROLCOMMAND_NAME "ManualControlCommand"
|
||||||
#define MANUALCONTROLCOMMAND_METANAME "ManualControlCommandMeta"
|
#define MANUALCONTROLCOMMAND_METANAME "ManualControlCommandMeta"
|
||||||
#define MANUALCONTROLCOMMAND_ISSINGLEINST 1
|
#define MANUALCONTROLCOMMAND_ISSINGLEINST 1
|
||||||
@ -72,6 +72,7 @@
|
|||||||
// Object data
|
// Object data
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t Connected;
|
uint8_t Connected;
|
||||||
|
uint8_t Armed;
|
||||||
float Roll;
|
float Roll;
|
||||||
float Pitch;
|
float Pitch;
|
||||||
float Yaw;
|
float Yaw;
|
||||||
@ -88,6 +89,9 @@ typedef struct {
|
|||||||
// Field Connected information
|
// Field Connected information
|
||||||
/* Enumeration options for field Connected */
|
/* Enumeration options for field Connected */
|
||||||
typedef enum { MANUALCONTROLCOMMAND_CONNECTED_FALSE=0, MANUALCONTROLCOMMAND_CONNECTED_TRUE=1 } ManualControlCommandConnectedOptions;
|
typedef enum { MANUALCONTROLCOMMAND_CONNECTED_FALSE=0, MANUALCONTROLCOMMAND_CONNECTED_TRUE=1 } ManualControlCommandConnectedOptions;
|
||||||
|
// Field Armed information
|
||||||
|
/* Enumeration options for field Armed */
|
||||||
|
typedef enum { MANUALCONTROLCOMMAND_ARMED_FALSE=0, MANUALCONTROLCOMMAND_ARMED_TRUE=1 } ManualControlCommandArmedOptions;
|
||||||
// Field Roll information
|
// Field Roll information
|
||||||
// Field Pitch information
|
// Field Pitch information
|
||||||
// Field Yaw information
|
// Field Yaw information
|
||||||
|
@ -41,7 +41,7 @@
|
|||||||
#define STABILIZATIONSETTINGS_H
|
#define STABILIZATIONSETTINGS_H
|
||||||
|
|
||||||
// Object constants
|
// Object constants
|
||||||
#define STABILIZATIONSETTINGS_OBJID 1244337598U
|
#define STABILIZATIONSETTINGS_OBJID 117768092U
|
||||||
#define STABILIZATIONSETTINGS_NAME "StabilizationSettings"
|
#define STABILIZATIONSETTINGS_NAME "StabilizationSettings"
|
||||||
#define STABILIZATIONSETTINGS_METANAME "StabilizationSettingsMeta"
|
#define STABILIZATIONSETTINGS_METANAME "StabilizationSettingsMeta"
|
||||||
#define STABILIZATIONSETTINGS_ISSINGLEINST 1
|
#define STABILIZATIONSETTINGS_ISSINGLEINST 1
|
||||||
@ -71,12 +71,13 @@
|
|||||||
|
|
||||||
// Object data
|
// Object data
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint16_t UpdatePeriod;
|
uint8_t UpdatePeriod;
|
||||||
float RollMax;
|
uint8_t RollMax;
|
||||||
float PitchMax;
|
uint8_t PitchMax;
|
||||||
float YawMax;
|
uint8_t YawMax;
|
||||||
uint8_t YawMode;
|
uint8_t YawMode;
|
||||||
float ThrottleMax;
|
float ThrottleMax;
|
||||||
|
float ThrottleMin;
|
||||||
float RollIntegralLimit;
|
float RollIntegralLimit;
|
||||||
float PitchIntegralLimit;
|
float PitchIntegralLimit;
|
||||||
float YawIntegralLimit;
|
float YawIntegralLimit;
|
||||||
@ -101,6 +102,7 @@ typedef struct {
|
|||||||
/* Enumeration options for field YawMode */
|
/* Enumeration options for field YawMode */
|
||||||
typedef enum { STABILIZATIONSETTINGS_YAWMODE_RATE=0, STABILIZATIONSETTINGS_YAWMODE_HEADING=1 } StabilizationSettingsYawModeOptions;
|
typedef enum { STABILIZATIONSETTINGS_YAWMODE_RATE=0, STABILIZATIONSETTINGS_YAWMODE_HEADING=1 } StabilizationSettingsYawModeOptions;
|
||||||
// Field ThrottleMax information
|
// Field ThrottleMax information
|
||||||
|
// Field ThrottleMin information
|
||||||
// Field RollIntegralLimit information
|
// Field RollIntegralLimit information
|
||||||
// Field PitchIntegralLimit information
|
// Field PitchIntegralLimit information
|
||||||
// Field YawIntegralLimit information
|
// Field YawIntegralLimit information
|
||||||
|
@ -86,6 +86,7 @@ static void setDefaults(UAVObjHandle obj, uint16_t instId)
|
|||||||
data.YawMax = 35;
|
data.YawMax = 35;
|
||||||
data.YawMode = 0;
|
data.YawMode = 0;
|
||||||
data.ThrottleMax = 1;
|
data.ThrottleMax = 1;
|
||||||
|
data.ThrottleMin = -1;
|
||||||
data.RollIntegralLimit = 0.5;
|
data.RollIntegralLimit = 0.5;
|
||||||
data.PitchIntegralLimit = 0.5;
|
data.PitchIntegralLimit = 0.5;
|
||||||
data.YawIntegralLimit = 0.5;
|
data.YawIntegralLimit = 0.5;
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>653</width>
|
<width>653</width>
|
||||||
<height>290</height>
|
<height>295</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
@ -31,6 +31,13 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="checkBoxArmed">
|
||||||
|
<property name="text">
|
||||||
|
<string>Armed</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
@ -52,6 +52,10 @@ GCSControlGadgetWidget::GCSControlGadgetWidget(QWidget *parent) : QLabel(parent)
|
|||||||
// Set up slots and signals
|
// Set up slots and signals
|
||||||
connect(m_gcscontrol->checkBoxGcsControl, SIGNAL(stateChanged(int)), this, SLOT(gcsControlToggle(int)));
|
connect(m_gcscontrol->checkBoxGcsControl, SIGNAL(stateChanged(int)), this, SLOT(gcsControlToggle(int)));
|
||||||
connect(m_gcscontrol->comboBoxFlightMode, SIGNAL(currentIndexChanged(int)), this, SLOT(flightModeChanged(int)));
|
connect(m_gcscontrol->comboBoxFlightMode, SIGNAL(currentIndexChanged(int)), this, SLOT(flightModeChanged(int)));
|
||||||
|
//connect(m_gcscontrol->checkBoxArmed, SIGNAL(stateChanged(int)), this, SLOT(gcsArmedToggle(int)));
|
||||||
|
|
||||||
|
// Connect object updated event from UAVObject to also update check boxes
|
||||||
|
connect(getMCC(), SIGNAL(objectUpdated(UAVObject*)), this, SLOT(mccChanged(UAVObject*)));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,6 +75,11 @@ ManualControlCommand* GCSControlGadgetWidget::getMCC()
|
|||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GCSControlGadgetWidget::mccChanged(UAVObject* obj)
|
||||||
|
{
|
||||||
|
m_gcscontrol->checkBoxArmed->setChecked(obj->getField("Armed")->getValue().toString() == "True");
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\brief Called when the gcs control is toggled and enabled or disables flight write access to manual control command
|
\brief Called when the gcs control is toggled and enabled or disables flight write access to manual control command
|
||||||
*/
|
*/
|
||||||
|
@ -45,6 +45,9 @@ private slots:
|
|||||||
void gcsControlToggle(int state);
|
void gcsControlToggle(int state);
|
||||||
void flightModeChanged(int state);
|
void flightModeChanged(int state);
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
void mccChanged(UAVObject*);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui_GCSControl *m_gcscontrol;
|
Ui_GCSControl *m_gcscontrol;
|
||||||
ManualControlCommand* getMCC();
|
ManualControlCommand* getMCC();
|
||||||
|
@ -48,6 +48,12 @@ ManualControlCommand::ManualControlCommand(): UAVDataObject(OBJID, ISSINGLEINST,
|
|||||||
ConnectedEnumOptions.append("False");
|
ConnectedEnumOptions.append("False");
|
||||||
ConnectedEnumOptions.append("True");
|
ConnectedEnumOptions.append("True");
|
||||||
fields.append( new UAVObjectField(QString("Connected"), QString(""), UAVObjectField::ENUM, ConnectedElemNames, ConnectedEnumOptions) );
|
fields.append( new UAVObjectField(QString("Connected"), QString(""), UAVObjectField::ENUM, ConnectedElemNames, ConnectedEnumOptions) );
|
||||||
|
QStringList ArmedElemNames;
|
||||||
|
ArmedElemNames.append("0");
|
||||||
|
QStringList ArmedEnumOptions;
|
||||||
|
ArmedEnumOptions.append("False");
|
||||||
|
ArmedEnumOptions.append("True");
|
||||||
|
fields.append( new UAVObjectField(QString("Armed"), QString(""), UAVObjectField::ENUM, ArmedElemNames, ArmedEnumOptions) );
|
||||||
QStringList RollElemNames;
|
QStringList RollElemNames;
|
||||||
RollElemNames.append("0");
|
RollElemNames.append("0");
|
||||||
fields.append( new UAVObjectField(QString("Roll"), QString("%"), UAVObjectField::FLOAT32, RollElemNames, QStringList()) );
|
fields.append( new UAVObjectField(QString("Roll"), QString("%"), UAVObjectField::FLOAT32, RollElemNames, QStringList()) );
|
||||||
|
@ -44,6 +44,7 @@ public:
|
|||||||
// Field structure
|
// Field structure
|
||||||
typedef struct {
|
typedef struct {
|
||||||
quint8 Connected;
|
quint8 Connected;
|
||||||
|
quint8 Armed;
|
||||||
float Roll;
|
float Roll;
|
||||||
float Pitch;
|
float Pitch;
|
||||||
float Yaw;
|
float Yaw;
|
||||||
@ -60,6 +61,9 @@ public:
|
|||||||
// Field Connected information
|
// Field Connected information
|
||||||
/* Enumeration options for field Connected */
|
/* Enumeration options for field Connected */
|
||||||
typedef enum { CONNECTED_FALSE=0, CONNECTED_TRUE=1 } ConnectedOptions;
|
typedef enum { CONNECTED_FALSE=0, CONNECTED_TRUE=1 } ConnectedOptions;
|
||||||
|
// Field Armed information
|
||||||
|
/* Enumeration options for field Armed */
|
||||||
|
typedef enum { ARMED_FALSE=0, ARMED_TRUE=1 } ArmedOptions;
|
||||||
// Field Roll information
|
// Field Roll information
|
||||||
// Field Pitch information
|
// Field Pitch information
|
||||||
// Field Yaw information
|
// Field Yaw information
|
||||||
@ -76,7 +80,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
// Constants
|
// Constants
|
||||||
static const quint32 OBJID = 1289277596U;
|
static const quint32 OBJID = 9594768U;
|
||||||
static const QString NAME;
|
static const QString NAME;
|
||||||
static const bool ISSINGLEINST = 1;
|
static const bool ISSINGLEINST = 1;
|
||||||
static const bool ISSETTINGS = 0;
|
static const bool ISSETTINGS = 0;
|
||||||
|
@ -49,6 +49,18 @@ _fields = [ \
|
|||||||
'1' : 'True',
|
'1' : 'True',
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
|
uavobject.UAVObjectField(
|
||||||
|
'Armed',
|
||||||
|
'b',
|
||||||
|
1,
|
||||||
|
[
|
||||||
|
'0',
|
||||||
|
],
|
||||||
|
{
|
||||||
|
'0' : 'False',
|
||||||
|
'1' : 'True',
|
||||||
|
}
|
||||||
|
),
|
||||||
uavobject.UAVObjectField(
|
uavobject.UAVObjectField(
|
||||||
'Roll',
|
'Roll',
|
||||||
'f',
|
'f',
|
||||||
@ -154,7 +166,7 @@ _fields = [ \
|
|||||||
|
|
||||||
class ManualControlCommand(uavobject.UAVObject):
|
class ManualControlCommand(uavobject.UAVObject):
|
||||||
## Object constants
|
## Object constants
|
||||||
OBJID = 1289277596
|
OBJID = 9594768
|
||||||
NAME = "ManualControlCommand"
|
NAME = "ManualControlCommand"
|
||||||
METANAME = "ManualControlCommandMeta"
|
METANAME = "ManualControlCommandMeta"
|
||||||
ISSINGLEINST = 1
|
ISSINGLEINST = 1
|
||||||
|
@ -44,16 +44,16 @@ StabilizationSettings::StabilizationSettings(): UAVDataObject(OBJID, ISSINGLEINS
|
|||||||
QList<UAVObjectField*> fields;
|
QList<UAVObjectField*> fields;
|
||||||
QStringList UpdatePeriodElemNames;
|
QStringList UpdatePeriodElemNames;
|
||||||
UpdatePeriodElemNames.append("0");
|
UpdatePeriodElemNames.append("0");
|
||||||
fields.append( new UAVObjectField(QString("UpdatePeriod"), QString("ms"), UAVObjectField::UINT16, UpdatePeriodElemNames, QStringList()) );
|
fields.append( new UAVObjectField(QString("UpdatePeriod"), QString("ms"), UAVObjectField::UINT8, UpdatePeriodElemNames, QStringList()) );
|
||||||
QStringList RollMaxElemNames;
|
QStringList RollMaxElemNames;
|
||||||
RollMaxElemNames.append("0");
|
RollMaxElemNames.append("0");
|
||||||
fields.append( new UAVObjectField(QString("RollMax"), QString("degrees"), UAVObjectField::FLOAT32, RollMaxElemNames, QStringList()) );
|
fields.append( new UAVObjectField(QString("RollMax"), QString("degrees"), UAVObjectField::UINT8, RollMaxElemNames, QStringList()) );
|
||||||
QStringList PitchMaxElemNames;
|
QStringList PitchMaxElemNames;
|
||||||
PitchMaxElemNames.append("0");
|
PitchMaxElemNames.append("0");
|
||||||
fields.append( new UAVObjectField(QString("PitchMax"), QString("degrees"), UAVObjectField::FLOAT32, PitchMaxElemNames, QStringList()) );
|
fields.append( new UAVObjectField(QString("PitchMax"), QString("degrees"), UAVObjectField::UINT8, PitchMaxElemNames, QStringList()) );
|
||||||
QStringList YawMaxElemNames;
|
QStringList YawMaxElemNames;
|
||||||
YawMaxElemNames.append("0");
|
YawMaxElemNames.append("0");
|
||||||
fields.append( new UAVObjectField(QString("YawMax"), QString("degrees"), UAVObjectField::FLOAT32, YawMaxElemNames, QStringList()) );
|
fields.append( new UAVObjectField(QString("YawMax"), QString("degrees"), UAVObjectField::UINT8, YawMaxElemNames, QStringList()) );
|
||||||
QStringList YawModeElemNames;
|
QStringList YawModeElemNames;
|
||||||
YawModeElemNames.append("0");
|
YawModeElemNames.append("0");
|
||||||
QStringList YawModeEnumOptions;
|
QStringList YawModeEnumOptions;
|
||||||
@ -62,7 +62,10 @@ StabilizationSettings::StabilizationSettings(): UAVDataObject(OBJID, ISSINGLEINS
|
|||||||
fields.append( new UAVObjectField(QString("YawMode"), QString("degrees"), UAVObjectField::ENUM, YawModeElemNames, YawModeEnumOptions) );
|
fields.append( new UAVObjectField(QString("YawMode"), QString("degrees"), UAVObjectField::ENUM, YawModeElemNames, YawModeEnumOptions) );
|
||||||
QStringList ThrottleMaxElemNames;
|
QStringList ThrottleMaxElemNames;
|
||||||
ThrottleMaxElemNames.append("0");
|
ThrottleMaxElemNames.append("0");
|
||||||
fields.append( new UAVObjectField(QString("ThrottleMax"), QString("%"), UAVObjectField::FLOAT32, ThrottleMaxElemNames, QStringList()) );
|
fields.append( new UAVObjectField(QString("ThrottleMax"), QString("frac"), UAVObjectField::FLOAT32, ThrottleMaxElemNames, QStringList()) );
|
||||||
|
QStringList ThrottleMinElemNames;
|
||||||
|
ThrottleMinElemNames.append("0");
|
||||||
|
fields.append( new UAVObjectField(QString("ThrottleMin"), QString("frac"), UAVObjectField::FLOAT32, ThrottleMinElemNames, QStringList()) );
|
||||||
QStringList RollIntegralLimitElemNames;
|
QStringList RollIntegralLimitElemNames;
|
||||||
RollIntegralLimitElemNames.append("0");
|
RollIntegralLimitElemNames.append("0");
|
||||||
fields.append( new UAVObjectField(QString("RollIntegralLimit"), QString(""), UAVObjectField::FLOAT32, RollIntegralLimitElemNames, QStringList()) );
|
fields.append( new UAVObjectField(QString("RollIntegralLimit"), QString(""), UAVObjectField::FLOAT32, RollIntegralLimitElemNames, QStringList()) );
|
||||||
@ -138,6 +141,7 @@ void StabilizationSettings::setDefaultFieldValues()
|
|||||||
data.YawMax = 35;
|
data.YawMax = 35;
|
||||||
data.YawMode = 0;
|
data.YawMode = 0;
|
||||||
data.ThrottleMax = 1;
|
data.ThrottleMax = 1;
|
||||||
|
data.ThrottleMin = -1;
|
||||||
data.RollIntegralLimit = 0.5;
|
data.RollIntegralLimit = 0.5;
|
||||||
data.PitchIntegralLimit = 0.5;
|
data.PitchIntegralLimit = 0.5;
|
||||||
data.YawIntegralLimit = 0.5;
|
data.YawIntegralLimit = 0.5;
|
||||||
|
@ -43,12 +43,13 @@ class UAVOBJECTS_EXPORT StabilizationSettings: public UAVDataObject
|
|||||||
public:
|
public:
|
||||||
// Field structure
|
// Field structure
|
||||||
typedef struct {
|
typedef struct {
|
||||||
quint16 UpdatePeriod;
|
quint8 UpdatePeriod;
|
||||||
float RollMax;
|
quint8 RollMax;
|
||||||
float PitchMax;
|
quint8 PitchMax;
|
||||||
float YawMax;
|
quint8 YawMax;
|
||||||
quint8 YawMode;
|
quint8 YawMode;
|
||||||
float ThrottleMax;
|
float ThrottleMax;
|
||||||
|
float ThrottleMin;
|
||||||
float RollIntegralLimit;
|
float RollIntegralLimit;
|
||||||
float PitchIntegralLimit;
|
float PitchIntegralLimit;
|
||||||
float YawIntegralLimit;
|
float YawIntegralLimit;
|
||||||
@ -73,6 +74,7 @@ public:
|
|||||||
/* Enumeration options for field YawMode */
|
/* Enumeration options for field YawMode */
|
||||||
typedef enum { YAWMODE_RATE=0, YAWMODE_HEADING=1 } YawModeOptions;
|
typedef enum { YAWMODE_RATE=0, YAWMODE_HEADING=1 } YawModeOptions;
|
||||||
// Field ThrottleMax information
|
// Field ThrottleMax information
|
||||||
|
// Field ThrottleMin information
|
||||||
// Field RollIntegralLimit information
|
// Field RollIntegralLimit information
|
||||||
// Field PitchIntegralLimit information
|
// Field PitchIntegralLimit information
|
||||||
// Field YawIntegralLimit information
|
// Field YawIntegralLimit information
|
||||||
@ -88,7 +90,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
// Constants
|
// Constants
|
||||||
static const quint32 OBJID = 1244337598U;
|
static const quint32 OBJID = 117768092U;
|
||||||
static const QString NAME;
|
static const QString NAME;
|
||||||
static const bool ISSINGLEINST = 1;
|
static const bool ISSINGLEINST = 1;
|
||||||
static const bool ISSETTINGS = 1;
|
static const bool ISSETTINGS = 1;
|
||||||
|
@ -39,7 +39,7 @@ from collections import namedtuple
|
|||||||
_fields = [ \
|
_fields = [ \
|
||||||
uavobject.UAVObjectField(
|
uavobject.UAVObjectField(
|
||||||
'UpdatePeriod',
|
'UpdatePeriod',
|
||||||
'H',
|
'B',
|
||||||
1,
|
1,
|
||||||
[
|
[
|
||||||
'0',
|
'0',
|
||||||
@ -49,7 +49,7 @@ _fields = [ \
|
|||||||
),
|
),
|
||||||
uavobject.UAVObjectField(
|
uavobject.UAVObjectField(
|
||||||
'RollMax',
|
'RollMax',
|
||||||
'f',
|
'B',
|
||||||
1,
|
1,
|
||||||
[
|
[
|
||||||
'0',
|
'0',
|
||||||
@ -59,7 +59,7 @@ _fields = [ \
|
|||||||
),
|
),
|
||||||
uavobject.UAVObjectField(
|
uavobject.UAVObjectField(
|
||||||
'PitchMax',
|
'PitchMax',
|
||||||
'f',
|
'B',
|
||||||
1,
|
1,
|
||||||
[
|
[
|
||||||
'0',
|
'0',
|
||||||
@ -69,7 +69,7 @@ _fields = [ \
|
|||||||
),
|
),
|
||||||
uavobject.UAVObjectField(
|
uavobject.UAVObjectField(
|
||||||
'YawMax',
|
'YawMax',
|
||||||
'f',
|
'B',
|
||||||
1,
|
1,
|
||||||
[
|
[
|
||||||
'0',
|
'0',
|
||||||
@ -99,6 +99,16 @@ _fields = [ \
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
|
uavobject.UAVObjectField(
|
||||||
|
'ThrottleMin',
|
||||||
|
'f',
|
||||||
|
1,
|
||||||
|
[
|
||||||
|
'0',
|
||||||
|
],
|
||||||
|
{
|
||||||
|
}
|
||||||
|
),
|
||||||
uavobject.UAVObjectField(
|
uavobject.UAVObjectField(
|
||||||
'RollIntegralLimit',
|
'RollIntegralLimit',
|
||||||
'f',
|
'f',
|
||||||
@ -224,7 +234,7 @@ _fields = [ \
|
|||||||
|
|
||||||
class StabilizationSettings(uavobject.UAVObject):
|
class StabilizationSettings(uavobject.UAVObject):
|
||||||
## Object constants
|
## Object constants
|
||||||
OBJID = 1244337598
|
OBJID = 117768092
|
||||||
NAME = "StabilizationSettings"
|
NAME = "StabilizationSettings"
|
||||||
METANAME = "StabilizationSettingsMeta"
|
METANAME = "StabilizationSettingsMeta"
|
||||||
ISSINGLEINST = 1
|
ISSINGLEINST = 1
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
<object name="ManualControlCommand" singleinstance="true" settings="false">
|
<object name="ManualControlCommand" singleinstance="true" settings="false">
|
||||||
<description>The output from the @ref ManualControlModule which descodes the receiver inputs. Overriden by GCS for fly-by-wire control.</description>
|
<description>The output from the @ref ManualControlModule which descodes the receiver inputs. Overriden by GCS for fly-by-wire control.</description>
|
||||||
<field name="Connected" units="" type="enum" elements="1" options="False,True"/>
|
<field name="Connected" units="" type="enum" elements="1" options="False,True"/>
|
||||||
|
<field name="Armed" units="" type="enum" elements="1" options="False,True"/>
|
||||||
<field name="Roll" units="%" type="float" elements="1"/>
|
<field name="Roll" units="%" type="float" elements="1"/>
|
||||||
<field name="Pitch" units="%" type="float" elements="1"/>
|
<field name="Pitch" units="%" type="float" elements="1"/>
|
||||||
<field name="Yaw" units="%" type="float" elements="1"/>
|
<field name="Yaw" units="%" type="float" elements="1"/>
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
<xml>
|
<xml>
|
||||||
<object name="StabilizationSettings" singleinstance="true" settings="true">
|
<object name="StabilizationSettings" singleinstance="true" settings="true">
|
||||||
<description>PID settings used by the Stabilization module to combine the @ref AttitudeActual and @ref AttitudeDesired to compute @ref ActuatorDesired</description>
|
<description>PID settings used by the Stabilization module to combine the @ref AttitudeActual and @ref AttitudeDesired to compute @ref ActuatorDesired</description>
|
||||||
<field name="UpdatePeriod" units="ms" type="uint16" elements="1" defaultvalue="10"/>
|
<field name="UpdatePeriod" units="ms" type="uint8" elements="1" defaultvalue="10"/>
|
||||||
<field name="RollMax" units="degrees" type="float" elements="1" defaultvalue="35"/>
|
<field name="RollMax" units="degrees" type="uint8" elements="1" defaultvalue="35"/>
|
||||||
<field name="PitchMax" units="degrees" type="float" elements="1" defaultvalue="35"/>
|
<field name="PitchMax" units="degrees" type="uint8" elements="1" defaultvalue="35"/>
|
||||||
<field name="YawMax" units="degrees" type="float" elements="1" defaultvalue="35"/>
|
<field name="YawMax" units="degrees" type="uint8" elements="1" defaultvalue="35"/>
|
||||||
<field name="YawMode" units="degrees" type="enum" elements="1" options="rate,heading" defaultvalue="rate"/>
|
<field name="YawMode" units="degrees" type="enum" elements="1" options="rate,heading" defaultvalue="rate"/>
|
||||||
<field name="ThrottleMax" units="%" type="float" elements="1" defaultvalue="1.0"/>
|
<field name="ThrottleMax" units="frac" type="float" elements="1" defaultvalue="1.0"/>
|
||||||
|
<field name="ThrottleMin" units="frac" type="float" elements="1" defaultvalue="-1.0"/>
|
||||||
<field name="RollIntegralLimit" units="" type="float" elements="1" defaultvalue="0.5"/>
|
<field name="RollIntegralLimit" units="" type="float" elements="1" defaultvalue="0.5"/>
|
||||||
<field name="PitchIntegralLimit" units="" type="float" elements="1" defaultvalue="0.5"/>
|
<field name="PitchIntegralLimit" units="" type="float" elements="1" defaultvalue="0.5"/>
|
||||||
<field name="YawIntegralLimit" units="" type="float" elements="1" defaultvalue="0.5"/>
|
<field name="YawIntegralLimit" units="" type="float" elements="1" defaultvalue="0.5"/>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user