22 ******************************************************************************
33 *
44 * @file vtolautotakeofffsm.cpp
5- * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2015.
5+ * @author The LibrePilot Project, http://www.librepilot.org Copyright (C) 2018
6+ * The OpenPilot Team, http://www.openpilot.org Copyright (C) 2015.
67 * @brief This autotakeoff state machine is a helper state machine to the
78 * VtolAutoTakeoffController.
89 * @see The GNU Public License (GPL) Version 3
@@ -60,11 +61,11 @@ extern "C" {
6061
6162
6263// Private constants
63- #define TIMER_COUNT_PER_SECOND (1000 / vtolPathFollowerSettings->UpdatePeriod)
64- #define TIMEOUT_SLOWSTART (2 * TIMER_COUNT_PER_SECOND)
65- #define TIMEOUT_THRUSTUP (1 * TIMER_COUNT_PER_SECOND)
66- #define TIMEOUT_THRUSTDOWN (5 * TIMER_COUNT_PER_SECOND)
67- #define AUTOTAKEOFFING_SLOWDOWN_HEIGHT -5 .0f
64+ #define TIMER_COUNT_PER_SECOND (1000 / vtolPathFollowerSettings->UpdatePeriod)
65+ #define TIMEOUT_SLOWSTART (2 * TIMER_COUNT_PER_SECOND)
66+ #define TIMEOUT_THRUSTUP (1 * TIMER_COUNT_PER_SECOND)
67+ #define TIMEOUT_THRUSTDOWN (5 * TIMER_COUNT_PER_SECOND)
68+ #define AUTOTAKEOFF_SLOWDOWN_HEIGHT -5 .0f
6869
6970VtolAutoTakeoffFSM::PathFollowerFSM_AutoTakeoffStateHandler_T VtolAutoTakeoffFSM::sAutoTakeoffStateTable [AUTOTAKEOFF_STATE_SIZE] = {
7071 [AUTOTAKEOFF_STATE_INACTIVE] = { .setup = &VtolAutoTakeoffFSM::setup_inactive, .run = 0 },
@@ -246,14 +247,8 @@ void VtolAutoTakeoffFSM::setState(StatusVtolAutoTakeoffStateOptions newState, St
246247 mAutoTakeoffData ->currentState = newState;
247248
248249 if (newState != STATUSVTOLAUTOTAKEOFF_STATE_INACTIVE) {
249- PositionStateData positionState;
250- PositionStateGet (&positionState);
251- float altitudeAboveGround = 0 .0f ;
252- if (mAutoTakeoffData ->takeOffLocation .Status == TAKEOFFLOCATION_STATUS_VALID) {
253- altitudeAboveGround = mAutoTakeoffData ->takeOffLocation .Down - positionState.Down ;
254- }
255- mAutoTakeoffData ->fsmAutoTakeoffStatus .AltitudeAtState [newState] = altitudeAboveGround;
256- assessAltitude ();
250+ float altitudeAboveTakeoff = assessAltitude ();
251+ mAutoTakeoffData ->fsmAutoTakeoffStatus .AltitudeAtState [newState] = altitudeAboveTakeoff;
257252 }
258253
259254 // Restart state timer counter
@@ -290,7 +285,7 @@ void VtolAutoTakeoffFSM::updateVtolAutoTakeoffFSMStatus()
290285}
291286
292287
293- void VtolAutoTakeoffFSM::assessAltitude (void )
288+ float VtolAutoTakeoffFSM::assessAltitude (void )
294289{
295290 float positionDown;
296291
@@ -300,11 +295,13 @@ void VtolAutoTakeoffFSM::assessAltitude(void)
300295 takeOffDown = mAutoTakeoffData ->takeOffLocation .Down ;
301296 }
302297 float positionDownRelativeToTakeoff = positionDown - takeOffDown;
303- if (positionDownRelativeToTakeoff < AUTOTAKEOFFING_SLOWDOWN_HEIGHT ) {
298+ if (positionDownRelativeToTakeoff < AUTOTAKEOFF_SLOWDOWN_HEIGHT ) {
304299 mAutoTakeoffData ->flLowAltitude = false ;
305300 } else {
306301 mAutoTakeoffData ->flLowAltitude = true ;
307302 }
303+ // Return the altitude above takeoff, which is the negation of positionDownRelativeToTakeoff
304+ return -positionDownRelativeToTakeoff;
308305}
309306
310307// Action the required state from plans.c
0 commit comments