Skip to content
This repository was archived by the owner on Feb 5, 2024. It is now read-only.
Open
58 changes: 50 additions & 8 deletions Autopilot/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ if (${KIND_OF_BUILD} STREQUAL "FOR_TARGET")
boardfiles/Drivers/CMSIS/Device/ST/STM32F7xx/Include
AttitudeManager/Inc
PathManager/Inc
PathManager/Inc/cruisingMode
PathManager/Inc/landingMode
PathManager/Inc/takeoffMode
TelemetryManager/Inc
CControl/Inc
SensorFusion/Inc
Expand All @@ -46,7 +49,8 @@ if (${KIND_OF_BUILD} STREQUAL "FOR_TARGET")
add_subdirectory(DataStructures)

file(GLOB_RECURSE C_SOURCES ../Common/Src/*.c ../Common/Src/stm32/*.c "Src/*.c" AttitudeManager/Src/*.c boardfiles/Src/*.c CControl/Src/*.c)
file(GLOB_RECURSE CXX_SOURCES ../Common/Src/*.cpp ../Common/Src/stm32/*.cpp "Src/*.cpp" AttitudeManager/Src/*.cpp PathManager/Src/*.cpp TelemetryManager/Src/*.cpp SensorFusion/Src/*.cpp SensorFusion/Src/*.c)

file(GLOB_RECURSE CXX_SOURCES ../Common/Src/*.cpp ../Common/Src/stm32/*.cpp "Src/*.cpp" AttitudeManager/Src/*.cpp PathManager/Src/*.cpp PathManager/Src/cruisingMode/*.cpp PathManager/Src/landingMode/*.cpp PathManager/Src/takeoffMode/*.cpp TelemetryManager/Src/*.cpp SensorFusion/Src/*.cpp)
if(NOT NUCLEO)
set(STARTUP_ASM startup_stm32f765xx.s)
set(LINKER_SCRIPT ${PROJECT_SOURCE_DIR}/STM32F765ZGTx_FLASH.ld)
Expand Down Expand Up @@ -113,9 +117,11 @@ elseif(${KIND_OF_BUILD} STREQUAL "UNIT_TESTS")
${CMAKE_CURRENT_SOURCE_DIR}/../Common/Inc
${CMAKE_CURRENT_SOURCE_DIR}/Inc/
${CMAKE_CURRENT_SOURCE_DIR}/AttitudeManager/Inc
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Inc
${CMAKE_CURRENT_SOURCE_DIR}/Test/Inc
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Inc
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Inc/cruisingMode
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Inc/landingMode
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Inc/takeoffMode
${CMAKE_CURRENT_SOURCE_DIR}/TelemetryManager/Inc
${CMAKE_CURRENT_SOURCE_DIR}/DataStructures/Inc
${CMAKE_CURRENT_SOURCE_DIR}/CControl/Inc
Expand Down Expand Up @@ -188,8 +194,15 @@ elseif(${KIND_OF_BUILD} STREQUAL "UNIT_TESTS")
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/pathManager.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/pathStateClasses.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/waypointManager.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/cruisingState.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/landingTakeoffManager.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/pathModeSelector.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/cruisingMode/cruisingFlight.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/cruisingMode/cruisingMode.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/cruisingMode/cruisingModeStages.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/landingMode/landingMode.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/landingMode/landingModeStages.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/takeoffMode/takeoffMode.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/takeoffMode/takeoffModeStages.cpp
${CMAKE_CURRENT_SOURCE_DIR}/DataStructures/Src/vectorClass.cpp
)

Expand All @@ -202,20 +215,49 @@ elseif(${KIND_OF_BUILD} STREQUAL "UNIT_TESTS")

#########

######### Path manager modes fsm

set(PATH_MANAGER_MODES_FSM_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/pathManager.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/pathStateClasses.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/waypointManager.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/landingTakeoffManager.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/pathModeSelector.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/cruisingMode/cruisingFlight.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/cruisingMode/cruisingMode.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/cruisingMode/cruisingModeStages.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/landingMode/landingMode.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/landingMode/landingModeStages.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/takeoffMode/takeoffMode.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/takeoffMode/takeoffModeStages.cpp
${CMAKE_CURRENT_SOURCE_DIR}/DataStructures/Src/vectorClass.cpp
)

set(PATH_MANAGER_MODES_FSM_UNIT_TEST_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/Test/Src/PathManager/Test_CruisingMode_Fsm.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Test/Src/PathManager/Test_LandingMode_Fsm.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Test/Src/PathManager/Test_TakeoffMode_Fsm.cpp
)

add_executable(pathManagerModesFsm ${PATH_MANAGER_MODES_FSM_SOURCES} ${PATH_MANAGER_MODES_FSM_UNIT_TEST_SOURCES} ${UNIT_TEST_MAIN})
target_link_libraries(pathManagerModesFsm ${GTEST_BOTH_LIBRARIES} ${GMOCK_BOTH_LIBRARIES} pthread)

#########

######### Path manager modules

set(PATH_MANAGER_MODULES_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/waypointManager.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/cruisingState.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/cruisingMode/cruisingFlight.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/landingTakeoffManager.cpp
${CMAKE_CURRENT_SOURCE_DIR}/DataStructures/Src/vectorClass.cpp
)

set(PATH_MANAGER_MODULES_UNIT_TEST_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/Test/Src/PathManager/Test_WaypointManager.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Test/Src/PathManager/Test_CruisingState.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Test/Src/LandingTakeoffManager/Test_Landing.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Test/Src/LandingTakeoffManager/Test_Takeoff.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Test/Src/PathManager/Test_CruisingFlight.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Test/Src/PathManager/Test_Landing.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Test/Src/PathManager/Test_Takeoff.cpp
)

add_executable(pathManagerModules ${PATH_MANAGER_MODULES_SOURCES} ${PATH_MANAGER_MODULES_UNIT_TEST_SOURCES} ${UNIT_TEST_MAIN})
Expand Down Expand Up @@ -341,7 +383,7 @@ endif()
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/pathStateClasses.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/waypointManager.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/landingTakeoffManager.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/cruisingState.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/cruisingMode/cruisingFlight.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PathManager/Src/AutoSteer.cpp
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,13 @@
* Author: Dhruv Rawat
*/

#include "TelemPathInterface.hpp"
#include "waypointManager.hpp"
#include <cstdint>

#ifndef CRUISING_STATE
#define CRUISING_STATE

constexpr int CRUISING_AIRSPEED {15};
#include "TelemPathInterface.hpp"
#include "waypointManager.hpp"

#include <cstdint>

enum _ModifyFlightPathErrorCode { MODIFY_CRUISING_SUCCESS = 0, MODIFY_CRUISING_ERROR, MODIFY_CRUISING_INCORRECT_TELEMETRY_COMMAND };
enum _GetNextDirectionsErrorCode { PATH_CRUISING_SUCCESS = 0, PATH_CRUISING_ERROR, PATH_CRUISING_INCORRECT_TELEMETRY_COMMAND, PATH_CRUISING_UNINITIALIZED_HOMEBASE };
Expand All @@ -33,7 +32,8 @@ struct _CruisingState_Telemetry_Return {
*
* @return error code indicating success of operation
*/
_ModifyFlightPathErrorCode editFlightPath(Telemetry_PIGO_t * telemetryData, WaypointManager& cruisingStateManager, int * idArray);

_ModifyFlightPathErrorCode editFlightPath(Telemetry_PIGO_t * telemetryData, WaypointManager& cruisingStateManager, uint16_t * idArray);

/**
* Function retrieves the next desired path for the aircraft
Expand Down
54 changes: 54 additions & 0 deletions Autopilot/PathManager/Inc/cruisingMode/cruisingMode.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
#ifndef CRUISING_MODE_HPP
#define CRUISING_MODE_HPP

#include "pathMode.hpp"
#include "cruisingModeStageManager.hpp"
#include "pathModeSelector.hpp"

class CruisingModeStageManager;

// Mode class as depicted in https://uwarg-docs.atlassian.net/wiki/spaces/ZP/pages/1866989569/Proposed+Redesign
class CruisingMode : public PathMode {
public:
/**
* Call to get singleton for this class
*
* @return instance of class object
*/
static PathMode& getInstance();

/**
* Execute the curent stage in the mode
*
* @param telemetry_in -> telemetry data from ground
* @param sensor_fusion_in -> sensor fusion data
* @param imu_data_in -> raw imu data
*
* @return none
*/
void execute(Telemetry_PIGO_t telemetry_in, SFOutput_t sensor_fusion_in, IMU_Data_t imu_data_in);

/**
* Get PathModeSelector singleton instance
*
* @return instance of PathModeSelector singleton
*/
PathModeSelector* getModeSelector();

/**
* Returns a pointer for the current stage of flight
*
* @return current stage of flight within mode
*/
inline CruisingModeStageManager* getCurrentStage() const { return current_stage; }

// No need a setStage method as we only have one stage
private:
CruisingMode();

CruisingModeStageManager* current_stage;
static PathModeSelector* _mode_selector;
};

#endif

Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#ifndef CRUISING_MODE_STAGE_MANAGER_HPP
#define CRUISING_MODE_STAGE_MANAGER_HPP

#include "cruisingMode.hpp"

class CruisingMode;

// Like ModeStage class as depicted in https://uwarg-docs.atlassian.net/wiki/spaces/ZP/pages/1866989569/Proposed+Redesign
class CruisingModeStageManager {
public:
virtual void enter(CruisingMode* cruise_mode) = 0;
virtual void execute(CruisingMode* cruise_mode) = 0;
virtual void exit(CruisingMode* cruise_mode) = 0;

bool operator==(const CruisingModeStageManager& rhs) const {return (this == &rhs);}

virtual ~CruisingModeStageManager() {}
};

#endif

36 changes: 36 additions & 0 deletions Autopilot/PathManager/Inc/cruisingMode/cruisingModeStages.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#ifndef CRUISING_MODE_STAGES_HPP
#define CRUISING_MODE_STAGES_HPP

#include <cstdint>

#include "cruisingModeStageManager.hpp"
#include "cruisingMode.hpp"

#include "waypointManager.hpp"
#include "TelemPathInterface.hpp"
#include "AutoSteer.hpp"
#include "cruisingFlight.hpp"

class CruisingFlight : public CruisingModeStageManager {
public:
void enter(CruisingMode* cruise_mode) { (void) cruise_mode; }
void execute(CruisingMode* cruise_mode);
void exit(CruisingMode* cruise_mode) { (void) cruise_mode; }
static CruisingModeStageManager& getInstance();

private:
CruisingFlight() : in_hold {false}, going_home {false} {}
CruisingFlight(const CruisingFlight& other);
CruisingFlight& operator=(const CruisingFlight& other);

WaypointManager cruising_state_manager;
uint16_t waypoint_id_array[PATH_BUFFER_SIZE]; // Stores ids of the waypoints in the flight path in the order that they are executed
static _WaypointManager_Data_In _input_data;
static _WaypointManager_Data_Out _output_data;
static _CruisingState_Telemetry_Return _return_to_ground;
bool in_hold;
bool going_home;
};

#endif

102 changes: 102 additions & 0 deletions Autopilot/PathManager/Inc/landingMode/landingMode.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
#ifndef LANDING_MODE_HPP
#define LANDING_MODE_HPP

#include "pathMode.hpp"
#include "landingModeStageManager.hpp"
#include "pathModeSelector.hpp"
#include "SensorFusion.hpp"

class LandingModeStageManager;

enum LandingStages {
LANDING_TRANSITION = 0,
LANDING_SLOPE,
LANDING_FLARE,
LANDING_DECRAB,
LANDING_TOUCHDOWN
};

class LandingMode : public PathMode {
public:
/**
* Call to get singleton for this class
*
* @return instance of class object
*/
static PathMode& getInstance();

/**
* Execute the curent stage in the mode
*
* @param telemetry_in -> telemetry data from ground
* @param sensor_fusion_in -> sensor fusion data
* @param imu_data_in -> raw imu data
*
* @return none
*/
void execute(Telemetry_PIGO_t telemetry_in, SFOutput_t sensor_fusion_in, IMU_Data_t imu_data_in);

/**
* Get PathModeSelector singleton instance
*
* @return instance of PathModeSelector singleton
*/
PathModeSelector* getModeSelector();

/**
* Returns a pointer for the current stage of flight
*
* @return current stage of flight within mode
*/
inline LandingModeStageManager* getCurrentStage() const { return current_stage; }

/**
* Sets the pointer for the current stage of flight
*
* @param new_stage -> new stage of flight within mode
*
* @return none
*/
inline void setCurrentStage(LandingModeStageManager* new_stage) { current_stage = new_stage; }

/**
* Returns a pointer for the current stage of flight
*
* @return current stage of flight within mode
*/
inline LandingStages getCurrentStageEnum() const { return landing_stage; }

/**
* Sets the enum for the current stage of flight
*
* @param new_stage -> enum for new stage of flight within mode
*
* @return none
*/
inline void setCurrentStageEnum(LandingStages new_stage) { landing_stage = new_stage; }

/*
* Getters and setters for Landing Mode data
*/
inline bool getMadeLandingPoints() { return made_landing_points; }

inline void setMadeLandingPoints(bool new_made_landing_points) { made_landing_points = new_made_landing_points; }

inline bool getIsPackage() { return is_package; }

inline void setIsPackage(bool new_is_package) { is_package = new_is_package; }

private:
LandingMode();

LandingModeStageManager* current_stage;
LandingStages landing_stage;
static PathModeSelector* _mode_selector;

bool made_landing_points;
bool is_package;
};

#endif


20 changes: 20 additions & 0 deletions Autopilot/PathManager/Inc/landingMode/landingModeStageManager.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#ifndef LANDING_MODE_STAGE_MANAGER_HPP
#define LANDING_MODE_STAGE_MANAGER_HPP

#include "landingMode.hpp"

class LandingMode;

class LandingModeStageManager {
public:
virtual void enter(LandingMode* land_mode) = 0;
virtual void execute(LandingMode* land_mode) = 0;
virtual void exit(LandingMode* land_mode) = 0;

bool operator==(const LandingModeStageManager& rhs) const {return (this == &rhs);}

virtual ~LandingModeStageManager() {}
};

#endif

Loading